diff options
Diffstat (limited to 'qpid/cpp/src/cluster.cmake')
-rw-r--r-- | qpid/cpp/src/cluster.cmake | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/qpid/cpp/src/cluster.cmake b/qpid/cpp/src/cluster.cmake new file mode 100644 index 0000000000..a389f8f13f --- /dev/null +++ b/qpid/cpp/src/cluster.cmake @@ -0,0 +1,168 @@ +# +# 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. +# +# +# Cluster library CMake fragment, to be included in CMakeLists.txt +# + +# Optional cluster support. Requires CPG; if building it, can optionally +# include CMAN support as well. + +include(CheckIncludeFiles) +include(CheckLibraryExists) + +set(LIBCPG_PATH /usr/lib/openais /usr/lib64/openais /usr/lib/corosync /usr/lib64/corosync CACHE STRING "Default locations for libcpg (cluster library)" ) +find_library(LIBCPG cpg ${LIBCPG_PATH}) +if (LIBCPG) + CHECK_LIBRARY_EXISTS (${LIBCPG} cpg_local_get "" HAVE_LIBCPG) + CHECK_INCLUDE_FILES (openais/cpg.h HAVE_OPENAIS_CPG_H) + CHECK_INCLUDE_FILES (corosync/cpg.h HAVE_COROSYNC_CPG_H) +endif (LIBCPG) + +set (cluster_default ${cluster_force}) +if (CMAKE_SYSTEM_NAME STREQUAL Windows) +else (CMAKE_SYSTEM_NAME STREQUAL Windows) + if (HAVE_LIBCPG) + if (HAVE_OPENAIS_CPG_H OR HAVE_COROSYNC_CPG_H) + set (cluster_default ON) + endif (HAVE_OPENAIS_CPG_H OR HAVE_COROSYNC_CPG_H) + endif (HAVE_LIBCPG) +endif (CMAKE_SYSTEM_NAME STREQUAL Windows) + +option(BUILD_CLUSTER "Build with CPG support for clustering" ${cluster_default}) +if (BUILD_CLUSTER) + + if (NOT HAVE_LIBCPG) + message(FATAL_ERROR "libcpg not found, install openais-devel or corosync-devel") + endif (NOT HAVE_LIBCPG) + if (NOT HAVE_OPENAIS_CPG_H AND NOT HAVE_COROSYNC_CPG_H) + message(FATAL_ERROR "cpg.h not found, install openais-devel or corosync-devel") + endif (NOT HAVE_OPENAIS_CPG_H AND NOT HAVE_COROSYNC_CPG_H) + + CHECK_LIBRARY_EXISTS (cman cman_is_quorate "" HAVE_LIBCMAN) + CHECK_INCLUDE_FILES (libcman.h HAVE_LIBCMAN_H) + + set(cluster_quorum_default ${cluster_quorum_force}) + if (HAVE_LIBCMAN AND HAVE_LIBCMAN_H) + set(cluster_quorum_default ON) + endif (HAVE_LIBCMAN AND HAVE_LIBCMAN_H) + + option(BUILD_CLUSTER_QUORUM "Include libcman quorum service integration" ${cluster_quorum_default}) + if (BUILD_CLUSTER_QUORUM) + if (NOT HAVE_LIBCMAN) + message(FATAL_ERROR "libcman not found, install cman-devel or cmanlib-devel") + endif (NOT HAVE_LIBCMAN) + if (NOT HAVE_LIBCMAN_H) + message(FATAL_ERROR "libcman.h not found, install cman-devel or cmanlib-devel") + endif (NOT HAVE_LIBCMAN_H) + + set (CMAN_SOURCES qpid/cluster/Quorum_cman.h qpid/cluster/Quorum_cman.cpp) + set (CMAN_LIB cman) + else (BUILD_CLUSTER_QUORUM) + set (CMAN_SOURCES qpid/cluster/Quorum_null.h) + endif (BUILD_CLUSTER_QUORUM) + + set (cluster_SOURCES + ${CMAN_SOURCES} + qpid/cluster/Cluster.cpp + qpid/cluster/Cluster.h + qpid/cluster/ClusterTimer.cpp + qpid/cluster/ClusterTimer.h + qpid/cluster/Decoder.cpp + qpid/cluster/Decoder.h + qpid/cluster/PollableQueue.h + qpid/cluster/ClusterMap.cpp + qpid/cluster/ClusterMap.h + qpid/cluster/ClusterPlugin.cpp + qpid/cluster/ClusterSettings.h + qpid/cluster/Connection.cpp + qpid/cluster/Connection.h + qpid/cluster/ConnectionCodec.cpp + qpid/cluster/ConnectionCodec.h + qpid/cluster/Cpg.cpp + qpid/cluster/Cpg.h + qpid/cluster/Dispatchable.h + qpid/cluster/UpdateClient.cpp + qpid/cluster/UpdateClient.h + qpid/cluster/RetractClient.cpp + qpid/cluster/RetractClient.h + qpid/cluster/ErrorCheck.cpp + qpid/cluster/ErrorCheck.h + qpid/cluster/Event.cpp + qpid/cluster/Event.h + qpid/cluster/EventFrame.h + qpid/cluster/EventFrame.cpp + qpid/cluster/ExpiryPolicy.h + qpid/cluster/ExpiryPolicy.cpp + qpid/cluster/FailoverExchange.cpp + qpid/cluster/FailoverExchange.h + qpid/cluster/UpdateExchange.cpp + qpid/cluster/UpdateExchange.h + qpid/cluster/UpdateReceiver.h + qpid/cluster/LockedConnectionMap.h + qpid/cluster/Multicaster.cpp + qpid/cluster/Multicaster.h + qpid/cluster/McastFrameHandler.h + qpid/cluster/NoOpConnectionOutputHandler.h + qpid/cluster/Numbering.h + qpid/cluster/OutputInterceptor.cpp + qpid/cluster/OutputInterceptor.h + qpid/cluster/PollerDispatch.cpp + qpid/cluster/PollerDispatch.h + qpid/cluster/ProxyInputHandler.h + qpid/cluster/Quorum.h + qpid/cluster/InitialStatusMap.h + qpid/cluster/InitialStatusMap.cpp + qpid/cluster/MemberSet.h + qpid/cluster/MemberSet.cpp + qpid/cluster/types.h + qpid/cluster/SecureConnectionFactory.h + qpid/cluster/SecureConnectionFactory.cpp + qpid/cluster/StoreStatus.h + qpid/cluster/StoreStatus.cpp + qpid/cluster/UpdateDataExchange.h + qpid/cluster/UpdateDataExchange.cpp + ) + + add_library (cluster MODULE ${cluster_SOURCES}) + target_link_libraries (cluster ${LIBCPG} ${CMAN_LIB} qpidbroker qpidclient ${Boost_FILESYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY}) + set_target_properties (cluster PROPERTIES PREFIX "") + + # Create a second shared library for linking with test executables, + # cmake will not allow a module to be linked with an executable. + add_library (cluster_shared SHARED ${cluster_SOURCES}) + target_link_libraries (cluster_shared ${LIBCPG} ${CMAN_LIB} qpidbroker qpidclient ${Boost_FILESYSTEM_LIBRARY}) + + if (CMAKE_COMPILER_IS_GNUCXX) + set_target_properties(cluster PROPERTIES + LINK_FLAGS "-Wl,--no-undefined -pthread") + endif (CMAKE_COMPILER_IS_GNUCXX) + + install (TARGETS cluster + DESTINATION ${QPIDD_MODULE_DIR} + COMPONENT ${QPID_COMPONENT_BROKER}) + + add_library (watchdog MODULE qpid/cluster/WatchDogPlugin.cpp) + set_target_properties (watchdog PROPERTIES PREFIX "") + + add_executable(qpidd_watchdog qpid/cluster/qpidd_watchdog.cpp) + +endif (BUILD_CLUSTER) + +# Distribute all sources. +#EXTRA_DIST += qpid/cluster/Quorum_cman.h qpid/cluster/Quorum_cman.cpp qpid/cluster/Quorum_null.h |