Merge pull request #382 from adierking/cmake
build: support embedding in other CMake projects
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e895217..0c6b3af 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.4.3)
-list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules")
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
project(dispatch
VERSION 1.3
@@ -134,12 +134,12 @@
find_package(BlocksRuntime QUIET)
if(NOT BlocksRuntime_FOUND)
- set(BlocksRuntime_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/src/BlocksRuntime)
+ set(BlocksRuntime_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/src/BlocksRuntime)
add_library(BlocksRuntime
STATIC
- ${CMAKE_SOURCE_DIR}/src/BlocksRuntime/data.c
- ${CMAKE_SOURCE_DIR}/src/BlocksRuntime/runtime.c)
+ ${PROJECT_SOURCE_DIR}/src/BlocksRuntime/data.c
+ ${PROJECT_SOURCE_DIR}/src/BlocksRuntime/runtime.c)
set_target_properties(BlocksRuntime
PROPERTIES
POSITION_INDEPENDENT_CODE TRUE)
@@ -152,12 +152,12 @@
add_library(BlocksRuntime::BlocksRuntime ALIAS BlocksRuntime)
install(FILES
- ${CMAKE_SOURCE_DIR}/src/BlocksRuntime/Block.h
+ ${PROJECT_SOURCE_DIR}/src/BlocksRuntime/Block.h
DESTINATION
"${INSTALL_BLOCK_HEADERS_DIR}")
if(INSTALL_PRIVATE_HEADERS)
install(FILES
- ${CMAKE_SOURCE_DIR}/src/BlocksRuntime/Block_private.h
+ ${PROJECT_SOURCE_DIR}/src/BlocksRuntime/Block_private.h
DESTINATION
"${INSTALL_BLOCK_HEADERS_DIR}")
endif()
@@ -300,35 +300,35 @@
if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
add_custom_command(OUTPUT
- "${CMAKE_SOURCE_DIR}/dispatch/module.modulemap"
- "${CMAKE_SOURCE_DIR}/private/module.modulemap"
+ "${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
+ "${PROJECT_SOURCE_DIR}/private/module.modulemap"
COMMAND
- ${CMAKE_COMMAND} -E create_symlink "${CMAKE_SOURCE_DIR}/dispatch/darwin/module.modulemap" "${CMAKE_SOURCE_DIR}/dispatch/module.modulemap"
+ ${CMAKE_COMMAND} -E create_symlink "${PROJECT_SOURCE_DIR}/dispatch/darwin/module.modulemap" "${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
COMMAND
- ${CMAKE_COMMAND} -E create_symlink "${CMAKE_SOURCE_DIR}/private/darwin/module.modulemap" "${CMAKE_SOURCE_DIR}/private/module.modulemap")
+ ${CMAKE_COMMAND} -E create_symlink "${PROJECT_SOURCE_DIR}/private/darwin/module.modulemap" "${PROJECT_SOURCE_DIR}/private/module.modulemap")
elseif(CMAKE_SYSTEM_NAME STREQUAL Windows)
add_custom_command(OUTPUT
- "${CMAKE_SOURCE_DIR}/dispatch/module.modulemap"
- "${CMAKE_SOURCE_DIR}/private/module.modulemap"
+ "${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
+ "${PROJECT_SOURCE_DIR}/private/module.modulemap"
COMMAND
- ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/dispatch/generic/module.modulemap" "${CMAKE_SOURCE_DIR}/dispatch/module.modulemap"
+ ${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/dispatch/generic/module.modulemap" "${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
COMMAND
- ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/private/generic/module.modulemap" "${CMAKE_SOURCE_DIR}/private/module.modulemap")
+ ${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/private/generic/module.modulemap" "${PROJECT_SOURCE_DIR}/private/module.modulemap")
else()
add_custom_command(OUTPUT
- "${CMAKE_SOURCE_DIR}/dispatch/module.modulemap"
- "${CMAKE_SOURCE_DIR}/private/module.modulemap"
+ "${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
+ "${PROJECT_SOURCE_DIR}/private/module.modulemap"
COMMAND
- ${CMAKE_COMMAND} -E create_symlink "${CMAKE_SOURCE_DIR}/dispatch/generic/module.modulemap" "${CMAKE_SOURCE_DIR}/dispatch/module.modulemap"
+ ${CMAKE_COMMAND} -E create_symlink "${PROJECT_SOURCE_DIR}/dispatch/generic/module.modulemap" "${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
COMMAND
- ${CMAKE_COMMAND} -E create_symlink "${CMAKE_SOURCE_DIR}/private/generic/module.modulemap" "${CMAKE_SOURCE_DIR}/private/module.modulemap")
+ ${CMAKE_COMMAND} -E create_symlink "${PROJECT_SOURCE_DIR}/private/generic/module.modulemap" "${PROJECT_SOURCE_DIR}/private/module.modulemap")
endif()
add_custom_target(module-map-symlinks
DEPENDS
- "${CMAKE_SOURCE_DIR}/dispatch/module.modulemap"
- "${CMAKE_SOURCE_DIR}/private/module.modulemap")
-configure_file("${CMAKE_SOURCE_DIR}/cmake/config.h.in"
- "${CMAKE_BINARY_DIR}/config/config_ac.h")
+ "${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
+ "${PROJECT_SOURCE_DIR}/private/module.modulemap")
+configure_file("${PROJECT_SOURCE_DIR}/cmake/config.h.in"
+ "${PROJECT_BINARY_DIR}/config/config_ac.h")
add_definitions(-DHAVE_CONFIG_H)
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
diff --git a/cmake/modules/DispatchWindowsSupport.cmake b/cmake/modules/DispatchWindowsSupport.cmake
index 67a1069..87675a7 100644
--- a/cmake/modules/DispatchWindowsSupport.cmake
+++ b/cmake/modules/DispatchWindowsSupport.cmake
@@ -64,11 +64,11 @@
set(UCRTVersion $ENV{UCRTVersion})
# TODO(compnerd) use a target to avoid re-creating this file all the time
- configure_file("${CMAKE_SOURCE_DIR}/utils/WindowsSDKVFSOverlay.yaml.in"
- "${CMAKE_BINARY_DIR}/windows-sdk-vfs-overlay.yaml"
+ configure_file("${PROJECT_SOURCE_DIR}/utils/WindowsSDKVFSOverlay.yaml.in"
+ "${PROJECT_BINARY_DIR}/windows-sdk-vfs-overlay.yaml"
@ONLY)
set(${flags}
- -ivfsoverlay;"${CMAKE_BINARY_DIR}/windows-sdk-vfs-overlay.yaml"
+ -ivfsoverlay;"${PROJECT_BINARY_DIR}/windows-sdk-vfs-overlay.yaml"
PARENT_SCOPE)
endfunction()
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index c65f333..80bbd54 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -105,13 +105,13 @@
${CMAKE_C_COMPILER_TARGET}
CFLAGS
-fblocks
- -fmodule-map-file=${CMAKE_SOURCE_DIR}/dispatch/module.modulemap
+ -fmodule-map-file=${PROJECT_SOURCE_DIR}/dispatch/module.modulemap
SWIFT_FLAGS
- -I ${CMAKE_SOURCE_DIR}
+ -I ${PROJECT_SOURCE_DIR}
-I/usr/include
${swift_optimization_flags}
DEPENDS
- ${CMAKE_SOURCE_DIR}/dispatch/module.modulemap)
+ ${PROJECT_SOURCE_DIR}/dispatch/module.modulemap)
target_sources(dispatch
PRIVATE
swift/DispatchStubs.cc
@@ -132,11 +132,11 @@
endif()
target_include_directories(dispatch
PRIVATE
- ${CMAKE_BINARY_DIR}
- ${CMAKE_SOURCE_DIR}
+ ${PROJECT_BINARY_DIR}
+ ${PROJECT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
- ${CMAKE_SOURCE_DIR}/private)
+ ${PROJECT_SOURCE_DIR}/private)
target_include_directories(dispatch
SYSTEM BEFORE PRIVATE
"${BlocksRuntime_INCLUDE_DIR}")
@@ -212,7 +212,7 @@
"-Xlinker -compatibility_version -Xlinker 1"
"-Xlinker -current_version -Xlinker ${VERSION}"
"-Xlinker -dead_strip"
- "-Xlinker -alias_list -Xlinker ${CMAKE_SOURCE_DIR}/xcodeconfig/libdispatch.aliases")
+ "-Xlinker -alias_list -Xlinker ${PROJECT_SOURCE_DIR}/xcodeconfig/libdispatch.aliases")
endif()
dispatch_set_linker(dispatch)
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 13d8944..3d0ccdd 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -1,14 +1,14 @@
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
execute_process(COMMAND
- "${CMAKE_COMMAND}" -E copy "${CMAKE_SOURCE_DIR}/private"
+ "${CMAKE_COMMAND}" -E copy "${PROJECT_SOURCE_DIR}/private"
"${CMAKE_CURRENT_BINARY_DIR}/dispatch")
execute_process(COMMAND
"${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_SOURCE_DIR}/leaks-wrapper.sh"
"${CMAKE_CURRENT_BINARY_DIR}/leaks-wrapper")
else()
execute_process(COMMAND
- "${CMAKE_COMMAND}" -E create_symlink "${CMAKE_SOURCE_DIR}/private"
+ "${CMAKE_COMMAND}" -E create_symlink "${PROJECT_SOURCE_DIR}/private"
"${CMAKE_CURRENT_BINARY_DIR}/dispatch")
execute_process(COMMAND
"${CMAKE_COMMAND}" -E create_symlink "${CMAKE_CURRENT_SOURCE_DIR}/leaks-wrapper.sh"
@@ -27,7 +27,7 @@
PRIVATE
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_SOURCE_DIR})
+ ${PROJECT_SOURCE_DIR})
if(BSD_OVERLAY_FOUND)
target_compile_options(bsdtests
PRIVATE
@@ -41,7 +41,7 @@
PRIVATE
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_SOURCE_DIR})
+ ${PROJECT_SOURCE_DIR})
if(BSD_OVERLAY_FOUND)
target_compile_options(bsdtestharness
PRIVATE
@@ -78,7 +78,7 @@
PRIVATE
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_SOURCE_DIR})
+ ${PROJECT_SOURCE_DIR})
if(ENABLE_SWIFT)
# For testing in swift.org CI system; make deadlines lenient by default
# to reduce probability of test failures due to machine load.