+dnl
+dnl Check whether C++11 is supported, if the environment variable
+dnl CXX11_CXXFLAGS is set it takes precedence.
+dnl
+
+AC_LANG_PUSH([C++])
+
+check_cxx11_available() {
+ output_support=$1
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([
+ #if !(__cplusplus >= 201103L)
+ #error
+ #endif
+ #include <tuple>
+ ])
+ ], [
+ AC_MSG_RESULT(yes)
+ cxx11_support=yes
+ ], AC_MSG_RESULT(no))
+ eval "$output_support=\$cxx11_support"
+}
+
+HAVE_CXX11=no
+save_CXXFLAGS="$CXXFLAGS"
+
+dnl If the user provides a flag to enable c++11, then we test only this
+if test "x$CXX11_CXXFLAGS" != "x"; then
+ CXXFLAGS="$CXXFLAGS $CXX11_CXXFLAGS"
+ AC_MSG_CHECKING(whether c++11 is enabled by via $CXX11_CXXFLAGS)
+ check_cxx11_available HAVE_CXX11
+else
+ dnl test whether c++11 is enabled by default
+ AC_MSG_CHECKING(whether c++11 is enabled by default)
+ check_cxx11_available HAVE_CXX11
+
+ dnl C++11 not enabled by default, test whether -std=c++11 does the job
+ if test "x$HAVE_CXX11" != "xyes"; then
+ CXX11_CXXFLAGS=-std=c++11
+ CXXFLAGS="$CXXFLAGS $CXX11_CXXFLAGS"
+ AC_MSG_CHECKING(whether c++11 is enabled by via $CXX11_CXXFLAGS)
+ check_cxx11_available HAVE_CXX11
+ fi
+fi
+
+CXXFLAGS="$save_CXXFLAGS"
+AM_CONDITIONAL(HAVE_STD_CXX11, test "x$HAVE_CXX11" = "xyes")
+AC_SUBST(CXX11_CXXFLAGS)
+AC_LANG_POP([C++])
+