diff options
author | Andrew Stitcher <astitcher@apache.org> | 2014-06-17 05:58:34 +0000 |
---|---|---|
committer | Andrew Stitcher <astitcher@apache.org> | 2014-06-17 05:58:34 +0000 |
commit | 2697d56b78841f84ba20cc1fc98b82e3a076b799 (patch) | |
tree | 735a962cc130336d292a7eafb56c310a577248ab | |
parent | 184c235e5f8dbacd57785557b1503003db8ee030 (diff) | |
download | qpid-python-2697d56b78841f84ba20cc1fc98b82e3a076b799.tar.gz |
QPID-5829: Rearrange CMake files to centralise some flags
- This means they can be used in the bindings.
- It also means that individual modules do not have to specify
to catch undefined symbols as this is the default beahviour now.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1603064 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | cpp/CMakeLists.txt | 93 | ||||
-rw-r--r-- | cpp/bindings/qmf2/python/CMakeLists.txt | 4 | ||||
-rw-r--r-- | cpp/bindings/qmf2/ruby/CMakeLists.txt | 2 | ||||
-rw-r--r-- | cpp/bindings/qpid/perl/CMakeLists.txt | 4 | ||||
-rw-r--r-- | cpp/bindings/qpid/python/CMakeLists.txt | 2 | ||||
-rw-r--r-- | cpp/bindings/qpid/ruby/CMakeLists.txt | 4 | ||||
-rw-r--r-- | cpp/src/CMakeLists.txt | 96 | ||||
-rw-r--r-- | cpp/src/amqp.cmake | 1 | ||||
-rw-r--r-- | cpp/src/rdma.cmake | 3 |
9 files changed, 103 insertions, 106 deletions
diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index d057254d45..37e30fc67a 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -116,6 +116,99 @@ configure_file( add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) +# Do not keep on linking against transitive library dependencies +# TODO Need to rework CMake files to use INTERFACE_LINK_LIBRARIES target property +# When that is done we can remove the next 4 lines completely +set (CMAKE_LINK_INTERFACE_LIBRARIES "") +if (DEFINED CMAKE_VERSION AND NOT CMAKE_VERSION VERSION_LESS "2.8.12") + cmake_policy(SET CMP0022 OLD) +endif (DEFINED CMAKE_VERSION AND NOT CMAKE_VERSION VERSION_LESS "2.8.12") + +if (CMAKE_CXX_COMPILER_ID STREQUAL GNU) + # Warnings: Enable as many as possible, keep the code clean. Please + # do not disable warnings or remove -Werror without discussing on + # qpid-dev list. + # + # The following warnings are deliberately omitted, they warn on valid code. + # -Wunreachable-code -Wpadded -Winline + # -Wshadow - warns about boost headers. + set (WARNING_FLAGS + "-Werror -pedantic -Wall -Wextra -Wno-shadow -Wpointer-arith -Wcast-qual -Wcast-align -Wno-long-long -Wvolatile-register-var -Winvalid-pch -Wno-system-headers -Woverloaded-virtual") + + set (CATCH_UNDEFINED "-Wl,--no-undefined") + # gcc on SunOS uses native linker whose "-z defs" is too fussy + if (CMAKE_SYSTEM_NAME STREQUAL SunOS) + set (CATCH_UNDEFINED "") + endif (CMAKE_SYSTEM_NAME STREQUAL SunOS) + set (NOSTRICT_ALIASING "-fno-strict-aliasing") + set (COMPILER_FLAGS "-fvisibility-inlines-hidden") + # 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) + message (STATUS "Cannot restrict library symbol export on gcc 4.1.2") + set (HIDE_SYMBOL_FLAGS "-fno-visibility-inlines-hidden") + else (GCC_VERSION VERSION_EQUAL 4.1.2) + set (HIDE_SYMBOL_FLAGS "-fno-visibility-inlines-hidden -fvisibility=hidden") + set (QPID_LINKMAP ${CMAKE_CURRENT_SOURCE_DIR}/src/qpid.linkmap) + set (LINK_VERSION_SCRIPT_FLAG "-Wl,--version-script=${QPID_LINKMAP}") + endif (GCC_VERSION VERSION_EQUAL 4.1.2) + + if (NOT CMAKE_SYSTEM_NAME STREQUAL Windows) + add_definitions(-pthread) + set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread") + set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${CATCH_UNDEFINED} -pthread") + set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${CATCH_UNDEFINED} -pthread") + endif (NOT CMAKE_SYSTEM_NAME STREQUAL Windows) +endif (CMAKE_CXX_COMPILER_ID STREQUAL GNU) + +if (CMAKE_CXX_COMPILER_ID STREQUAL SunPro) + set (COMPILER_FLAGS "-library=stlport4 -mt") + set (WARNING_FLAGS "+w") + set (CATCH_UNDEFINED "") + set (HIDE_SYMBOL_FLAGS "") +endif (CMAKE_CXX_COMPILER_ID STREQUAL SunPro) + +if (CMAKE_SYSTEM_NAME STREQUAL Windows) + # Allow MSVC user to select 'WinXP-SP3/Windows Server 2003' as build target version + set (win32_winnt_default OFF) + if (MSVC) + set (win32_winnt_default ON) + endif (MSVC) + option(SET_WIN32_WINNT "In Windows-MSVC build: define _WIN32_WINNT=0x0502 to select target version: Windows XP with SP3" ${win32_winnt_default}) +endif (CMAKE_SYSTEM_NAME STREQUAL Windows) + +if (CMAKE_CXX_COMPILER_ID STREQUAL MSVC) + add_definitions( + /D "_CRT_NONSTDC_NO_WARNINGS" + /D "NOMINMAX" + /D "WIN32_LEAN_AND_MEAN" + /wd4244 + /wd4800 + /wd4355 + /wd4267 + ) + + if (SET_WIN32_WINNT) + add_definitions(/D "_WIN32_WINNT=0x0502") + endif (SET_WIN32_WINNT) + + # set the RelWithDebInfo compile/link switches to equal Release + set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MD /O2 /Ob2 /D NDEBUG") + set (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "/debug /INCREMENTAL:NO") + + if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bindings/qpid/dotnet/src) + # Set the windows version for the .NET Binding cpp project + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/bindings/qpid/dotnet/src/org.apache.qpid.messaging.template.rc + ${CMAKE_CURRENT_BINARY_DIR}/src/windows/resources/org.apache.qpid.messaging.rc) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/bindings/qpid/dotnet/src/AssemblyInfo-template.cpp + ${CMAKE_CURRENT_BINARY_DIR}/src/windows/generated_src/AssemblyInfo.cpp) + # Set the windows version for the .NET Binding sessionreceiver project + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/bindings/qpid/dotnet/src/sessionreceiver/Properties/sessionreceiver-AssemblyInfo-template.cs + ${CMAKE_CURRENT_BINARY_DIR}/src/windows/generated_src/sessionreceiver-AssemblyInfo.cs) + endif (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bindings/qpid/dotnet/src) +endif (CMAKE_CXX_COMPILER_ID STREQUAL MSVC) # Subdirectories add_subdirectory(managementgen) diff --git a/cpp/bindings/qmf2/python/CMakeLists.txt b/cpp/bindings/qmf2/python/CMakeLists.txt index b000937ee6..941ebdb397 100644 --- a/cpp/bindings/qmf2/python/CMakeLists.txt +++ b/cpp/bindings/qmf2/python/CMakeLists.txt @@ -33,9 +33,9 @@ list(APPEND SWIG_MODULE_cqmf2_EXTRA_DEPS ${CMAKE_SOURCE_DIR}/include/qpid/swig_python_typemaps.i ) swig_add_module(cqmf2 python ${CMAKE_CURRENT_SOURCE_DIR}/cqmf2.i) -swig_link_libraries(cqmf2 qmf2 ${PYTHON_LIBRARIES}) +swig_link_libraries(cqmf2 qmf2 qpidmessaging qpidtypes ${PYTHON_LIBRARIES}) -set_source_files_properties(${swig_generated_file_fullname} PROPERTIES COMPILE_FLAGS "-fno-strict-aliasing") +set_source_files_properties(${swig_generated_file_fullname} PROPERTIES COMPILE_FLAGS "${NOSTRICT_ALIASING}") include_directories(${PYTHON_INCLUDE_PATH} ${qpid-cpp_SOURCE_DIR}/include ${qpid-cpp_SOURCE_DIR}/bindings) diff --git a/cpp/bindings/qmf2/ruby/CMakeLists.txt b/cpp/bindings/qmf2/ruby/CMakeLists.txt index c40480ff4a..13e478e2dc 100644 --- a/cpp/bindings/qmf2/ruby/CMakeLists.txt +++ b/cpp/bindings/qmf2/ruby/CMakeLists.txt @@ -37,7 +37,7 @@ list(APPEND SWIG_MODULE_cqmf2_ruby_EXTRA_DEPS ${CMAKE_SOURCE_DIR}/include/qpid/swig_ruby_typemaps.i ) swig_add_module(cqmf2_ruby ruby ${CMAKE_CURRENT_SOURCE_DIR}/ruby.i) -swig_link_libraries(cqmf2_ruby qmf2 ${RUBY_LIBRARY}) +swig_link_libraries(cqmf2_ruby qmf2 qpidmessaging qpidtypes ${RUBY_LIBRARY}) ##---------------------------------- ## Install the complete Ruby binding diff --git a/cpp/bindings/qpid/perl/CMakeLists.txt b/cpp/bindings/qpid/perl/CMakeLists.txt index 540c0da2de..49073105c8 100644 --- a/cpp/bindings/qpid/perl/CMakeLists.txt +++ b/cpp/bindings/qpid/perl/CMakeLists.txt @@ -29,9 +29,9 @@ list(APPEND SWIG_MODULE_cqpid_perl_EXTRA_DEPS ${CMAKE_CURRENT_SOURCE_DIR}/../../../include/qpid/swig_perl_typemaps.i ) swig_add_module(cqpid_perl perl ${CMAKE_CURRENT_SOURCE_DIR}/perl.i) -swig_link_libraries(cqpid_perl qpidmessaging qpidtypes qmf2 ${PERL_LIBRARY}) +swig_link_libraries(cqpid_perl qpidmessaging qpidtypes ${PERL_LIBRARY}) +set_source_files_properties(${swig_generated_file_fullname} PROPERTIES COMPILE_FLAGS "${NOSTRICT_ALIASING}") -set_source_files_properties(${swig_generated_file_fullname} PROPERTIES COMPILE_FLAGS "-fno-strict-aliasing") include_directories(${PERL_INCLUDE_PATH} ${qpid-cpp_SOURCE_DIR}/include ${qpid-cpp_SOURCE_DIR}/bindings) diff --git a/cpp/bindings/qpid/python/CMakeLists.txt b/cpp/bindings/qpid/python/CMakeLists.txt index 56ea0e9349..6bc07fc589 100644 --- a/cpp/bindings/qpid/python/CMakeLists.txt +++ b/cpp/bindings/qpid/python/CMakeLists.txt @@ -34,8 +34,8 @@ list(APPEND SWIG_MODULE_qpid_messaging_EXTRA_DEPS ) swig_add_module(qpid_messaging python ${CMAKE_CURRENT_SOURCE_DIR}/qpid_messaging.i) swig_link_libraries(qpid_messaging qpidmessaging qpidtypes ${PYTHON_LIBRARIES}) +set_source_files_properties(${swig_generated_file_fullname} PROPERTIES COMPILE_FLAGS "${NOSTRICT_ALIASING}") -set_source_files_properties(${swig_generated_file_fullname} PROPERTIES COMPILE_FLAGS "-fno-strict-aliasing") include_directories(${PYTHON_INCLUDE_PATH} ${qpid-cpp_SOURCE_DIR}/include ${qpid-cpp_SOURCE_DIR}/bindings) diff --git a/cpp/bindings/qpid/ruby/CMakeLists.txt b/cpp/bindings/qpid/ruby/CMakeLists.txt index f80f134366..6ffabddcbb 100644 --- a/cpp/bindings/qpid/ruby/CMakeLists.txt +++ b/cpp/bindings/qpid/ruby/CMakeLists.txt @@ -46,9 +46,9 @@ list(APPEND SWIG_MODULE_cqpid_ruby_EXTRA_DEPS ${CMAKE_SOURCE_DIR}/include/qpid/swig_ruby_typemaps.i ) swig_add_module(cqpid_ruby ruby ${CMAKE_CURRENT_SOURCE_DIR}/ruby.i) -swig_link_libraries(cqpid_ruby qpidmessaging qpidtypes qmf2 ${RUBY_LIBRARY}) +swig_link_libraries(cqpid_ruby qpidmessaging qpidtypes ${RUBY_LIBRARY}) -set_source_files_properties(${swig_generated_file_fullname} PROPERTIES COMPILE_FLAGS "-fno-strict-aliasing") +set_source_files_properties(${swig_generated_file_fullname} PROPERTIES COMPILE_FLAGS "${NOSTRICT_ALIASING}") ##---------------------------------- ## Install the complete Ruby binding diff --git a/cpp/src/CMakeLists.txt b/cpp/src/CMakeLists.txt index bdbef85f9a..7325e86f92 100644 --- a/cpp/src/CMakeLists.txt +++ b/cpp/src/CMakeLists.txt @@ -154,92 +154,6 @@ if (VALGRIND_FOUND) option(ENABLE_VALGRIND "Use valgrind to detect run-time problems" ON) endif (VALGRIND_FOUND) -# Do not keep on linking against transitive library dependencies -# TODO Need to rework CMake files to use INTERFACE_LINK_LIBRARIES target property -# When that is done we can remove the next 4 lines completely -set (CMAKE_LINK_INTERFACE_LIBRARIES "") -if (DEFINED CMAKE_VERSION AND NOT CMAKE_VERSION VERSION_LESS "2.8.12") - cmake_policy(SET CMP0022 OLD) -endif (DEFINED CMAKE_VERSION AND NOT CMAKE_VERSION VERSION_LESS "2.8.12") - -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 - # qpid-dev list. - # - # The following warnings are deliberately omitted, they warn on valid code. - # -Wunreachable-code -Wpadded -Winline - # -Wshadow - warns about boost headers. - set (WARNING_FLAGS - "-Werror -pedantic -Wall -Wextra -Wno-shadow -Wpointer-arith -Wcast-qual -Wcast-align -Wno-long-long -Wvolatile-register-var -Winvalid-pch -Wno-system-headers -Woverloaded-virtual") - - set (CATCH_UNDEFINED "-Wl,--no-undefined") - # gcc on SunOS uses native linker whose "-z defs" is too fussy - if (CMAKE_SYSTEM_NAME STREQUAL SunOS) - set (CATCH_UNDEFINED "") - endif (CMAKE_SYSTEM_NAME STREQUAL SunOS) - set (COMPILER_FLAGS "-fvisibility-inlines-hidden") - # 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) - message (STATUS "Cannot restrict library symbol export on gcc 4.1.2") - set (HIDE_SYMBOL_FLAGS "-fno-visibility-inlines-hidden") - else (GCC_VERSION VERSION_EQUAL 4.1.2) - set (HIDE_SYMBOL_FLAGS "-fno-visibility-inlines-hidden -fvisibility=hidden") - set (QPID_LINKMAP ${CMAKE_CURRENT_SOURCE_DIR}/qpid.linkmap) - set (LINK_VERSION_SCRIPT_FLAG "-Wl,--version-script=${QPID_LINKMAP}") - endif (GCC_VERSION VERSION_EQUAL 4.1.2) -endif (CMAKE_COMPILER_IS_GNUCXX) - -if (CMAKE_CXX_COMPILER_ID STREQUAL SunPro) - set (COMPILER_FLAGS "-library=stlport4 -mt") - set (WARNING_FLAGS "+w") - set (CATCH_UNDEFINED "") - set (HIDE_SYMBOL_FLAGS "") -endif (CMAKE_CXX_COMPILER_ID STREQUAL SunPro) - -if (CMAKE_SYSTEM_NAME STREQUAL Windows) - # Allow MSVC user to select 'WinXP-SP3/Windows Server 2003' as build target version - set (win32_winnt_default OFF) - if (MSVC) - set (win32_winnt_default ON) - endif (MSVC) - option(SET_WIN32_WINNT "In Windows-MSVC build: define _WIN32_WINNT=0x0502 to select target version: Windows XP with SP3" ${win32_winnt_default}) -endif (CMAKE_SYSTEM_NAME STREQUAL Windows) - -if (MSVC) - add_definitions( - /D "_CRT_NONSTDC_NO_WARNINGS" - /D "NOMINMAX" - /D "WIN32_LEAN_AND_MEAN" - /wd4244 - /wd4800 - /wd4355 - /wd4267 - ) - - if (SET_WIN32_WINNT) - add_definitions(/D "_WIN32_WINNT=0x0502") - endif (SET_WIN32_WINNT) - - # set the RelWithDebInfo compile/link switches to equal Release - set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MD /O2 /Ob2 /D NDEBUG") - set (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "/debug /INCREMENTAL:NO") - - if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../bindings/qpid/dotnet/src) - # Set the windows version for the .NET Binding cpp project - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../bindings/qpid/dotnet/src/org.apache.qpid.messaging.template.rc - ${CMAKE_CURRENT_BINARY_DIR}/windows/resources/org.apache.qpid.messaging.rc) - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../bindings/qpid/dotnet/src/AssemblyInfo-template.cpp - ${CMAKE_CURRENT_BINARY_DIR}/windows/generated_src/AssemblyInfo.cpp) - # Set the windows version for the .NET Binding sessionreceiver project - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../bindings/qpid/dotnet/src/sessionreceiver/properties/sessionreceiver-AssemblyInfo-template.cs - ${CMAKE_CURRENT_BINARY_DIR}/windows/generated_src/sessionreceiver-AssemblyInfo.cs) - endif (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../bindings/qpid/dotnet/src) -endif (MSVC) - option(ENABLE_WARNINGS "Enable lots of compiler warnings (recommended)" ON) if (NOT ENABLE_WARNINGS) set (WARNING_FLAGS "") @@ -571,8 +485,7 @@ if (BUILD_XML) target_link_libraries (xml xerces-c xqilla qpidbroker qpidcommon) set_target_properties (xml PROPERTIES PREFIX "" - COMPILE_DEFINITIONS _IN_QPID_BROKER - LINK_FLAGS "${CATCH_UNDEFINED}") + COMPILE_DEFINITIONS _IN_QPID_BROKER) install (TARGETS xml DESTINATION ${QPIDD_MODULE_DIR} COMPONENT ${QPID_COMPONENT_BROKER}) @@ -666,8 +579,7 @@ if (BUILD_HA) ${Boost_PROGRAM_OPTIONS_LIBRARY}) set_target_properties (ha PROPERTIES PREFIX "" - COMPILE_DEFINITIONS _IN_QPID_BROKER - LINK_FLAGS "${CATCH_UNDEFINED}") + COMPILE_DEFINITIONS _IN_QPID_BROKER) install (TARGETS ha DESTINATION ${QPIDD_MODULE_DIR} COMPONENT ${QPID_COMPONENT_BROKER}) @@ -752,10 +664,6 @@ else (CMAKE_SYSTEM_NAME STREQUAL Windows) ) if (CMAKE_SYSTEM_NAME STREQUAL Linux) - add_definitions(-pthread) - set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread") - set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${CATCH_UNDEFINED} -pthread") - set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -pthread") # On Linux override memory status module set (qpid_memstat_module qpid/sys/posix/MemStat.cpp diff --git a/cpp/src/amqp.cmake b/cpp/src/amqp.cmake index 97da484a80..85617ec59c 100644 --- a/cpp/src/amqp.cmake +++ b/cpp/src/amqp.cmake @@ -104,7 +104,6 @@ if (BUILD_AMQP) target_link_libraries (amqp qpidtypes qpidbroker qpidcommon ${Proton_LIBRARIES}) set_target_properties (amqp PROPERTIES PREFIX "" - LINK_FLAGS "${CATCH_UNDEFINED}" COMPILE_DEFINITIONS _IN_QPID_BROKER) install (TARGETS amqp diff --git a/cpp/src/rdma.cmake b/cpp/src/rdma.cmake index 7c0ec66bf9..9db06269af 100644 --- a/cpp/src/rdma.cmake +++ b/cpp/src/rdma.cmake @@ -65,7 +65,6 @@ if (BUILD_RDMA) add_library (rdmawrap SHARED ${rdma_SOURCES}) target_link_libraries (rdmawrap qpidcommon rdmacm ibverbs) set_target_properties (rdmawrap PROPERTIES - LINK_FLAGS "${CATCH_UNDEFINED}" VERSION ${rdmawrap_version} SOVERSION ${rdmawrap_version_major}) if (CMAKE_COMPILER_IS_GNUCXX) @@ -81,7 +80,6 @@ if (BUILD_RDMA) target_link_libraries (rdma qpidbroker qpidcommon rdmawrap) set_target_properties (rdma PROPERTIES COMPILE_DEFINITIONS _IN_QPID_BROKER - LINK_FLAGS "${CATCH_UNDEFINED}" PREFIX "") if (CMAKE_COMPILER_IS_GNUCXX) @@ -96,7 +94,6 @@ if (BUILD_RDMA) add_library (rdmaconnector MODULE qpid/client/RdmaConnector.cpp) target_link_libraries (rdmaconnector qpidclient qpidcommon rdmawrap) set_target_properties (rdmaconnector PROPERTIES - LINK_FLAGS "${CATCH_UNDEFINED}" PREFIX "") if (CMAKE_COMPILER_IS_GNUCXX) |