Skip to content

Commit 224d6b0

Browse files
Merge branch 'master' of github.com:apple/swift-corelibs-foundation into url-session-task/input-stream
2 parents d5adb0f + 12ee2c8 commit 224d6b0

File tree

91 files changed

+1437
-742
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

91 files changed

+1437
-742
lines changed

CMakeLists.txt

Lines changed: 107 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ project(Foundation
99
C)
1010
enable_testing()
1111

12+
option(BUILD_SHARED_LIBS "build shared libraries" ON)
13+
1214
option(FOUNDATION_ENABLE_LIBDISPATCH "Enable GCD Support" YES)
1315
option(FOUNDATION_PATH_TO_LIBDISPATCH_SOURCE "Path to libdispatch source" "")
1416
option(FOUNDATION_PATH_TO_LIBDISPATCH_BUILD "Path to libdispatch build" "")
@@ -17,33 +19,67 @@ option(FOUNDATION_PATH_TO_XCTEST_BUILD "Path to XCTest build" "")
1719
find_package(CURL REQUIRED)
1820
find_package(ICU COMPONENTS uc i18n REQUIRED)
1921
find_package(LibXml2 REQUIRED)
20-
find_package(UUID REQUIRED)
2122

2223
include(SwiftSupport)
2324
include(GNUInstallDirs)
2425
include(ExternalProject)
2526

27+
string(TOLOWER ${CMAKE_SYSTEM_NAME} swift_os)
28+
get_swift_host_arch(swift_arch)
29+
2630
ExternalProject_Add(CoreFoundation
2731
SOURCE_DIR
2832
${CMAKE_CURRENT_SOURCE_DIR}/CoreFoundation
2933
CMAKE_COMMAND
3034
${CMAKE_COMMAND}
3135
CMAKE_ARGS
3236
-DBUILD_SHARED_LIBS=NO
33-
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
3437
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
38+
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
39+
# NOTE(compnerd) ensure that we build it as a DLL as we
40+
# wish to re-export the symbols from Foundation
41+
-DCMAKE_C_FLAGS=-D_USRDLL
3542
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
3643
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
3744
-DCMAKE_INSTALL_LIBDIR=usr/lib
45+
-DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
46+
-DCMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}
47+
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
3848
-DCF_DEPLOYMENT_SWIFT=YES
3949
-DCF_ENABLE_LIBDISPATCH=${FOUNDATION_ENABLE_LIBDISPATCH}
4050
-DCF_PATH_TO_LIBDISPATCH_SOURCE=${FOUNDATION_PATH_TO_LIBDISPATCH_SOURCE}
4151
-DCF_PATH_TO_LIBDISPATCH_BUILD=${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD}
52+
-DICU_LIBRARY=${ICU_LIBRARY}
4253
-DICU_INCLUDE_DIR=${ICU_INCLUDE_DIR}
54+
-DCURL_LIBRARY=${CURL_LIBRARY}
55+
-DCURL_INCLUDE_DIR=${CURL_INCLUDE_DIR}
56+
-DLIBXML2_LIBRARY=${LIBXML2_LIBRARY}
57+
-DLIBXML2_INCLUDE_DIR=${LIBXML2_INCLUDE_DIR}
4358
INSTALL_COMMAND
4459
${CMAKE_COMMAND} -E env --unset=DESTDIR ${CMAKE_COMMAND} --build . --target install)
4560
ExternalProject_Get_Property(CoreFoundation install_dir)
4661

62+
add_library(uuid
63+
STATIC
64+
uuid/uuid.h
65+
uuid/uuid.c)
66+
set_target_properties(uuid
67+
PROPERTIES
68+
POSITION_INDEPENDENT_CODE YES)
69+
# Add an include directory for the CoreFoundation framework headers to satisfy
70+
# the dependency on TargetConditionals.h
71+
target_compile_options(uuid
72+
PUBLIC
73+
-I${install_dir}/System/Library/Frameworks/CoreFoundation.framework/Headers)
74+
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
75+
target_compile_definitions(uuid
76+
PRIVATE
77+
_CRT_NONSTDC_NO_WARNINGS
78+
_CRT_SECURE_NO_DEPRECATE
79+
_CRT_SECURE_NO_WARNINGS)
80+
endif()
81+
add_dependencies(uuid CoreFoundation)
82+
4783
set(swift_optimization_flags)
4884
if(CMAKE_BUILD_TYPE MATCHES Release)
4985
set(swift_optimization_flags -O)
@@ -58,21 +94,31 @@ set(libdispatch_ldflags)
5894
if(FOUNDATION_ENABLE_LIBDISPATCH)
5995
set(deployment_enable_libdispatch -DDEPLOYMENT_ENABLE_LIBDISPATCH)
6096
set(libdispatch_cflags -I;${FOUNDATION_PATH_TO_LIBDISPATCH_SOURCE};-I;${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD}/src/swift;-Xcc;-fblocks)
61-
set(libdispatch_ldflags -L;${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD};-L;${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD}/src;-ldispatch)
97+
set(libdispatch_ldflags -L;${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD};-L;${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD}/src;-ldispatch;-lswiftDispatch)
6298
if(CMAKE_SYSTEM_NAME STREQUAL Linux OR CMAKE_SYSTEM_NAME STREQUAL Android OR CMAKE_SYSTEM_NAME STREQUAL FreeBSD)
6399
list(APPEND libdispatch_ldflags -Xlinker;-rpath;-Xlinker;${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD}/src)
64100
endif()
65101
endif()
66102

103+
if(CMAKE_SYSTEM_NAME STREQUAL Android OR CMAKE_SYSTEM_NAME STREQUAL Linux)
104+
set(deployment_target -DDEPLOYMENT_TARGET_LINUX)
105+
set(Foundation_rpath_flags -Xlinker;-rpath;-Xlinker;"\\\$\$ORIGIN")
106+
elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin)
107+
set(deployment_target -DDEPLOYMENT_TARGET_MACOSX)
108+
elseif(CMAKE_SYSTEM_NAME STREQUAL FreeBSD)
109+
set(deployment_target -DDEPLOYMENT_TARGET_FREEBSD)
110+
set(Foundation_rpath_flags -Xlinker;-rpath;-Xlinker;"\\\$\$ORIGIN")
111+
elseif(CMAKE_SYSTEM_NAME STREQUAL Windows)
112+
set(deployment_target -DDEPLOYMENT_TARGET_WINDOWS)
113+
endif()
114+
67115
add_swift_library(Foundation
68116
MODULE_NAME
69117
Foundation
70118
MODULE_LINK_NAME
71119
Foundation
72120
MODULE_PATH
73121
${CMAKE_CURRENT_BINARY_DIR}/swift/Foundation.swiftmodule
74-
OUTPUT
75-
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}Foundation${CMAKE_SHARED_LIBRARY_SUFFIX}
76122
SOURCES
77123
Foundation/AffineTransform.swift
78124
Foundation/Array.swift
@@ -231,62 +277,89 @@ add_swift_library(Foundation
231277
TARGET
232278
${CMAKE_C_COMPILER_TARGET}
233279
CFLAGS
280+
${deployment_target}
234281
${deployment_enable_libdispatch}
235282
-F${install_dir}/System/Library/Frameworks
283+
-D_DLL
236284
LINK_FLAGS
237285
-L${install_dir}/usr/lib
238286
-lCoreFoundation
239287
${CURL_LIBRARIES}
240-
${ICU_UC_LIBRARIES} ${ICU_I18N_LIBRARIES}
288+
${ICU_UC_LIBRARY} ${ICU_I18N_LIBRARY}
241289
${LIBXML2_LIBRARIES}
242290
${libdispatch_ldflags}
243-
${uuid_LIBRARIES}
244-
-Xlinker;-rpath;-Xlinker;"\\\$\$ORIGIN"
291+
-L${CMAKE_CURRENT_BINARY_DIR}
292+
-luuid
293+
${Foundation_rpath_flags}
245294
SWIFT_FLAGS
246295
-DDEPLOYMENT_RUNTIME_SWIFT
247296
${deployment_enable_libdispatch}
248297
-I;${ICU_INCLUDE_DIR}
249298
${libdispatch_cflags}
250299
${swift_enable_testing}
251-
${swift_optimization_flags})
252-
add_dependencies(Foundation CoreFoundation)
300+
${swift_optimization_flags}
301+
DEPENDS
302+
CoreFoundation)
303+
304+
if(NOT BUILD_SHARED_LIBS)
305+
set(Foundation_INTERFACE_LIBRARIES
306+
-L${install_dir}/usr/lib
307+
-lCoreFoundation
308+
-L${CMAKE_CURRENT_BINARY_DIR}
309+
-luuid
310+
${CURL_LIBRARIES}
311+
${ICU_UC_LIBRARY}
312+
${ICU_I18N_LIBRARY}
313+
${LIBXML2_LIBRARIES})
314+
endif()
253315

254316
add_swift_executable(plutil
255317
SOURCES
256318
Tools/plutil/main.swift
257319
CFLAGS
320+
${deployment_target}
258321
${deployment_enable_libdispatch}
259322
-F${install_dir}/System/Library/Frameworks
260323
LINK_FLAGS
261-
-L${CMAKE_CURRENT_BINARY_DIR}
262324
${libdispatch_ldflags}
325+
-L${CMAKE_CURRENT_BINARY_DIR}
263326
-lFoundation
327+
${Foundation_INTERFACE_LIBRARIES}
328+
-Xlinker;-rpath;-Xlinker;"\\\$\$ORIGIN/../lib/swift/${swift_os}"
264329
SWIFT_FLAGS
265330
-DDEPLOYMENT_RUNTIME_SWIFT
266331
${deployment_enable_libdispatch}
267332
-I;${CMAKE_CURRENT_BINARY_DIR}/swift
268333
-I;${ICU_INCLUDE_DIR}
269334
${libdispatch_cflags}
270335
${swift_enable_testing}
271-
${swift_optimization_flags})
272-
add_dependencies(plutil Foundation CoreFoundation)
336+
${swift_optimization_flags}
337+
DEPENDS
338+
uuid
339+
Foundation
340+
CoreFoundation)
273341

274342
if(ENABLE_TESTING)
275343
add_swift_executable(xdgTestHelper
276344
CFLAGS
345+
${deployment_target}
277346
${deployment_enable_libdispatch}
278347
-F${install_dir}/System/Library/Frameworks
279348
LINK_FLAGS
280349
${libdispatch_ldflags}
281350
-L${CMAKE_CURRENT_BINARY_DIR}
282351
-lFoundation
352+
${Foundation_INTERFACE_LIBRARIES}
283353
SOURCES
284354
TestFoundation/xdgTestHelper/main.swift
285355
SWIFT_FLAGS
286356
-I;${CMAKE_CURRENT_BINARY_DIR}/swift
287357
-I;${ICU_INCLUDE_DIR}
288-
${libdispatch_cflags})
289-
add_dependencies(xdgTestHelper Foundation CoreFoundation)
358+
${libdispatch_cflags}
359+
DEPENDS
360+
uuid
361+
Foundation
362+
CoreFoundation)
290363

291364
add_swift_executable(TestFoundation
292365
SOURCES
@@ -375,6 +448,7 @@ if(ENABLE_TESTING)
375448
TestFoundation/TestURL.swift
376449
TestFoundation/TestUserDefaults.swift
377450
TestFoundation/TestUtils.swift
451+
TestFoundation/TestUUID.swift
378452
TestFoundation/TestXMLDocument.swift
379453
TestFoundation/TestXMLParser.swift
380454
CFLAGS
@@ -384,6 +458,7 @@ if(ENABLE_TESTING)
384458
${libdispatch_ldflags}
385459
-L${CMAKE_CURRENT_BINARY_DIR}
386460
-lFoundation
461+
${Foundation_INTERFACE_LIBRARIES}
387462
-L${FOUNDATION_PATH_TO_XCTEST_BUILD}
388463
-lXCTest
389464
RESOURCES
@@ -416,8 +491,11 @@ if(ENABLE_TESTING)
416491
-I;${FOUNDATION_PATH_TO_XCTEST_BUILD}/swift
417492
-I;${ICU_INCLUDE_DIR}
418493
${libdispatch_cflags}
419-
${swift_optimization_flags})
420-
add_dependencies(TestFoundation Foundation CoreFoundation xdgTestHelper)
494+
${swift_optimization_flags}
495+
DEPENDS
496+
Foundation
497+
CoreFoundation
498+
xdgTestHelper)
421499

