Skip to content

Commit 6d9ac56

Browse files
committed
cmake: modernize lib target specification
Use modern CMake idioms when defining rabbitmq and rabbitmq-static library targets. Signed-off-by: GitHub <noreply@github.com>
1 parent 1db291b commit 6d9ac56

File tree

1 file changed

+126
-98
lines changed

1 file changed

+126
-98
lines changed

librabbitmq/CMakeLists.txt

Lines changed: 126 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ if (REGENERATE_AMQP_FRAMING)
22
set(AMQP_CODEGEN_PY "${CMAKE_CURRENT_BINARY_DIR}/amqp_codegen.py")
33
set(CODEGEN_PY "${CMAKE_CURRENT_BINARY_DIR}/codegen.py")
44
set(AMQP_SPEC_JSON_PATH "${AMQP_CODEGEN_DIR}/amqp-rabbitmq-0.9.1.json")
5-
set(AMQP_FRAMING_H_PATH ${CMAKE_CURRENT_BINARY_DIR}/rabbitmq-c/framing.h)
5+
set(AMQP_FRAMING_H_PATH ${CMAKE_CURRENT_BINARY_DIR}/../include/rabbitmq-c/framing.h)
66
set(AMQP_FRAMING_C_PATH ${CMAKE_CURRENT_BINARY_DIR}/amqp_framing.c)
77
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/rabbitmq-c)
88

@@ -44,35 +44,16 @@ else (REGENERATE_AMQP_FRAMING)
4444
set(AMQP_FRAMING_C_PATH ${CMAKE_CURRENT_SOURCE_DIR}/amqp_framing.c)
4545
endif (REGENERATE_AMQP_FRAMING)
4646

47-
# NOTE: order is important here: if we generate amqp_framing.h/.c it'll be in the
48-
# binary directory, and should shadow whats in the source directory
49-
set(LIBRABBITMQ_INCLUDE_DIRS
50-
${CMAKE_CURRENT_BINARY_DIR}
51-
${CMAKE_CURRENT_SOURCE_DIR}
52-
${CMAKE_CURRENT_SOURCE_DIR}/../include
53-
)
54-
55-
include_directories(${LIBRABBITMQ_INCLUDE_DIRS})
56-
57-
set(LIBRABBITMQ_INCLUDE_DIRS
58-
${CMAKE_CURRENT_SOURCE_DIR}/../include
59-
${CMAKE_CURRENT_BINARY_DIR}
60-
PARENT_SCOPE)
61-
62-
add_definitions(-DHAVE_CONFIG_H)
63-
6447
if (ENABLE_SSL_SUPPORT)
65-
SET(AMQP_SSL_SOCKET_SHIM_PATH ../include/amqp_ssl_socket.h)
66-
set(AMQP_SSL_SOCKET_H_PATH ../include/rabbitmq-c/ssl_socket.h)
48+
SET(AMQP_SSL_SOCKET_SHIM_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../include/amqp_ssl_socket.h)
49+
set(AMQP_SSL_SOCKET_H_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../include/rabbitmq-c/ssl_socket.h)
6750

6851
set(AMQP_SSL_SRCS
69-
${AMQP_SSL_SOCKET_SHIM_PATH}
70-
${AMQP_SSL_SOCKET_H_PATH}
7152
amqp_openssl.c
7253
amqp_openssl_bio.c
7354
amqp_openssl_bio.h
7455
)
75-
include_directories(${OPENSSL_INCLUDE_DIR})
56+
set(SSL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR})
7657
set(AMQP_SSL_LIBS ${OPENSSL_LIBRARIES})
7758
if (APPLE)
7859
# Apple has deprecated OpenSSL in 10.7+. This disables that warning.
@@ -82,93 +63,140 @@ if (ENABLE_SSL_SUPPORT)
8263

8364
if (WIN32 AND NOT CMAKE_USE_PTHREADS_INIT)
8465
set(AMQP_SSL_SRCS ${AMQP_SSL_SRCS} win32/threads.h win32/threads.c)
85-
include_directories(win32)
66+
set(SSL_INCLUDE_DIRS ${SSL_INCLUDE_DIRS} win32)
8667
else()
8768
set(AMQP_SSL_SRCS ${AMQP_SSL_SRCS} unix/threads.h)
88-
include_directories(unix)
69+
set(SSL_INCLUDE_DIRS ${SSL_INCLUDE_DIRS} unix)
8970
endif()
9071
endif()
9172

