diff options
Diffstat (limited to 'qpid/cpp/src/CMakeLists.txt')
-rw-r--r-- | qpid/cpp/src/CMakeLists.txt | 1327 |
1 files changed, 1327 insertions, 0 deletions
diff --git a/qpid/cpp/src/CMakeLists.txt b/qpid/cpp/src/CMakeLists.txt new file mode 100644 index 0000000000..8e2b5b73e8 --- /dev/null +++ b/qpid/cpp/src/CMakeLists.txt @@ -0,0 +1,1327 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +# library versions +include (versions.cmake) + +# Option to require building optional plugins +foreach (r ${REQUIRE}) + set(${r}_force ON) + message(STATUS "Forcing ${r} to ${${r}_force}") +endforeach(r) + +# Capture specified C++ compiler (if any) +if (NOT ENV_CXX) + if (NOT "$ENV{CXX}" STREQUAL "") + set(CXX $ENV{CXX}) + else(NOT "$ENV{CXX}" STREQUAL "") + set(CXX ${CMAKE_CXX_COMPILER}) + endif(NOT "$ENV{CXX}" STREQUAL "") + set(ENV_CXX ${CXX} CACHE INTERNAL "C++ compiler specified in cmake environment") +endif (NOT ENV_CXX) + +include(CheckFunctionExists) +include(CheckIncludeFileCXX) +include(CheckIncludeFiles) +include(CheckIncludeFileCXX) +include(CheckLibraryExists) +include(CheckSymbolExists) +include(CheckSizetDistinct) + +find_package(PkgConfig) +find_package(Ruby) +find_package(PythonInterp REQUIRED) + +find_package(Doxygen) + +find_program(VALGRIND_EXECUTABLE valgrind DOC "Location of the valgrind program") +mark_as_advanced(VALGRIND_EXECUTABLE) +find_package_handle_standard_args(VALGRIND DEFAULT_MSG VALGRIND_EXECUTABLE) + +find_program(SASLPASSWD2_EXECUTABLE saslpasswd2 DOC "Location of the saslpasswd2 program") +mark_as_advanced(SASLPASSWD2_EXECUTABLE) + +# See if Cyrus SASL is desired and available +CHECK_LIBRARY_EXISTS (sasl2 sasl_checkpass "" FOUND_SASL_LIB) +CHECK_INCLUDE_FILES (sasl/sasl.h FOUND_SASL_H) +find_package_handle_standard_args(SASL DEFAULT_MSG FOUND_SASL_LIB FOUND_SASL_H) + +#set (CMAKE_VERBOSE_MAKEFILE ON) # for debugging + +# Add a test to check the exported library API against expected API symbols +MACRO (add_api_test libname) + if (NOT CMAKE_SYSTEM_NAME STREQUAL Windows AND BUILD_TESTING) + add_test(api_check_${libname} ${CMAKE_CURRENT_SOURCE_DIR}/check-abi "${ENV_CXX}" ${CMAKE_CURRENT_BINARY_DIR}/lib${libname}.so ${CMAKE_CURRENT_SOURCE_DIR}/lib${libname}-api-symbols.txt) + endif (NOT CMAKE_SYSTEM_NAME STREQUAL Windows AND BUILD_TESTING) +ENDMACRO (add_api_test libname) + + +# check if we generate source as part of the build +# - rubygen generates the amqp spec +# - managementgen generates the broker management code +# +# rubygen subdir is excluded from stable distributions +# If the main AMQP spec is present, then check if ruby and python are +# present, and if any sources have changed, forcing a re-gen of source code. +find_file(QPID_AMQP_SPEC NAMES amqp.0-10-qpid-errata.stripped.xml PATHS ${qpid-cpp_SOURCE_DIR}/specs ${qpid-cpp_SOURCE_DIR}/../specs NO_DEFAULT_PATH) +mark_as_advanced(QPID_AMQP_SPEC) +if (NOT QPID_AMQP_SPEC) + message(FATAL_ERROR "Can't find amqp 0-10 spec for framing code generation") +endif (NOT QPID_AMQP_SPEC) +if (NOT RUBY_EXECUTABLE) + message(FATAL_ERROR "Can't locate ruby, needed to generate amqp 0-10 framing code.") +endif (NOT RUBY_EXECUTABLE) + +set(specs ${QPID_AMQP_SPEC}) +set(regen_amqp OFF) +set(rgen_dir ${qpid-cpp_SOURCE_DIR}/rubygen) +file(GLOB_RECURSE rgen_progs ${rgen_dir}/*.rb) +# If any of the specs, or any of the sources used to generate code, change +# then regenerate the sources. +foreach (spec_file ${specs} ${rgen_progs}) + if (${spec_file} IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/rubygen.cmake) + set(regen_amqp ON) + endif (${spec_file} IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/rubygen.cmake) +endforeach (spec_file ${specs}) +if (regen_amqp) + message(STATUS "Regenerating AMQP protocol sources") + execute_process(COMMAND ${RUBY_EXECUTABLE} -I ${rgen_dir} ${rgen_dir}/generate ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/../include ${specs} all rubygen.cmake + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) +else (regen_amqp) + message(STATUS "No need to generate AMQP protocol sources") +endif (regen_amqp) + +find_file(QPID_BROKER_MANAGEMENT_SPEC NAMES management-schema.xml PATHS ${CMAKE_CURRENT_SOURCE_DIR}/qpid/broker ${qpid-cpp_SOURCE_DIR}/../specs NO_DEFAULT_PATH) +mark_as_advanced(QPID_BROKER_MANAGEMENT_SPEC) +if (NOT QPID_BROKER_MANAGEMENT_SPEC) + message(FATAL_ERROR "Can't find broker management spec for code generation") +endif (NOT QPID_BROKER_MANAGEMENT_SPEC) +if (NOT PYTHON_EXECUTABLE) + message(FATAL_ERROR "Can't locate python, needed to generate broker management code.") +endif (NOT PYTHON_EXECUTABLE) +set(mgmt_specs ${QPID_BROKER_MANAGEMENT_SPEC} + ${CMAKE_CURRENT_SOURCE_DIR}/qpid/acl/management-schema.xml + ${CMAKE_CURRENT_SOURCE_DIR}/qpid/ha/management-schema.xml + ${CMAKE_CURRENT_SOURCE_DIR}/qpid/legacystore/management-schema.xml + ${CMAKE_CURRENT_SOURCE_DIR}/qpid/linearstore/management-schema.xml +) +set(mgen_dir ${qpid-cpp_SOURCE_DIR}/managementgen) +set(regen_mgmt OFF) +foreach (spec_file ${mgmt_specs}) + if (${spec_file} IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/managementgen.cmake) + message(STATUS "${spec_file} is newer") + set(regen_mgmt ON) + endif (${spec_file} IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/managementgen.cmake) +endforeach (spec_file ${mgmt_specs}) +if (regen_mgmt) + message(STATUS "Regenerating Qpid Management Framework sources") + execute_process(COMMAND ${PYTHON_EXECUTABLE} ${mgen_dir}/qmf-gen -c managementgen.cmake -b -l -q -o ${CMAKE_CURRENT_BINARY_DIR}/qmf ${mgmt_specs} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) +else (regen_mgmt) + message(STATUS "No need to generate Qpid Management Framework sources") +endif (regen_mgmt) + +# Pull in the names of the generated files, i.e. ${rgen_framing_srcs} +include (${CMAKE_CURRENT_BINARY_DIR}/rubygen.cmake) +include (${CMAKE_CURRENT_BINARY_DIR}/managementgen.cmake) + +# FindDoxygen module tries to locate doxygen and Graphviz dot +if (DOXYGEN_FOUND) + option(BUILD_DOCS "Build user documentation" ON) +else (DOXYGEN_FOUND) + message(STATUS "Can't locate the doxygen command; user documentation cannot be generated") +endif (DOXYGEN_FOUND) + +if (VALGRIND_FOUND) + option(ENABLE_VALGRIND "Use valgrind to detect run-time problems" ON) +endif (VALGRIND_FOUND) + +option(ENABLE_WARNINGS "Enable lots of compiler warnings (recommended)" ON) +if (NOT ENABLE_WARNINGS) + set (WARNING_FLAGS "") +endif (NOT ENABLE_WARNINGS) + +set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMPILER_FLAGS} ${WARNING_FLAGS}") + +# Expand a bit from the basic Find_Boost; be specific about what's needed. +# Boost.system is sometimes needed; it's handled separately, below. +# There may be different minimum versions of boost for Windows and Unix +if (CMAKE_SYSTEM_NAME STREQUAL Windows) + set (Boost_components program_options date_time thread) + set (Boost_minversion 1.44) +else (CMAKE_SYSTEM_NAME STREQUAL Windows) + set (Boost_components program_options) + set (Boost_minversion 1.33) +endif (CMAKE_SYSTEM_NAME STREQUAL Windows) + +# Visual Studio 2010 requires boost 1.45 or better. +# The choice here is to fail demanding the user to update CMake to version N +# where Boost 1.45 is supported, or we can just accept some versions using +# the Additional_versions variable. +if (NOT DEFINED Boost_ADDITIONAL_VERSIONS) + set (Boost_ADDITIONAL_VERSIONS + "1.45" "1.45.0" "1.46" "1.46.0" "1.47" "1.47.0" + "1.48" "1.48.0" "1.49" "1.49.0" "1.50" "1.50.0" + "1.51" "1.51.0" "1.52" "1.52.0" "1.53" "1.53.0" + "1.54" "1.54.0" "1.55" "1.55.0") +endif (NOT DEFINED Boost_ADDITIONAL_VERSIONS) + +# Discover Boost version +find_package(Boost ${Boost_minversion} QUIET REQUIRED) + +# Boost.system was introduced at Boost 1.35; it's needed secondarily by other +# Boost libs Qpid needs, so be sure it's there. +if (Boost_VERSION GREATER 103499) + list(APPEND Boost_components system) +endif (Boost_VERSION GREATER 103499) + +# Boost.chrono was introduced at Boost 1.47; it's needed secondarily by other +# Boost libs Qpid needs on Windows, so be sure it's there on Windows. +if (Boost_VERSION GREATER 104699 AND CMAKE_SYSTEM_NAME STREQUAL Windows) + list(APPEND Boost_components chrono) +endif (Boost_VERSION GREATER 104699 AND CMAKE_SYSTEM_NAME STREQUAL Windows) + +find_package(Boost ${Boost_minversion} REQUIRED COMPONENTS ${Boost_components}) +if(NOT Boost_FOUND) + message(FATAL_ERROR "Required Boost C++ libraries not found. Please install or try setting BOOST_ROOT") +endif(NOT Boost_FOUND) + +if (BUILD_TESTING) + set (BUILD_TESTING_UNITTESTS ON) + find_package(Boost ${Boost_minversion} QUIET COMPONENTS unit_test_framework) + if(NOT Boost_UNIT_TEST_FRAMEWORK_LIBRARY) + message(STATUS "Could not find unit testing library - will not build unit tests") + set (BUILD_TESTING_UNITTESTS OFF) + endif(NOT Boost_UNIT_TEST_FRAMEWORK_LIBRARY) +endif (BUILD_TESTING) + +# The Windows install also wants the Boost DLLs, libs and headers that the +# release is built with. The DLLs enable everything to run, and the headers +# and libs ensure that users building Qpid C++ client programs can compile +# (the C++ API still exposes Boost headers, but hopefully this will be fixed +# in the future). +# +# On Windows you can pick whether the static or dynamic versions of the libs +# are used; allow this choice to the user. Since we also install the Boost +# DLLs that are needed for the Windows package, none are needed for the +# static link case; else drop them into the install. Do this all first, since +# Boost on Windows can use automatic linking to pick up the correct +# Boost libs based on compile-time touching of the headers. Since we don't +# really need to add them to the link lines, set the names to blanks. +option(QPID_LINK_BOOST_DYNAMIC "Link with dynamic Boost libs (OFF to link static)" ON) +mark_as_advanced(QPID_LINK_BOOST_DYNAMIC) + +if (MSVC) + if (QPID_LINK_BOOST_DYNAMIC) + add_definitions( /D BOOST_ALL_DYN_LINK) + string (REPLACE .lib .dll + _boost_date_time_debug ${Boost_DATE_TIME_LIBRARY_DEBUG}) + string (REPLACE .lib .dll + _boost_date_time_release ${Boost_DATE_TIME_LIBRARY_RELEASE}) + string (REPLACE .lib .dll + _boost_program_options_debug ${Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG}) + string (REPLACE .lib .dll + _boost_program_options_release ${Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE}) + string (REPLACE .lib .dll + _boost_thread_debug ${Boost_THREAD_LIBRARY_DEBUG}) + string (REPLACE .lib .dll + _boost_thread_release ${Boost_THREAD_LIBRARY_RELEASE}) + if (NOT Boost_VERSION LESS 103500) + string (REPLACE .lib .dll + _boost_system_debug ${Boost_SYSTEM_LIBRARY_DEBUG}) + string (REPLACE .lib .dll + _boost_system_release ${Boost_SYSTEM_LIBRARY_RELEASE}) + endif (NOT Boost_VERSION LESS 103500) + if (NOT Boost_VERSION LESS 104700) + string (REPLACE .lib .dll + _boost_chrono_debug ${Boost_CHRONO_LIBRARY_DEBUG}) + string (REPLACE .lib .dll + _boost_chrono_release ${Boost_CHRONO_LIBRARY_RELEASE}) + endif (NOT Boost_VERSION LESS 104700) + install (PROGRAMS + ${_boost_date_time_debug} ${_boost_date_time_release} + ${_boost_program_options_debug} ${_boost_program_options_release} + ${_boost_thread_debug} ${_boost_thread_release} + ${_boost_chrono_debug} ${_boost_chrono_release} + ${_boost_system_debug} ${_boost_system_release} + DESTINATION ${QPID_INSTALL_BINDIR} + COMPONENT ${QPID_COMPONENT_COMMON}) + endif (QPID_LINK_BOOST_DYNAMIC) + + set(Boost_DATE_TIME_LIBRARY "") + set(Boost_THREAD_LIBRARY "") + set(Boost_PROGRAM_OPTIONS_LIBRARY "") + set(Boost_UNIT_TEST_FRAMEWORK_LIBRARY "") + set(Boost_SYSTEM_LIBRARY "") + set(Boost_CHRONO_LIBRARY "") + include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/windows/resources ) +endif (MSVC) + +include_directories( ${Boost_INCLUDE_DIR} ) + +include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ) +include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../include ) +include_directories( ${CMAKE_CURRENT_BINARY_DIR} ) +include_directories( ${CMAKE_CURRENT_BINARY_DIR}/../include ) + +link_directories( ${Boost_LIBRARY_DIRS} ) + +CHECK_SYMBOL_EXISTS(uuid_generate "uuid/uuid.h" UUID_GENERATE_IN_LIBC) +if (UUID_GENERATE_IN_LIBC) + set(uuid_SRC "") + set(uuid_LIB "") +else (UUID_GENERATE_IN_LIBC) + CHECK_LIBRARY_EXISTS (uuid uuid_generate "" UUID_GENERATE_IN_UUID) + if (UUID_GENERATE_IN_UUID) + set(uuid_SRC "") + set(uuid_LIB uuid) + else (UUID_GENERATE_IN_UUID) + CHECK_SYMBOL_EXISTS(uuid_create "uuid.h" UUID_CREATE_IN_LIBC) + if (UUID_CREATE_IN_LIBC) + set(uuid_SRC qpid/sys/FreeBSD/uuid.cpp) + set(uuid_LIB "") + else (UUID_CREATE_IN_LIBC) + CHECK_SYMBOL_EXISTS(UuidToString "rpc.h" WIN_UUID) + if (WIN_UUID) + set(uuid_SRC qpid/sys/windows/uuid.cpp) + set(uuid_LIB rpcrt4) + else (WIN_UUID) + message(FATAL_ERROR "No Uuid API found") + endif (WIN_UUID) + endif (UUID_CREATE_IN_LIBC) + endif (UUID_GENERATE_IN_UUID) +endif (UUID_GENERATE_IN_LIBC) + +# These dependencies aren't found on windows +if (NOT CMAKE_SYSTEM_NAME STREQUAL Windows) + # Ensure we have clock_gettime + 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_SDT) + if (HAVE_SDT) + # Only enable by default on Linux + if (CMAKE_SYSTEM_NAME STREQUAL Linux) + set(probes_default ON) + endif (CMAKE_SYSTEM_NAME STREQUAL Linux) + option(BUILD_PROBES "Build with DTrace/systemtap static probes" "${probes_default}") + endif (HAVE_SDT) + if (BUILD_PROBES) + set (HAVE_SYS_SDT_H 1) + else (HAVE_SDT) + set (HAVE_SYS_SDT_H 0) + endif (BUILD_PROBES) + + # Check for poll/epoll header files + check_include_files(sys/poll.h HAVE_POLL) + check_include_files(sys/epoll.h HAVE_EPOLL) + + # Set default poller implementation (check from general to specific to allow overriding) + if (HAVE_POLL) + set(poller_default poll) + endif (HAVE_POLL) + if (HAVE_EPOLL) + set(poller_default epoll) + endif (HAVE_EPOLL) + set(QPID_POLLER ${poller_default} CACHE STRING "Poller implementation (poll/epoll)") + mark_as_advanced(QPID_POLLER) +endif (NOT CMAKE_SYSTEM_NAME STREQUAL Windows) + +check_size_t_distinct (QPID_SIZE_T_DISTINCT) + +option(BUILD_SASL "Build with Cyrus SASL support" ${SASL_FOUND}) +if (BUILD_SASL) + if (NOT SASL_FOUND) + message(FATAL_ERROR "Cyrus SASL support requested but libsasl2 libraryor headers not found") + endif (NOT SASL_FOUND) + + set(qpidcommon_sasl_source + qpid/sys/cyrus/CyrusSecurityLayer.h + qpid/sys/cyrus/CyrusSecurityLayer.cpp + ) + set(sasl_LIB sasl2) + set(HAVE_SASL 1) +else (BUILD_SASL) + set(HAVE_SASL 0) +endif (BUILD_SASL) +set(QPID_BROKER_SASL_NAME "qpidd" CACHE STRING "SASL app name for the qpid broker") +mark_as_advanced(QPID_BROKER_SASL_NAME) + +# Optional SSL/TLS support. Requires Netscape Portable Runtime on Linux. + +# According to some cmake docs this is not a reliable way to detect +# pkg-configed libraries, but it's no worse than what we did under +# autotools +pkg_check_modules(NSS nss) + +set (ssl_default ${ssl_force}) +if (CMAKE_SYSTEM_NAME STREQUAL Windows) + set (ssl_default ON) +else (CMAKE_SYSTEM_NAME STREQUAL Windows) + if (NSS_FOUND) + set (ssl_default ON) + endif (NSS_FOUND) +endif (CMAKE_SYSTEM_NAME STREQUAL Windows) + +option(BUILD_SSL "Build with support for SSL" ${ssl_default}) + +if (BUILD_SSL) + if (CMAKE_SYSTEM_NAME STREQUAL Windows) + set (sslcommon_SOURCES + qpid/sys/windows/SslAsynchIO.cpp + qpid/sys/windows/SslCredential.cpp + qpid/sys/windows/SslCredential.h + qpid/sys/windows/util.cpp + qpid/sys/windows/util.h + ) + + set (ssl_SOURCES + qpid/broker/windows/SslProtocolFactory.cpp + ) + + set (sslconnector_SOURCES + qpid/client/windows/SslConnector.cpp + ) + set (ssl_INCLUDES "") + set (ssl_LIBDIRS "") + set (ssl_LIBS Crypt32.lib 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) + + set (sslcommon_SOURCES + qpid/sys/ssl/check.h + qpid/sys/ssl/check.cpp + qpid/sys/ssl/util.h + qpid/sys/ssl/util.cpp + qpid/sys/ssl/SslSocket.h + qpid/sys/ssl/SslSocket.cpp + ) + + set (ssl_SOURCES + qpid/sys/SslPlugin.cpp + ) + + set (sslconnector_SOURCES + qpid/client/SslConnector.cpp + qpid/messaging/amqp/SslTransport.cpp + ) + + set (ssl_INCLUDES "${NSS_INCLUDE_DIRS}") + set (ssl_LIBDIRS "${NSS_LIBRARY_DIRS}") + set (ssl_LIBS "${NSS_LIBRARIES}") + set (ssl_server_LIBS "${NSS_LIBRARIES}") + endif (CMAKE_SYSTEM_NAME STREQUAL Windows) + + # Add include directories and link directories for NSS + # unfortunately this doesn't get done automatically for + # libraries detected by FindPkgConfig + include_directories(${ssl_INCLUDES}) + link_directories(${ssl_LIBDIRS}) +endif (BUILD_SSL) + +# See if XML Exchange is desired and prerequisites are available +CHECK_LIBRARY_EXISTS (xerces-c _init "" HAVE_XERCES) +CHECK_INCLUDE_FILE_CXX (xercesc/framework/MemBufInputSource.hpp HAVE_XERCES_H) +CHECK_INCLUDE_FILE_CXX (xqilla/xqilla-simple.hpp HAVE_XQILLA_H) +CHECK_INCLUDE_FILE_CXX (xqilla/ast/XQEffectiveBooleanValue.hpp HAVE_XQ_EBV) + +set (xml_default ${xml_force}) +if (CMAKE_SYSTEM_NAME STREQUAL Windows) +else (CMAKE_SYSTEM_NAME STREQUAL Windows) + if (HAVE_XERCES AND HAVE_XERCES_H) + if (HAVE_XQILLA_H) + set (xml_default ON) + endif (HAVE_XQILLA_H) + endif (HAVE_XERCES AND HAVE_XERCES_H) +endif (CMAKE_SYSTEM_NAME STREQUAL Windows) + +option(BUILD_XML "Build with XML Exchange" ${xml_default}) + +if (BUILD_XML) + if (NOT HAVE_XERCES) + message(FATAL_ERROR "XML Exchange support requested but xerces-c library not found") + endif (NOT HAVE_XERCES) + if (NOT HAVE_XERCES_H) + message(FATAL_ERROR "XML Exchange support requested but Xerces-C headers not found") + endif (NOT HAVE_XERCES_H) + if (NOT HAVE_XQILLA_H) + message(FATAL_ERROR "XML Exchange support requested but XQilla headers not found") + endif (NOT HAVE_XQILLA_H) + + if (HAVE_XQ_EBV) + add_definitions(-DXQ_EFFECTIVE_BOOLEAN_VALUE_HPP) + endif (HAVE_XQ_EBV) + + add_library (xml MODULE + qpid/xml/XmlExchange.cpp + qpid/xml/XmlExchange.h + qpid/xml/XmlExchangePlugin.cpp) + target_link_libraries (xml xerces-c xqilla qpidbroker qpidcommon) + set_target_properties (xml PROPERTIES + PREFIX "" + COMPILE_DEFINITIONS _IN_QPID_BROKER) + install (TARGETS xml + DESTINATION ${QPIDD_MODULE_DIR} + COMPONENT ${QPID_COMPONENT_BROKER}) + + set(xml_tests XmlClientSessionTest) + +endif (BUILD_XML) + +# Build the ACL plugin +set (acl_default ON) + +option(BUILD_ACL "Build ACL enforcement broker plugin" ${acl_default}) + +if (BUILD_ACL) + set (acl_SOURCES + qpid/acl/Acl.cpp + qpid/acl/Acl.h + qpid/acl/AclConnectionCounter.cpp + qpid/acl/AclConnectionCounter.h + qpid/acl/AclData.cpp + qpid/acl/AclData.h + qpid/acl/AclLexer.cpp + qpid/acl/AclLexer.h + qpid/acl/AclPlugin.cpp + qpid/acl/AclReader.cpp + qpid/acl/AclReader.h + qpid/acl/AclResourceCounter.cpp + qpid/acl/AclResourceCounter.h + qpid/acl/AclValidator.cpp + qpid/acl/AclValidator.h + ) +endif (BUILD_ACL) + +set (ha_default ON) + +option(BUILD_HA "Build Active-Passive HA plugin" ${ha_default}) + +if (BUILD_HA) + set (ha_SOURCES + qpid/ha/AlternateExchangeSetter.h + qpid/ha/Backup.cpp + qpid/ha/Backup.h + qpid/ha/BackupConnectionExcluder.h + qpid/ha/BrokerInfo.cpp + qpid/ha/BrokerInfo.h + qpid/ha/BrokerReplicator.cpp + qpid/ha/BrokerReplicator.h + qpid/ha/ConnectionObserver.cpp + qpid/ha/ConnectionObserver.h + qpid/ha/Event.cpp + qpid/ha/Event.h + qpid/ha/FailoverExchange.cpp + qpid/ha/FailoverExchange.h + qpid/ha/HaBroker.cpp + qpid/ha/HaBroker.h + qpid/ha/HaPlugin.cpp + qpid/ha/IdSetter.h + qpid/ha/LogPrefix.cpp + qpid/ha/LogPrefix.h + qpid/ha/Membership.cpp + qpid/ha/Membership.h + qpid/ha/Primary.cpp + qpid/ha/Primary.h + qpid/ha/PrimaryQueueLimits.h + qpid/ha/PrimaryTxObserver.cpp + qpid/ha/PrimaryTxObserver.h + qpid/ha/QueueGuard.cpp + qpid/ha/QueueGuard.h + qpid/ha/QueueReplicator.cpp + qpid/ha/QueueReplicator.h + qpid/ha/QueueSnapshot.h + qpid/ha/QueueSnapshot.h + qpid/ha/RemoteBackup.cpp + qpid/ha/RemoteBackup.h + qpid/ha/ReplicatingSubscription.cpp + qpid/ha/ReplicatingSubscription.h + qpid/ha/ReplicationTest.cpp + qpid/ha/ReplicationTest.h + qpid/ha/Role.h + qpid/ha/Settings.h + qpid/ha/StandAlone.h + qpid/ha/StatusCheck.cpp + qpid/ha/StatusCheck.h + qpid/ha/TxReplicatingSubscription.cpp + qpid/ha/TxReplicatingSubscription.h + qpid/ha/TxReplicator.cpp + qpid/ha/TxReplicator.h + qpid/ha/types.cpp + qpid/ha/types.h + ) + + add_library (ha MODULE ${ha_SOURCES}) + target_link_libraries (ha + qpidtypes qpidcommon qpidbroker qpidmessaging + ${Boost_PROGRAM_OPTIONS_LIBRARY}) + set_target_properties (ha PROPERTIES + PREFIX "" + COMPILE_DEFINITIONS _IN_QPID_BROKER) + install (TARGETS ha + DESTINATION ${QPIDD_MODULE_DIR} + COMPONENT ${QPID_COMPONENT_BROKER}) +endif (BUILD_HA) + +# Check for optional RDMA support requirements +include (rdma.cmake) + +# Check for optional AMQP 1.0 support requirements +include (amqp.cmake) + +# Check for syslog capabilities not present on all systems +check_symbol_exists (LOG_AUTHPRIV "sys/syslog.h" HAVE_LOG_AUTHPRIV) +check_symbol_exists (LOG_FTP "sys/syslog.h" HAVE_LOG_FTP) + +# Set default Memory Status module (Null implementation) +set (qpid_memstat_module + qpid/sys/MemStat.cpp +) + +if (CMAKE_SYSTEM_NAME STREQUAL Windows) + + set (qpidcommon_platform_SOURCES + qpid/log/windows/SinkOptions.cpp + qpid/sys/windows/AsynchIO.cpp + qpid/sys/windows/Path.cpp + qpid/sys/windows/FileSysDir.cpp + qpid/sys/windows/IocpPoller.cpp + qpid/sys/windows/IOHandle.cpp + qpid/sys/windows/LockFile.cpp + qpid/sys/windows/MemoryMappedFile.cpp + qpid/sys/windows/PipeHandle.cpp + qpid/sys/windows/PollableCondition.cpp + qpid/sys/windows/Shlib.cpp + qpid/sys/windows/WinSocket.cpp + qpid/sys/windows/SocketAddress.cpp + qpid/sys/windows/StrError.cpp + qpid/sys/windows/SystemInfo.cpp + qpid/sys/windows/Thread.cpp + qpid/sys/windows/Time.cpp + qpid/client/windows/SaslFactory.cpp + ) + + set (qpidcommon_platform_LIBS + ${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 (qpidclient_platform_SOURCES + qpid/client/windows/ClientDllMain.cpp + ) + + set (qpidd_platform_SOURCES + windows/QpiddBroker.cpp + windows/SCM.cpp + ) + +else (CMAKE_SYSTEM_NAME STREQUAL Windows) + + # POSIX (Non-Windows) platforms have a lot of overlap in sources; the only + # major difference is the poller module. + if (QPID_POLLER STREQUAL poll) + set (qpid_poller_module + qpid/sys/posix/PosixPoller.cpp + ) + elseif (QPID_POLLER STREQUAL epoll) + set (qpid_poller_module + qpid/sys/epoll/EpollPoller.cpp + ) + endif (QPID_POLLER STREQUAL poll) + + # Set default System Info module + set (qpid_system_module + qpid/sys/posix/SystemInfo.cpp + ) + + if (CMAKE_SYSTEM_NAME STREQUAL Linux) + # On Linux override memory status module + set (qpid_memstat_module + qpid/sys/posix/MemStat.cpp + ) + endif (CMAKE_SYSTEM_NAME STREQUAL Linux) + + if (CMAKE_SYSTEM_NAME STREQUAL SunOS) + # On Solaris override the system info module + set (qpid_system_module + qpid/sys/solaris/SystemInfo.cpp + ) + # On Sun we want -lpthread -lthread as the 2nd last and last libs passed to linker + set (qpidtypes_platform_LIBS ${qpidtypes_platform_LIBS} + pthread + thread + ) + endif (CMAKE_SYSTEM_NAME STREQUAL SunOS) + + if (CMAKE_SYSTEM_NAME STREQUAL AIX) + set (qpid_system_module + qpid/sys/aix/SystemInfo.cpp + ) + endif (CMAKE_SYSTEM_NAME STREQUAL AIX) + + if (CMAKE_CXX_COMPILER_ID STREQUAL SunPro) + # -lmalloc needed for mallinfo. + set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lmalloc") + set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -lmalloc") + endif (CMAKE_CXX_COMPILER_ID STREQUAL SunPro) + + set (qpidcommon_platform_SOURCES + qpid/sys/posix/AsynchIO.cpp + qpid/sys/posix/Condition.cpp + qpid/sys/posix/Fork.cpp + qpid/sys/posix/Path.cpp + qpid/sys/posix/FileSysDir.cpp + qpid/sys/posix/IOHandle.cpp + qpid/sys/posix/LockFile.cpp + qpid/sys/posix/MemoryMappedFile.cpp + qpid/sys/posix/Mutex.cpp + qpid/sys/posix/PipeHandle.cpp + qpid/sys/posix/PollableCondition.cpp + qpid/sys/posix/Shlib.cpp + qpid/log/posix/SinkOptions.cpp + qpid/sys/posix/BSDSocket.cpp + qpid/sys/posix/SocketAddress.cpp + qpid/sys/posix/StrError.cpp + qpid/sys/posix/Thread.cpp + qpid/sys/posix/Time.cpp + qpid/SaslFactory.cpp + + ${qpid_system_module} + ${qpid_poller_module} + ) + + set (qpidcommon_platform_LIBS + "${CMAKE_DL_LIBS}" + "${clock_gettime_LIB}" + ) + + set (qpidbroker_platform_SOURCES + qpid/broker/Daemon.cpp + qpid/broker/SaslAuthenticator.cpp + qpid/broker/SignalHandler.h + qpid/broker/SignalHandler.cpp + qpid/broker/posix/BrokerDefaults.cpp + qpid/broker/posix/SocketFDPlugin.cpp + ) + + set (qpidclient_platform_SOURCES + ) + + set (qpidd_platform_SOURCES + posix/QpiddBroker.cpp + ) +endif (CMAKE_SYSTEM_NAME STREQUAL Windows) + +set (qpidcommon_SOURCES + ${rgen_framing_srcs} + ${qpidcommon_platform_SOURCES} + ${qpidcommon_sasl_source} + ${sslcommon_SOURCES} + qpid/assert.cpp + qpid/AclHost.cpp + qpid/Address.cpp + qpid/DataDir.cpp + qpid/Exception.cpp + qpid/Modules.cpp + qpid/Options.cpp + qpid/Plugin.cpp + qpid/RefCountedBuffer.cpp + qpid/SessionState.cpp + qpid/SessionId.cpp + qpid/StringUtils.cpp + qpid/Url.cpp + qpid/UrlArray.cpp + qpid/NullSaslClient.cpp + qpid/NullSaslServer.cpp + qpid/amqp_0_10/SessionHandler.cpp + qpid/framing/AccumulatedAck.cpp + qpid/framing/AMQBody.cpp + qpid/framing/AMQMethodBody.cpp + qpid/framing/AMQContentBody.cpp + qpid/framing/AMQFrame.cpp + qpid/framing/AMQHeaderBody.cpp + qpid/framing/AMQHeartbeatBody.cpp + qpid/framing/Array.cpp + qpid/framing/Buffer.cpp + qpid/framing/FieldTable.cpp + qpid/framing/FieldValue.cpp + qpid/framing/FrameSet.cpp + qpid/framing/FrameDecoder.cpp + qpid/framing/List.cpp + qpid/framing/ProtocolInitiation.cpp + qpid/framing/ProtocolVersion.cpp + qpid/framing/SendContent.cpp + qpid/framing/SequenceNumber.cpp + qpid/framing/SequenceNumberSet.cpp + qpid/framing/SequenceSet.cpp + qpid/framing/Proxy.cpp + qpid/framing/Uuid.cpp + qpid/framing/TransferContent.cpp + qpid/log/Logger.cpp + qpid/log/Options.cpp + qpid/log/OstreamOutput.cpp + qpid/log/Selector.cpp + qpid/log/Statement.cpp + qpid/management/Buffer.cpp + qpid/management/ConnectionSettings.cpp + qpid/management/Mutex.cpp + qpid/management/Manageable.cpp + qpid/management/ManagementObject.cpp + qpid/sys/AggregateOutput.cpp + qpid/sys/AsynchIOHandler.cpp + qpid/sys/Dispatcher.cpp + qpid/sys/DispatchHandle.cpp + qpid/sys/Runnable.cpp + qpid/sys/Shlib.cpp + qpid/sys/Timer.cpp + qpid/sys/TimerWarnings.cpp + qpid/amqp_0_10/Codecs.cpp + qpid/amqp/CharSequence.h + qpid/amqp/CharSequence.cpp + qpid/amqp/DataBuilder.h + qpid/amqp/DataBuilder.cpp + qpid/amqp/Decoder.h + qpid/amqp/Decoder.cpp + qpid/amqp/Descriptor.h + qpid/amqp/Descriptor.cpp + qpid/amqp/Encoder.h + qpid/amqp/Encoder.cpp + qpid/amqp/ListBuilder.h + qpid/amqp/ListBuilder.cpp + qpid/amqp/MapHandler.h + qpid/amqp/MapEncoder.h + qpid/amqp/MapEncoder.cpp + qpid/amqp/MapSizeCalculator.h + qpid/amqp/MapSizeCalculator.cpp + qpid/amqp/MapBuilder.h + qpid/amqp/MapBuilder.cpp + qpid/amqp/MapReader.h + qpid/amqp/MapReader.cpp + qpid/amqp/MessageEncoder.h + qpid/amqp/MessageEncoder.cpp + qpid/amqp/MessageId.h + qpid/amqp/MessageId.cpp + qpid/amqp/MessageReader.h + qpid/amqp/MessageReader.cpp + qpid/amqp/Reader.h + qpid/amqp/Sasl.h + qpid/amqp/Sasl.cpp + qpid/amqp/SaslClient.h + qpid/amqp/SaslClient.cpp + qpid/amqp/SaslServer.h + qpid/amqp/SaslServer.cpp + qpid/messaging/amqp/Transport.h + qpid/messaging/amqp/Transport.cpp + qpid/messaging/amqp/TransportContext.h + ${qpid_memstat_module} +) +add_msvc_version (qpidcommon library dll) + +add_library (qpidcommon SHARED ${qpidcommon_SOURCES}) + +target_link_libraries (qpidcommon qpidtypes + ${qpidcommon_platform_LIBS} + ${Boost_PROGRAM_OPTIONS_LIBRARY} + "${sasl_LIB}" + ${ssl_LIBS}) + +set_target_properties (qpidcommon PROPERTIES + VERSION ${qpidcommon_version} + SOVERSION ${qpidcommon_version_major}) + +install (TARGETS qpidcommon + RUNTIME DESTINATION ${QPID_INSTALL_BINDIR} COMPONENT ${QPID_COMPONENT_COMMON} + LIBRARY DESTINATION ${QPID_INSTALL_LIBDIR} COMPONENT ${QPID_COMPONENT_COMMON} + ARCHIVE DESTINATION ${QPID_INSTALL_LIBDIR} COMPONENT ${QPID_COMPONENT_COMMON}) +install_pdb (qpidcommon ${QPID_COMPONENT_COMMON}) + +set(qpidtypes_SOURCES + qpid/types/Exception.cpp + qpid/types/Uuid.cpp + qpid/types/Variant.cpp + ${uuid_SRC} +) +set_source_files_properties( + ${qpidtypes_SOURCES} + PROPERTIES + COMPILE_FLAGS "${HIDE_SYMBOL_FLAGS}") + +add_msvc_version (qpidtypes library dll) +add_library(qpidtypes SHARED ${qpidtypes_SOURCES}) +target_link_libraries(qpidtypes "${uuid_LIB}") +set_target_properties (qpidtypes PROPERTIES + LINK_FLAGS "${HIDE_SYMBOL_FLAGS} ${LINK_VERSION_SCRIPT_FLAG}" + VERSION ${qpidtypes_version} + SOVERSION ${qpidtypes_version_major}) + +install(TARGETS qpidtypes + RUNTIME DESTINATION ${QPID_INSTALL_BINDIR} COMPONENT ${QPID_COMPONENT_COMMON} + LIBRARY DESTINATION ${QPID_INSTALL_LIBDIR} COMPONENT ${QPID_COMPONENT_COMMON} + ARCHIVE DESTINATION ${QPID_INSTALL_LIBDIR} COMPONENT ${QPID_COMPONENT_COMMON}) +install_pdb (qpidtypes ${QPID_COMPONENT_COMMON}) + +add_api_test(qpidtypes) + +set (qpidclient_SOURCES + ${rgen_client_srcs} + ${qpidclient_platform_SOURCES} + ${sslconnector_SOURCES} + qpid/client/Bounds.cpp + qpid/client/Completion.cpp + qpid/client/CompletionImpl.cpp + qpid/client/Connection.cpp + qpid/client/ConnectionHandler.cpp + qpid/client/ConnectionImpl.cpp + qpid/client/ConnectionSettings.cpp + qpid/client/Connector.cpp + qpid/client/Demux.cpp + qpid/client/Dispatcher.cpp + qpid/client/FailoverManager.cpp + qpid/client/FailoverListener.cpp + qpid/client/Future.cpp + qpid/client/FutureCompletion.cpp + qpid/client/FutureResult.cpp + qpid/client/LoadPlugins.cpp + qpid/client/LocalQueue.cpp + qpid/client/LocalQueueImpl.cpp + qpid/client/Message.cpp + qpid/client/MessageImpl.cpp + qpid/client/MessageListener.cpp + qpid/client/MessageReplayTracker.cpp + qpid/client/QueueOptions.cpp + qpid/client/Results.cpp + qpid/client/SessionBase_0_10.cpp + qpid/client/SessionBase_0_10Access.h + qpid/client/ConnectionAccess.h + qpid/client/SessionImpl.cpp + qpid/client/StateManager.cpp + qpid/client/Subscription.cpp + qpid/client/SubscriptionImpl.cpp + qpid/client/SubscriptionManager.cpp + qpid/client/SubscriptionManagerImpl.cpp + qpid/client/TCPConnector.cpp +) +add_msvc_version (qpidclient library dll) + +add_library (qpidclient SHARED ${qpidclient_SOURCES}) + +target_link_libraries (qpidclient qpidcommon qpidtypes + ${ssl_LIBS}) + +set_target_properties (qpidclient PROPERTIES + VERSION ${qpidclient_version} + SOVERSION ${qpidclient_version_major}) + +install (TARGETS qpidclient + RUNTIME DESTINATION ${QPID_INSTALL_BINDIR} COMPONENT ${QPID_COMPONENT_CLIENT} + LIBRARY DESTINATION ${QPID_INSTALL_LIBDIR} COMPONENT ${QPID_COMPONENT_CLIENT} + ARCHIVE DESTINATION ${QPID_INSTALL_LIBDIR} COMPONENT ${QPID_COMPONENT_CLIENT}) +install (DIRECTORY ../include/qpid + DESTINATION ${QPID_INSTALL_INCLUDEDIR} + COMPONENT ${QPID_COMPONENT_CLIENT_INCLUDE} + PATTERN ".svn" EXCLUDE) +install_pdb (qpidclient ${QPID_COMPONENT_CLIENT}) + +set (qpidmessaging_SOURCES + ${amqpc_SOURCES} + qpid/messaging/AddressImpl.h + qpid/messaging/ConnectionImpl.h + qpid/messaging/ReceiverImpl.h + qpid/messaging/SessionImpl.h + qpid/messaging/SenderImpl.h + qpid/client/amqp0_10/AcceptTracker.h + qpid/client/amqp0_10/AcceptTracker.cpp + qpid/client/amqp0_10/AddressResolution.h + qpid/client/amqp0_10/AddressResolution.cpp + qpid/client/amqp0_10/ConnectionImpl.h + qpid/client/amqp0_10/ConnectionImpl.cpp + qpid/client/amqp0_10/IncomingMessages.h + qpid/client/amqp0_10/IncomingMessages.cpp + qpid/client/amqp0_10/MessageSink.h + qpid/client/amqp0_10/MessageSource.h + qpid/client/amqp0_10/OutgoingMessage.h + qpid/client/amqp0_10/OutgoingMessage.cpp + qpid/client/amqp0_10/ReceiverImpl.h + qpid/client/amqp0_10/ReceiverImpl.cpp + qpid/client/amqp0_10/SessionImpl.h + qpid/client/amqp0_10/SessionImpl.cpp + qpid/client/amqp0_10/SenderImpl.h + qpid/client/amqp0_10/SenderImpl.cpp + qpid/messaging/Address.cpp + qpid/messaging/AddressParser.h + qpid/messaging/AddressParser.cpp # The functions in here are not in the public interface, but qmf uses them + qpid/messaging/Connection.cpp + qpid/messaging/Duration.cpp + qpid/messaging/exceptions.cpp + qpid/messaging/FailoverUpdates.cpp + qpid/messaging/Logger.cpp + qpid/messaging/Message.cpp + qpid/messaging/Receiver.cpp + qpid/messaging/Session.cpp + qpid/messaging/Sender.cpp + #functions from the following are not in the public interface but are used by the AMQP 1.0 client module + qpid/messaging/ConnectionOptions.h + qpid/messaging/ConnectionOptions.cpp + qpid/messaging/MessageImpl.h + qpid/messaging/MessageImpl.cpp + qpid/messaging/Message_io.cpp + qpid/messaging/ProtocolRegistry.cpp + qpid/messaging/amqp/EncodedMessage.h + qpid/messaging/amqp/EncodedMessage.cpp +) + +add_msvc_version (qpidmessaging library dll) + +add_library (qpidmessaging SHARED ${qpidmessaging_SOURCES}) +target_link_libraries (qpidmessaging qpidtypes qpidclient qpidcommon ${Proton_LIBRARIES}) +set_target_properties (qpidmessaging PROPERTIES + LINK_FLAGS "${HIDE_SYMBOL_FLAGS} ${LINK_VERSION_SCRIPT_FLAG}" + COMPILE_FLAGS "${HIDE_SYMBOL_FLAGS}" + VERSION ${qpidmessaging_version} + SOVERSION ${qpidmessaging_version_major}) +install (TARGETS qpidmessaging + RUNTIME DESTINATION ${QPID_INSTALL_BINDIR} COMPONENT ${QPID_COMPONENT_CLIENT} + LIBRARY DESTINATION ${QPID_INSTALL_LIBDIR} COMPONENT ${QPID_COMPONENT_CLIENT} + ARCHIVE DESTINATION ${QPID_INSTALL_LIBDIR} COMPONENT ${QPID_COMPONENT_CLIENT}) +install_pdb (qpidmessaging ${QPID_COMPONENT_CLIENT}) + +add_api_test(qpidmessaging) + +if (MSVC) + # Install the DtcPlugin project and call it qpidxarm. + set(AMQP_WCF_DIR ${qpid-cpp_SOURCE_DIR}/../wcf) + set(qpidxarm_SOURCES ${AMQP_WCF_DIR}/src/Apache/Qpid/DtcPlugin/DtcPlugin.cpp) + if (EXISTS ${qpidxarm_SOURCES}) + add_msvc_version (qpidxarm library dll) + add_library (qpidxarm SHARED ${qpidxarm_SOURCES}) + target_link_libraries (qpidxarm qpidclient qpidcommon) + install (TARGETS qpidxarm + RUNTIME DESTINATION ${QPID_INSTALL_BINDIR} COMPONENT ${QPID_COMPONENT_CLIENT} + LIBRARY DESTINATION ${QPID_INSTALL_LIBDIR} COMPONENT ${QPID_COMPONENT_CLIENT} + ARCHIVE DESTINATION ${QPID_INSTALL_LIBDIR} COMPONENT ${QPID_COMPONENT_CLIENT}) + install_pdb (qpidxarm ${QPID_COMPONENT_CLIENT}) + endif (EXISTS ${qpidxarm_SOURCES}) +endif (MSVC) + +set (qpidbroker_SOURCES + ${mgen_broker_cpp} + ${qpidbroker_platform_SOURCES} + ${acl_SOURCES} + ${ssl_SOURCES} + qpid/amqp_0_10/Connection.h + qpid/amqp_0_10/Connection.cpp + qpid/broker/AsyncCommandCallback.h + qpid/broker/AsyncCommandCallback.cpp + qpid/broker/Broker.cpp + qpid/broker/Credit.cpp + qpid/broker/Exchange.cpp + qpid/broker/Fairshare.cpp + qpid/broker/MessageDeque.cpp + qpid/broker/MessageMap.cpp + qpid/broker/ObjectFactory.h + qpid/broker/ObjectFactory.cpp + qpid/broker/PriorityQueue.cpp + qpid/broker/Protocol.cpp + qpid/broker/Queue.cpp + qpid/broker/QueueCleaner.cpp + qpid/broker/QueueListeners.cpp + qpid/broker/FifoDistributor.cpp + qpid/broker/MessageGroupManager.cpp + qpid/broker/PersistableMessage.cpp + qpid/broker/PersistableObject.cpp + qpid/broker/Bridge.cpp + qpid/broker/amqp_0_10/Connection.cpp + qpid/broker/ConnectionHandler.cpp + qpid/broker/DeliverableMessage.cpp + qpid/broker/DeliveryRecord.cpp + qpid/broker/DirectExchange.cpp + qpid/broker/DtxAck.cpp + qpid/broker/DtxBuffer.cpp + qpid/broker/DtxManager.cpp + qpid/broker/DtxTimeout.cpp + qpid/broker/DtxWorkRecord.cpp + qpid/broker/ExchangeRegistry.cpp + qpid/broker/FanOutExchange.cpp + qpid/broker/HeadersExchange.cpp + qpid/broker/IngressCompletion.cpp + qpid/broker/Link.cpp + qpid/broker/LinkRegistry.cpp + qpid/broker/LossyLvq.cpp + qpid/broker/LossyQueue.cpp + qpid/broker/Lvq.cpp + qpid/broker/Message.cpp + qpid/broker/MessageAdapter.cpp + qpid/broker/MessageBuilder.cpp + qpid/broker/MessageStoreModule.cpp + qpid/broker/NameGenerator.cpp + qpid/broker/NullMessageStore.cpp + qpid/broker/PagedQueue.cpp + qpid/broker/QueueBindings.cpp + qpid/broker/QueuedMessage.cpp + qpid/broker/QueueCursor.cpp + qpid/broker/QueueDepth.cpp + qpid/broker/QueueFactory.cpp + qpid/broker/QueueRegistry.cpp + qpid/broker/QueueSettings.cpp + qpid/broker/QueueFlowLimit.cpp + qpid/broker/RecoveryManagerImpl.cpp + qpid/broker/RecoveredEnqueue.cpp + qpid/broker/RecoveredDequeue.cpp + qpid/broker/RetryList.cpp + qpid/broker/SecureConnection.cpp + qpid/broker/Selector.h + qpid/broker/Selector.cpp + qpid/broker/SelectorExpression.h + qpid/broker/SelectorExpression.cpp + qpid/broker/SelectorToken.h + qpid/broker/SelectorToken.cpp + qpid/broker/SelectorValue.h + qpid/broker/SelectorValue.cpp + qpid/broker/SelfDestructQueue.cpp + qpid/broker/SemanticState.h + qpid/broker/SemanticState.cpp + qpid/broker/SessionAdapter.cpp + qpid/broker/SessionState.h + qpid/broker/SessionState.cpp + qpid/broker/SessionManager.h + qpid/broker/SessionManager.cpp + qpid/broker/SessionContext.h + qpid/broker/SessionHandler.h + qpid/broker/SessionHandler.cpp + qpid/broker/System.cpp + qpid/broker/ThresholdAlerts.cpp + qpid/broker/TopicExchange.cpp + qpid/broker/TxAccept.cpp + qpid/broker/TxBuffer.cpp + qpid/broker/TxDequeue.h + qpid/broker/TxDequeue.cpp + qpid/broker/Vhost.cpp + qpid/broker/amqp_0_10/MessageTransfer.cpp + qpid/management/ManagementAgent.cpp + qpid/management/ManagementDirectExchange.cpp + qpid/management/ManagementTopicExchange.cpp + qpid/sys/SocketTransport.cpp + qpid/sys/TCPIOPlugin.cpp +) +add_msvc_version (qpidbroker library dll) +add_library (qpidbroker SHARED ${qpidbroker_SOURCES}) + +target_link_libraries (qpidbroker qpidcommon qpidtypes + "${sasl_LIB}" + ${ssl_server_LIBS}) + +set_target_properties (qpidbroker PROPERTIES + VERSION ${qpidbroker_version} + SOVERSION ${qpidbroker_version_major} + COMPILE_DEFINITIONS _IN_QPID_BROKER) +if (CMAKE_CXX_COMPILER_ID MATCHES XL) + set_target_properties (qpidbroker PROPERTIES LINK_FLAGS -Wl,-bbigtoc) +endif (CMAKE_CXX_COMPILER_ID MATCHES XL) + +if (MSVC) + set_target_properties (qpidbroker PROPERTIES COMPILE_FLAGS /wd4290) +endif (MSVC) +install (TARGETS qpidbroker + RUNTIME DESTINATION ${QPID_INSTALL_BINDIR} COMPONENT ${QPID_COMPONENT_BROKER} + LIBRARY DESTINATION ${QPID_INSTALL_LIBDIR} COMPONENT ${QPID_COMPONENT_BROKER} + ARCHIVE DESTINATION ${QPID_INSTALL_LIBDIR} COMPONENT ${QPID_COMPONENT_BROKER}) +install_pdb (qpidbroker ${QPID_COMPONENT_BROKER}) + + +set (qpidd_SOURCES + ${qpidd_platform_SOURCES} + qpidd.cpp + qpidd.h +) +add_msvc_version (qpidd application exe) +add_executable (qpidd ${qpidd_SOURCES}) +target_link_libraries (qpidd qpidbroker qpidcommon) +set_target_properties (qpidd PROPERTIES COMPILE_DEFINITIONS _IN_QPID_BROKER) +install (TARGETS qpidd + RUNTIME DESTINATION ${QPID_INSTALL_SBINDIR} COMPONENT ${QPID_COMPONENT_BROKER} + LIBRARY DESTINATION ${QPID_INSTALL_LIBDIR} COMPONENT ${QPID_COMPONENT_BROKER} + ARCHIVE DESTINATION ${QPID_INSTALL_LIBDIR} COMPONENT ${QPID_COMPONENT_BROKER}) +if (CPACK_GENERATOR STREQUAL "NSIS") + set (CPACK_NSIS_MENU_LINKS + "qpidd" "Start Qpid Broker") +endif (CPACK_GENERATOR STREQUAL "NSIS") + +if (NOT WIN32) + set (qmf2_platform_headers + ../include/qmf/posix/EventNotifier.h + ) + set (qmf2_platform_sources + qmf/PosixEventNotifier.cpp + qmf/PosixEventNotifierImpl.cpp + ) +endif (NOT WIN32) + + set (qmf2_HEADERS + ../include/qmf/AgentEvent.h + ../include/qmf/Agent.h + ../include/qmf/AgentSession.h + ../include/qmf/ConsoleEvent.h + ../include/qmf/ConsoleSession.h + ../include/qmf/DataAddr.h + ../include/qmf/Data.h + ../include/qmf/exceptions.h + ../include/qmf/Handle.h + ../include/qmf/ImportExport.h + ../include/qmf/Query.h + ../include/qmf/Schema.h + ../include/qmf/SchemaId.h + ../include/qmf/SchemaMethod.h + ../include/qmf/SchemaProperty.h + ../include/qmf/SchemaTypes.h + ../include/qmf/Subscription.h + ${qmf2_platform_headers} + ) + + set (qmf2_SOURCES + ${qmf2_HEADERS} + qmf/agentCapability.h + qmf/Agent.cpp + qmf/AgentEvent.cpp + qmf/AgentEventImpl.h + qmf/AgentImpl.h + qmf/AgentSession.cpp + qmf/AgentSubscription.cpp + qmf/AgentSubscription.h + qmf/ConsoleEvent.cpp + qmf/ConsoleEventImpl.h + qmf/ConsoleSession.cpp + qmf/ConsoleSessionImpl.h + qmf/constants.cpp + qmf/constants.h + qmf/DataAddr.cpp + qmf/DataAddrImpl.h + qmf/Data.cpp + qmf/DataImpl.h + qmf/EventNotifierImpl.h + qmf/EventNotifierImpl.cpp + qmf/exceptions.cpp + qmf/Expression.cpp + qmf/Expression.h + qmf/Hash.cpp + qmf/Hash.h + qmf/PrivateImplRef.h + qmf/Query.cpp + qmf/QueryImpl.h + qmf/Schema.cpp + qmf/SchemaCache.cpp + qmf/SchemaCache.h + qmf/SchemaId.cpp + qmf/SchemaIdImpl.h + qmf/SchemaImpl.h + qmf/SchemaMethod.cpp + qmf/SchemaMethodImpl.h + qmf/SchemaProperty.cpp + qmf/SchemaPropertyImpl.h + qmf/Subscription.cpp + qmf/SubscriptionImpl.h + ${qmf2_platform_sources} + ) + + add_msvc_version (qmf2 library dll) + add_library (qmf2 SHARED ${qmf2_SOURCES}) + target_link_libraries (qmf2 qpidmessaging qpidtypes qpidclient qpidcommon) + set_target_properties (qmf2 PROPERTIES + VERSION ${qmf2_version} + SOVERSION ${qmf2_version_major}) + install (TARGETS qmf2 OPTIONAL + RUNTIME DESTINATION ${QPID_INSTALL_BINDIR} COMPONENT ${QPID_COMPONENT_QMF} + LIBRARY DESTINATION ${QPID_INSTALL_LIBDIR} COMPONENT ${QPID_COMPONENT_QMF} + ARCHIVE DESTINATION ${QPID_INSTALL_LIBDIR} COMPONENT ${QPID_COMPONENT_QMF}) + install (FILES ${qmf2_HEADERS} + DESTINATION ${QPID_INSTALL_INCLUDEDIR}/qmf + COMPONENT ${QPID_COMPONENT_QMF}) + install_pdb (qmf2 ${QPID_COMPONENT_QMF}) + +# +# Legacy store +# +include (legacystore.cmake) +# +# Linear store +# +include (linearstore.cmake) + +# Now create the config file from all the info learned above. +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake + ${CMAKE_CURRENT_BINARY_DIR}/config.h) +add_subdirectory(qpid/store) +add_subdirectory(tests) +add_subdirectory(tests/legacystore) +add_subdirectory(tests/linearstore) + +# Support for pkg-config + +# Compatible variable names used in the pkg config files also for autoconf +set (prefix ${CMAKE_INSTALL_PREFIX}) +set (exec_prefix ${CMAKE_INSTALL_PREFIX}) +set_absolute_install_path (libdir ${QPID_INSTALL_LIBDIR}) +set_absolute_install_path (includedir ${QPID_INSTALL_INCLUDEDIR}) +set (VERSION ${QPID_VERSION_FULL}) + +#add_custom_target(pkgconfig ALL echo DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/qpid.pc) +#add_dependencies(pkgconfig ${CMAKE_CURRENT_BINARY_DIR}/qmf2.pc) +configure_file(qpid.pc.in ${CMAKE_CURRENT_BINARY_DIR}/qpid.pc @ONLY) +configure_file(qmf2.pc.in ${CMAKE_CURRENT_BINARY_DIR}/qmf2.pc @ONLY) +install (FILES ${CMAKE_CURRENT_BINARY_DIR}/qpid.pc ${CMAKE_CURRENT_BINARY_DIR}/qmf2.pc + DESTINATION ${QPID_INSTALL_LIBDIR}/pkgconfig + COMPONENT ${QPID_COMPONENT_COMMON}) + +if (DEFINED CMAKE_IMPORT_LIBRARY_PREFIX) +set(QPIDMSGLIB ${CMAKE_IMPORT_LIBRARY_PREFIX}qpidmessaging${CMAKE_IMPORT_LIBRARY_SUFFIX}) +set(QPIDMSGLIBDEBUG ${CMAKE_IMPORT_LIBRARY_PREFIX}qpidmessaging${CMAKE_DEBUG_POSTFIX}${CMAKE_IMPORT_LIBRARY_SUFFIX}) +set(QPIDTYPESLIB ${CMAKE_IMPORT_LIBRARY_PREFIX}qpidtypes${CMAKE_IMPORT_LIBRARY_SUFFIX}) +set(QPIDTYPESLIBDEBUG ${CMAKE_IMPORT_LIBRARY_PREFIX}qpidtypes${CMAKE_DEBUG_POSTFIX}${CMAKE_IMPORT_LIBRARY_SUFFIX}) +else () +set(QPIDMSGLIB ${CMAKE_SHARED_LIBRARY_PREFIX}qpidmessaging${CMAKE_SHARED_LIBRARY_SUFFIX}) +set(QPIDMSGLIBDEBUG ${CMAKE_SHARED_LIBRARY_PREFIX}qpidmessaging${CMAKE_DEBUG_POSTFIX}${CMAKE_SHARED_LIBRARY_SUFFIX}) +set(QPIDTYPESLIB ${CMAKE_SHARED_LIBRARY_PREFIX}qpidtypes${CMAKE_SHARED_LIBRARY_SUFFIX}) +set(QPIDTYPESLIBDEBUG ${CMAKE_SHARED_LIBRARY_PREFIX}qpidtypes${CMAKE_DEBUG_POSTFIX}${CMAKE_SHARED_LIBRARY_SUFFIX}) +endif () + +configure_file(QpidConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/QpidConfig.cmake @ONLY) +configure_file(QpidConfigVersion.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/QpidConfigVersion.cmake @ONLY) +install (FILES + ${CMAKE_CURRENT_BINARY_DIR}/QpidConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/QpidConfigVersion.cmake + DESTINATION ${QPID_INSTALL_LIBDIR}/cmake/Qpid + COMPONENT ${QPID_COMPONENT_COMMON}) + |