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


Reply via email to