@@ -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)
4545endif (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-
6447if (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 ()
9071endif ()
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
106112set (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
168196include (GenerateExportHeader)
169197generate_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