Merge pull request #525 from compnerd/bring-out-your-targets
build: add exports targets
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 10a0e46..75c419c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -276,3 +276,5 @@
if(BUILD_TESTING)
add_subdirectory(tests)
endif()
+
+add_subdirectory(cmake/modules)
diff --git a/cmake/modules/CMakeLists.txt b/cmake/modules/CMakeLists.txt
new file mode 100644
index 0000000..10cc0e1
--- /dev/null
+++ b/cmake/modules/CMakeLists.txt
@@ -0,0 +1,7 @@
+
+set(DISPATCH_EXPORTS_FILE ${CMAKE_CURRENT_BINARY_DIR}/dispatchExports.cmake)
+configure_file(dispatchConfig.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/dispatchConfig.cmake)
+
+get_property(DISPATCH_EXPORTS GLOBAL PROPERTY DISPATCH_EXPORTS)
+export(TARGETS ${DISPATCH_EXPORTS} FILE ${DISPATCH_EXPORTS_FILE})
diff --git a/cmake/modules/dispatchConfig.cmake.in b/cmake/modules/dispatchConfig.cmake.in
new file mode 100644
index 0000000..81228f2
--- /dev/null
+++ b/cmake/modules/dispatchConfig.cmake.in
@@ -0,0 +1,7 @@
+
+set(DISPATCH_HAS_SWIFT_SDK_OVERLAY @ENABLE_SWIFT@)
+
+if(NOT TARGET dispatch)
+ include(@DISPATCH_EXPORTS_FILE@)
+endif()
+
diff --git a/src/BlocksRuntime/CMakeLists.txt b/src/BlocksRuntime/CMakeLists.txt
index a5388d6..1bed202 100644
--- a/src/BlocksRuntime/CMakeLists.txt
+++ b/src/BlocksRuntime/CMakeLists.txt
@@ -12,14 +12,16 @@
endif()
endif()
-set_target_properties(BlocksRuntime PROPERTIES
- POSITION_INDEPENDENT_CODE TRUE
- INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR})
+target_include_directories(BlocksRuntime PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR})
if(HAVE_OBJC AND CMAKE_DL_LIBS)
target_link_libraries(BlocksRuntime PUBLIC
${CMAKE_DL_LIBS})
endif()
+set_target_properties(BlocksRuntime PROPERTIES
+ POSITION_INDEPENDENT_CODE TRUE)
+
add_library(BlocksRuntime::BlocksRuntime ALIAS BlocksRuntime)
install(FILES Block.h
@@ -28,7 +30,9 @@
install(FILES Block_private.h
DESTINATION ${INSTALL_BLOCK_HEADERS_DIR})
endif()
+set_property(GLOBAL APPEND PROPERTY DISPATCH_EXPORTS BlocksRuntime)
install(TARGETS BlocksRuntime
+ EXPORT dispatchExports
ARCHIVE DESTINATION ${INSTALL_TARGET_DIR}
LIBRARY DESTINATION ${INSTALL_TARGET_DIR}
RUNTIME DESTINATION bin)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index a81e7dc..c88b430 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -95,14 +95,13 @@
set_target_properties(dispatch PROPERTIES
POSITION_INDEPENDENT_CODE YES)
-target_include_directories(dispatch PRIVATE
+target_include_directories(dispatch PUBLIC
${PROJECT_BINARY_DIR}
${PROJECT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_CURRENT_BINARY_DIR}
+ ${CMAKE_CURRENT_BINARY_DIR})
+target_include_directories(dispatch PRIVATE
${PROJECT_SOURCE_DIR}/private)
-target_include_directories(dispatch SYSTEM BEFORE PRIVATE
- "${BlocksRuntime_INCLUDE_DIR}")
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
target_compile_definitions(dispatch PRIVATE
@@ -137,7 +136,8 @@
target_link_libraries(dispatch PRIVATE RT::rt)
endif()
target_link_libraries(dispatch PRIVATE
- Threads::Threads
+ Threads::Threads)
+target_link_libraries(dispatch PUBLIC
BlocksRuntime::BlocksRuntime)
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
target_link_libraries(dispatch PRIVATE
@@ -159,7 +159,9 @@
add_subdirectory(swift)
endif()
+set_property(GLOBAL APPEND PROPERTY DISPATCH_EXPORTS dispatch)
install(TARGETS dispatch
+ EXPORT dispatchExports
ARCHIVE DESTINATION ${INSTALL_TARGET_DIR}
LIBRARY DESTINATION ${INSTALL_TARGET_DIR}
RUNTIME DESTINATION bin)
diff --git a/src/swift/CMakeLists.txt b/src/swift/CMakeLists.txt
index a10d969..18a297f 100644
--- a/src/swift/CMakeLists.txt
+++ b/src/swift/CMakeLists.txt
@@ -46,11 +46,15 @@
${CMAKE_CURRENT_BINARY_DIR}/swift/Dispatch.swiftmodule
${CMAKE_CURRENT_BINARY_DIR}/swift/Dispatch.swiftdoc
DESTINATION ${INSTALL_TARGET_DIR}/${swift_arch})
+set_property(GLOBAL APPEND PROPERTY DISPATCH_EXPORTS swiftDispatch)
install(TARGETS swiftDispatch
+ EXPORT dispatchExports
ARCHIVE DESTINATION ${INSTALL_TARGET_DIR}
LIBRARY DESTINATION ${INSTALL_TARGET_DIR}
RUNTIME DESTINATION bin)
if(NOT BUILD_SHARED_LIBS)
+ set_property(GLOBAL APPEND PROPERTY DISPATCH_EXPORTS DispatchStubs)
install(TARGETS DispatchStubs
+ EXPORT dispatchExports
DESTINATION ${INSTALL_TARGET_DIR})
endif()