Ver código fonte

Added -fvisibility=hidden support, for builds by gcc4 and later.
All the sordid reasons for this are laid out here:

http://gcc.gnu.org/wiki/Visibility

Ryan C. Gordon 20 anos atrás
pai
commit
5d26eca4a4
3 arquivos alterados com 28 adições e 3 exclusões
  1. 1 0
      CHANGELOG
  2. 25 3
      configure.in
  3. 2 0
      physfs.h

+ 1 - 0
CHANGELOG

@@ -2,6 +2,7 @@
  * CHANGELOG.
  */
 
+03232006 - Added -fvisibility for gcc4 (http://gcc.gnu.org/wiki/Visibility)
 01012006 - Cleaned up overflow checks in platform memory allocators (thanks to
            Nicolas Lebedenco for pointing out the original issue with
            long long literals). Added physfs.rc (thanks, Dennis!). Changed my

+ 25 - 3
configure.in

@@ -68,19 +68,41 @@ AC_ARG_ENABLE(debug,
                 , enable_debug=no)
 if test x$enable_debug = xyes; then
   if test x$ac_cv_prog_cc_g = xyes; then
-    PHYSFSCFLAGS="-g -O0"
+    PHYSFSCFLAGS="$PHYSFSCFLAGS -g -O0"
   else
-    PHYSFSCFLAGS="-O0"
+    PHYSFSCFLAGS="$PHYSFSCFLAGS -O0"
   fi
   PHYSFSCFLAGS="$PHYSFSCFLAGS -Werror -Wall"
   AC_DEFINE([DEBUG], 1, [define if debug build is enabled])
   AC_DEFINE([DEBUG_CHATTER], 1, [define if debug chatter is enabled])
 else
-  PHYSFSCFLAGS="-O2"
+  PHYSFSCFLAGS="$PHYSFSCFLAGS -O2"
   AC_DEFINE([NDEBUG], 1, [define if debug build is disabled])
 fi
 
 
+dnl ---------------------------------------------------------------------
+dnl Have GCC's -fvisibility option?
+dnl ---------------------------------------------------------------------
+AC_MSG_CHECKING(for GCC -fvisibility=hidden option)
+have_gcc_fvisibility=no
+visibility_CFLAGS="-fvisibility=hidden"
+save_CFLAGS="$CFLAGS"
+CFLAGS="$save_CFLAGS $visibility_CFLAGS"
+AC_TRY_COMPILE([
+int placeholder = 1;
+],[
+],[
+have_gcc_fvisibility=yes
+])
+AC_MSG_RESULT($have_gcc_fvisibility)
+CFLAGS="$save_CFLAGS"
+
+if test x$have_gcc_fvisibility = xyes; then
+    PHYSFSCFLAGS="$PHYSFSCFLAGS $visibility_CFLAGS"
+fi
+
+
 dnl ---------------------------------------------------------------------
 dnl Profile sorts, etc?
 dnl ---------------------------------------------------------------------

+ 2 - 0
physfs.h

@@ -166,6 +166,8 @@ extern "C" {
 #ifndef DOXYGEN_SHOULD_IGNORE_THIS
 #if (defined _MSC_VER)
 #define __EXPORT__ __declspec(dllexport)
+#elif (defined __GNUC__)
+#define __EXPORT__ __attribute__((visibility("default")))
 #else
 #define __EXPORT__
 #endif