# Copyright 2007 - 2021, Alan Antonuk and the rabbitmq-c contributors. # SPDX-License-Identifier: mit if (ENABLE_SSL_SUPPORT) 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_openssl.c amqp_openssl_bio.c amqp_openssl_bio.h ) set(AMQP_SSL_LIBS OpenSSL::SSL) if (APPLE) # Apple has deprecated OpenSSL in 10.7+. This disables that warning. set_source_files_properties(${AMQP_SSL_SRCS} PROPERTIES COMPILE_FLAGS -Wno-deprecated-declarations) endif() if (WIN32 AND NOT CMAKE_USE_PTHREADS_INIT) set(AMQP_SSL_SRCS ${AMQP_SSL_SRCS} win32/threads.h win32/threads.c) set(SSL_INCLUDE_DIRS win32) else() set(AMQP_SSL_SRCS ${AMQP_SSL_SRCS} unix/threads.h) set(SSL_INCLUDE_DIRS unix) endif() endif() set(PUBLIC_INCLUDE_DIRS $ $ $ ) set(PRIVATE_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${SSL_INCLUDE_DIRS} ) 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 ../include/rabbitmq-c/framing.h ${AMQP_SSL_SOCKET_H_PATH} ../include/rabbitmq-c/tcp_socket.h amqp_api.c amqp_connection.c amqp_consumer.c amqp_framing.c 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) set(RMQ_GEN_EXPORT_TARGET rabbitmq) 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 (APPLE) set_target_properties(rabbitmq PROPERTIES MACHO_CURRENT_VERSION ${RMQ_SOVERSION}.${RMQ_SOVERSION_AGE}.${RMQ_SOVERSION_REVISION} MACHO_COMPATIBILITY_VERSION ${RMQ_SOVERSION} ) endif() 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 ) add_library(rabbitmq::rabbitmq ALIAS rabbitmq) endif() if(BUILD_STATIC_LIBS) add_library(rabbitmq-static STATIC) target_sources(rabbitmq-static PRIVATE ${RMQ_SOURCES}) if (NOT BUILD_SHARED_LIBS) set(RMQ_GEN_EXPORT_TARGET rabbitmq-static) endif() 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 (APPLE) set_target_properties(rabbitmq PROPERTIES MACHO_CURRENT_VERSION ${RMQ_SOVERSION}.${RMQ_SOVERSION_AGE}.${RMQ_SOVERSION_REVISION} MACHO_COMPATIBILITY_VERSION ${RMQ_SOVERSION} ) endif() 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() if(INSTALL_STATIC_LIBS) install(TARGETS rabbitmq-static EXPORT "${targets_export_name}" ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT rabbitmq-c-development ) endif() add_library(rabbitmq::rabbitmq-static ALIAS rabbitmq-static) endif() include(GenerateExportHeader) generate_export_header(${RMQ_GEN_EXPORT_TARGET} BASE_NAME AMQP EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/../include/rabbitmq-c/export.h STATIC_DEFINE AMQP_STATIC INCLUDE_GUARD_NAME RABBITMQ_C_EXPORT_H ) install(FILES ../include/amqp.h ../include/amqp_framing.h ../include/amqp_tcp_socket.h ${AMQP_SSL_SOCKET_SHIM_PATH} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT rabbitmq-c-development ) install(FILES ../include/rabbitmq-c/amqp.h ../include/rabbitmq-c/framing.h ../include/rabbitmq-c/tcp_socket.h ${AMQP_SSL_SOCKET_H_PATH} ${CMAKE_CURRENT_BINARY_DIR}/../include/rabbitmq-c/export.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rabbitmq-c COMPONENT rabbitmq-c-development )