Author: brane
Date: Sun Nov 22 04:24:42 2020
New Revision: 1883715
URL: http://svn.apache.org/viewvc?rev=1883715&view=rev
Log:
Support C++11 and later and let users select the C++ language standard.
* configure.ac (--enable-c++): New option.
* build/ac-macros/compiler.m4 (SVN_CXX_MODE_SETUP):
Check, in order, for C++20, C++17 and C++11, or the exact language
standard option given by --enable-c++. In the second case, restrict
the supported language version to at least C++11.
* subversion/bindings/cxx/tests/test_aprwrap_arrays.cpp (fill_array):
std::random_shuffle was removed in C++17; use std::shuffle instead,
which is available since C++11.
Modified:
subversion/trunk/build/ac-macros/compiler.m4
subversion/trunk/configure.ac
subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_arrays.cpp
Modified: subversion/trunk/build/ac-macros/compiler.m4
URL:
http://svn.apache.org/viewvc/subversion/trunk/build/ac-macros/compiler.m4?rev=1883715&r1=1883714&r2=1883715&view=diff
==============================================================================
--- subversion/trunk/build/ac-macros/compiler.m4 (original)
+++ subversion/trunk/build/ac-macros/compiler.m4 Sun Nov 22 04:24:42 2020
@@ -100,9 +100,33 @@ AC_DEFUN([SVN_CXX_MODE_SETUP],
CXXFLAGS=""
if test "$GXX" = "yes"; then
- dnl Find flags to force C++98 mode
+ dnl Find flags to force C++ mode
dnl g++ and clang++
- SVN_CXXFLAGS_ADD_IFELSE([-std=c++11])
+ if test "$cxx_language_level" = "any"; then
+ SVN_CXXFLAGS_ADD_IFELSE([-std=c++20],[],[
+ SVN_CXXFLAGS_ADD_IFELSE([-std=c++17],[],[
+ SVN_CXXFLAGS_ADD_IFELSE([-std=c++11])
+ ])
+ ])
+ else
+ SVN_CXXFLAGS_ADD_IFELSE([-std=$cxx_language_level],[],[
+ AC_MSG_ERROR([$CXX does not accept -std=$cxx_language_level (see
option --enable-c++)])
+ ])
+ dnl We require at least C++11
+ AC_MSG_CHECKING([if '$CXX $CXXFLAGS' supports at least a C++11])
+ AC_LANG_PUSH([C++])
+ AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([
+ #if !defined(__cplusplus) || __cplusplus < 201103
+ #error "Not C++11"
+ #endif
+ ])
+ ],[AC_MSG_RESULT([yes])],[
+ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([JavHL and C++ bindings require at least C++11])
+ ])
+ AC_LANG_POP([C++])
+ fi
fi
CXXMODEFLAGS="$CXXFLAGS"
Modified: subversion/trunk/configure.ac
URL:
http://svn.apache.org/viewvc/subversion/trunk/configure.ac?rev=1883715&r1=1883714&r2=1883715&view=diff
==============================================================================
--- subversion/trunk/configure.ac (original)
+++ subversion/trunk/configure.ac Sun Nov 22 04:24:42 2020
@@ -56,6 +56,32 @@ SVN_CC_MODE_SETUP
# Look for a C++ compiler (before anything can set CXXFLAGS)
CXXUSERFLAGS="$CXXFLAGS"
AC_PROG_CXX
+dnl Select C++ language level for GNU-like compilers
+dnl This is an advanced option for maintainers
+AC_ARG_ENABLE([c++],
+AS_HELP_STRING([--enable-c++=VER],
+ [Select C++ language standard for g++-like compilers]),
+[
+ if test "$enableval" = "yes"; then
+ cxx_language_level=any
+ elif test "$enableval" = "no"; then
+ cxx_language_level=any
+ AC_MSG_WARN([--disable-c++ has no effect])
+ else
+ case "$enableval" in
+ [c++[0-9]*]) cxx_language_level="$enableval";;
+ [gnu++[0-9]*]) cxx_language_level="$enableval";;
+ [[0-9]*]) cxx_language_level="c++$enableval";;
+ [*]) cxx_language_level=undefined;;
+ esac
+ if test "$cxx_language_level" = undefined; then
+ AC_MSG_ERROR([--enable-c++ does not accept $enableval])
+ fi
+ fi
+],
+[
+ cxx_language_level=any
+])
SVN_CXX_MODE_SETUP
# Look for a C pre-processor
Modified: subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_arrays.cpp
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_arrays.cpp?rev=1883715&r1=1883714&r2=1883715&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_arrays.cpp
(original)
+++ subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_arrays.cpp Sun
Nov 22 04:24:42 2020
@@ -22,6 +22,7 @@
#include <boost/test/unit_test.hpp>
#include <algorithm>
+#include <random>
#include <stdexcept>
#include "../src/aprwrap.hpp"
@@ -43,8 +44,12 @@ apr_array_header_t* fill_array(apr::pool
APR_ARRAY_PUSH(a, const char*) = "quintus";
APR_ARRAY_PUSH(a, const char*) = "sextus";
APR_ARRAY_PUSH(a, const char*) = "septimus";
- std::random_shuffle(&APR_ARRAY_IDX(a, 0, const char*),
- &APR_ARRAY_IDX(a, a->nelts, const char*));
+
+ std::random_device random_device;
+ std::mt19937 random_generator{random_device()};
+ std::shuffle(&APR_ARRAY_IDX(a, 0, const char*),
+ &APR_ARRAY_IDX(a, a->nelts, const char*),
+ random_generator);
return a;
}
} // anonymous namespace