[Libreoffice-commits] .: 2 commits - config_host.mk.in configure.in sal/inc sal/qa sal/rtl solenv/gbuild solenv/inc

Lubos Lunak llunak at kemper.freedesktop.org
Tue Mar 13 08:21:33 PDT 2012


 config_host.mk.in                                  |    1 
 configure.in                                       |   35 +++++++++++++++++++++
 sal/inc/rtl/string.hxx                             |   18 +++++++++-
 sal/qa/OStringBuffer/rtl_OStringBuffer.cxx         |    8 ++--
 sal/qa/rtl/strings/test_ostring_stringliterals.cxx |   12 ++++++-
 sal/qa/rtl_strings/rtl_OString.cxx                 |    6 +--
 sal/qa/rtl_strings/rtl_OUString.cxx                |   10 +++---
 sal/qa/rtl_strings/rtl_OUStringBuffer.cxx          |   24 +++++++-------
 sal/rtl/source/strtmpl.cxx                         |    1 
 solenv/gbuild/platform/macosx.mk                   |    5 +++
 solenv/gbuild/platform/unxgcc.mk                   |    6 +++
 solenv/inc/unxgcc.mk                               |    4 ++
 solenv/inc/unxmacx.mk                              |    3 +
 solenv/inc/unxsogi.mk                              |    4 ++
 solenv/inc/unxsogs.mk                              |    4 ++
 15 files changed, 112 insertions(+), 29 deletions(-)

New commits:
commit 01baa9e0c8df6a2c9e1a7d675ac6a2d7da7828cc
Author: Luboš Luňák <l.lunak at suse.cz>
Date:   Tue Mar 13 16:16:20 2012 +0100

    checked that we do not use OString ctor with literals with \0's
    
    Except in some unittests, which are sometimes rather silly and
    broken about it, which might explain why they're disabled.

diff --git a/sal/qa/OStringBuffer/rtl_OStringBuffer.cxx b/sal/qa/OStringBuffer/rtl_OStringBuffer.cxx
index e05c293..46b7814 100644
--- a/sal/qa/OStringBuffer/rtl_OStringBuffer.cxx
+++ b/sal/qa/OStringBuffer/rtl_OStringBuffer.cxx
@@ -190,7 +190,7 @@ namespace rtl_OStringBuffer
             arrOUS[2] = new OString( kTestStr25 );
             arrOUS[3] = new OString( kTestStr27 );
             arrOUS[4] = new OString( kTestStr29 );
-            arrOUS[5] = new OString( "\0" );
+            arrOUS[5] = new OString( "\0", 1 );
 
         }
 
@@ -395,7 +395,7 @@ namespace rtl_OStringBuffer
             arrOUS[1] = new OString( "1" );
             arrOUS[2] = new OString( );
             arrOUS[3] = new OString( "" );
-            arrOUS[4] = new OString( "\0" );
+            arrOUS[4] = new OString( "\0", 1 );
             arrOUS[5] = new OString( kTestStr2 );
 
         }
@@ -528,7 +528,7 @@ namespace rtl_OStringBuffer
             arrOUS[1] = new OString( "1" );
             arrOUS[2] = new OString( );
             arrOUS[3] = new OString( "" );
-            arrOUS[4] = new OString( "\0" );
+            arrOUS[4] = new OString( "\0", 1 );
             arrOUS[5] = new OString( kTestStr2 );
 
         }
@@ -992,7 +992,7 @@ namespace rtl_OStringBuffer
             arrOUS[1] = new OString( "1" );
             arrOUS[2] = new OString( );
             arrOUS[3] = new OString( "" );
-            arrOUS[4] = new OString( "\0" );
+            arrOUS[4] = new OString( "\0", 1 );
             arrOUS[5] = new OString( kTestStr2 );
 
         }
