diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2012-12-10 12:47:27 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2012-12-10 13:57:43 +0100 |
commit | 217ba33cb02c86ea25bf62748e1bcbdd1218795b (patch) | |
tree | a9d7cb860285c2cb244aee99ab577c00a64553c2 | |
parent | 4479a8896abfc10de2166623c743a73c9e11bb1e (diff) |
Try -std=c++11 if -std=gnu++0x does not work
...like when using Clang against GCC 4.7 headers that unconditionally use
__float128 which is a GNU extension that Clang does not support.
Change-Id: Ie27b5f17df4a10c9682fa750677e6cd8ef5eeeaf
-rw-r--r-- | config_host.mk.in | 1 | ||||
-rw-r--r-- | configure.ac | 52 | ||||
-rw-r--r-- | solenv/gbuild/platform/macosx.mk | 2 | ||||
-rw-r--r-- | solenv/gbuild/platform/unxgcc.mk | 2 | ||||
-rw-r--r-- | solenv/inc/unxgcc.mk | 2 |
5 files changed, 49 insertions, 10 deletions
diff --git a/config_host.mk.in b/config_host.mk.in index b1406004cd15..b1a08498889c 100644 --- a/config_host.mk.in +++ b/config_host.mk.in @@ -84,6 +84,7 @@ export CXX=@CXX@ export CXX_FOR_BUILD=@CXX_FOR_BUILD@ export CXX_X64_BINARY=@CXX_X64_BINARY@ @x_CXXFLAGS@ export CXXFLAGS=@CXXFLAGS@ +export CXXFLAGS_CXX11=@CXXFLAGS_CXX11@ export DATADIR=@DATADIR@ export DBGHELP_DLL=@DBGHELP_DLL@ export DBUSMENUGTK_CFLAGS=$(gb_SPACE)@DBUSMENUGTK_CFLAGS@ diff --git a/configure.ac b/configure.ac index 192e28f6c4a1..648da1a55cac 100644 --- a/configure.ac +++ b/configure.ac @@ -5572,8 +5572,9 @@ fi AC_SUBST(HAVE_THREADSAFE_STATICS) dnl =================================================================== -dnl visibility and c++0x features +dnl visibility and C++11 features dnl =================================================================== +CXXFLAGS_CXX11= if test "$GCC" = "yes"; then AC_MSG_CHECKING([whether $CC supports -fvisibility=hidden]) save_CFLAGS=$CFLAGS @@ -5636,7 +5637,7 @@ if test "$GCC" = "yes"; then AC_MSG_RESULT([no]) fi - AC_MSG_CHECKING([whether $CXX supports -std=gnu++0x without Language Defect 757]) + AC_MSG_CHECKING([whether $CXX supports C++11 without Language Defect 757]) if test "$GCCVER" -ge 040700 -a "$GCCVER" -lt 040702; then AC_MSG_NOTICE([Not using -std=gnu++0x on $CXX version 4.7.0/4.7.1 due to libstdc++ ABI breakage.]) else @@ -5648,7 +5649,8 @@ if test "$GCC" = "yes"; then #include <stddef.h> #include <vector> - // some Clang fail when compiling against GCC 4.7 headers with --std=gnu++0x + // some Clang fail when compiling against GCC 4.7 headers with -std=gnu++0x + // (__float128) template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S]; @@ -5671,19 +5673,55 @@ b thingb[]={{0,0}, {1,1}}; size_t i = sizeof(sal_n_array_size(thinga)); size_t j = sizeof(sal_n_array_size(thingb)); return !(i != 0 && j != 0); -]])],[HAVE_CXX0X=TRUE],[]) +]])],[HAVE_CXX0X=TRUE CXXFLAGS_CXX11=-std=gnu++0x],[]) AC_LANG_POP([C++]) CXXFLAGS=$save_CXXFLAGS + + if test "$HAVE_CXX0X" != "TRUE"; then + save_CXXFLAGS=$CXXFLAGS + CXXFLAGS="$CXXFLAGS -std=c++11" + AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include <stddef.h> + #include <vector> + // some Clang fail when compiling against GCC 4.7 headers + // with -std=gnu++0x (__float128) + template <typename T, size_t S> char + (&sal_n_array_size( T(&)[S] ))[S]; + namespace + { + struct b + { + int i; + int j; + }; + } + ]], [[ + struct a + { + int i; + int j; + }; + a thinga[]={{0,0}, {1,1}}; + b thingb[]={{0,0}, {1,1}}; + size_t i = sizeof(sal_n_array_size(thinga)); + size_t j = sizeof(sal_n_array_size(thingb)); + return !(i != 0 && j != 0); + ]])],[HAVE_CXX0X=TRUE CXXFLAGS_CXX11=-std=c++11],[]) + AC_LANG_POP([C++]) + CXXFLAGS=$save_CXXFLAGS + fi fi if test "$HAVE_CXX0X" = "TRUE"; then - AC_MSG_RESULT([yes]) + AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)]) AC_DEFINE([HAVE_CXX0X]) else AC_MSG_RESULT([no]) fi fi +AC_SUBST(CXXFLAGS_CXX11) AC_SUBST(HAVE_CXX0X) AC_SUBST(HAVE_GCC_NO_LONG_DOUBLE) AC_SUBST(HAVE_GCC_AVX) @@ -5696,7 +5734,7 @@ dnl ================================== AC_MSG_CHECKING([whether $CXX supports C++11 = delete syntax]) if test "$HAVE_CXX0X" = "TRUE"; then save_CXXFLAGS=$CXXFLAGS - CXXFLAGS="$CXXFLAGS -std=gnu++0x" + CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11" AC_LANG_PUSH([C++]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ struct A @@ -8153,7 +8191,7 @@ if test "$with_system_mdds" = "yes"; then dnl =================================================================== AC_MSG_CHECKING([which hash container mdds shall use]) if test "x$HAVE_CXX0X" = "xTRUE"; then - MDDS_CPPFLAGS="-std=gnu++0x" + MDDS_CPPFLAGS=$CXXFLAGS_CXX11 AC_MSG_RESULT([std::unordered_map]) else MDDS_CPPFLAGS="-DMDDS_HASH_CONTAINER_BOOST" diff --git a/solenv/gbuild/platform/macosx.mk b/solenv/gbuild/platform/macosx.mk index 5c590bc236ed..b2905bd21df2 100644 --- a/solenv/gbuild/platform/macosx.mk +++ b/solenv/gbuild/platform/macosx.mk @@ -64,7 +64,7 @@ gb_CXXFLAGS := \ -Wno-non-virtual-dtor \ -fno-strict-aliasing \ -fsigned-char \ - $(if $(filter TRUE,$(COM_GCC_IS_CLANG)),-std=gnu++0x,-malign-natural) \ + $(if $(filter TRUE,$(COM_GCC_IS_CLANG)),$(CXXFLAGS_CXX11),-malign-natural) \ #-Wshadow \ break in compiler headers already #-fsigned-char \ might be removed? diff --git a/solenv/gbuild/platform/unxgcc.mk b/solenv/gbuild/platform/unxgcc.mk index 4b1f74748f7d..d6b67be03c30 100644 --- a/solenv/gbuild/platform/unxgcc.mk +++ b/solenv/gbuild/platform/unxgcc.mk @@ -95,7 +95,7 @@ endif ifeq ($(HAVE_CXX0X),TRUE) #Currently, as well as for its own merits, c++11/c++0x mode allows use to use #a template for SAL_N_ELEMENTS to detect at compiler time its misuse -gb_CXXFLAGS += -std=gnu++0x +gb_CXXFLAGS += $(CXXFLAGS_CXX11) #We have so many std::auto_ptr uses that we need to be able to disable #warnings for those so that -Werror continues to be useful, seeing as moving diff --git a/solenv/inc/unxgcc.mk b/solenv/inc/unxgcc.mk index 04419863f32a..f3f03d66eb83 100644 --- a/solenv/inc/unxgcc.mk +++ b/solenv/inc/unxgcc.mk @@ -100,7 +100,7 @@ CFLAGSCXX += -fno-threadsafe-statics CFLAGSCXX+=-fvisibility-inlines-hidden .ENDIF # "$(HAVE_GCC_VISIBILITY_FEATURE)" == "TRUE" .IF "$(HAVE_CXX0X)" == "TRUE" -CFLAGSCXX+=-std=gnu++0x +CFLAGSCXX+=$(CXXFLAGS_CXX11) .IF "$(GCCNUMVER)" <= "000400059999" CFLAGSCXX+=-Wno-deprecated-declarations .ENDIF |