@@ -74,14 +74,12 @@ if(ENABLE_SWIFT)
74
74
75
75
set (INSTALL_TARGET_DIR "${INSTALL_LIBDIR} /swift/${SWIFT_OS} " CACHE PATH "Path where the libraries will be installed" )
76
76
set (INSTALL_DISPATCH_HEADERS_DIR "${INSTALL_LIBDIR} /swift/dispatch" CACHE PATH "Path where the headers will be installed for libdispatch" )
77
- set (INSTALL_BLOCK_HEADERS_DIR "${INSTALL_LIBDIR} /swift/Block" CACHE PATH "Path where the headers will be installed for the blocks runtime" )
78
77
set (INSTALL_OS_HEADERS_DIR "${INSTALL_LIBDIR} /swift/os" CACHE PATH "Path where the os/ headers will be installed" )
79
78
endif ()
80
79
81
80
if (NOT ENABLE_SWIFT )
82
81
set (INSTALL_TARGET_DIR "${INSTALL_LIBDIR} " CACHE PATH "Path where the libraries will be installed" )
83
82
set (INSTALL_DISPATCH_HEADERS_DIR "include/dispatch" CACHE PATH "Path where the headers will be installed" )
84
- set (INSTALL_BLOCK_HEADERS_DIR "include" CACHE PATH "Path where the headers will be installed for the blocks runtime" )
85
83
set (INSTALL_OS_HEADERS_DIR "include/os" CACHE PATH "Path where the headers will be installed" )
86
84
endif ()
87
85
@@ -132,35 +130,93 @@ endif()
132
130
133
131
option (INSTALL_PRIVATE_HEADERS "installs private headers in the same location as the public ones" OFF )
134
132
135
- find_package (BlocksRuntime QUIET )
136
- if (NOT BlocksRuntime_FOUND )
133
+ if (NOT CMAKE_SYSTEM_NAME STREQUAL Darwin )
137
134
set (BlocksRuntime_INCLUDE_DIR ${PROJECT_SOURCE_DIR} /src/BlocksRuntime )
138
135
139
- add_library (BlocksRuntime
140
- STATIC
141
- ${PROJECT_SOURCE_DIR} /src/BlocksRuntime/data.c
142
- ${PROJECT_SOURCE_DIR} /src/BlocksRuntime/runtime.c )
143
- set_target_properties (BlocksRuntime
136
+ set (LIBDISPATCH_BLOCKSRUNTIME_CMAKE_ARGS
137
+ -DCMAKE_AR=${CMAKE_AR}
138
+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
139
+ -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
140
+ -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
141
+ -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
142
+ -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
143
+ -DCMAKE_LIBRARY_PATH=${CMAKE_LIBRARY_PATH}
144
+ -DCMAKE_RANLIB=${CMAKE_RANLIB}
145
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
146
+ -DINSTALL_PRIVATE_HEADERS=${INSTALL_PRIVATE_HEADERS} )
147
+
148
+ include (ExternalProject )
149
+ ExternalProject_Add (SharedBlocksRuntime
150
+ SOURCE_DIR
151
+ ${PROJECT_SOURCE_DIR} /src/BlocksRuntime
152
+ CMAKE_ARGS
153
+ ${LIBDISPATCH_BLOCKSRUNTIME_CMAKE_ARGS}
154
+ -DBUILD_SHARED_LIBS=YES
155
+ INSTALL_COMMAND
156
+ ${CMAKE_COMMAND} -E env --unset=DESTDIR ${CMAKE_COMMAND} --build . --target install
157
+ BUILD_BYPRODUCTS
158
+ <INSTALL_DIR>/lib/${CMAKE_SHARED_LIBRARY_PREFIX}BlocksRuntime${CMAKE_SHARED_LIBRARY_SUFFIX}
159
+ <INSTALL_DIR>/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}BlocksRuntime${CMAKE_IMPORT_LIBRARY_SUFFIX}
160
+ BUILD_ALWAYS
161
+ 1 )
162
+ ExternalProject_Add (StaticBlocksRuntime
163
+ SOURCE_DIR
164
+ ${PROJECT_SOURCE_DIR} /src/BlocksRuntime
165
+ CMAKE_ARGS
166
+ ${LIBDISPATCH_BLOCKSRUNTIME_CMAKE_ARGS}
167
+ -DBUILD_SHARED_LIBS=NO
168
+ INSTALL_COMMAND
169
+ ${CMAKE_COMMAND} -E env --unset=DESTDIR ${CMAKE_COMMAND} --build . --target install
170
+ BUILD_BYPRODUCTS
171
+ <INSTALL_DIR>/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BlocksRuntime${CMAKE_STATIC_LIBRARY_SUFFIX}
172
+ BUILD_ALWAYS
173
+ 1 )
174
+
175
+ ExternalProject_Get_Property (SharedBlocksRuntime install_dir )
176
+ add_library (BlocksRuntime::BlocksRuntime SHARED IMPORTED )
177
+ set_target_properties (BlocksRuntime::BlocksRuntime
144
178
PROPERTIES
145
- POSITION_INDEPENDENT_CODE TRUE )
146
- if (HAVE_OBJC AND CMAKE_DL_LIBS )
147
- set_target_properties (BlocksRuntime
148
- PROPERTIES
149
- INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS} )
179
+ INTERFACE_INCLUDE_DIRECTORIES
180
+ ${PROJECT_SOURCE_DIR} /src/BlocksRuntime
181
+ IMPORTED_LOCATION
182
+ ${install_dir} /lib/${CMAKE_SHARED_LIBRARY_PREFIX}BlocksRuntime${CMAKE_SHARED_LIBRARY_SUFFIX}
183
+ IMPORTED_IMPLIB
184
+ ${install_dir} /lib/${CMAKE_IMPORT_LIBRARY_PREFIX}BlocksRuntime${CMAKE_IMPORT_LIBRARY_SUFFIX} )
185
+
186
+ if (ENABLE_SWIFT )
187
+ set (LIBDISPATCH_BLOCKSRUNTIME_HEADER_DIR ${SWIFT_LIBDIR} /swift/Block )
188
+ set (LIBDISPATCH_BLOCKSRUNTIME_LIBDIR ${SWIFT_LIBDIR} /swift/${SWIFT_OS}/${SWIFT_HOST_ARCH} )
189
+ set (LIBDISPATCH_BLOCKSRUNTIME_STATIC_LIBDIR ${SWIFT_LIBDIR} /swift_static/${SWIFT_OS}/${SWIFT_HOST_ARCH} )
190
+ else ()
191
+ set (LIBDISPATCH_BLOCKSRUNTIME_HEADER_DIR ${CMAKE_INSTALL_INCLUDEDIR} )
192
+ set (LIBDISPATCH_BLOCKSRUNTIME_LIBDIR ${CMAKE_INSTALL_LIBDIR} )
193
+ set (LIBDISPATCH_BLOCKSRUNTIME_STATIC_LIBDIR ${CMAKE_INSTALL_LIBDIR} )
150
194
endif ()
151
195
152
- add_library (BlocksRuntime::BlocksRuntime ALIAS BlocksRuntime )
153
-
154
196
install (FILES
155
197
${PROJECT_SOURCE_DIR} /src/BlocksRuntime/Block.h
156
198
DESTINATION
157
- " ${INSTALL_BLOCK_HEADERS_DIR} " )
199
+ ${LIBDISPATCH_BLOCKSRUNTIME_HEADER_DIR} )
158
200
if (INSTALL_PRIVATE_HEADERS )
159
201
install (FILES
160
202
${PROJECT_SOURCE_DIR} /src/BlocksRuntime/Block_private.h
161
203
DESTINATION
162
- "${INSTALL_BLOCK_HEADERS_DIR} " )
204
+ ${LIBDISPATCH_BLOCKSRUNTIME_HEADER_DIR} )
205
+ endif ()
206
+ install (FILES
207
+ ${install_dir} /lib/${CMAKE_SHARED_LIBRARY_PREFIX}BlocksRuntime${CMAKE_SHARED_LIBRARY_SUFFIX}
208
+ DESTINATION
209
+ ${LIBDISPATCH_BLOCKSRUNTIME_LIBDIR} )
210
+ if (CMAKE_SYSTEM_NAME STREQUAL Windows )
211
+ install (FILES
212
+ ${install_dir} /lib/${CMAKE_IMPORT_LIBRARY_PREFIX}BlocksRuntime${CMAKE_IMPORT_LIBRARY_SUFFIX}
213
+ DESTINATION
214
+ ${LIBDISPATCH_BLOCKSRUNTIME_LIBDIR} )
163
215
endif ()
216
+ install (FILES
217
+ ${install_dir} /lib/${CMAKE_STATIC_LIBRARY_PREFIX}BlocksRuntime${CMAKE_STATIC_LIBRARY_SUFFIX}
218
+ DESTINATION
219
+ ${LIBDISPATCH_BLOCKSRUNTIME_STATIC_LIBDIR} )
164
220
endif ()
165
221
166
222
check_symbol_exists (__GNU_LIBRARY__ "features.h" _GNU_SOURCE )
0 commit comments