Revision: 15124
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15124
Author:   blendix
Date:     2008-06-04 23:29:47 +0200 (Wed, 04 Jun 2008)

Log Message:
-----------

Apricot Branch: add -fvisibility=hidden if supported, to prevent conflicts
with bullet symbols used by b2cs. Note msvc does this already. Support was
added to Make/CMake/Scons, though it's pretty ugly code with shell commands,
couldn't figure out how to do it nicer.

Modified Paths:
--------------
    branches/apricot/CMakeLists.txt
    branches/apricot/SConstruct
    branches/apricot/source/blender/blenpluginapi/externdef.h
    branches/apricot/source/nan_compile.mk

Modified: branches/apricot/CMakeLists.txt
===================================================================
--- branches/apricot/CMakeLists.txt     2008-06-04 18:11:48 UTC (rev 15123)
+++ branches/apricot/CMakeLists.txt     2008-06-04 21:29:47 UTC (rev 15124)
@@ -188,12 +188,19 @@
     SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp ")
   ENDIF(WITH_OPENMP)
 
-
   SET(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing 
-DXP_UNIX -Wno-char-subscripts")
 
   SET(PLATFORM_LINKFLAGS "-pthread")
 
   INCLUDE_DIRECTORIES(/usr/include /usr/local/include)
+
+  # msvc already hides symbols, for others do it if the compiler supports it
+  EXECUTE_PROCESS(COMMAND echo "int main() { return 0; }" COMMAND 
${CMAKE_C_COMPILER} -fvisibility=hidden -o /dev/null -xc - RESULT_VARIABLE 
VISIBILITY_RESULT OUTPUT_QUIET ERROR_QUIET)
+  IF(NOT VISIBILITY_RESULT)
+    SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden 
-DGCC_HASCLASSVISIBILITY")
+    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden 
-DGCC_HASCLASSVISIBILITY")
+  ENDIF(NOT VISIBILITY_RESULT)
+
 ENDIF(UNIX)
 
 IF(WIN32)
@@ -384,6 +391,14 @@
   SET(TIFF_INC ${TIFF}/include)
 
   SET(EXETYPE MACOSX_BUNDLE)
+
+  # msvc already hides symbols, for others do it if the compiler supports it
+  EXECUTE_PROCESS(COMMAND echo "int main() { return 0; }" COMMAND 
${CMAKE_C_COMPILER} -fvisibility=hidden -o /dev/null -xc - RESULT_VARIABLE 
VISIBILITY_RESULT OUTPUT_QUIET ERROR_QUIET)
+  IF(NOT VISIBILITY_RESULT)
+    SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden 
-DGCC_HASCLASSVISIBILITY")
+    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden 
-DGCC_HASCLASSVISIBILITY")
+  ENDIF(NOT VISIBILITY_RESULT)
+
 ENDIF(APPLE)
 
 IF(CMAKE_SYSTEM_NAME MATCHES "Linux")

Modified: branches/apricot/SConstruct
===================================================================
--- branches/apricot/SConstruct 2008-06-04 18:11:48 UTC (rev 15123)
+++ branches/apricot/SConstruct 2008-06-04 21:29:47 UTC (rev 15124)
@@ -36,6 +36,7 @@
 import shutil
 import glob
 import re
+import commands
 from tempfile import mkdtemp
 
 import tools.Blender
@@ -235,6 +236,18 @@
                 os.rmdir(os.path.join(root, name))
         if root: os.rmdir(root)
 
+# msvc already hides symbols, for others do it if the compiler supports it
+
+if env['OURPLATFORM'] != 'win32-vc':
+       def check_option(cc, option):
+               cmd = "echo \"int main() { return 0; }\" | " + cc + " " + 
option + " -o /dev/null -xc -"
+               return (commands.getstatusoutput(cmd)[0] == 0)
+
+       if check_option(env['CC'], '-fvisibility=hidden'):
+               env['CPPFLAGS'].extend(['-fvisibility=hidden', 
'-DGCC_HASCLASSVISIBILITY'])
+               env['CXXFLAGS'].extend(['-fvisibility=hidden', 
'-DGCC_HASCLASSVISIBILITY'])
+               env['CCFLAGS'].extend(['-fvisibility=hidden', 
'-DGCC_HASCLASSVISIBILITY'])
+
 if len(B.quickdebug) > 0 and printdebug != 0:
     print B.bc.OKGREEN + "Buildings these libs with debug symbols:" + B.bc.ENDC
     for l in B.quickdebug:

Modified: branches/apricot/source/blender/blenpluginapi/externdef.h
===================================================================
--- branches/apricot/source/blender/blenpluginapi/externdef.h   2008-06-04 
18:11:48 UTC (rev 15123)
+++ branches/apricot/source/blender/blenpluginapi/externdef.h   2008-06-04 
21:29:47 UTC (rev 15124)
@@ -30,17 +30,24 @@
 #ifndef _EXTERNDEF_H
 #define _EXTERNDEF_H
 
-#ifdef WIN32
- #ifdef PLUGIN_INTERN
-  #define LIBEXPORT    __declspec(dllexport)
-  #define LIBIMPORT    __declspec(dllexport)
- #else 
-  #define LIBEXPORT    __declspec(dllexport)
-  #define LIBIMPORT    extern __declspec(dllimport)
+#ifdef GCC_HASCLASSVISIBILITY
+ /* with gcc, we enable hiding of symbols if -fvisibility=hidden is
+  * supported, and define GCC_HASCLASSVISIBILITY to check it */
+ #define LIBEXPORT extern __attribute__ ((visibility("default")))
+ #define LIBIMPORT extern __attribute__ ((visibility("default")))
+#else
+ #ifdef WIN32
+  #ifdef PLUGIN_INTERN
+   #define LIBEXPORT   __declspec(dllexport)
+   #define LIBIMPORT   __declspec(dllexport)
+  #else 
+   #define LIBEXPORT   __declspec(dllexport)
+   #define LIBIMPORT   extern __declspec(dllimport)
+  #endif
+ #elif !defined(WIN32)
+  #define LIBEXPORT extern
+  #define LIBIMPORT extern
  #endif
-#elif !defined(WIN32)
-       #define LIBEXPORT extern
-       #define LIBIMPORT extern
 #endif
 
 #endif /* _EXTERNDEF_H */

Modified: branches/apricot/source/nan_compile.mk
===================================================================
--- branches/apricot/source/nan_compile.mk      2008-06-04 18:11:48 UTC (rev 
15123)
+++ branches/apricot/source/nan_compile.mk      2008-06-04 21:29:47 UTC (rev 
15124)
@@ -259,6 +259,23 @@
   endif
 endif
 
+# msvc already hides symbols, for others do it if the compiler supports it
+ifeq ($(OS),windows)
+  ifeq ($(FREE_WINDOWS),true)
+    CHECK_VISIBILITY_FLAG = 1
+  endif
+else
+  CHECK_VISIBILITY_FLAG = 1
+endif
+
+ifdef CHECK_VISIBILITY_FLAG
+  VISIBILITY_RESULT = $(shell echo "int main() { return 0; }" | $(CC) 
-fvisibility=hidden -o /dev/null -xc - 2> /dev/null; echo $$?)
+  ifeq ($(VISIBILITY_RESULT), 0)
+    CFLAGS += -fvisibility=hidden -DGCC_HASCLASSVISIBILITY
+    CCFLAGS += -fvisibility=hidden -DGCC_HASCLASSVISIBILITY
+  endif
+endif
+
 ifeq (debug, $(findstring debug, $(MAKECMDGOALS)))
     export DEBUG_DIR=debug/
 endif


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to