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()