From kde-commits Tue Mar 08 13:41:26 2005 From: Dirk Mueller Date: Tue, 08 Mar 2005 13:41:26 +0000 To: kde-commits Subject: kde-common/admin Message-Id: <20050308134126.5652A103CB () office ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=111028929923032 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 + struct VisTest + { + inline VisTest (); + }; + template + inline VisTest::VisTest() + {} + extern template class VisTest; // It works if we drop that line + int some_function( int do_something ) __attribute__ ((visibility("default"))); + int some_function( int ) + { + VisTest 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])