Skip to content

Commit 539fd59

Browse files
committed
Update Package.swift
1 parent 66b80e5 commit 539fd59

File tree

2 files changed

+67
-71
lines changed

2 files changed

+67
-71
lines changed

Package.resolved

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Package.swift

Lines changed: 66 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,18 @@ final class EnvManager {
1515
domains.append(domain)
1616
}
1717

18+
func withDomain<T>(_ domain: String, perform: () throws -> T) rethrows -> T {
19+
domains.append(domain)
20+
defer { domains.removeAll { $0 == domain } }
21+
return try perform()
22+
}
23+
1824
private func envValue<T>(
1925
rawKey: String,
20-
default defaultValue: T,
26+
default defaultValue: T?,
2127
searchInDomain: Bool,
2228
parser: (String) -> T?
23-
) -> T {
29+
) -> T? {
2430
func parseEnvValue(_ key: String) -> (String, T)? {
2531
guard let value = Context.environment[key] else {
2632
return nil
@@ -40,11 +46,13 @@ final class EnvManager {
4046
}
4147
}
4248
let primaryKey = keys.first ?? rawKey
43-
print("[Env] \(primaryKey) not set -> \(defaultValue)(default)")
49+
if let defaultValue {
50+
print("[Env] \(primaryKey) not set -> \(defaultValue)(default)")
51+
}
4452
return defaultValue
4553
}
4654

47-
func envBoolValue(rawKey: String, default defaultValue: Bool, searchInDomain: Bool) -> Bool {
55+
func envBoolValue(rawKey: String, default defaultValue: Bool? = nil, searchInDomain: Bool) -> Bool? {
4856
envValue(rawKey: rawKey, default: defaultValue, searchInDomain: searchInDomain) { value in
4957
switch value {
5058
case "1": true
@@ -54,11 +62,11 @@ final class EnvManager {
5462
}
5563
}
5664

57-
func envIntValue(rawKey: String, default defaultValue: Int, searchInDomain: Bool) -> Int {
65+
func envIntValue(rawKey: String, default defaultValue: Int? = nil, searchInDomain: Bool) -> Int? {
5866
envValue(rawKey: rawKey, default: defaultValue, searchInDomain: searchInDomain) { Int($0) }
5967
}
6068

61-
func envStringValue(rawKey: String, default defaultValue: String, searchInDomain: Bool) -> String {
69+
func envStringValue(rawKey: String, default defaultValue: String? = nil, searchInDomain: Bool) -> String? {
6270
envValue(rawKey: rawKey, default: defaultValue, searchInDomain: searchInDomain) { $0 }
6371
}
6472
}
@@ -67,19 +75,23 @@ EnvManager.shared.register(domain: "OpenSwiftUI")
6775

6876
@MainActor
6977
func envBoolValue(_ key: String, default defaultValue: Bool = false, searchInDomain: Bool = true) -> Bool {
70-
EnvManager.shared.envBoolValue(rawKey: key, default: defaultValue, searchInDomain: searchInDomain)
78+
EnvManager.shared.envBoolValue(rawKey: key, default: defaultValue, searchInDomain: searchInDomain)!
7179
}
7280

7381
@MainActor
74-
func envIntValue(_ key: String, default defaultValue: Int, searchInDomain: Bool = true) -> Int {
75-
EnvManager.shared.envIntValue(rawKey: key, default: defaultValue, searchInDomain: searchInDomain)
82+
func envIntValue(_ key: String, default defaultValue: Int = 0, searchInDomain: Bool = true) -> Int {
83+
EnvManager.shared.envIntValue(rawKey: key, default: defaultValue, searchInDomain: searchInDomain)!
7684
}
7785

7886
@MainActor
7987
func envStringValue(_ key: String, default defaultValue: String, searchInDomain: Bool = true) -> String {
80-
EnvManager.shared.envStringValue(rawKey: key, default: defaultValue, searchInDomain: searchInDomain)
88+
EnvManager.shared.envStringValue(rawKey: key, default: defaultValue, searchInDomain: searchInDomain)!
8189
}
8290

91+
@MainActor
92+
func envStringValue(_ key: String, searchInDomain: Bool = true) -> String? {
93+
EnvManager.shared.envStringValue(rawKey: key, searchInDomain: searchInDomain)
94+
}
8395

8496
// MARK: - Env and config
8597

@@ -89,31 +101,41 @@ let buildForDarwinPlatform = envBoolValue("BUILD_FOR_DARWIN_PLATFORM", default:
89101
#else
90102
let buildForDarwinPlatform = envBoolValue("BUILD_FOR_DARWIN_PLATFORM")
91103
#endif
104+
92105
// https://github.com/SwiftPackageIndex/SwiftPackageIndex-Server/issues/3061#issuecomment-2118821061
93106
// By-pass https://github.com/swiftlang/swift-package-manager/issues/7580
94107
let isSPIDocGenerationBuild = envBoolValue("SPI_GENERATE_DOCS", searchInDomain: false)
95108
let isSPIBuild = envBoolValue("SPI_BUILD", searchInDomain: false)
96109

97-
let isXcodeEnv = Context.environment["__CFBundleIdentifier"] == "com.apple.dt.Xcode"
110+
let isXcodeEnv = envStringValue("__CFBundleIdentifier", searchInDomain: false) == "com.apple.dt.Xcode"
98111
let development = envBoolValue("DEVELOPMENT", default: false)
112+
let warningsAsErrorsCondition = envBoolValue("WERROR", default: isXcodeEnv && development)
99113

100114
let libSwiftPath = {
101115
// From Swift toolchain being installed or from Swift SDK.
102-
guard let libSwiftPath = Context.environment["OPENATTRIBUTEGRAPH_LIB_SWIFT_PATH"] else {
116+
guard let libSwiftPath = envStringValue("LIB_SWIFT_PATH") else {
103117
// Fallback when LIB_SWIFT_PATH is not set
104-
let swiftBinPath = Context.environment["OPENATTRIBUTEGRAPH_BIN_SWIFT_PATH"] ?? Context.environment["_"] ?? "/usr/bin/swift"
118+
let swiftBinPath = envStringValue("BIN_SWIFT_PATH") ?? envStringValue("_", searchInDomain: false) ?? "/usr/bin/swift"
105119
let swiftBinURL = URL(fileURLWithPath: swiftBinPath)
106120
let SDKPath = swiftBinURL.deletingLastPathComponent().deletingLastPathComponent().deletingLastPathComponent().path
107121
return SDKPath.appending("/usr/lib/swift")
108122
}
109123
return libSwiftPath
110124
}()
111125

112-
let swiftToolchainPath = Context.environment["OPENATTRIBUTEGRAPH_SWIFT_TOOLCHAIN_PATH"] ?? (development ? "/Volumes/BuildMachine/swift-project" : "")
113-
let swiftToolchainVersion = Context.environment["OPENATTRIBUTEGRAPH_SWIFT_TOOLCHAIN_VERSION"] ?? (development ? "6.0.2" : "")
126+
let swiftToolchainPath = envStringValue("SWIFT_TOOLCHAIN_PATH") ?? (development ? "/Volumes/BuildMachine/swift-project" : "")
127+
let swiftToolchainVersion = envStringValue("SWIFT_TOOLCHAIN_VERSION") ?? (development ? "6.0.2" : "")
114128
let swiftToolchainSupported = envBoolValue("SWIFT_TOOLCHAIN_SUPPORTED", default: !swiftToolchainVersion.isEmpty)
115129

130+
let releaseVersion = envIntValue("TARGET_RELEASE", default: 2024)
131+
132+
let libraryEvolutionCondition = envBoolValue("LIBRARY_EVOLUTION", default: buildForDarwinPlatform)
133+
let compatibilityTestCondition = envBoolValue("COMPATIBILITY_TEST", default: false)
134+
135+
let useLocalDeps = envBoolValue("USE_LOCAL_DEPS")
136+
let attributeGraphCondition = envBoolValue("ATTRIBUTEGRAPH", default: buildForDarwinPlatform && !isSPIBuild)
116137

138+
// MARK: - Shared Settings
117139

118140
var sharedCSettings: [CSetting] = [
119141
.unsafeFlags(["-I", libSwiftPath], .when(platforms: .nonDarwinPlatforms)),
@@ -124,9 +146,9 @@ var sharedSwiftSettings: [SwiftSetting] = [
124146
.enableUpcomingFeature("InternalImportsByDefault"),
125147
.enableExperimentalFeature("Extern"),
126148
.swiftLanguageMode(.v5),
127-
]
128149

129-
// MARK: [env] OPENATTRIBUTEGRAPH_SWIFT_TOOLCHAIN_PATH
150+
.define("OPENATTRIBUTEGRAPH_RELEASE_\(releaseVersion)"),
151+
]
130152

131153
// Modified from: https://github.com/swiftlang/swift/blob/main/SwiftCompilerSources/Package.swift
132154
//
@@ -161,58 +183,52 @@ if !swiftToolchainPath.isEmpty {
161183
)
162184
)
163185
}
164-
165-
// MARK: [env] OPENATTRIBUTEGRAPH_SWIFT_TOOLCHAIN_VERSION
166-
167186
if !swiftToolchainVersion.isEmpty {
168187
sharedCSettings.append(
169188
.define("OPENATTRIBUTEGRAPH_SWIFT_TOOLCHAIN_VERSION", to: swiftToolchainVersion)
170189
)
171190
}
172-
173-
// MARK: - [env] OPENATTRIBUTEGRAPH_SWIFT_TOOLCHAIN_SUPPORTED
174-
175191
if swiftToolchainSupported {
176192
sharedCSettings.append(.define("OPENATTRIBUTEGRAPH_SWIFT_TOOLCHAIN_SUPPORTED"))
177193
sharedSwiftSettings.append(.define("OPENATTRIBUTEGRAPH_SWIFT_TOOLCHAIN_SUPPORTED"))
178194
}
179-
180-
// MARK: - [env] OPENATTRIBUTEGRAPH_TARGET_RELEASE
181-
182-
let releaseVersion = Context.environment["OPENATTRIBUTEGRAPH_TARGET_RELEASE"].flatMap { Int($0) } ?? 2024
183-
//sharedCSettings.append(.define("OPENATTRIBUTEGRAPH_RELEASE", to: "\(releaseVersion)"))
184-
sharedSwiftSettings.append(.define("OPENATTRIBUTEGRAPH_RELEASE_\(releaseVersion)"))
185195
if releaseVersion >= 2021 {
186196
for year in 2021 ... releaseVersion {
187197
sharedSwiftSettings.append(.define("OPENATTRIBUTEGRAPH_SUPPORT_\(year)_API"))
188198
}
189199
}
190-
191-
// MARK: - [env] OPENATTRIBUTEGRAPH_WERROR
192-
193-
let warningsAsErrorsCondition = envBoolValue("WERROR", default: isXcodeEnv && development)
194200
if warningsAsErrorsCondition {
195201
sharedSwiftSettings.append(.unsafeFlags(["-warnings-as-errors"]))
196202
}
197-
198-
// MARK: - [env] OPENATTRIBUTEGRAPH_LIBRARY_EVOLUTION
199-
200-
let libraryEvolutionCondition = envBoolValue("LIBRARY_EVOLUTION", default: buildForDarwinPlatform)
201-
202203
if libraryEvolutionCondition {
203204
// NOTE: -enable-library-evolution will cause module verify failure for `swift build`.
204205
// Either set OPENATTRIBUTEGRAPH_LIBRARY_EVOLUTION=0 or add `-Xswiftc -no-verify-emitted-module-interface` after `swift build`
205206
sharedSwiftSettings.append(.unsafeFlags(["-enable-library-evolution", "-no-verify-emitted-module-interface"]))
206207
}
207-
208-
// MARK: - [env] OPENATTRIBUTEGRAPH_COMPATIBILITY_TEST
209-
210-
let compatibilityTestCondition = envBoolValue("COMPATIBILITY_TEST", default: false)
211-
sharedCSettings.append(.define("OPENATTRIBUTEGRAPH", to: compatibilityTestCondition ? "1" : "0"))
212208
if !compatibilityTestCondition {
209+
sharedCSettings.append(.define("OPENATTRIBUTEGRAPH"))
213210
sharedSwiftSettings.append(.define("OPENATTRIBUTEGRAPH"))
214211
}
215212

213+
// MARK: - Extension
214+
215+
extension Target {
216+
func addAGSettings() {
217+
dependencies.append(
218+
.product(name: "AttributeGraph", package: "DarwinPrivateFrameworks")
219+
)
220+
var swiftSettings = swiftSettings ?? []
221+
swiftSettings.append(.define("OPENATTRIBUTEGRAPH_ATTRIBUTEGRAPH"))
222+
self.swiftSettings = swiftSettings
223+
}
224+
}
225+
226+
extension [Platform] {
227+
static var nonDarwinPlatforms: [Platform] {
228+
[.linux, .android, .wasi, .openbsd, .windows]
229+
}
230+
}
231+
216232
// MARK: - Targets
217233

218234
let openAttributeGraphTarget = Target.target(
@@ -297,35 +313,20 @@ let package = Package(
297313
cxxLanguageStandard: .cxx20
298314
)
299315

300-
extension Target {
301-
func addAGSettings() {
302-
dependencies.append(
303-
.product(name: "AttributeGraph", package: "DarwinPrivateFrameworks")
304-
)
305-
var swiftSettings = swiftSettings ?? []
306-
swiftSettings.append(.define("OPENATTRIBUTEGRAPH_ATTRIBUTEGRAPH"))
307-
self.swiftSettings = swiftSettings
308-
}
309-
}
310-
311-
if !compatibilityTestCondition {
316+
if compatibilityTestCondition {
317+
openAttributeGraphCompatibilityTestsTarget.addAGSettings()
318+
} else {
312319
package.targets += [
313320
openAttributeGraphTestsTarget,
314321
openAttributeGraphCxxTestsTarget,
315322
openAttributeGraphShimsTestsTarget,
316323
]
317-
} else {
318-
openAttributeGraphCompatibilityTestsTarget.addAGSettings()
319324
}
320325

321326
if buildForDarwinPlatform {
322327
package.targets.append(openAttributeGraphCompatibilityTestsTarget)
323328
}
324329

325-
let useLocalDeps = envBoolValue("USE_LOCAL_DEPS")
326-
327-
let attributeGraphCondition = envBoolValue("ATTRIBUTEGRAPH", default: buildForDarwinPlatform && !isSPIBuild)
328-
329330
if attributeGraphCondition {
330331
let privateFrameworkRepo: Package.Dependency
331332
if useLocalDeps {
@@ -335,8 +336,10 @@ if attributeGraphCondition {
335336
}
336337
package.dependencies.append(privateFrameworkRepo)
337338
openAttributeGraphShimsTarget.addAGSettings()
338-
339-
let agVersion = Context.environment["DARWIN_PRIVATE_FRAMEWORKS_TARGET_RELEASE"].flatMap { Int($0) } ?? 2024
339+
340+
let agVersion = EnvManager.shared.withDomain("DARWIN_PRIVATE_FRAMEWORKS") {
341+
envIntValue("TARGET_RELEASE", default: 2024)
342+
}
340343
package.platforms = switch agVersion {
341344
case 2024: [.iOS(.v18), .macOS(.v15), .macCatalyst(.v18), .tvOS(.v18), .watchOS(.v10), .visionOS(.v2)]
342345
case 2021: [.iOS(.v15), .macOS(.v12), .macCatalyst(.v15), .tvOS(.v15), .watchOS(.v7)]
@@ -346,10 +349,3 @@ if attributeGraphCondition {
346349
openAttributeGraphShimsTarget.dependencies.append("OpenAttributeGraph")
347350
package.platforms = [.iOS(.v13), .macOS(.v10_15), .macCatalyst(.v13), .tvOS(.v13), .watchOS(.v5)]
348351
}
349-
350-
351-
extension [Platform] {
352-
static var nonDarwinPlatforms: [Platform] {
353-
[.linux, .android, .wasi, .openbsd, .windows]
354-
}
355-
}

0 commit comments

Comments
 (0)