[Libreoffice-commits] .: config_host.mk.in configure.ac solenv/gbuild solenv/inc

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Mon Dec 10 04:58:24 PST 2012


 config_host.mk.in                |    1 
 configure.ac                     |   52 +++++++++++++++++++++++++++++++++------
 solenv/gbuild/platform/macosx.mk |    2 -
 solenv/gbuild/platform/unxgcc.mk |    2 -
 solenv/inc/unxgcc.mk             |    2 -
 5 files changed, 49 insertions(+), 10 deletions(-)

New commits:
commit 217ba33cb02c86ea25bf62748e1bcbdd1218795b
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Mon Dec 10 12:47:27 2012 +0100

    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

diff --git a/config_host.mk.in b/config_host.mk.in
index b140600..b1a0849 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 192e28f..648da1a 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 5c590bc..b2905bd 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 4b1f747..d6b67be 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 0441986..f3f03d6 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


More information about the Libreoffice-commits mailing list