92-
set(RABBITMQ_SOURCES
93-
${AMQP_FRAMING_H_PATH}
94-
${AMQP_FRAMING_C_PATH}
95-
../include/amqp.h
96-
../include/rabbitmq-c/amqp.h
97-
../include/amqp_tcp_socket.h
98-
../include/rabbitmq-c/tcp_socket.h
99-
amqp_api.c amqp_connection.c amqp_mem.c amqp_private.h amqp_socket.c
100-
amqp_table.c amqp_url.c amqp_socket.h amqp_tcp_socket.c
101-
amqp_time.c amqp_time.h
102-
amqp_consumer.c
103-
${AMQP_SSL_SRCS}
73+
set(PUBLIC_INCLUDE_DIRS
74+
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../include>
75+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
76+
$<INSTALL_INTERFACE:include>
77+
)
78+
79+
set(PRIVATE_INCLUDE_DIRS
80+
${CMAKE_CURRENT_BINARY_DIR}
81+
${SSL_INCLUDE_DIRS}
82+
)
83+
84+
set(LIBRABBITMQ_INCLUDE_DIRS ${PUBLIC_INCLUDE_DIRS} PARENT_SCOPE)
85+
86+
set(RMQ_SOURCES
87+
../include/amqp.h
88+
../include/amqp_framing.h
89+
${AMQP_SSL_SOCKET_SHIM_PATH}
90+
../include/amqp_tcp_socket.h
91+
../include/rabbitmq-c/amqp.h
92+
${AMQP_FRAMING_H_PATH}
93+
${AMQP_SSL_SOCKET_H_PATH}
94+
../include/rabbitmq-c/tcp_socket.h
95+
amqp_api.c
96+
amqp_connection.c
97+
amqp_consumer.c
98+
${AMQP_FRAMING_C_PATH}
99+
amqp_mem.c
100+
${AMQP_SSL_SRCS}
101+
amqp_private.h
102+
amqp_socket.c
103+
amqp_socket.h
104+
amqp_table.c
105+
amqp_table.h
106+
amqp_tcp_socket.c
107+
amqp_time.c
108+
amqp_time.h
109+
amqp_url.c
104110
)
105111

106112
set(RMQ_LIBRARIES ${AMQP_SSL_LIBS} ${SOCKET_LIBRARIES} ${LIBRT} ${CMAKE_THREAD_LIBS_INIT})
107113

108-
if (BUILD_SHARED_LIBS)
109-
if (NOT APPLE)
110-
set(CMAKE_INSTALL_RPATH $ORIGIN)
111-
endif()
112-
113-
add_library(rabbitmq SHARED ${RABBITMQ_SOURCES})
114-
115-
target_link_libraries(rabbitmq ${RMQ_LIBRARIES})
116-
117-
if (WIN32)
118-
set_target_properties(rabbitmq PROPERTIES VERSION ${RMQ_VERSION} OUTPUT_NAME rabbitmq.${RMQ_SOVERSION})
119-
else (WIN32)
120-
set_target_properties(rabbitmq PROPERTIES VERSION ${RMQ_VERSION} SOVERSION ${RMQ_SOVERSION})
121-
endif (WIN32)
122-
123-
install(TARGETS rabbitmq EXPORT "${targets_export_name}"
124-
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
125-
COMPONENT rabbitmq-c-runtime
126-
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
127-
COMPONENT rabbitmq-c-runtime
128-
NAMELINK_COMPONENT runtime-c-development
129-
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
130-
COMPONENT rabbitmq-c-development
131-
)
132-
133-
set(RMQ_LIBRARY_TARGET rabbitmq)
134-
endif (BUILD_SHARED_LIBS)
135-
136-
if (BUILD_STATIC_LIBS)
137-
add_library(rabbitmq-static STATIC ${RABBITMQ_SOURCES})
138-
139-
target_link_libraries(rabbitmq-static ${RMQ_LIBRARIES})
140-
141-
set_target_properties(rabbitmq-static PROPERTIES COMPILE_DEFINITIONS AMQP_STATIC)
142-
if (WIN32)
143-
set_target_properties(rabbitmq-static PROPERTIES
144-
VERSION ${RMQ_VERSION}
145-
OUTPUT_NAME librabbitmq.${RMQ_SOVERSION})
146-
147-
if(MSVC)
148-
set_target_properties(rabbitmq-static PROPERTIES
149-
# Embed debugging info in the library itself instead of generating
150-
# a .pdb file.
151-
COMPILE_OPTIONS "/Z7")
152-
endif(MSVC)
153-
154-
else (WIN32)
155-
set_target_properties(rabbitmq-static PROPERTIES VERSION ${RMQ_VERSION} SOVERSION ${RMQ_SOVERSION} OUTPUT_NAME rabbitmq)
156-
endif (WIN32)
157-
158-
install(TARGETS rabbitmq-static EXPORT "${targets_export_name}"
159-
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
160-
COMPONENT rabbitmq-c-development
161-
)
162-
163-
if (NOT DEFINED RMQ_LIBRARY_TARGET)
164-
set(RMQ_LIBRARY_TARGET rabbitmq-static)
165-
endif ()
166-
endif (BUILD_STATIC_LIBS)
114+
if(BUILD_SHARED_LIBS)
115+
if (NOT APPLE)
116+
set(CMAKE_INSTALL_RPATH $ORIGIN)
117+
endif()
118+
119+
add_library(rabbitmq SHARED)
120+
121+
target_sources(rabbitmq PRIVATE ${RMQ_SOURCES})
122+
123+
target_include_directories(rabbitmq
124+
PUBLIC ${PUBLIC_INCLUDE_DIRS}
125+
PRIVATE ${PRIVATE_INCLUDE_DIRS}
126+
)
127+
128+
target_compile_definitions(rabbitmq PRIVATE -DHAVE_CONFIG_H)
129+
130+
target_link_libraries(rabbitmq PRIVATE ${RMQ_LIBRARIES})
131+
132+
set_target_properties(rabbitmq PROPERTIES
133+
VERSION ${RMQ_VERSION}
134+
SOVERSION ${RMQ_SOVERSION}
135+
)
136+
137+
if (WIN32)
138+
set_target_properties(rabbitmq PROPERTIES OUTPUT_NAME rabbitmq.${RMQ_SOVERSION})
139+
endif()
140+
141+
install(TARGETS rabbitmq EXPORT "${targets_export_name}"
142+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
143+
COMPONENT rabbitmq-c-runtime
144+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
145+
COMPONENT rabbitmq-c-runtime
146+
NAMELINK_COMPONENT runtime-c-development
147+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
148+
COMPONENT rabbitmq-c-development
149+
)
150+
151+
set(RMQ_LIBRARY_TARGET rabbitmq)
152+
endif()
153+
154+
if(BUILD_STATIC_LIBS)
155+
add_library(rabbitmq-static STATIC)
156+
157+
target_sources(rabbitmq-static PRIVATE ${RMQ_SOURCES})
158+
159+
target_include_directories(rabbitmq-static
160+
PUBLIC ${PUBLIC_INCLUDE_DIRS}
161+
PRIVATE ${PRIVATE_INCLUDE_DIRS}
162+
)
163+
164+
target_compile_definitions(rabbitmq-static
165+
PUBLIC -DAMQP_STATIC
166+
PRIVATE -DHAVE_CONFIG_H
167+
)
168+
169+
target_link_libraries(rabbitmq-static PRIVATE ${RMQ_LIBRARIES})
170+
171+
set_target_properties(rabbitmq-static PROPERTIES
172+
VERSION ${RMQ_VERSION}
173+
SOVERSION ${RMQ_SOVERSION})
174+
175+
if (WIN32)
176+
set_target_properties(rabbitmq-static PROPERTIES OUTPUT_NAME librabbitmq.${RMQ_SOVERSION})
177+
else()
178+
set_target_properties(rabbitmq-static PROPERTIES OUTPUT_NAME rabbitmq)
179+
endif()
180+
181+
if(MSVC)
182+
# Embed debugging info in the library itself instead of generating a .pdb file.
183+
set_target_properties(rabbitmq-static PROPERTIES COMPILE_OPTIONS "/Z7")
184+
endif()
185+
186+
install(TARGETS rabbitmq-static EXPORT "${targets_export_name}"
187+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
188+
COMPONENT rabbitmq-c-development
189+
)
190+
191+
if (NOT DEFINED RMQ_LIBRARY_TARGET)
192+
set(RMQ_LIBRARY_TARGET rabbitmq-static)
193+
endif ()
194+
endif()
167195

168196
include(GenerateExportHeader)
169197
generate_export_header(${RMQ_LIBRARY_TARGET}
170198
BASE_NAME AMQP
171-
EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/rabbitmq-c/export.h
199+
EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/../include/rabbitmq-c/export.h
172200
STATIC_DEFINE AMQP_STATIC
173201
INCLUDE_GUARD_NAME RABBITMQ_C_EXPORT_H
174202
)
@@ -187,7 +215,7 @@ install(FILES
187215
../include/rabbitmq-c/framing.h
188216
../include/rabbitmq-c/tcp_socket.h
189217
${AMQP_SSL_SOCKET_H_PATH}
190-
${CMAKE_CURRENT_BINARY_DIR}/rabbitmq-c/export.h
218+
${CMAKE_CURRENT_BINARY_DIR}/../include/rabbitmq-c/export.h
191219
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rabbitmq-c
192220
COMPONENT rabbitmq-c-development
193221
)

0 commit comments

Comments
 (0)