diff options
-rw-r--r-- | CMakeLists.txt | 22 | ||||
-rw-r--r-- | examples/CMakeLists.txt | 16 | ||||
-rw-r--r-- | librabbitmq/CMakeLists.txt | 67 | ||||
-rw-r--r-- | tests/CMakeLists.txt | 4 | ||||
-rw-r--r-- | tools/CMakeLists.txt | 10 |
5 files changed, 80 insertions, 39 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 00efc0c..802cbe4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -194,13 +194,19 @@ if (POPT_FOUND AND XmlTo_FOUND) endif() option(BUILD_SHARED_LIBS "Build rabbitmq-c as a shared library" ON) +option(BUILD_STATIC_LIBS "Build rabbitmq-c as a static library" OFF) + option(BUILD_EXAMPLES "Build Examples" ON) option(BUILD_TOOLS "Build Tools (requires POPT Library)" ${POPT_FOUND}) option(BUILD_TOOLS_DOCS "Build man pages for Tools (requires xmlto)" ${DO_DOCS}) option(BUILD_TESTS "Build tests (run tests with make test)" ON) -if (WIN32 AND NOT BUILD_SHARED_LIBS) - message(FATAL_ERROR "The rabbitmq-c library cannot be built as a static library on Win32. Set BUILD_SHARED_LIBS=ON to get around this.") +if (NOT BUILD_SHARED_LIBS AND NOT BUILD_STATIC_LIBS) + message(FATAL_ERROR "One or both of BUILD_SHARED_LIBS or BUILD_STATIC_LIBS must be set to ON to build") +endif() + +if (WIN32 AND BUILD_STATIC_LIBS) + message(FATAL_ERROR "The rabbitmq-c library cannot be built as a static library on Win32. Set BUILD_STATIC_LIBS=OFF to get around this.") endif() add_subdirectory(librabbitmq) @@ -234,3 +240,15 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/librabbitmq.pc DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/pkgconfig ) + +if (BUILD_SHARED_LIBS) + message(STATUS "Building rabbitmq as a shared library - yes") +else () + message(STATUS "Building rabbitmq as a shared library - no") +endif () + +if (BUILD_STATIC_LIBS) + message(STATUS "Building rabbitmq as a static library - yes") +else () + message(STATUS "Building rabbitmq as a static library - no") +endif () diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 9aae0ae..b0b453d 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -13,28 +13,28 @@ set(COMMON_SRCS ) add_executable(amqp_sendstring amqp_sendstring.c ${COMMON_SRCS}) -target_link_libraries(amqp_sendstring rabbitmq) +target_link_libraries(amqp_sendstring ${RMQ_LIBRARY_TARGET}) add_executable(amqp_rpc_sendstring_client amqp_rpc_sendstring_client.c ${COMMON_SRCS}) target_link_libraries(amqp_rpc_sendstring_client rabbitmq) add_executable(amqp_exchange_declare amqp_exchange_declare.c ${COMMON_SRCS}) -target_link_libraries(amqp_exchange_declare rabbitmq) +target_link_libraries(amqp_exchange_declare ${RMQ_LIBRARY_TARGET}) add_executable(amqp_listen amqp_listen.c ${COMMON_SRCS}) -target_link_libraries(amqp_listen rabbitmq) +target_link_libraries(amqp_listen ${RMQ_LIBRARY_TARGET}) add_executable(amqp_producer amqp_producer.c ${COMMON_SRCS}) -target_link_libraries(amqp_producer rabbitmq) +target_link_libraries(amqp_producer ${RMQ_LIBRARY_TARGET}) add_executable(amqp_consumer amqp_consumer.c ${COMMON_SRCS}) -target_link_libraries(amqp_consumer rabbitmq) +target_link_libraries(amqp_consumer ${RMQ_LIBRARY_TARGET}) add_executable(amqp_unbind amqp_unbind.c ${COMMON_SRCS}) -target_link_libraries(amqp_unbind rabbitmq) +target_link_libraries(amqp_unbind ${RMQ_LIBRARY_TARGET}) add_executable(amqp_bind amqp_bind.c ${COMMON_SRCS}) -target_link_libraries(amqp_bind rabbitmq) +target_link_libraries(amqp_bind ${RMQ_LIBRARY_TARGET}) add_executable(amqp_listenq amqp_listenq.c ${COMMON_SRCS}) -target_link_libraries(amqp_listenq rabbitmq) +target_link_libraries(amqp_listenq ${RMQ_LIBRARY_TARGET}) diff --git a/librabbitmq/CMakeLists.txt b/librabbitmq/CMakeLists.txt index c0b2c79..07cea7a 100644 --- a/librabbitmq/CMakeLists.txt +++ b/librabbitmq/CMakeLists.txt @@ -82,29 +82,52 @@ set(RABBITMQ_SOURCES add_definitions(-DAMQP_BUILD) -if (NOT BUILD_SHARED_LIBS) - add_definitions(-DAMQP_STATIC) -endif() - -add_library(rabbitmq ${RABBITMQ_SOURCES}) - -if (WIN32) - set_target_properties(rabbitmq PROPERTIES VERSION ${RMQ_VERSION} OUTPUT_NAME rabbitmq.${RMQ_SOVERSION}) -else () - set_target_properties(rabbitmq PROPERTIES VERSION ${RMQ_VERSION} SOVERSION ${RMQ_SOVERSION}) -endif () - -if (DEFINED SOCKET_LIBRARIES) - target_link_libraries(rabbitmq ${SOCKET_LIBRARIES}) -endif () - -install(TARGETS rabbitmq - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - PUBLIC_HEADER DESTINATION include) +if (BUILD_SHARED_LIBS) + add_library(rabbitmq SHARED ${RABBITMQ_SOURCES}) + + if (WIN32) + set_target_properties(rabbitmq PROPERTIES VERSION ${RMQ_VERSION} OUTPUT_NAME rabbitmq.${RMQ_SOVERSION}) + else (WIN32) + set_target_properties(rabbitmq PROPERTIES VERSION ${RMQ_VERSION} SOVERSION ${RMQ_SOVERSION}) + endif (WIN32) + + if (DEFINED SOCKET_LIBRARIES) + target_link_libraries(rabbitmq ${SOCKET_LIBRARIES}) + endif () + + install(TARGETS rabbitmq + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ) + set(RMQ_LIBRARY_TARGET rabbitmq) +endif (BUILD_SHARED_LIBS) + +if (BUILD_STATIC_LIBS) + add_library(rabbitmq-static STATIC ${RABBITMQ_SOURCES}) + + set_target_properties(rabbitmq-static PROPERTIES COMPILE_DEFINITIONS AMQP_STATIC) + if (WIN32) + set_target_properties(rabbitmq-static PROPERTIES VERSION ${RMQ_VERSION} OUTPUT_NAME librabbitmq.${RMQ_SOVERSION}) + else (WIN32) + set_target_properties(rabbitmq-static PROPERTIES VERSION ${RMQ_VERSION} SOVERSION ${RMQ_SOVERSION} OUTPUT_NAME rabbitmq) + endif (WIN32) + + if (DEFINED SOCKET_LIBRARIES) + target_link_libraries(rabbitmq-static ${SOCKET_LIBRARIES}) + endif () + + install(TARGETS rabbitmq-static + ARCHIVE DESTINATION lib + ) + + if (NOT DEFINED RMQ_LIBRARY_TARGET) + set(RMQ_LIBRARY_TARGET rabbitmq-static) + endif () +endif (BUILD_STATIC_LIBS) install(FILES amqp.h ${CMAKE_CURRENT_BINARY_DIR}/amqp_framing.h ${STDINT_H_INSTALL_FILE} - DESTINATION include) + DESTINATION include + ) +set(RMQ_LIBRARY_TARGET ${RMQ_LIBRARY_TARGET} PARENT_SCOPE) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 69ff32d..4b54003 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -8,10 +8,10 @@ if (MSVC) endif (MSVC) add_executable(test_parse_url test_parse_url.c) -target_link_libraries(test_parse_url rabbitmq) +target_link_libraries(test_parse_url ${RMQ_LIBRARY_TARGET}) add_test(parse_url test_parse_url) add_executable(test_tables test_tables.c) -target_link_libraries(test_tables rabbitmq) +target_link_libraries(test_tables ${RMQ_LIBRARY_TARGET}) add_test(tables test_tables) configure_file(test_tables.expected ${CMAKE_CURRENT_BINARY_DIR}/tests/test_tables.expected COPY_ONLY) diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index cf7f4e2..c458e03 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -18,19 +18,19 @@ set(COMMON_SRCS ) add_executable(amqp-publish publish.c ${COMMON_SRCS}) -target_link_libraries(amqp-publish rabbitmq ${POPT_LIBRARY}) +target_link_libraries(amqp-publish ${RMQ_LIBRARY_TARGET} ${POPT_LIBRARY}) add_executable(amqp-get get.c ${COMMON_SRCS}) -target_link_libraries(amqp-get rabbitmq ${POPT_LIBRARY}) +target_link_libraries(amqp-get ${RMQ_LIBRARY_TARGET} ${POPT_LIBRARY}) add_executable(amqp-consume consume.c ${PLATFORM_DIR}/process.c ${COMMON_SRCS}) -target_link_libraries(amqp-consume rabbitmq ${POPT_LIBRARY}) +target_link_libraries(amqp-consume ${RMQ_LIBRARY_TARGET} ${POPT_LIBRARY}) add_executable(amqp-declare-queue declare_queue.c ${COMMON_SRCS}) -target_link_libraries(amqp-declare-queue rabbitmq ${POPT_LIBRARY}) +target_link_libraries(amqp-declare-queue ${RMQ_LIBRARY_TARGET} ${POPT_LIBRARY}) add_executable(amqp-delete-queue delete_queue.c ${COMMON_SRCS}) -target_link_libraries(amqp-delete-queue rabbitmq ${POPT_LIBRARY}) +target_link_libraries(amqp-delete-queue ${RMQ_LIBRARY_TARGET} ${POPT_LIBRARY}) if (BUILD_TOOLS_DOCS) if (XmlTo_FOUND) |