[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kde-common/admin
From:       Dirk Mueller <mueller () kde ! org>
Date:       2005-03-08 13:41:26
Message-ID: 20050308134126.5652A103CB () office ! kde ! org
[Download RAW message or body]

CVS commit by mueller: 

detect and workaround gcc bug with visibility


  M +48 -1     acinclude.m4.in   2.501


--- kde-common/admin/acinclude.m4.in  #2.500:2.501
@@ -3195,4 +3195,49 @@
 ])
 
+AC_DEFUN([KDE_CHECK_VISIBILITY_GCC_BUG],
+  [
+    AC_CACHE_CHECK([for gcc -fvisibility-inlines-hidden bug], \
kde_cv_val_gcc_visibility_bug, +      [
+        AC_LANG_SAVE
+        AC_LANG_CPLUSPLUS
+
+        safe_CXXFLAGS=$CXXFLAGS
+        safe_LDFLAGS=$LDFLAGS
+        CXXFLAGS="$CXXFLAGS -fPIC -fvisibility-inlines-hidden -O0"
+        LDFLAGS="$LDFLAGS -shared -fPIC"
+
+        AC_TRY_LINK(
+        [
+          /* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19664 */
+          template<typename CharT>
+          struct VisTest
+          {
+            inline VisTest ();
+          };
+          template<typename CharT>
+          inline VisTest<CharT>::VisTest()
+          {}
+          extern template class VisTest<char>;  // It works if we drop that line
+          int some_function( int do_something ) __attribute__ \
((visibility("default"))); +          int some_function( int )
+          {
+            VisTest<char> a;
+            return 0;
+          }
+        ], [/* elvis is alive */],
+        kde_cv_val_gcc_visibility_bug=no, kde_cv_val_gcc_visibility_bug=yes)
+
+        CXXFLAGS=$safe_CXXFLAGS
+        LDFLAGS=$safe_LDFLAGS
+        AC_LANG_RESTORE
+      ]
+    )
+
+    if test x$kde_cv_val_gcc_visibility_bug = xno; then
+      CXXFLAGS="$CXXFLAGS -fvisibility-inlines-hidden"
+    fi
+  ]
+)
+
 AC_DEFUN([KDE_CHECK_AND_ADD_HIDDEN_VISIBILITY],
 [
@@ -3203,5 +3248,7 @@
     KDE_CHECK_COMPILER_FLAG(fvisibility=hidden, 
     [
-        CXXFLAGS="$CXXFLAGS -fvisibility=hidden -fvisibility-inlines-hidden"
+        CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
+        KDE_CHECK_VISIBILITY_GCC_BUG
+
         HAVE_GCC_VISIBILITY=1
         AC_DEFINE_UNQUOTED(__KDE_HAVE_GCC_VISIBILITY, "$HAVE_GCC_VISIBILITY", \
[define to 1 if -fvisibility is supported])


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic