@@ -62,19 +62,21 @@ if(ENABLE_SWIFT)
6262 PROPERTIES
6363 IMPORTED_LOCATION
6464 ${SWIFT_RUNTIME_LIBDIR} /${CMAKE_SHARED_LIBRARY_PREFIX} swiftSwiftOnoneSupport${CMAKE_SHARED_LIBRARY_SUFFIX} )
65+
66+ set (INSTALL_TARGET_DIR "${INSTALL_LIBDIR} /swift/${SWIFT_OS} " CACHE PATH "Path where the libraries will be installed" )
67+ set (INSTALL_DISPATCH_HEADERS_DIR "${INSTALL_LIBDIR} /swift/dispatch" CACHE PATH "Path where the headers will be installed for libdispatch" )
68+ set (INSTALL_BLOCK_HEADERS_DIR "${INSTALL_LIBDIR} /swift/Block" CACHE PATH "Path where the headers will be installed for the blocks runtime" )
69+ set (INSTALL_OS_HEADERS_DIR "${INSTALL_LIBDIR} /swift/os" CACHE PATH "Path where the os/ headers will be installed" )
6570endif ()
6671
67- if (CMAKE_SYSTEM_NAME STREQUAL Android)
68- set (ENABLE_DTRACE_DEFAULT OFF )
69- else ()
70- find_program (DTRACEPROG dtrace)
71- if (DTRACEPROG)
72- set (ENABLE_DTRACE_DEFAULT ON )
73- else ()
74- set (ENABLE_DTRACE_DEFAULT OFF )
75- endif ()
72+ if (NOT ENABLE_SWIFT)
73+ set (INSTALL_TARGET_DIR "${INSTALL_LIBDIR} " CACHE PATH "Path where the libraries will be installed" )
74+ set (INSTALL_DISPATCH_HEADERS_DIR "include/dispatch" CACHE PATH "Path where the headers will be installed" )
75+ set (INSTALL_BLOCK_HEADERS_DIR "include" CACHE PATH "Path where the headers will be installed for the blocks runtime" )
76+ set (INSTALL_OS_HEADERS_DIR "include/os" CACHE PATH "Path where the headers will be installed" )
7677endif ()
77- option (ENABLE_DTRACE "enable dtrace support" ${ENABLE_DTRACE_DEFAULT} )
78+
79+ option (ENABLE_DTRACE "enable dtrace support" "" )
7880
7981option (BUILD_SHARED_LIBS "build shared libraries" ON )
8082
@@ -114,13 +116,15 @@ else()
114116 endif ()
115117endif ()
116118
119+ option (INSTALL_PRIVATE_HEADERS "installs private headers in the same location as the public ones" OFF )
120+
117121if (CMAKE_SYSTEM_NAME STREQUAL Linux OR
118122 CMAKE_SYSTEM_NAME STREQUAL Android OR
119123 CMAKE_SYSTEM_NAME STREQUAL Windows)
120124 add_library (BlocksRuntime
121125 STATIC
122126 ${CMAKE_SOURCE_DIR} /src/BlocksRuntime/data.c
123- ${CMAKE_SOURCE_DIR} /src/BlocksRuntime/runtime.c)
127+ ${CMAKE_SOURCE_DIR} /src/BlocksRuntime/runtime.c)
124128 set_target_properties (BlocksRuntime
125129 PROPERTIES
126130 POSITION_INDEPENDENT_CODE TRUE )
@@ -130,6 +134,17 @@ if(CMAKE_SYSTEM_NAME STREQUAL Linux OR
130134 INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS} )
131135 endif ()
132136 set (WITH_BLOCKS_RUNTIME "${CMAKE_SOURCE_DIR} /src/BlocksRuntime" CACHE PATH "Path to blocks runtime" FORCE)
137+
138+ install (FILES
139+ ${CMAKE_SOURCE_DIR} /src/BlocksRuntime/Block.h
140+ DESTINATION
141+ "${INSTALL_BLOCK_HEADERS_DIR} " )
142+ if (INSTALL_PRIVATE_HEADERS)
143+ install (FILES
144+ ${CMAKE_SOURCE_DIR} /src/BlocksRuntime/Block_private.h
145+ DESTINATION
146+ "${INSTALL_BLOCK_HEADERS_DIR} " )
147+ endif ()
133148else ()
134149 # TODO(compnerd) support system installed BlocksRuntime
135150 # find_package(BlocksRuntime REQUIRED)
@@ -159,6 +174,7 @@ check_function_exists(pthread_main_np HAVE_PTHREAD_MAIN_NP)
159174check_function_exists(pthread_workqueue_setdispatch_np HAVE_PTHREAD_WORKQUEUE_SETDISPATCH_NP)
160175check_function_exists(strlcpy HAVE_STRLCPY)
161176check_function_exists(sysconf HAVE_SYSCONF)
177+ check_function_exists(arc4random HAVE_ARC4RANDOM)
162178
163179if (NOT HAVE_STRLCPY AND NOT HAVE_GETPROGNAME)
164180 include (FindPkgConfig)
@@ -233,14 +249,29 @@ check_symbol_exists(VQ_NEARLOWDISK "sys/mount.h" HAVE_DECL_VQ_NEARLOWDISK)
233249check_symbol_exists(VQ_QUOTA "sys/mount.h" HAVE_DECL_VQ_QUOTA)
234250check_symbol_exists(VQ_UPDATE "sys/mount.h" HAVE_DECL_VQ_UPDATE)
235251check_symbol_exists(VQ_VERYLOWDISK "sys/mount.h" HAVE_DECL_VQ_VERYLOWDISK)
236-
252+ check_symbol_exists(strlcpy "string.h" HAVE_STRLCPY)
237253check_symbol_exists(program_invocation_name "errno.h" HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME)
254+ if (HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME)
255+ add_definitions (-D_GNU_SOURCE=1)
256+ endif ()
257+ check_symbol_exists(__printflike "bsd/sys/cdefs.h" HAVE_PRINTFLIKE)
238258
239259if (CMAKE_SYSTEM_NAME STREQUAL Windows)
240260 add_definitions (-DTARGET_OS_WIN32)
241261endif ()
242262
243- if (ENABLE_DTRACE)
263+ if (CMAKE_SYSTEM_NAME STREQUAL Android)
264+ set (ENABLE_DTRACE_DEFAULT OFF )
265+ endif ()
266+
267+ if (ENABLE_DTRACE STREQUAL "" )
268+ find_program (dtrace_EXECUTABLE dtrace)
269+ if (dtrace_EXECUTABLE)
270+ add_definitions (-DDISPATCH_USE_DTRACE=1)
271+ else ()
272+ add_definitions (-DDISPATCH_USE_DTRACE=0)
273+ endif ()
274+ elseif (ENABLE_DTRACE)
244275 find_program (dtrace_EXECUTABLE dtrace)
245276 if (NOT dtrace_EXECUTABLE)
246277 message (FATAL_ERROR "dtrace not found but explicitly requested" )
0 commit comments