diff options
| author | Andrew Stitcher <astitcher@apache.org> | 2013-09-03 22:09:17 +0000 |
|---|---|---|
| committer | Andrew Stitcher <astitcher@apache.org> | 2013-09-03 22:09:17 +0000 |
| commit | 1fdfd9b2acf01699e8fb7ac7b08c1f532587b1a8 (patch) | |
| tree | 5f94d3cfff3cdf5d16e54139bd595afc3f1a375e /qpid/cpp/src/CMakeLists.txt | |
| parent | bec603bc053e95788c8936d9a17253bced049920 (diff) | |
| download | qpid-python-1fdfd9b2acf01699e8fb7ac7b08c1f532587b1a8.tar.gz | |
QPID-5111: Make library dependencies clearer in build system
- Use -as-needed to link libraries to avoid unnecessary libraries
- Tidyup mess with nss and qpid-proton libraries
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1519866 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src/CMakeLists.txt')
| -rw-r--r-- | qpid/cpp/src/CMakeLists.txt | 139 |
1 files changed, 79 insertions, 60 deletions
diff --git a/qpid/cpp/src/CMakeLists.txt b/qpid/cpp/src/CMakeLists.txt index a3d2b6f9d3..ba4eeaeaa7 100644 --- a/qpid/cpp/src/CMakeLists.txt +++ b/qpid/cpp/src/CMakeLists.txt @@ -279,6 +279,9 @@ if (ENABLE_VALGRIND AND NOT VALGRIND) message(STATUS "Can't locate the valgrind command; no run-time error detection") endif (ENABLE_VALGRIND AND NOT VALGRIND) +# Do not keep on linking against transitive library dependencies +set (CMAKE_LINK_INTERFACE_LIBRARIES "") + if (CMAKE_COMPILER_IS_GNUCXX) # Warnings: Enable as many as possible, keep the code clean. Please # do not disable warnings or remove -Werror without discussing on @@ -295,12 +298,13 @@ if (CMAKE_COMPILER_IS_GNUCXX) if (CMAKE_SYSTEM_NAME STREQUAL SunOS) set (CATCH_UNDEFINED "") endif (CMAKE_SYSTEM_NAME STREQUAL SunOS) - set (COMPILER_FLAGS "-fvisibility-inlines-hidden") + set (COMPILER_FLAGS "-fvisibility-inlines-hidden -Wl,--as-needed") # gcc 4.1.2 on RHEL 5 needs -Wno-attributes to avoid an error that's fixed # in later gcc versions. execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) if (GCC_VERSION VERSION_EQUAL 4.1.2) + set (COMPILER_FLAGS "-Wl,--as-needed") message (STATUS "Cannot use -fvisibility=hidden on gcc 4.1.2") else (GCC_VERSION VERSION_EQUAL 4.1.2) set (HIDE_SYMBOL_FLAGS "-fno-visibility-inlines-hidden -fvisibility=hidden") @@ -534,13 +538,15 @@ include_directories( ${CMAKE_CURRENT_BINARY_DIR}/../include ) link_directories( ${Boost_LIBRARY_DIRS} ) -CHECK_LIBRARY_EXISTS (rt clock_gettime "" CLOCK_GETTIME_IN_RT) -if (NOT CLOCK_GETTIME_IN_RT) - CHECK_FUNCTION_EXISTS (clock_gettime QPID_HAS_CLOCK_GETTIME) -else (NOT CLOCK_GETTIME_IN_RT) - set(CMAKE_REQUIRED_LIBS ${CMAKE_REQUIRED_LIBS} rt) - set(QPID_HAS_CLOCK_GETTIME YES CACHE BOOL "Platform has clock_gettime") -endif (NOT CLOCK_GETTIME_IN_RT) +CHECK_FUNCTION_EXISTS (clock_gettime CLOCK_GETTIME_IN_LIBC) +if (NOT CLOCK_GETTIME_IN_LIBC) + CHECK_LIBRARY_EXISTS (rt clock_gettime "" CLOCK_GETTIME_IN_RT) + if (CLOCK_GETTIME_IN_RT) + set(clock_gettime_LIB "rt") + else () + message(FATAL_ERROR "Cannot find clock_gettime()") + endif (CLOCK_GETTIME_IN_RT) +endif (NOT CLOCK_GETTIME_IN_LIBC) # Check for header file for dtrace static probes check_include_files(sys/sdt.h HAVE_SYS_SDT_H) @@ -572,6 +578,7 @@ if (NOT CMAKE_SYSTEM_NAME STREQUAL Windows) if (NOT HAVE_UUID AND NOT HAVE_UUID_H) message(FATAL_ERROR "Uuid library and/or header file not found") endif (NOT HAVE_UUID AND NOT HAVE_UUID_H) + set (uuid_LIB "uuid") endif (NOT CMAKE_SYSTEM_NAME STREQUAL Windows) # See if Cyrus SASL is desired and available @@ -599,7 +606,7 @@ if (BUILD_SASL) qpid/sys/cyrus/CyrusSecurityLayer.h qpid/sys/cyrus/CyrusSecurityLayer.cpp ) - set(qpidcommon_sasl_lib sasl2) + set(sasl_LIB sasl2) else (BUILD_SASL) set(HAVE_SASL OFF) set(BROKER_SASL_NAME "qpidd" CACHE STRING "SASL app name for the qpid broker") @@ -628,27 +635,21 @@ if (BUILD_SSL) set (sslcommon_SOURCES qpid/sys/windows/SslAsynchIO.cpp ) + set (ssl_SOURCES qpid/broker/windows/SslProtocolFactory.cpp ) + set (sslconnector_SOURCES qpid/client/windows/SslConnector.cpp ) - set (windows_ssl_libs Secur32.lib) - set (windows_ssl_server_libs Crypt32.lib) + set (ssl_LIBS Secur32.lib) + set (ssl_server_LIBS Crypt32.lib Secur32.lib) else (CMAKE_SYSTEM_NAME STREQUAL Windows) if (NOT NSS_FOUND) message(FATAL_ERROR "nss/nspr not found, required for ssl support") endif (NOT NSS_FOUND) - foreach(f ${NSS_CFLAGS}) - set (NSS_COMPILE_FLAGS "${NSS_COMPILE_FLAGS} ${f}") - endforeach(f) - - foreach(f ${NSS_LDFLAGS}) - set (NSS_LINK_FLAGS "${NSS_LINK_FLAGS} ${f}") - endforeach(f) - set (sslcommon_SOURCES qpid/sys/ssl/check.h qpid/sys/ssl/check.cpp @@ -667,13 +668,9 @@ if (BUILD_SSL) qpid/messaging/amqp/SslTransport.cpp ) - set_source_files_properties ( - ${sslcommon_SOURCES} - ${ssl_SOURCES} - ${sslconnector_SOURCES} - PROPERTIES - COMPILE_FLAGS "${NSS_COMPILE_FLAGS}" - ) + set (ssl_INCLUDES "${NSS_INCLUDE_DIRS}") + set (ssl_LIBS "${NSS_LIBRARIES}") + set (ssl_server_LIBS "${NSS_LIBRARIES}") endif (CMAKE_SYSTEM_NAME STREQUAL Windows) endif (BUILD_SSL) @@ -714,7 +711,7 @@ if (BUILD_XML) qpid/xml/XmlExchange.cpp qpid/xml/XmlExchange.h qpid/xml/XmlExchangePlugin.cpp) - target_link_libraries (xml xerces-c xqilla qpidbroker pthread) + target_link_libraries (xml xerces-c xqilla qpidbroker qpidcommon) set_target_properties (xml PROPERTIES PREFIX "" COMPILE_DEFINITIONS _IN_QPID_BROKER @@ -805,13 +802,13 @@ if (BUILD_HA) ) add_library (ha MODULE ${ha_SOURCES}) - set_target_properties (ha PROPERTIES PREFIX "" COMPILE_DEFINITIONS _IN_QPID_BROKER) - target_link_libraries (ha qpidtypes qpidcommon qpidbroker qpidmessaging) - if (CMAKE_COMPILER_IS_GNUCXX) - set_target_properties (ha PROPERTIES - PREFIX "" - LINK_FLAGS -Wl,--no-undefined) - endif (CMAKE_COMPILER_IS_GNUCXX) + target_link_libraries (ha + qpidtypes qpidcommon qpidbroker qpidmessaging + "${Boost_PROGRAM_OPTIONS_LIBRARY}") + set_target_properties (ha PROPERTIES + PREFIX "" + COMPILE_DEFINITIONS _IN_QPID_BROKER + LINK_FLAGS "${CATCH_UNDEFINED}") install (TARGETS ha DESTINATION ${QPIDD_MODULE_DIR} COMPONENT ${QPID_COMPONENT_BROKER}) @@ -861,20 +858,20 @@ if (CMAKE_SYSTEM_NAME STREQUAL Windows) ) set (qpidcommon_platform_LIBS - ${Boost_THREAD_LIBRARY} ${windows_ssl_libs} ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_DATE_TIME_LIBRARY} ${Boost_SYSTEM_LIBRARY} ws2_32 ) + ${Boost_THREAD_LIBRARY} + ${Boost_DATE_TIME_LIBRARY} + ${Boost_SYSTEM_LIBRARY} + ws2_32 + ) + set (qpidbroker_platform_SOURCES qpid/broker/windows/BrokerDefaults.cpp qpid/broker/windows/SaslAuthenticator.cpp ) - set (qpidbroker_platform_LIBS - ${windows_ssl_libs} ${windows_ssl_server_libs} - ) + set (qpidclient_platform_SOURCES qpid/client/windows/ClientDllMain.cpp ) - set (qpidclient_platform_LIBS - ${windows_ssl_libs} - ) set (qpidd_platform_SOURCES windows/QpiddBroker.cpp @@ -935,8 +932,7 @@ else (CMAKE_SYSTEM_NAME STREQUAL Windows) set (qpidtypes_platform_SOURCES) set (qpidtypes_platform_LIBS - uuid - ${Boost_SYSTEM_LIBRARY} + "${uuid_LIB}" ) set (qpidcommon_platform_SOURCES @@ -961,9 +957,11 @@ else (CMAKE_SYSTEM_NAME STREQUAL Windows) ${qpid_system_module} ${qpid_poller_module} ) + set (qpidcommon_platform_LIBS - ${Boost_PROGRAM_OPTIONS_LIBRARY} - ${CMAKE_DL_LIBS} + "${CMAKE_DL_LIBS}" + "${clock_gettime_LIB}" + "${uuid_LIB}" ) set (qpidbroker_platform_SOURCES @@ -1092,20 +1090,21 @@ set (qpidcommon_SOURCES add_msvc_version (qpidcommon library dll) add_library (qpidcommon SHARED ${qpidcommon_SOURCES}) -if (CLOCK_GETTIME_IN_RT) - set (qpidcommon_platform_LIBS ${qpidcommon_platform_LIBS} rt) -endif (CLOCK_GETTIME_IN_RT) -# Not all platforms have NSS_LINK_FLAGS -if (NSS_LINK_FLAGS) - set (qpidcommon_LINK_FLAGS LINK_FLAGS ${NSS_LINK_FLAGS}) -endif (NSS_LINK_FLAGS) + target_link_libraries (qpidcommon qpidtypes ${qpidcommon_platform_LIBS} - ${qpidcommon_sasl_lib}) + ${Boost_PROGRAM_OPTIONS_LIBRARY} + "${sasl_LIB}" + "${ssl_LIBS}") + +get_target_property(qpidcommon_includes qpidcommon INCLUDE_DIRECTORIES) +list(APPEND qpidcommon_includes ${ssl_INCLUDES}) set_target_properties (qpidcommon PROPERTIES + INCLUDE_DIRECTORIES "${qpidcommon_includes}" VERSION ${qpidcommon_version} - SOVERSION ${qpidcommon_version_major} - ${qpidcommon_LINK_FLAGS}) + SOVERSION ${qpidcommon_version_major}) +unset(qpidcommon_includes) + install (TARGETS qpidcommon DESTINATION ${QPID_INSTALL_LIBDIR} COMPONENT ${QPID_COMPONENT_COMMON}) @@ -1178,9 +1177,19 @@ set (qpidclient_SOURCES add_msvc_version (qpidclient library dll) add_library (qpidclient SHARED ${qpidclient_SOURCES}) -target_link_libraries (qpidclient qpidcommon ${qpidclient_platform_LIBS}) -set_target_properties (qpidclient PROPERTIES VERSION ${qpidclient_version} -SOVERSION ${qpidclient_version_major}) + +target_link_libraries (qpidclient qpidcommon + ${Boost_PROGRAM_OPTIONS_LIBRARY} + "${ssl_LIBS}") + +get_target_property(qpidclient_includes qpidclient INCLUDE_DIRECTORIES) +list(APPEND qpidclient_includes ${ssl_INCLUDES}) +set_target_properties (qpidclient PROPERTIES + INCLUDE_DIRECTORIES "${qpidclient_includes}" + VERSION ${qpidclient_version} + SOVERSION ${qpidclient_version_major}) +unset(qpidclient_includes) + install (TARGETS qpidclient DESTINATION ${QPID_INSTALL_LIBDIR} COMPONENT ${QPID_COMPONENT_CLIENT}) @@ -1251,7 +1260,7 @@ set_source_files_properties( add_msvc_version (qpidmessaging library dll) add_library (qpidmessaging SHARED ${qpidmessaging_SOURCES}) -target_link_libraries (qpidmessaging qpidclient) +target_link_libraries (qpidmessaging qpidtypes qpidclient qpidcommon) set_target_properties (qpidmessaging PROPERTIES LINK_FLAGS "${HIDE_SYMBOL_FLAGS} ${LINK_VERSION_SCRIPT_FLAG}" VERSION ${qpidmessaging_version} @@ -1377,11 +1386,21 @@ set (qpidbroker_SOURCES ) add_msvc_version (qpidbroker library dll) add_library (qpidbroker SHARED ${qpidbroker_SOURCES}) -target_link_libraries (qpidbroker qpidcommon ${qpidbroker_platform_LIBS}) + +target_link_libraries (qpidbroker qpidcommon qpidtypes + "${Boost_PROGRAM_OPTIONS_LIBRARY}" + "${sasl_LIB}" + "${ssl_server_LIBS}") + +get_target_property(qpidbroker_includes qpidcommon INCLUDE_DIRECTORIES) +list(APPEND qpidbroker_includes ${ssl_INCLUDES}) set_target_properties (qpidbroker PROPERTIES + INCLUDE_DIRECTORIES "${qpidbroker_includes}" VERSION ${qpidbroker_version} SOVERSION ${qpidbroker_version_major} COMPILE_DEFINITIONS _IN_QPID_BROKER) +unset(qpidbroker_includes) + if (MSVC) set_target_properties (qpidbroker PROPERTIES COMPILE_FLAGS /wd4290) endif (MSVC) |
