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}/../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) if (PYTHON_VERSION_MAJOR GREATER 2) set(CONVERT_CODEGEN ${PYTHON_2TO3_EXECUTABLE} -w ${CODEGEN_PY} > codegen_2to3.out) set(CONVERT_AMQP_CODEGEN ${PYTHON_2TO3_EXECUTABLE} -w ${AMQP_CODEGEN_PY} > amqp_codegen_2to3.out) else () set(CONVERT_CODEGEN "") set(CONVERT_AMQP_CODEGEN "") endif () add_custom_command( OUTPUT ${CODEGEN_PY} COMMAND ${CMAKE_COMMAND} ARGS -E copy ${CMAKE_CURRENT_SOURCE_DIR}/codegen.py ${CODEGEN_PY} COMMAND ${CONVERT_CODEGEN} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/codegen.py VERBATIM) add_custom_command( OUTPUT ${AMQP_CODEGEN_PY} COMMAND ${CMAKE_COMMAND} ARGS -E copy ${AMQP_CODEGEN_DIR}/amqp_codegen.py ${AMQP_CODEGEN_PY} COMMAND ${CONVERT_AMQP_CODEGEN} DEPENDS ${AMQP_CODEGEN_DIR}/amqp_codegen.py ${AMQP_CODEGEN_TARGET} VERBATIM) add_custom_command( OUTPUT ${AMQP_FRAMING_H_PATH} COMMAND ${PYTHON_EXECUTABLE} ARGS ${CODEGEN_PY} header ${AMQP_SPEC_JSON_PATH} ${AMQP_FRAMING_H_PATH} DEPENDS ${AMQP_SPEC_JSON_PATH} ${CODEGEN_PY} ${AMQP_CODEGEN_PY} VERBATIM) add_custom_command( OUTPUT ${AMQP_FRAMING_C_PATH} COMMAND ${PYTHON_EXECUTABLE} ARGS ${CODEGEN_PY} body ${AMQP_SPEC_JSON_PATH} ${AMQP_FRAMING_C_PATH} DEPENDS ${AMQP_SPEC_JSON_PATH} ${CODEGEN_PY} ${AMQP_CODEGEN_PY} VERBATIM) else (REGENERATE_AMQP_FRAMING) set(AMQP_FRAMING_H_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../include/rabbitmq-c/framing.h) set(AMQP_FRAMING_C_PATH ${CMAKE_CURRENT_SOURCE_DIR}/amqp_framing.c) endif (REGENERATE_AMQP_FRAMING) 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(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. 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 ${SSL_INCLUDE_DIRS} win32) else() set(AMQP_SSL_SRCS ${AMQP_SSL_SRCS} unix/threads.h) set(SSL_INCLUDE_DIRS ${SSL_INCLUDE_DIRS} unix) endif() endif() set(PUBLIC_INCLUDE_DIRS $ $ $ ) 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) 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 ) add_library(rabbitmq::rabbitmq ALIAS rabbitmq) 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 ) add_library(rabbitmq::rabbitmq-static ALIAS rabbitmq-static) 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}/../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 ) set(RMQ_LIBRARY_TARGET ${RMQ_LIBRARY_TARGET} PARENT_SCOPE)