summaryrefslogtreecommitdiff
path: root/librabbitmq
diff options
context:
space:
mode:
authorAlan Antonuk <alan.antonuk@gmail.com>2021-04-14 05:46:54 +0000
committerAlan Antonuk <alan.antonuk@gmail.com>2021-04-13 23:07:37 -0700
commit6d9ac56d5fed4cc021ef854f7d6dd353d9a06dc2 (patch)
treea308010341f9503d83e985b77953833c5190e850 /librabbitmq
parent1db291b28c045b0b5b2efedc324ad0d8d8995dab (diff)
downloadrabbitmq-c-6d9ac56d5fed4cc021ef854f7d6dd353d9a06dc2.tar.gz
cmake: modernize lib target specification
Use modern CMake idioms when defining rabbitmq and rabbitmq-static library targets. Signed-off-by: GitHub <noreply@github.com>
Diffstat (limited to 'librabbitmq')
-rw-r--r--librabbitmq/CMakeLists.txt224
1 files changed, 126 insertions, 98 deletions
diff --git a/librabbitmq/CMakeLists.txt b/librabbitmq/CMakeLists.txt
index 2b8b365..b0290a2 100644
--- a/librabbitmq/CMakeLists.txt
+++ b/librabbitmq/CMakeLists.txt
@@ -2,7 +2,7 @@ if (REGENERATE_AMQP_FRAMING)
set(AMQP_CODEGEN_PY "${CMAKE_CURRENT_BINARY_DIR}/amqp_codegen.py")
set(CODEGEN_PY "${CMAKE_CURRENT_BINARY_DIR}/codegen.py")
set(AMQP_SPEC_JSON_PATH "${AMQP_CODEGEN_DIR}/amqp-rabbitmq-0.9.1.json")
- set(AMQP_FRAMING_H_PATH ${CMAKE_CURRENT_BINARY_DIR}/rabbitmq-c/framing.h)
+ set(AMQP_FRAMING_H_PATH ${CMAKE_CURRENT_BINARY_DIR}/../include/rabbitmq-c/framing.h)
set(AMQP_FRAMING_C_PATH ${CMAKE_CURRENT_BINARY_DIR}/amqp_framing.c)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/rabbitmq-c)
@@ -44,35 +44,16 @@ else (REGENERATE_AMQP_FRAMING)
set(AMQP_FRAMING_C_PATH ${CMAKE_CURRENT_SOURCE_DIR}/amqp_framing.c)
endif (REGENERATE_AMQP_FRAMING)
-# NOTE: order is important here: if we generate amqp_framing.h/.c it'll be in the
-# binary directory, and should shadow whats in the source directory
-set(LIBRABBITMQ_INCLUDE_DIRS
- ${CMAKE_CURRENT_BINARY_DIR}
- ${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_CURRENT_SOURCE_DIR}/../include
- )
-
-include_directories(${LIBRABBITMQ_INCLUDE_DIRS})
-
-set(LIBRABBITMQ_INCLUDE_DIRS
- ${CMAKE_CURRENT_SOURCE_DIR}/../include
- ${CMAKE_CURRENT_BINARY_DIR}
- PARENT_SCOPE)
-
-add_definitions(-DHAVE_CONFIG_H)
-
if (ENABLE_SSL_SUPPORT)
- SET(AMQP_SSL_SOCKET_SHIM_PATH ../include/amqp_ssl_socket.h)
- set(AMQP_SSL_SOCKET_H_PATH ../include/rabbitmq-c/ssl_socket.h)
+ SET(AMQP_SSL_SOCKET_SHIM_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../include/amqp_ssl_socket.h)
+ set(AMQP_SSL_SOCKET_H_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../include/rabbitmq-c/ssl_socket.h)
set(AMQP_SSL_SRCS
- ${AMQP_SSL_SOCKET_SHIM_PATH}
- ${AMQP_SSL_SOCKET_H_PATH}
amqp_openssl.c
amqp_openssl_bio.c
amqp_openssl_bio.h
)
- include_directories(${OPENSSL_INCLUDE_DIR})
+ set(SSL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR})
set(AMQP_SSL_LIBS ${OPENSSL_LIBRARIES})
if (APPLE)
# Apple has deprecated OpenSSL in 10.7+. This disables that warning.
@@ -82,93 +63,140 @@ if (ENABLE_SSL_SUPPORT)
if (WIN32 AND NOT CMAKE_USE_PTHREADS_INIT)
set(AMQP_SSL_SRCS ${AMQP_SSL_SRCS} win32/threads.h win32/threads.c)
- include_directories(win32)
+ set(SSL_INCLUDE_DIRS ${SSL_INCLUDE_DIRS} win32)
else()
set(AMQP_SSL_SRCS ${AMQP_SSL_SRCS} unix/threads.h)
- include_directories(unix)
+ set(SSL_INCLUDE_DIRS ${SSL_INCLUDE_DIRS} unix)
endif()
endif()
-set(RABBITMQ_SOURCES
- ${AMQP_FRAMING_H_PATH}
- ${AMQP_FRAMING_C_PATH}
- ../include/amqp.h
- ../include/rabbitmq-c/amqp.h
- ../include/amqp_tcp_socket.h
- ../include/rabbitmq-c/tcp_socket.h
- amqp_api.c amqp_connection.c amqp_mem.c amqp_private.h amqp_socket.c
- amqp_table.c amqp_url.c amqp_socket.h amqp_tcp_socket.c
- amqp_time.c amqp_time.h
- amqp_consumer.c
- ${AMQP_SSL_SRCS}
+set(PUBLIC_INCLUDE_DIRS
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../include>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
+ $<INSTALL_INTERFACE:include>
+)
+
+set(PRIVATE_INCLUDE_DIRS
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${SSL_INCLUDE_DIRS}
+)
+
+set(LIBRABBITMQ_INCLUDE_DIRS ${PUBLIC_INCLUDE_DIRS} PARENT_SCOPE)
+
+set(RMQ_SOURCES
+ ../include/amqp.h
+ ../include/amqp_framing.h
+ ${AMQP_SSL_SOCKET_SHIM_PATH}
+ ../include/amqp_tcp_socket.h
+ ../include/rabbitmq-c/amqp.h
+ ${AMQP_FRAMING_H_PATH}
+ ${AMQP_SSL_SOCKET_H_PATH}
+ ../include/rabbitmq-c/tcp_socket.h
+ amqp_api.c
+ amqp_connection.c
+ amqp_consumer.c
+ ${AMQP_FRAMING_C_PATH}
+ amqp_mem.c
+ ${AMQP_SSL_SRCS}
+ amqp_private.h
+ amqp_socket.c
+ amqp_socket.h
+ amqp_table.c
+ amqp_table.h
+ amqp_tcp_socket.c
+ amqp_time.c
+ amqp_time.h
+ amqp_url.c
)
set(RMQ_LIBRARIES ${AMQP_SSL_LIBS} ${SOCKET_LIBRARIES} ${LIBRT} ${CMAKE_THREAD_LIBS_INIT})
-if (BUILD_SHARED_LIBS)
- if (NOT APPLE)
- set(CMAKE_INSTALL_RPATH $ORIGIN)
- endif()
-
- add_library(rabbitmq SHARED ${RABBITMQ_SOURCES})
-
- target_link_libraries(rabbitmq ${RMQ_LIBRARIES})
-
- 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)
-
- install(TARGETS rabbitmq EXPORT "${targets_export_name}"
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
- COMPONENT rabbitmq-c-runtime
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
- COMPONENT rabbitmq-c-runtime
- NAMELINK_COMPONENT runtime-c-development
- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
- COMPONENT rabbitmq-c-development
- )
-
- set(RMQ_LIBRARY_TARGET rabbitmq)
-endif (BUILD_SHARED_LIBS)
-
-if (BUILD_STATIC_LIBS)
- add_library(rabbitmq-static STATIC ${RABBITMQ_SOURCES})
-
- target_link_libraries(rabbitmq-static ${RMQ_LIBRARIES})
-
- 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})
-
- if(MSVC)
- set_target_properties(rabbitmq-static PROPERTIES
- # Embed debugging info in the library itself instead of generating
- # a .pdb file.
- COMPILE_OPTIONS "/Z7")
- endif(MSVC)
-
- else (WIN32)
- set_target_properties(rabbitmq-static PROPERTIES VERSION ${RMQ_VERSION} SOVERSION ${RMQ_SOVERSION} OUTPUT_NAME rabbitmq)
- endif (WIN32)
-
- install(TARGETS rabbitmq-static EXPORT "${targets_export_name}"
- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
- COMPONENT rabbitmq-c-development
- )
-
- if (NOT DEFINED RMQ_LIBRARY_TARGET)
- set(RMQ_LIBRARY_TARGET rabbitmq-static)
- endif ()
-endif (BUILD_STATIC_LIBS)
+if(BUILD_SHARED_LIBS)
+ if (NOT APPLE)
+ set(CMAKE_INSTALL_RPATH $ORIGIN)
+ endif()
+
+ add_library(rabbitmq SHARED)
+
+ target_sources(rabbitmq PRIVATE ${RMQ_SOURCES})
+
+ target_include_directories(rabbitmq
+ PUBLIC ${PUBLIC_INCLUDE_DIRS}
+ PRIVATE ${PRIVATE_INCLUDE_DIRS}
+ )
+
+ target_compile_definitions(rabbitmq PRIVATE -DHAVE_CONFIG_H)
+
+ target_link_libraries(rabbitmq PRIVATE ${RMQ_LIBRARIES})
+
+ set_target_properties(rabbitmq PROPERTIES
+ VERSION ${RMQ_VERSION}
+ SOVERSION ${RMQ_SOVERSION}
+ )
+
+ if (WIN32)
+ set_target_properties(rabbitmq PROPERTIES OUTPUT_NAME rabbitmq.${RMQ_SOVERSION})
+ endif()
+
+ install(TARGETS rabbitmq EXPORT "${targets_export_name}"
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ COMPONENT rabbitmq-c-runtime
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ COMPONENT rabbitmq-c-runtime
+ NAMELINK_COMPONENT runtime-c-development
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ COMPONENT rabbitmq-c-development
+ )
+
+ set(RMQ_LIBRARY_TARGET rabbitmq)
+endif()
+
+if(BUILD_STATIC_LIBS)
+ add_library(rabbitmq-static STATIC)
+
+ target_sources(rabbitmq-static PRIVATE ${RMQ_SOURCES})
+
+ target_include_directories(rabbitmq-static
+ PUBLIC ${PUBLIC_INCLUDE_DIRS}
+ PRIVATE ${PRIVATE_INCLUDE_DIRS}
+ )
+
+ target_compile_definitions(rabbitmq-static
+ PUBLIC -DAMQP_STATIC
+ PRIVATE -DHAVE_CONFIG_H
+ )
+
+ target_link_libraries(rabbitmq-static PRIVATE ${RMQ_LIBRARIES})
+
+ set_target_properties(rabbitmq-static PROPERTIES
+ VERSION ${RMQ_VERSION}
+ SOVERSION ${RMQ_SOVERSION})
+
+ if (WIN32)
+ set_target_properties(rabbitmq-static PROPERTIES OUTPUT_NAME librabbitmq.${RMQ_SOVERSION})
+ else()
+ set_target_properties(rabbitmq-static PROPERTIES OUTPUT_NAME rabbitmq)
+ endif()
+
+ if(MSVC)
+ # Embed debugging info in the library itself instead of generating a .pdb file.
+ set_target_properties(rabbitmq-static PROPERTIES COMPILE_OPTIONS "/Z7")
+ endif()
+
+ install(TARGETS rabbitmq-static EXPORT "${targets_export_name}"
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ COMPONENT rabbitmq-c-development
+ )
+
+ if (NOT DEFINED RMQ_LIBRARY_TARGET)
+ set(RMQ_LIBRARY_TARGET rabbitmq-static)
+ endif ()
+endif()
include(GenerateExportHeader)
generate_export_header(${RMQ_LIBRARY_TARGET}
BASE_NAME AMQP
- EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/rabbitmq-c/export.h
+ EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/../include/rabbitmq-c/export.h
STATIC_DEFINE AMQP_STATIC
INCLUDE_GUARD_NAME RABBITMQ_C_EXPORT_H
)
@@ -187,7 +215,7 @@ install(FILES
../include/rabbitmq-c/framing.h
../include/rabbitmq-c/tcp_socket.h
${AMQP_SSL_SOCKET_H_PATH}
- ${CMAKE_CURRENT_BINARY_DIR}/rabbitmq-c/export.h
+ ${CMAKE_CURRENT_BINARY_DIR}/../include/rabbitmq-c/export.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rabbitmq-c
COMPONENT rabbitmq-c-development
)