[Mesa-dev] [PATCH v5 1/3] configure+mesa/st: check for -std=c++11 support and enable mesa/st/test accordingly
Gert Wollny
gw.fossdev at gmail.com
Wed Oct 18 15:05:25 UTC 2017
Add a check that tests whether the c++ compiler supports c++11, either by default,
by adding the compiler flag -std=c++11, or by adding a compiler flag that the user
has specified via the environment variable CXX11_CXXFLAGS.
The test only does a very shallow check of c++11 support, i.e. it tests whether
the define __cplusplus >= 201103L to confirm language support by the compiler,
and it checks whether the header <tuple> is available to test the availability
of the c++11 standard library.
A make file conditional HAVE_STD_CXX11 is provided that is used in this patch to
to enable the tests in mesa/st if C++11 support is available.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102665
---
configure.ac | 56 ++++++++++++++++++++++++++++++++
src/mesa/state_tracker/tests/Makefile.am | 4 ++-
2 files changed, 59 insertions(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index bbabf3bed7..b828a45310 100644
--- a/configure.ac
+++ b/configure.ac
@@ -111,6 +111,10 @@ dnl Check for progs
AC_PROG_CPP
AC_PROG_CC
AC_PROG_CXX
+dnl add this here, so the help for this environmnet variable is close to
+dnl other CC/CXX flags related help
+AC_ARG_VAR([CXX11_CXXFLAGS], [Compiler flag to enable C++11 support (only needed if not
+ enabled by default and different from -std=c++11)])
AM_PROG_CC_C_O
AM_PROG_AS
AX_CHECK_GNU_MAKE
@@ -120,6 +124,7 @@ AC_PROG_MKDIR_P
AC_SYS_LARGEFILE
+
LT_PREREQ([2.2])
LT_INIT([disable-static])
@@ -327,6 +332,56 @@ if test "x$GCC" = xyes; then
fi
fi
+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++])
+
dnl even if the compiler appears to support it, using visibility attributes isn't
dnl going to do anything useful currently on cygwin apart from emit lots of warnings
case "$host_os" in
@@ -3115,6 +3170,7 @@ defines=`echo $DEFINES | $SED 's/^ *//;s/ */ /;s/ *$//'`
echo ""
echo " CFLAGS: $cflags"
echo " CXXFLAGS: $cxxflags"
+echo " CXX11_CXXFLAGS: $CXX11_CXXFLAGS"
echo " LDFLAGS: $ldflags"
echo " Macros: $defines"
echo ""
diff --git a/src/mesa/state_tracker/tests/Makefile.am b/src/mesa/state_tracker/tests/Makefile.am
index f32957608e..6c58d36769 100644
--- a/src/mesa/state_tracker/tests/Makefile.am
+++ b/src/mesa/state_tracker/tests/Makefile.am
@@ -5,7 +5,7 @@ AM_CFLAGS = \
AM_CXXFLAGS = \
$(GALLIUM_DRIVER_CXXFLAGS) \
- -std=c++11
+ $(CXX11_CXXFLAGS)
AM_CPPFLAGS = \
-I$(top_srcdir)/src/gtest/include \
@@ -15,8 +15,10 @@ AM_CPPFLAGS = \
-I$(top_builddir)/src/compiler/glsl \
$(DEFINES)
+if HAVE_STD_CXX11
TESTS = st-renumerate-test
check_PROGRAMS = st-renumerate-test
+endif
st_renumerate_test_SOURCES = \
test_glsl_to_tgsi_lifetime.cpp
--
2.14.2
More information about the mesa-dev
mailing list