forked from OpenCombine/OpenCombine
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathPackage.swift
More file actions
147 lines (136 loc) · 4.42 KB
/
Package.swift
File metadata and controls
147 lines (136 loc) · 4.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
// swift-tools-version:5.9
import Foundation
import PackageDescription
// This list should be updated whenever SwiftPM adds support for a new platform.
// See: https://bugs.swift.org/browse/SR-13814
let supportedPlatforms: [Platform] = [
.macOS,
.macCatalyst,
.iOS,
.watchOS,
.tvOS,
.driverKit,
.linux,
.android,
.windows,
.wasi,
.visionOS,
]
let cOpenCombineHelpersTarget: Target = .target(
name: "COpenCombineHelpers"
)
let openCombineShimTarget: Target = .target(
name: "OpenCombineShim",
dependencies: [
"OpenCombine",
.target(name: "OpenCombineDispatch",
condition: .when(platforms: supportedPlatforms.except([.wasi]))),
.target(name: "OpenCombineFoundation",
condition: .when(platforms: supportedPlatforms.except([.wasi]))),
]
)
let openCombineTarget: Target = .target(
name: "OpenCombine",
dependencies: [
.target(
name: "COpenCombineHelpers",
condition: .when(platforms: supportedPlatforms.except([.wasi]))
),
],
exclude: [
"Concurrency/Publisher+Concurrency.swift.gyb",
"Publishers/Publishers.Encode.swift.gyb",
"Publishers/Publishers.MapKeyPath.swift.gyb",
"Publishers/Publishers.Catch.swift.gyb",
]
)
let openCombineFoundationTarget: Target = .target(
name: "OpenCombineFoundation",
dependencies: [
"OpenCombine",
.target(
name: "COpenCombineHelpers",
condition: .when(platforms: supportedPlatforms.except([.wasi]))
),
]
)
let openCombineDispatchTarget: Target = .target(
name: "OpenCombineDispatch",
dependencies: ["OpenCombine"]
)
let openCombineTestsTarget: Target = .testTarget(
name: "OpenCombineTests",
dependencies: [
"OpenCombine",
.target(name: "OpenCombineDispatch",
condition: .when(platforms: supportedPlatforms.except([.wasi]))),
.target(name: "OpenCombineFoundation",
condition: .when(platforms: supportedPlatforms.except([.wasi]))),
],
swiftSettings: [
.unsafeFlags(["-enable-testing"]),
]
)
let package = Package(
name: "OpenCombine",
products: [
.library(name: "OpenCombine", targets: ["OpenCombine"]),
.library(name: "OpenCombineDispatch", targets: ["OpenCombineDispatch"]),
.library(name: "OpenCombineFoundation", targets: ["OpenCombineFoundation"]),
.library(name: "OpenCombineShim", targets: ["OpenCombineShim"]),
],
targets: [
cOpenCombineHelpersTarget,
openCombineShimTarget,
openCombineTarget,
openCombineFoundationTarget,
openCombineDispatchTarget,
openCombineTestsTarget,
],
cxxLanguageStandard: .cxx17
)
// MARK: Helpers
extension [Platform] {
func except(_ exceptions: [Platform]) -> [Platform] {
filter { !exceptions.contains($0) }
}
}
func envEnable(_ key: String, default defaultValue: Bool = false) -> Bool {
guard let value = ProcessInfo.processInfo.environment[key] else {
return defaultValue
}
if value == "1" {
return true
} else if value == "0" {
return false
} else {
return defaultValue
}
}
let enableLibraryEvolution = envEnable("OPENCOMBINE_LIBRARY_EVOLUTION")
if enableLibraryEvolution {
let libraryEvolutionSetting: SwiftSetting = .unsafeFlags([
"-Xfrontend", "-enable-library-evolution",
])
let targets = [openCombineTarget, openCombineFoundationTarget, openCombineDispatchTarget]
for target in targets {
var settings = target.swiftSettings ?? []
settings.append(libraryEvolutionSetting)
target.swiftSettings = settings
}
}
let enableCompatibilityTest = envEnable("OPENCOMBINE_COMPATIBILITY_TEST")
if enableCompatibilityTest {
var settings = openCombineTestsTarget.swiftSettings ?? []
settings.append(.define("OPENCOMBINE_COMPATIBILITY_TEST"))
openCombineTestsTarget.swiftSettings = settings
}
let enableOSLockPrivate = envEnable("OPENCOMBINE_OSLOCK_PRIVATE", default: true)
if enableOSLockPrivate {
var cSettings = cOpenCombineHelpersTarget.cSettings ?? []
cSettings.append(.define("OPENCOMBINE_OSLOCK_PRIVATE"))
cOpenCombineHelpersTarget.cSettings = cSettings
var cxxSettings = cOpenCombineHelpersTarget.cxxSettings ?? []
cxxSettings.append(.define("OPENCOMBINE_OSLOCK_PRIVATE"))
cOpenCombineHelpersTarget.cxxSettings = cxxSettings
}