diff --git a/CMakeLists.txt b/CMakeLists.txt index 10a0e4623..75c419c13 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -276,3 +276,5 @@ add_subdirectory(src) 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 000000000..10cc0e100 --- /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 000000000..81228f271 --- /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 a5388d6eb..1bed20210 100644 --- a/src/BlocksRuntime/CMakeLists.txt +++ b/src/BlocksRuntime/CMakeLists.txt @@ -12,14 +12,16 @@ if(CMAKE_SYSTEM_NAME STREQUAL Windows) 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 @@ if(INSTALL_PRIVATE_HEADERS) 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 a81e7dcfe..c88b430de 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -95,14 +95,13 @@ endif() 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 @@ if(LibRT_FOUND) 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 @@ if(ENABLE_SWIFT) 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 a10d969a3..18a297f90 100644 --- a/src/swift/CMakeLists.txt +++ b/src/swift/CMakeLists.txt @@ -46,11 +46,15 @@ install(FILES ${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()