SFML shared libraries now use ELF visibility on Unixes with gcc >= 4
This commit is contained in:
parent
512a7c63cb
commit
eed112d9ea
@ -133,29 +133,37 @@ macro(sfml_add_library target)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# on Unix systems with gcc 4.x, we must hide public symbols by default
|
||||||
|
# (exported ones are explicitely marked)
|
||||||
|
if((LINUX OR MACOSX) AND COMPILER_GCC)
|
||||||
|
if(${GCC_VERSION} MATCHES "4\\..*")
|
||||||
|
set_target_properties(${target} PROPERTIES COMPILE_FLAGS -fvisibility=hidden)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# link the target to its SFML dependencies
|
# link the target to its SFML dependencies
|
||||||
if(THIS_DEPENDS)
|
if(THIS_DEPENDS)
|
||||||
target_link_libraries(${target} ${THIS_DEPENDS})
|
target_link_libraries(${target} ${THIS_DEPENDS})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# build frameworks or dylibs
|
# build frameworks or dylibs
|
||||||
if(MACOSX AND BUILD_SHARED_LIBS)
|
if(MACOSX AND BUILD_SHARED_LIBS)
|
||||||
if(BUILD_FRAMEWORKS)
|
if(BUILD_FRAMEWORKS)
|
||||||
# adapt target to build frameworks instead of dylibs
|
# adapt target to build frameworks instead of dylibs
|
||||||
set_target_properties(${target} PROPERTIES
|
set_target_properties(${target} PROPERTIES
|
||||||
FRAMEWORK TRUE
|
FRAMEWORK TRUE
|
||||||
FRAMEWORK_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}
|
FRAMEWORK_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}
|
||||||
MACOSX_FRAMEWORK_IDENTIFIER org.sfml-dev.${target}
|
MACOSX_FRAMEWORK_IDENTIFIER org.sfml-dev.${target}
|
||||||
MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}
|
MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}
|
||||||
MACOSX_FRAMEWORK_BUNDLE_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
|
MACOSX_FRAMEWORK_BUNDLE_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# adapt install directory to allow distributing dylibs/frameworks in user’s frameworks/application bundle
|
# adapt install directory to allow distributing dylibs/frameworks in user’s frameworks/application bundle
|
||||||
set_target_properties(${target} PROPERTIES
|
set_target_properties(${target} PROPERTIES
|
||||||
BUILD_WITH_INSTALL_RPATH 1
|
BUILD_WITH_INSTALL_RPATH 1
|
||||||
INSTALL_NAME_DIR "@executable_path/../Frameworks")
|
INSTALL_NAME_DIR "@executable_path/../Frameworks")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# link the target to its external dependencies
|
# link the target to its external dependencies
|
||||||
if(THIS_EXTERNAL_LIBS)
|
if(THIS_EXTERNAL_LIBS)
|
||||||
if(BUILD_SHARED_LIBS)
|
if(BUILD_SHARED_LIBS)
|
||||||
@ -172,7 +180,7 @@ macro(sfml_add_library target)
|
|||||||
install(TARGETS ${target}
|
install(TARGETS ${target}
|
||||||
RUNTIME DESTINATION bin COMPONENT bin
|
RUNTIME DESTINATION bin COMPONENT bin
|
||||||
LIBRARY DESTINATION lib${LIB_SUFFIX} COMPONENT bin
|
LIBRARY DESTINATION lib${LIB_SUFFIX} COMPONENT bin
|
||||||
ARCHIVE DESTINATION lib${LIB_SUFFIX} COMPONENT devel
|
ARCHIVE DESTINATION lib${LIB_SUFFIX} COMPONENT devel
|
||||||
FRAMEWORK DESTINATION ${CMAKE_INSTALL_FRAMEWORK_PREFIX} COMPONENT bin)
|
FRAMEWORK DESTINATION ${CMAKE_INSTALL_FRAMEWORK_PREFIX} COMPONENT bin)
|
||||||
|
|
||||||
endmacro()
|
endmacro()
|
||||||
|
@ -97,32 +97,50 @@
|
|||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
// Define portable import / export macros
|
// Define portable import / export macros
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
#if defined(SFML_SYSTEM_WINDOWS) && !defined(SFML_STATIC)
|
#if !defined(SFML_STATIC)
|
||||||
|
|
||||||
#ifdef SFML_EXPORTS
|
#if defined(SFML_SYSTEM_WINDOWS)
|
||||||
|
|
||||||
// From DLL side, we must export
|
#ifdef SFML_EXPORTS
|
||||||
#define SFML_API __declspec(dllexport)
|
|
||||||
|
|
||||||
#else
|
// From DLL side, we must export
|
||||||
|
#define SFML_API __declspec(dllexport)
|
||||||
|
|
||||||
// From client application side, we must import
|
#else
|
||||||
#define SFML_API __declspec(dllimport)
|
|
||||||
|
|
||||||
#endif
|
// From client application side, we must import
|
||||||
|
#define SFML_API __declspec(dllimport)
|
||||||
|
|
||||||
// For Visual C++ compilers, we also need to turn off this annoying C4251 warning.
|
#endif
|
||||||
// You can read lots ot different things about it, but the point is the code will
|
|
||||||
// just work fine, and so the simplest way to get rid of this warning is to disable it
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
|
|
||||||
#pragma warning(disable : 4251)
|
// For Visual C++ compilers, we also need to turn off this annoying C4251 warning.
|
||||||
|
// You can read lots ot different things about it, but the point is the code will
|
||||||
|
// just work fine, and so the simplest way to get rid of this warning is to disable it
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
|
||||||
|
#pragma warning(disable : 4251)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else // Linux, FreeBSD, Mac OS X
|
||||||
|
|
||||||
|
#if __GNUC__ >= 4
|
||||||
|
|
||||||
|
// gcc 4 has special keywords for showing/hidding symbols
|
||||||
|
#define SFML_API __attribute__ ((visibility ("default")))
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
// gcc < 4 has no mechanism to explicitely hide symbols, everything's exported
|
||||||
|
#define SFML_API
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
// Other platforms and static build don't need these export macros
|
// Static build doesn't need these export macros
|
||||||
#define SFML_API
|
#define SFML_API
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user