summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config_host.mk.in1
-rw-r--r--configure.ac52
-rw-r--r--solenv/gbuild/platform/macosx.mk2
-rw-r--r--solenv/gbuild/platform/unxgcc.mk2
-rw-r--r--solenv/inc/unxgcc.mk2
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