diff --git a/sal/qa/rtl_strings/rtl_OString.cxx b/sal/qa/rtl_strings/rtl_OString.cxx
index 935d420..5be8f31 100644
--- a/sal/qa/rtl_strings/rtl_OString.cxx
+++ b/sal/qa/rtl_strings/rtl_OString.cxx
@@ -356,11 +356,11 @@ TestCase arrTestCase[]={
         new OString(kTestStr2)},
     {"non empty and empty(def. constructor)", sal_False,
         new OString(kTestStr1),new OString()},
-    {"two empty strings(string arg = '\\0')", sal_True,
+    {"two empty strings(string arg = \"\")", sal_True,
         new OString(""),new OString("")},
-    {"empty(string arg = '\\0') and non empty", sal_False,
+    {"empty(string arg = \"\") and non empty", sal_False,
         new OString(""),new OString(kTestStr2)},
-    {"non empty and empty(string arg = '\\0')", sal_False,
+    {"non empty and empty(string arg = \"\")", sal_False,
         new OString(kTestStr1),new OString("")}
     };
 
diff --git a/sal/qa/rtl_strings/rtl_OUString.cxx b/sal/qa/rtl_strings/rtl_OUString.cxx
index 8b6552c..dc1812e 100644
--- a/sal/qa/rtl_strings/rtl_OUString.cxx
+++ b/sal/qa/rtl_strings/rtl_OUString.cxx
@@ -235,9 +235,9 @@ extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OUString_getLength(
                        0,
                        kEncodingRTLTextUSASCII,
                        kConvertFlagsOStringToOUString)},
-        {"length of empty string (string arg = '\\0')", 0,
+        {"length of empty string (string arg = \"\\0\"')", 1,
          new OUString( "\0",
-                       0,
+                       1,
                        kEncodingRTLTextUSASCII,
                        kConvertFlagsOStringToOUString)}
     };
@@ -302,7 +302,7 @@ extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OUString_equals(
          new OUString(aUStr1),
          new OUString()
         },
-        {"two empty strings(string arg = '\\0')", sal_True,
+        {"two empty strings(string arg = \"\")", sal_True,
          new OUString( "",
                        0,
                        kEncodingRTLTextUSASCII,
@@ -312,14 +312,14 @@ extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OUString_equals(
                        kEncodingRTLTextUSASCII,
                        kConvertFlagsOStringToOUString)
         },
-        {"empty(string arg = '\\0') and non empty", sal_False,
+        {"empty(string arg = \"\") and non empty", sal_False,
          new OUString( "",
                        0,
                        kEncodingRTLTextUSASCII,
                        kConvertFlagsOStringToOUString),
          new OUString(aUStr2)
         },
-        {"non empty and empty(string arg = '\\0')", sal_False,
+        {"non empty and empty(string arg = \"\")", sal_False,
          new OUString(aUStr1),
          new OUString( "",
                        0,
diff --git a/sal/qa/rtl_strings/rtl_OUStringBuffer.cxx b/sal/qa/rtl_strings/rtl_OUStringBuffer.cxx
index d690d61..7a9871c 100644
--- a/sal/qa/rtl_strings/rtl_OUStringBuffer.cxx
+++ b/sal/qa/rtl_strings/rtl_OUStringBuffer.cxx
@@ -263,7 +263,7 @@ extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OUStringBuffer_makeStringAndCle
         OUString( aUStr25 ),
         OUString( aUStr27 ),
         OUString( aUStr29 ),
-        OUString( "\0",0,
+        OUString( "\0",1,
               kEncodingRTLTextUSASCII,
               kConvertFlagsOStringToOUString)
     };
@@ -331,7 +331,7 @@ extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OUStringBuffer_getLength(
                         OUString( "",0,
                     kEncodingRTLTextUSASCII,
                     kConvertFlagsOStringToOUString),
-                        OUString( "\0",0,
+                        OUString( "\0",1,
                     kEncodingRTLTextUSASCII,
                     kConvertFlagsOStringToOUString),
                         OUString( aUStr2 )};
@@ -354,7 +354,7 @@ extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OUStringBuffer_getLength(
                         new OUStringBuffer(arrOUS[2])},
     {"length of empty string (empty ascii string arg)",0,
             new OUStringBuffer(arrOUS[3])},
-    {"length of empty string (string arg = '\\0')", 0,
+    {"length of empty string (string arg = \"\\0\")", 1,
             new OUStringBuffer(arrOUS[4])},
         {"length(>16) of ascii string", kTestStr2Len,
             new OUStringBuffer(arrOUS[5]) },
@@ -404,7 +404,7 @@ extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OUStringBuffer_getCapacity(
                         OUString( "",0,
                     kEncodingRTLTextUSASCII,
                     kConvertFlagsOStringToOUString),
-                        OUString( "\0",0,
+                        OUString( "\0",1,
                     kEncodingRTLTextUSASCII,
                     kConvertFlagsOStringToOUString),
                         OUString( aUStr2 )};
@@ -427,7 +427,7 @@ extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OUStringBuffer_getCapacity(
                         new OUStringBuffer(arrOUS[2]) },
     {"capacity of empty string (empty ascii string arg)",0+16,
             new OUStringBuffer(arrOUS[3]) },
-    {"capacity of empty string (string arg = '\\0')", 0+16,
+    {"capacity of empty string (string arg = \"\\0\")", 1+16,
             new OUStringBuffer(arrOUS[4]) },
         {"capacity(>16) of ascii string", kTestStr2Len+16,
             new OUStringBuffer(arrOUS[5]) },
@@ -564,7 +564,7 @@ extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OUStringBuffer_setLength(
                         OUString( "",0,
                     kEncodingRTLTextUSASCII,
                     kConvertFlagsOStringToOUString),
-                        OUString( "\0",0,
+                        OUString( "\0",1,
                     kEncodingRTLTextUSASCII,
                     kConvertFlagsOStringToOUString),
                         OUString( aUStr2 )};
@@ -802,7 +802,7 @@ sal_Bool SAL_CALL test_rtl_OUStringBuffer_append_001(
     OUString arrOUS[5]={OUString( aUStr7 ),
                         OUString(),
                         OUString( aUStr25 ),
-                        OUString( "\0",0,
+                        OUString( "\0",1,
                     kEncodingRTLTextUSASCII,
                     kConvertFlagsOStringToOUString),
                         OUString( aUStr28 )};
@@ -919,7 +919,7 @@ sal_Bool SAL_CALL test_rtl_OUStringBuffer_append_002(
     OUString arrOUS[5]={OUString( aUStr7 ),
                         OUString(),
                         OUString( aUStr25 ),
-                        OUString( "\0",0,
+                        OUString( "\0",1,
                     kEncodingRTLTextUSASCII,
                     kConvertFlagsOStringToOUString),
                         OUString( aUStr28 )};
@@ -1036,7 +1036,7 @@ sal_Bool SAL_CALL test_rtl_OUStringBuffer_append_003(
     OUString arrOUS[5]={OUString( aUStr7 ),
                         OUString(),
                         OUString( aUStr25 ),
-                        OUString( "\0",0,
+                        OUString( "\0",1,
                     kEncodingRTLTextUSASCII,
                     kConvertFlagsOStringToOUString),
                         OUString( aUStr28 )};
@@ -1175,7 +1175,7 @@ sal_Bool SAL_CALL test_rtl_OUStringBuffer_append_004(
     OUString arrOUS[5]={OUString( aUStr7 ),
                         OUString(),
                         OUString( aUStr25 ),
-                        OUString( "\0",0,
+                        OUString( "\0",1,
                     kEncodingRTLTextUSASCII,
                     kConvertFlagsOStringToOUString),
                         OUString( aUStr28 )};
@@ -1276,7 +1276,7 @@ sal_Bool SAL_CALL test_rtl_OUStringBuffer_appendAscii_001(
     OUString arrOUS[5]={OUString( aUStr7 ),
                         OUString(),
                         OUString( aUStr25 ),
-                        OUString( "\0",0,
+                        OUString( "\0",1,
                     kEncodingRTLTextUSASCII,
                     kConvertFlagsOStringToOUString),
                         OUString( aUStr28 )};
@@ -1391,7 +1391,7 @@ sal_Bool SAL_CALL test_rtl_OUStringBuffer_appendAscii_002(
     OUString arrOUS[5]={OUString( aUStr7 ),
                         OUString(),
                         OUString( aUStr25 ),
-                        OUString( "\0",0,
+                        OUString( "\0",1,
                     kEncodingRTLTextUSASCII,
                     kConvertFlagsOStringToOUString),
                         OUString( aUStr28 )};
commit 3d9f5c856a4a77503695e68ce013ebf859fcb212
Author: Luboš Luňák <l.lunak at suse.cz>
Date:   Tue Mar 13 16:09:25 2012 +0100

    make OString work even with old gcc that has SFINAE broken
    
    Since OString already has a ctor accepting const char*, I cannot
    find out a way to distinguish string literals other than using
    a template, otherwise const char* somehow takes precedence
    (all of gcc, clang, msvc). But the template requires
    the Substitution Is Not A Failure Idiom to actually create
    only wanted instances. And the compiler can try evaluate
    the OString ctor as a possibility when comparing an int to
    an anonymous enum, and anonymous enum as a type without linkage
    cannot be a template argument before C++11. SFINAE should still
    work, but not with gcc older than 4.0.2 (which we right now
    use only on macs). So for that case disable the string literal
    ctors, which means macs will have one extra strlen call,
    and also that embedded \0's in string literals will be
    inconsistent. The tiny performance problem shouldn't matter that
    much and will eventually go away, the \0 problem should not
    matter, since before string literal ctors were introduced
    \0's had not been included anyway unless RTL_CONSTASCII_STRINGPARAM
    was used. So we should be safe and when removing the CONSTASCII
    macros \0 cases should be handled by explicitly mentioning
    the length.

diff --git a/config_host.mk.in b/config_host.mk.in
index 2839b5c..77d1498 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -187,6 +187,7 @@ export HAVE_GCC_AVX=@HAVE_GCC_AVX@
 export HAVE_GCC_NO_LONG_DOUBLE=@HAVE_GCC_NO_LONG_DOUBLE@
 export HAVE_GCC_VISIBILITY_BROKEN=@HAVE_GCC_VISIBILITY_BROKEN@
 export HAVE_GCC_VISIBILITY_FEATURE=@HAVE_GCC_VISIBILITY_FEATURE@
+export HAVE_SFINAE_ANONYMOUS_BROKEN=@HAVE_SFINAE_ANONYMOUS_BROKEN@
 export HAVE_GETOPT=@HAVE_GETOPT@
 export HAVE_LD_BSYMBOLIC_FUNCTIONS=@HAVE_LD_BSYMBOLIC_FUNCTIONS@
 export HAVE_LD_HASH_STYLE=@HAVE_LD_HASH_STYLE@
diff --git a/configure.in b/configure.in
index 764b9c0..e0bc4dd 100644
--- a/configure.in
+++ b/configure.in
@@ -4559,6 +4559,41 @@ AC_SUBST(HAVE_GCC_VISIBILITY_FEATURE)
 AC_SUBST(HAVE_GCC_VISIBILITY_BROKEN)
 
 dnl ===================================================================
+dnl SFINAE test
+dnl Pre-C++11 does not allow types without linkage as template arguments.
+dnl Substitution Failure Is Not An Error is an idiom that disables
+dnl template instances that would cause an error, without actually
+dnl causing an error. Old gcc (pre-4.0.2) however causes a real error.
+dnl http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21514
+dnl ===================================================================
+HAVE_SFINAE_ANONYMOUS_BROKEN=
+if test \( "$_os" != "WINNT" -o "$WITH_MINGW" = "yes" \); then
+
+    AC_LANG_PUSH([C++])
+    AC_MSG_CHECKING([if SFINAE is broken with anonymous types])
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+enum { AnonymousEnumValue };
+template< typename T > class TestPredicate {};
+template<> class TestPredicate< int > { public: typedef bool Type; };
+template< typename T >
+bool test( const T&, typename TestPredicate< T >::Type = false )
+    { return true; };
+void test( ... );
+            ]], [[
+    test( 10 );
+    test( AnonymousEnumValue );
+            ]])],[sfinae_anonymous_broken=no],[sfinae_anonymous_broken=yes
+        ])
+        AC_MSG_RESULT([$sfinae_anonymous_broken])
+        if test "$sfinae_anonymous_broken" = "yes"; then
+            HAVE_SFINAE_ANONYMOUS_BROKEN="TRUE"
+        fi
+    AC_LANG_POP([C++])
+fi
+
+AC_SUBST(HAVE_SFINAE_ANONYMOUS_BROKEN)
+
+dnl ===================================================================
 dnl allocator
 dnl ===================================================================
 AC_MSG_CHECKING([which memory allocator to use])
diff --git a/sal/inc/rtl/string.hxx b/sal/inc/rtl/string.hxx
index 6590677..79b9a15 100644
--- a/sal/inc/rtl/string.hxx
+++ b/sal/inc/rtl/string.hxx
@@ -85,6 +85,7 @@ namespace rtl
   use this class.
 */
 
+#ifndef HAVE_SFINAE_ANONYMOUS_BROKEN
 namespace internal
 {
 // This template is used for SFINAE (Substitution failure is not an error), to detect that
@@ -107,6 +108,7 @@ struct CharPtrDetector< char* >
     typedef Dummy Type;
 };
 }
+#endif
 
 class OString
 {
@@ -184,6 +186,17 @@ public:
 
       @param    value       a NULL-terminated character array.
     */
+#ifdef HAVE_SFINAE_ANONYMOUS_BROKEN
+    // Old gcc can try to convert anonymous enums to OString and give compile error.
+    // So there's no special-cased handling of string literals.
+    // These are inline functions and technically both variants should work
+    // the same in practice, so there should be no compatibility problem.
+    OString( const sal_Char * value ) SAL_THROW(())
+     {
+         pData = 0;
+         rtl_string_newFromStr( &pData, value );
+     }
+#else
     template< typename T >
     OString( const T& value, typename internal::CharPtrDetector< T >::Type = internal::Dummy() ) SAL_THROW(())
     {
@@ -194,8 +207,8 @@ public:
     /**
       New string from a string literal.
 
-      Note that embedded \0's are included in the string if explicitly present
-      in the string literal.
+      If there are any embedded \0's in the string literal, the result is undefined.
+      Use the overload that explicitly accepts length.
 
       @param    literal       a string literal
     */
@@ -221,6 +234,7 @@ public:
         pData = 0;
         rtl_string_newFromStr( &pData, value );
     }
+#endif // HAVE_SFINAE_ANONYMOUS_BROKEN
 
     /**
       New string from a character buffer array.
diff --git a/sal/qa/rtl/strings/test_ostring_stringliterals.cxx b/sal/qa/rtl/strings/test_ostring_stringliterals.cxx
index 22f79ab..8398ae9 100644
--- a/sal/qa/rtl/strings/test_ostring_stringliterals.cxx
+++ b/sal/qa/rtl/strings/test_ostring_stringliterals.cxx
@@ -62,6 +62,8 @@ CPPUNIT_TEST_SUITE_END();
 
 void test::ostring::StringLiterals::checkCtors()
 {
+// string literal ctors do not work with SFINAE broken and are disabled
+#ifndef HAVE_SFINAE_ANONYMOUS_BROKEN
     CPPUNIT_ASSERT( CONST_CTOR_USED( "test" ));
     const char good1[] = "test";
     CPPUNIT_ASSERT( CONST_CTOR_USED( good1 ));
@@ -89,13 +91,19 @@ void test::ostring::StringLiterals::checkCtors()
     CPPUNIT_ASSERT( rtl::OString( (const char*)"ab" ) == rtl::OString( "ab" ));
 
 // Check that contents are correct and equal to the case when RTL_CONSTASCII_STRINGPARAM is used.
+    CPPUNIT_ASSERT( rtl::OString( RTL_CONSTASCII_STRINGPARAM( "" )) == rtl::OString( "" ));
+    CPPUNIT_ASSERT( rtl::OString( RTL_CONSTASCII_STRINGPARAM( "ab" )) == rtl::OString( "ab" ));
+#if 0
+// This is currently disabled because it can't be consistent with HAVE_SFINAE_ANONYMOUS_BROKEN.
+// Since the situation wasn't quite consistent even before, there should be no big harm.
+
 // Check also that embedded \0 is included (RTL_CONSTASCII_STRINGPARAM does the same,
 // const char* ctor does not, but it seems to make more sense to include it when
 // it's explicitly mentioned in the string literal).
-    CPPUNIT_ASSERT( rtl::OString( RTL_CONSTASCII_STRINGPARAM( "" )) == rtl::OString( "" ));
     CPPUNIT_ASSERT( rtl::OString( RTL_CONSTASCII_STRINGPARAM( "\0" )) == rtl::OString( "\0" ));
-    CPPUNIT_ASSERT( rtl::OString( RTL_CONSTASCII_STRINGPARAM( "ab" )) == rtl::OString( "ab" ));
     CPPUNIT_ASSERT( rtl::OString( RTL_CONSTASCII_STRINGPARAM( "a\0b" )) == rtl::OString( "a\0b" ));
+#endif
+#endif
 }
 
 void test::ostring::StringLiterals::testcall( const char str[] )
diff --git a/sal/rtl/source/strtmpl.cxx b/sal/rtl/source/strtmpl.cxx
index a3ef1fa..2d8c44b 100644
--- a/sal/rtl/source/strtmpl.cxx
+++ b/sal/rtl/source/strtmpl.cxx
@@ -1189,7 +1189,6 @@ void SAL_CALL IMPL_RTL_STRINGNAME( newFromStr_WithLength )( IMPL_RTL_STRINGDATA*
 /* ----------------------------------------------------------------------- */
 
 // Used when creating from string literals.
-// Intentionally copies also embedded \0's if present.
 void SAL_CALL IMPL_RTL_STRINGNAME( newFromLiteral)( IMPL_RTL_STRINGDATA** ppThis,
                                                     const sal_Char* pCharStr,
                                                     sal_Int32 nLen )
diff --git a/solenv/gbuild/platform/macosx.mk b/solenv/gbuild/platform/macosx.mk
index 9a91824..22a1fa8 100644
--- a/solenv/gbuild/platform/macosx.mk
+++ b/solenv/gbuild/platform/macosx.mk
@@ -51,6 +51,11 @@ gb_COMPILERDEFS += \
 	-DHAVE_GCC_VISIBILITY_FEATURE \
 
 
+ifeq ($(HAVE_SFINAE_ANONYMOUS_BROKEN),TRUE)
+gb_COMPILERDEFS += \
+        -DHAVE_SFINAE_ANONYMOUS_BROKEN \
+
+endif
 
 gb_CFLAGS := \
 	-isysroot $(gb_SDKDIR) \
diff --git a/solenv/gbuild/platform/unxgcc.mk b/solenv/gbuild/platform/unxgcc.mk
index c709fde..43f58a7 100644
--- a/solenv/gbuild/platform/unxgcc.mk
+++ b/solenv/gbuild/platform/unxgcc.mk
@@ -84,6 +84,12 @@ endif
 
 endif
 
+ifeq ($(HAVE_SFINAE_ANONYMOUS_BROKEN),TRUE)
+gb_COMPILERDEFS += \
+        -DHAVE_SFINAE_ANONYMOUS_BROKEN \
+
+endif
+
 # enable debug STL
 ifeq ($(gb_PRODUCT),$(false))
 gb_COMPILERDEFS += \
diff --git a/solenv/inc/unxgcc.mk b/solenv/inc/unxgcc.mk
index 3765b2d..8bfeebc 100644
--- a/solenv/inc/unxgcc.mk
+++ b/solenv/inc/unxgcc.mk
@@ -51,6 +51,10 @@ CDEFS+=-D_PTHREADS -D_REENTRANT -DNEW_SOLAR -D_USE_NAMESPACE=1
 CDEFS += -DHAVE_GCC_VISIBILITY_FEATURE
 .ENDIF # "$(HAVE_GCC_VISIBILITY_FEATURE)" == "TRUE"
 
+.IF "$(HAVE_SFINAE_ANONYMOUS_BROKEN)" == "TRUE"
+CDEFS += -DHAVE_SFINAE_ANONYMOUS_BROKEN
+.ENDIF # "$(HAVE_SFINAE_ANONYMOUS_BROKEN)" == "TRUE"
+
 # this is a platform with JAVA support
 .IF "$(SOLAR_JAVA)"!=""
 JAVADEF=-DSOLAR_JAVA
diff --git a/solenv/inc/unxmacx.mk b/solenv/inc/unxmacx.mk
index 0cb0b62..8f36772 100644
--- a/solenv/inc/unxmacx.mk
+++ b/solenv/inc/unxmacx.mk
@@ -60,6 +60,9 @@ EXTRA_CDEFS+:=-isysroot $(MACOSX_SDK_PATH)  -DMAC_OS_X_VERSION_MIN_REQUIRED=$(MA
 CDEFS += -DHAVE_GCC_VISIBILITY_FEATURE
 .ENDIF # "$(HAVE_GCC_VISIBILITY_FEATURE)" == "TRUE"
 
+.IF "$(HAVE_SFINAE_ANONYMOUS_BROKEN)" == "TRUE"
+CDEFS += -DHAVE_SFINAE_ANONYMOUS_BROKEN
+.ENDIF # "$(HAVE_SFINAE_ANONYMOUS_BROKEN)" == "TRUE"
 
 # MacOS X specific Java compilation/link flags
 SOLAR_JAVA*=TRUE
diff --git a/solenv/inc/unxsogi.mk b/solenv/inc/unxsogi.mk
index 2ebcbc4..4e81165 100644
--- a/solenv/inc/unxsogi.mk
+++ b/solenv/inc/unxsogi.mk
@@ -94,6 +94,10 @@ LINKVERSIONMAPFLAG=-Wl,--version-script
 CDEFS += -DHAVE_GCC_VISIBILITY_FEATURE
 .ENDIF # "$(HAVE_GCC_VISIBILITY_FEATURE)" == "TRUE"
 
+.IF "$(HAVE_SFINAE_ANONYMOUS_BROKEN)" == "TRUE"
+CDEFS += -DHAVE_SFINAE_ANONYMOUS_BROKEN
+.ENDIF # "$(HAVE_SFINAE_ANONYMOUS_BROKEN)" == "TRUE"
+
 # Reihenfolge der libs NICHT egal!
 
 STDLIBCPP=-lstdc++
diff --git a/solenv/inc/unxsogs.mk b/solenv/inc/unxsogs.mk
index 4f80b42..e25d690 100644
--- a/solenv/inc/unxsogs.mk
+++ b/solenv/inc/unxsogs.mk
@@ -93,6 +93,10 @@ LINKVERSIONMAPFLAG=-Wl,--version-script
 CDEFS += -DHAVE_GCC_VISIBILITY_FEATURE
 .ENDIF # "$(HAVE_GCC_VISIBILITY_FEATURE)" == "TRUE"
 
+.IF "$(HAVE_SFINAE_ANONYMOUS_BROKEN)" == "TRUE"
+CDEFS += -DHAVE_SFINAE_ANONYMOUS_BROKEN
+.ENDIF # "$(HAVE_SFINAE_ANONYMOUS_BROKEN)" == "TRUE"
+
 # Reihenfolge der libs NICHT egal!
 
 STDLIBCPP=-lstdc++


More information about the Libreoffice-commits mailing list