422500
add_custom_command(TARGET TestFoundation
423501
POST_BUILD
@@ -442,19 +520,23 @@ if(ENABLE_TESTING)
442520
${CMAKE_CURRENT_BINARY_DIR}/TestFoundation/xdgTestHelper${CMAKE_EXECUTABLE_SUFFIX})
443521
endif()
444522

445-
string(TOLOWER ${CMAKE_SYSTEM_NAME} swift_os)
446-
get_swift_host_arch(swift_arch)
447-
448523
# TODO(compnerd) honour lib vs lib64
449524
install(FILES
450525
${CMAKE_CURRENT_BINARY_DIR}/swift/Foundation.swiftdoc
451526
${CMAKE_CURRENT_BINARY_DIR}/swift/Foundation.swiftmodule
452527
DESTINATION
453528
lib/swift/${swift_os}/${swift_arch})
454-
install(FILES
455-
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}Foundation${CMAKE_SHARED_LIBRARY_SUFFIX}
456-
DESTINATION
457-
lib/swift/${swift_os})
529+
if(BUILD_SHARED_LIBS)
530+
install(FILES
531+
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}Foundation${CMAKE_SHARED_LIBRARY_SUFFIX}
532+
DESTINATION
533+
lib/swift/${swift_os})
534+
else()
535+
install(FILES
536+
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}Foundation${CMAKE_STATIC_LIBRARY_SUFFIX}
537+
DESTINATION
538+
lib/swift_static/${swift_os})
539+
endif()
458540
# TODO(compnerd) install as a Framework as that is how swift actually is built
459541
install(DIRECTORY
460542
${install_dir}/System/Library/Frameworks/CoreFoundation.framework/Headers/
@@ -465,13 +547,7 @@ install(FILES
465547
CoreFoundation/Base.subproj/module.map
466548
DESTINATION
467549
lib/swift/CoreFoundation)
468-
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
469-
install(FILES
470-
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}Foundation${CMAKE_SHARED_LIBRARY_SUFFIX}
471-
DESTINATION
472-
lib/swift/${swift_os}/${swift_arch})
473-
endif()
474-
install(FILES
550+
install(PROGRAMS
475551
${CMAKE_CURRENT_BINARY_DIR}/plutil
476552
DESTINATION
477553
${CMAKE_INSTALL_FULL_BINDIR})

CoreFoundation/AppServices.subproj/CFUserNotification.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,18 @@
1717
#include "CFRuntime_Internal.h"
1818
#include <CoreFoundation/CFMachPort.h>
1919
#include <stdlib.h>
20-
#include <unistd.h>
2120
#include <stdio.h>
2221
#include <mach/mach.h>
2322
#include <mach/error.h>
2423
#include <limits.h>
2524
#include <errno.h>
25+
26+
#if __has_include(<unistd.h>)
27+
#include <unistd.h>
28+
#endif
29+
#if _POSIX_THREADS
2630
#include <pthread.h>
31+
#endif
2732

2833
#define CFUserNotificationLog(alertHeader, alertMessage) CFLog(3, CFSTR("%@: %@"), alertHeader, alertMessage);
2934

CoreFoundation/Base.subproj/CFAsmMacros.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
/* Use .note.GNU-stack to explicitly indicate a non-exec stack, b/c of bad */
1818
/* default behaviour when translating handwritten assembly files (needed on */
19-
/* GNU/* platforms, Android and FreeBSD, as tests have shown). */
19+
/* GNU platforms, Android and FreeBSD, as tests have shown). */
2020
/* Platform tests are documented at http://git.savannah.gnu.org/gitweb/?p=libffcall.git;a=blob;f=porting-tools/execstack/README */
2121
#if (defined(__GNUC__) || defined (__llvm__) || defined (__clang__)) && defined(__ELF__) && (defined (__linux__) || defined (__linux) || defined (__gnu_linux__) || defined(__FreeBSD__) || defined (__FreeBSD_kernel__))
2222
#define NO_EXEC_STACK_DIRECTIVE .section .note.GNU-stack,"",%progbits

CoreFoundation/Base.subproj/CFBase.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@
1111
#include <CoreFoundation/CFBase.h>
1212
#include "CFInternal.h"
1313
#include "CFRuntime_Internal.h"
14-
#if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_EMBEDDED || DEPLOYMENT_TARGET_EMBEDDED_MINI || DEPLOYMENT_TARGET_LINUX || DEPLOYMENT_TARGET_FREEBSD
14+
#if __has_include(<unistd.h>)
15+
#include <unistd.h>
16+
#endif
17+
#if _POSIX_THREADS
1518
#include <pthread.h>
1619
#endif
1720
#if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_EMBEDDED || DEPLOYMENT_TARGET_EMBEDDED_MINI
@@ -102,9 +105,6 @@ CF_INLINE CFAllocatorPreferredSizeCallBack __CFAllocatorGetPreferredSizeFunction
102105
}
103106

