Skip to content

Commit cffa6f0

Browse files
committed
build: support embedding in other CMake projects
Allow libdispatch to be embedded in other CMake projects using add_subdirectory(). This essentially means that `CMAKE_SOURCE_DIR` and `CMAKE_BINARY_DIR` cannot be used directly. Use the versions of these variables which are scoped to the current project or directory.
1 parent ba3933d commit cffa6f0

File tree

4 files changed

+37
-37
lines changed

4 files changed

+37
-37
lines changed

CMakeLists.txt

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
cmake_minimum_required(VERSION 3.4.3)
33

4-
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules")
4+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
55

66
project(dispatch
77
VERSION 1.3
@@ -134,12 +134,12 @@ option(INSTALL_PRIVATE_HEADERS "installs private headers in the same location as
134134

135135
find_package(BlocksRuntime QUIET)
136136
if(NOT BlocksRuntime_FOUND)
137-
set(BlocksRuntime_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/src/BlocksRuntime)
137+
set(BlocksRuntime_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/src/BlocksRuntime)
138138

139139
add_library(BlocksRuntime
140140
STATIC
141-
${CMAKE_SOURCE_DIR}/src/BlocksRuntime/data.c
142-
${CMAKE_SOURCE_DIR}/src/BlocksRuntime/runtime.c)
141+
${PROJECT_SOURCE_DIR}/src/BlocksRuntime/data.c
142+
${PROJECT_SOURCE_DIR}/src/BlocksRuntime/runtime.c)
143143
set_target_properties(BlocksRuntime
144144
PROPERTIES
145145
POSITION_INDEPENDENT_CODE TRUE)
@@ -152,12 +152,12 @@ if(NOT BlocksRuntime_FOUND)
152152
add_library(BlocksRuntime::BlocksRuntime ALIAS BlocksRuntime)
153153

154154
install(FILES
155-
${CMAKE_SOURCE_DIR}/src/BlocksRuntime/Block.h
155+
${PROJECT_SOURCE_DIR}/src/BlocksRuntime/Block.h
156156
DESTINATION
157157
"${INSTALL_BLOCK_HEADERS_DIR}")
158158
if(INSTALL_PRIVATE_HEADERS)
159159
install(FILES
160-
${CMAKE_SOURCE_DIR}/src/BlocksRuntime/Block_private.h
160+
${PROJECT_SOURCE_DIR}/src/BlocksRuntime/Block_private.h
161161
DESTINATION
162162
"${INSTALL_BLOCK_HEADERS_DIR}")
163163
endif()
@@ -300,35 +300,35 @@ endif()
300300

301301
if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
302302
add_custom_command(OUTPUT
303-
"${CMAKE_SOURCE_DIR}/dispatch/module.modulemap"
304-
"${CMAKE_SOURCE_DIR}/private/module.modulemap"
303+
"${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
304+
"${PROJECT_SOURCE_DIR}/private/module.modulemap"
305305
COMMAND
306-
${CMAKE_COMMAND} -E create_symlink "${CMAKE_SOURCE_DIR}/dispatch/darwin/module.modulemap" "${CMAKE_SOURCE_DIR}/dispatch/module.modulemap"
306+
${CMAKE_COMMAND} -E create_symlink "${PROJECT_SOURCE_DIR}/dispatch/darwin/module.modulemap" "${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
307307
COMMAND
308-
${CMAKE_COMMAND} -E create_symlink "${CMAKE_SOURCE_DIR}/private/darwin/module.modulemap" "${CMAKE_SOURCE_DIR}/private/module.modulemap")
308+
${CMAKE_COMMAND} -E create_symlink "${PROJECT_SOURCE_DIR}/private/darwin/module.modulemap" "${PROJECT_SOURCE_DIR}/private/module.modulemap")
309309
elseif(CMAKE_SYSTEM_NAME STREQUAL Windows)
310310
add_custom_command(OUTPUT
311-
"${CMAKE_SOURCE_DIR}/dispatch/module.modulemap"
312-
"${CMAKE_SOURCE_DIR}/private/module.modulemap"
311+
"${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
312+
"${PROJECT_SOURCE_DIR}/private/module.modulemap"
313313
COMMAND
314-
${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/dispatch/generic/module.modulemap" "${CMAKE_SOURCE_DIR}/dispatch/module.modulemap"
314+
${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/dispatch/generic/module.modulemap" "${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
315315
COMMAND
316-
${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/private/generic/module.modulemap" "${CMAKE_SOURCE_DIR}/private/module.modulemap")
316+
${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/private/generic/module.modulemap" "${PROJECT_SOURCE_DIR}/private/module.modulemap")
317317
else()
318318
add_custom_command(OUTPUT
319-
"${CMAKE_SOURCE_DIR}/dispatch/module.modulemap"
320-
"${CMAKE_SOURCE_DIR}/private/module.modulemap"
319+
"${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
320+
"${PROJECT_SOURCE_DIR}/private/module.modulemap"
321321
COMMAND
322-
${CMAKE_COMMAND} -E create_symlink "${CMAKE_SOURCE_DIR}/dispatch/generic/module.modulemap" "${CMAKE_SOURCE_DIR}/dispatch/module.modulemap"
322+
${CMAKE_COMMAND} -E create_symlink "${PROJECT_SOURCE_DIR}/dispatch/generic/module.modulemap" "${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
323323
COMMAND
324-
${CMAKE_COMMAND} -E create_symlink "${CMAKE_SOURCE_DIR}/private/generic/module.modulemap" "${CMAKE_SOURCE_DIR}/private/module.modulemap")
324+
${CMAKE_COMMAND} -E create_symlink "${PROJECT_SOURCE_DIR}/private/generic/module.modulemap" "${PROJECT_SOURCE_DIR}/private/module.modulemap")
325325
endif()
326326
add_custom_target(module-map-symlinks
327327
DEPENDS
328-
"${CMAKE_SOURCE_DIR}/dispatch/module.modulemap"
329-
"${CMAKE_SOURCE_DIR}/private/module.modulemap")
330-
configure_file("${CMAKE_SOURCE_DIR}/cmake/config.h.in"
331-
"${CMAKE_BINARY_DIR}/config/config_ac.h")
328+
"${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
329+
"${PROJECT_SOURCE_DIR}/private/module.modulemap")
330+
configure_file("${PROJECT_SOURCE_DIR}/cmake/config.h.in"
331+
"${PROJECT_BINARY_DIR}/config/config_ac.h")
332332
add_definitions(-DHAVE_CONFIG_H)
333333

334334
if(CMAKE_SYSTEM_NAME STREQUAL Windows)

cmake/modules/DispatchWindowsSupport.cmake

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,11 @@ function(dispatch_windows_generate_sdk_vfs_overlay flags)
6464
set(UCRTVersion $ENV{UCRTVersion})
6565

6666
# TODO(compnerd) use a target to avoid re-creating this file all the time
67-
configure_file("${CMAKE_SOURCE_DIR}/utils/WindowsSDKVFSOverlay.yaml.in"
68-
"${CMAKE_BINARY_DIR}/windows-sdk-vfs-overlay.yaml"
67+
configure_file("${PROJECT_SOURCE_DIR}/utils/WindowsSDKVFSOverlay.yaml.in"
68+
"${PROJECT_BINARY_DIR}/windows-sdk-vfs-overlay.yaml"
6969
@ONLY)
7070

7171
set(${flags}
72-
-ivfsoverlay;"${CMAKE_BINARY_DIR}/windows-sdk-vfs-overlay.yaml"
72+
-ivfsoverlay;"${PROJECT_BINARY_DIR}/windows-sdk-vfs-overlay.yaml"
7373
PARENT_SCOPE)
7474
endfunction()

src/CMakeLists.txt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -110,13 +110,13 @@ if(ENABLE_SWIFT)
110110
${CMAKE_C_COMPILER_TARGET}
111111
CFLAGS
112112
-fblocks
113-
-fmodule-map-file=${CMAKE_SOURCE_DIR}/dispatch/module.modulemap
113+
-fmodule-map-file=${PROJECT_SOURCE_DIR}/dispatch/module.modulemap
114114
SWIFT_FLAGS
115-
-I ${CMAKE_SOURCE_DIR}
115+
-I ${PROJECT_SOURCE_DIR}
116116
-I/usr/include
117117
${swift_optimization_flags}
118118
DEPENDS
119-
${CMAKE_SOURCE_DIR}/dispatch/module.modulemap)
119+
${PROJECT_SOURCE_DIR}/dispatch/module.modulemap)
120120
target_sources(dispatch
121121
PRIVATE
122122
swift/DispatchStubs.cc
@@ -132,11 +132,11 @@ if(ENABLE_DTRACE)
132132
endif()
133133
target_include_directories(dispatch
134134
PRIVATE
135-
${CMAKE_BINARY_DIR}
136-
${CMAKE_SOURCE_DIR}
135+
${PROJECT_BINARY_DIR}
136+
${PROJECT_SOURCE_DIR}
137137
${CMAKE_CURRENT_SOURCE_DIR}
138138
${CMAKE_CURRENT_BINARY_DIR}
139-
${CMAKE_SOURCE_DIR}/private)
139+
${PROJECT_SOURCE_DIR}/private)
140140
target_include_directories(dispatch
141141
SYSTEM BEFORE PRIVATE
142142
"${BlocksRuntime_INCLUDE_DIR}")
@@ -209,7 +209,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
209209
"-Xlinker -compatibility_version -Xlinker 1"
210210
"-Xlinker -current_version -Xlinker ${VERSION}"
211211
"-Xlinker -dead_strip"
212-
"-Xlinker -alias_list -Xlinker ${CMAKE_SOURCE_DIR}/xcodeconfig/libdispatch.aliases")
212+
"-Xlinker -alias_list -Xlinker ${PROJECT_SOURCE_DIR}/xcodeconfig/libdispatch.aliases")
213213
endif()
214214
dispatch_set_linker(dispatch)
215215

tests/CMakeLists.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11

22
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
33
execute_process(COMMAND
4-
"${CMAKE_COMMAND}" -E copy "${CMAKE_SOURCE_DIR}/private"
4+
"${CMAKE_COMMAND}" -E copy "${PROJECT_SOURCE_DIR}/private"
55
"${CMAKE_CURRENT_BINARY_DIR}/dispatch")
66
execute_process(COMMAND
77
"${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_SOURCE_DIR}/leaks-wrapper.sh"
88
"${CMAKE_CURRENT_BINARY_DIR}/leaks-wrapper")
99
else()
1010
execute_process(COMMAND
11-
"${CMAKE_COMMAND}" -E create_symlink "${CMAKE_SOURCE_DIR}/private"
11+
"${CMAKE_COMMAND}" -E create_symlink "${PROJECT_SOURCE_DIR}/private"
1212
"${CMAKE_CURRENT_BINARY_DIR}/dispatch")
1313
execute_process(COMMAND
1414
"${CMAKE_COMMAND}" -E create_symlink "${CMAKE_CURRENT_SOURCE_DIR}/leaks-wrapper.sh"
@@ -27,7 +27,7 @@ target_include_directories(bsdtests
2727
PRIVATE
2828
${CMAKE_CURRENT_BINARY_DIR}
2929
${CMAKE_CURRENT_SOURCE_DIR}
30-
${CMAKE_SOURCE_DIR})
30+
${PROJECT_SOURCE_DIR})
3131
if(BSD_OVERLAY_FOUND)
3232
target_compile_options(bsdtests
3333
PRIVATE
@@ -41,7 +41,7 @@ target_include_directories(bsdtestharness
4141
PRIVATE
4242
${CMAKE_CURRENT_BINARY_DIR}
4343
${CMAKE_CURRENT_SOURCE_DIR}
44-
${CMAKE_SOURCE_DIR})
44+
${PROJECT_SOURCE_DIR})
4545
if(BSD_OVERLAY_FOUND)
4646
target_compile_options(bsdtestharness
4747
PRIVATE
@@ -78,7 +78,7 @@ function(add_unit_test name)
7878
PRIVATE
7979
${CMAKE_CURRENT_BINARY_DIR}
8080
${CMAKE_CURRENT_SOURCE_DIR}
81-
${CMAKE_SOURCE_DIR})
81+
${PROJECT_SOURCE_DIR})
8282
if(ENABLE_SWIFT)
8383
# For testing in swift.org CI system; make deadlines lenient by default
8484
# to reduce probability of test failures due to machine load.

0 commit comments

Comments
 (0)