summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt22
-rw-r--r--examples/CMakeLists.txt16
-rw-r--r--librabbitmq/CMakeLists.txt67
-rw-r--r--tests/CMakeLists.txt4
-rw-r--r--tools/CMakeLists.txt10
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)