104107
static const void * const __MallocDefaultZoneInfoPlaceholder = NULL;
105-
#if !TARGET_OS_MAC
106-
#define malloc_default_zone() (NULL)
107-
#endif
108108

109109
#if TARGET_OS_MAC
110110

CoreFoundation/Base.subproj/CFBase.h

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -127,16 +127,20 @@
127127
#endif
128128

129129
#if TARGET_OS_WIN32
130-
#if !defined(CF_EXPORT)
131-
#if defined(CF_BUILDING_CF) && defined(__cplusplus)
132-
#define CF_EXPORT extern "C" __declspec(dllexport)
133-
#elif defined(CF_BUILDING_CF) && !defined(__cplusplus)
134-
#define CF_EXPORT extern __declspec(dllexport)
135-
#elif defined(__cplusplus)
136-
#define CF_EXPORT extern "C" __declspec(dllimport)
130+
#if defined(__cplusplus)
131+
#define _CF_EXTERN extern "C"
132+
#else
133+
#define _CF_EXTERN extern
134+
#endif
135+
136+
#if defined(_USRDLL)
137+
#if defined(CoreFoundation_EXPORTS)
138+
#define CF_EXPORT _CF_EXTERN __declspec(dllexport)
137139
#else
138-
#define CF_EXPORT extern __declspec(dllimport)
140+
#define CF_EXPORT _CF_EXTERN __declspec(dllimport)
139141
#endif
142+
#else
143+
#define CF_EXPORT _CF_EXTERN
140144
#endif
141145
#else
142146
#define CF_EXPORT extern

CoreFoundation/Base.subproj/CFFileUtilities.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1015,6 +1015,7 @@ CF_PRIVATE CFIndex _CFLengthAfterDeletingPathExtension(UniChar *unichars, CFInde
10151015
#define DT_DIR 4
10161016
#define DT_REG 8
10171017
#define DT_LNK 10
1018+
#define DT_UNKNOWN 0
10181019
#endif
10191020

10201021
// NOTE: on Windows the filename is UTF16-encoded, the fileNameLen is result of wcslen. This function automatically skips '.' and '..', and '._' files
@@ -1023,7 +1024,6 @@ CF_PRIVATE void _CFIterateDirectory(CFStringRef directoryPath, Boolean appendSla
10231024
if (!CFStringGetFileSystemRepresentation(directoryPath, directoryPathBuf, CFMaxPathSize)) return;
10241025

10251026
#if DEPLOYMENT_TARGET_WINDOWS
1026-
#error this path does not support calculateFullResultPath but it must do so someday
10271027
CFIndex cpathLen = strlen(directoryPathBuf);
10281028
// Make sure there is room for the additional space we need in the win32 api
10291029
if (cpathLen + 2 < CFMaxPathSize) {
@@ -1059,7 +1059,7 @@ CF_PRIVATE void _CFIterateDirectory(CFStringRef directoryPath, Boolean appendSla
10591059
}
10601060

10611061
Boolean isDirectory = file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
1062-
Boolean result = fileHandler(fileName, isDirectory ? DT_DIR : DT_REG);
1062+
Boolean result = fileHandler(fileName, NULL, isDirectory ? DT_DIR : DT_REG);
10631063
CFRelease(fileName);
10641064
if (!result) break;
10651065
} while (FindNextFileW(handle, &file));

0 commit comments

Comments
 (0)