diff --git a/clutter/Makefile.am b/clutter/Makefile.am index fbea8920f..7a67ea57a 100644 --- a/clutter/Makefile.am +++ b/clutter/Makefile.am @@ -29,6 +29,7 @@ AM_CPPFLAGS = \ $(CLUTTER_DEPRECATED_CFLAGS) \ $(CLUTTER_DEBUG_CFLAGS) \ $(CLUTTER_PROFILE_CFLAGS) \ + $(CLUTTER_HIDDEN_VISIBILITY_CFLAGS) \ $(NULL) AM_CFLAGS = $(CLUTTER_CFLAGS) $(MAINTAINER_CFLAGS) @@ -850,7 +851,6 @@ libclutter_@CLUTTER_API_VERSION@_la_LDFLAGS = \ $(CLUTTER_LINK_FLAGS) \ $(CLUTTER_LT_LDFLAGS) \ -export-dynamic \ - -export-symbols-regex "^(clutter|cally).*" \ -rpath $(libdir) \ $(win32_resources_ldflag) \ $(NULL) diff --git a/configure.ac b/configure.ac index 94322b56b..27e31c370 100644 --- a/configure.ac +++ b/configure.ac @@ -193,6 +193,36 @@ AC_ARG_ENABLE([Bsymbolic], AS_IF([test "x$enable_Bsymbolic" = "xyes"], [CLUTTER_LINK_FLAGS=-Wl[,]-Bsymbolic-functions]) AC_SUBST(CLUTTER_LINK_FLAGS) +# Check for the visibility flags +CLUTTER_HIDDEN_VISIBILITY_CFLAGS="" +case "$host" in + *-*-mingw*) + dnl on mingw32 we do -fvisibility=hidden and __declspec(dllexport) + AC_DEFINE([_CLUTTER_EXTERN], [__attribute__((visibility("default"))) __declspec(dllexport) extern], + [defines how to decorate public symbols while building]) + CFLAGS="${CFLAGS} -fvisibility=hidden" + ;; + *) + dnl on other compilers, check if we can do -fvisibility=hidden + SAVED_CFLAGS="${CFLAGS}" + CFLAGS="-fvisibility=hidden" + AC_MSG_CHECKING([for -fvisibility=hidden compiler flag]) + AC_TRY_COMPILE([], [int main (void) { return 0; }], + AC_MSG_RESULT(yes) + enable_fvisibility_hidden=yes, + AC_MSG_RESULT(no) + enable_fvisibility_hidden=no) + CFLAGS="${SAVED_CFLAGS}" + + AS_IF([test "${enable_fvisibility_hidden}" = "yes"], [ + AC_DEFINE([_CLUTTER_EXTERN], [__attribute__((visibility("default"))) extern], + [defines how to decorate public symbols while building]) + CLUTTER_HIDDEN_VISIBILITY_CFLAGS="-fvisibility=hidden" + ]) + ;; +esac +AC_SUBST(CLUTTER_HIDDEN_VISIBILITY_CFLAGS) + AC_CACHE_SAVE dnl ========================================================================