Skip to content

Commit 9b72122

Browse files
committed
Add a post-Swift-5.7-specific Package.swift file
1 parent 4397f80 commit 9b72122

File tree

2 files changed

+126
-13
lines changed

2 files changed

+126
-13
lines changed

Package.swift

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,6 @@ import PackageDescription
44
import Foundation
55

66

7-
/* ⚠️ Do not use the concurrency check flags in a release! */
8-
let noSwiftSettings: [SwiftSetting] = []
9-
//let concurrencySwiftSettings: [SwiftSetting] = [.unsafeFlags(["-Xfrontend", "-warn-concurrency", "-Xfrontend", "-enable-actor-data-race-checks"])]
10-
11-
127
/* Detect if we need the eXtenderZ.
138
* If we do (on Apple platforms where the non-public Foundation implementation is used), the eXtenderZ should be able to be imported.
149
* See Process+Utils for reason why we use the eXtenderZ. */
@@ -67,7 +62,7 @@ let package = Package(
6762
/* The ProcessInvocation depends (indirectly) on the bridge. */
6863
res.append(.target(name: "ProcessInvocationBridge"))
6964
return res
70-
}(), swiftSettings: noSwiftSettings))
65+
}()))
7166

7267
res.append(.executableTarget(name: "ProcessInvocationBridge", dependencies: {
7368
var res = [Target.Dependency]()
@@ -81,7 +76,7 @@ let package = Package(
8176
res.append(.target(name: "CGNUSourceExports"))
8277
}
8378
return res
84-
}(), swiftSettings: noSwiftSettings))
79+
}()))
8580

8681
res.append(.testTarget(name: "ProcessInvocationTests", dependencies: {
8782
var res = [Target.Dependency]()
@@ -94,16 +89,16 @@ let package = Package(
9489
res.append(.target(name: "CGNUSourceExportsForTests"))
9590
}
9691
return res
97-
}(), swiftSettings: noSwiftSettings))
92+
}()))
9893

9994
/* Some complex macros exported as functions to be used in Swift. */
100-
res.append(.target(name: "CMacroExports", swiftSettings: noSwiftSettings))
95+
res.append(.target(name: "CMacroExports"))
10196
if useXtenderZ {
102-
res.append(.target(name: "CNSTaskHelptender", dependencies: [.product(name: "eXtenderZ-static", package: "eXtenderZ")], swiftSettings: noSwiftSettings))
97+
res.append(.target(name: "CNSTaskHelptender", dependencies: [.product(name: "eXtenderZ-static", package: "eXtenderZ")]))
10398
}
10499
if needsGNUSourceExports {
105-
res.append(.target(name: "CGNUSourceExports", swiftSettings: noSwiftSettings))
106-
res.append(.target(name: "CGNUSourceExportsForTests", swiftSettings: noSwiftSettings))
100+
res.append(.target(name: "CGNUSourceExports"))
101+
res.append(.target(name: "CGNUSourceExportsForTests"))
107102
}
108103

109104
/* Some manual tests for stdin redirect behavior. */
@@ -112,7 +107,7 @@ let package = Package(
112107
.product(name: "CLTLogger", package: "clt-logger"),
113108
.product(name: "Logging", package: "swift-log"),
114109
.product(name: "StreamReader", package: "stream-reader"),
115-
], swiftSettings: noSwiftSettings))
110+
]))
116111

117112
return res
118113
}()

[email protected]

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
// swift-tools-version:5.5
2+
import PackageDescription
3+
4+
import Foundation
5+
6+
7+
//let swiftSettings: [SwiftSetting] = []
8+
let swiftSettings: [SwiftSetting] = [.enableExperimentalFeature("StrictConcurrency")]
9+
10+
11+
/* Detect if we need the eXtenderZ.
12+
* If we do (on Apple platforms where the non-public Foundation implementation is used), the eXtenderZ should be able to be imported.
13+
* See Process+Utils for reason why we use the eXtenderZ. */
14+
let useXtenderZ = (NSStringFromClass(Process().classForCoder) != "NSTask")
15+
/* Do we need the _GNU_SOURCE exports? This allows using execvpe on Linux. */
16+
#if canImport(Darwin)
17+
let needsGNUSourceExports = false
18+
#else
19+
let needsGNUSourceExports = true
20+
#endif
21+
22+
let isXcode = ProcessInfo.processInfo.environment["__CFBundleIdentifier"]?.lowercased().contains("xcode") ?? false
23+
let executableName = isXcode ? "ProcessInvocationBridge" : "swift-process-invocation-bridge"
24+
25+
26+
let package = Package(
27+
name: "swift-process-invocation",
28+
platforms: [.macOS(.v11)],
29+
products: [
30+
.library(name: "ProcessInvocation", targets: ["ProcessInvocation"]),
31+
/* A launcher for forwarding fds when needed. */
32+
.executable(name: executableName, targets: ["ProcessInvocationBridge"])
33+
],
34+
dependencies: {
35+
var res = [Package.Dependency]()
36+
res.append(.package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.2.2"))
37+
res.append(.package(url: "https://github.com/apple/swift-log.git", from: "1.5.2"))
38+
res.append(.package(url: "https://github.com/apple/swift-system.git", from: "1.0.0")) /* We’re aware of the existence of System on macOS. After some thinking/research, we decided to agree with <https://forums.swift.org/t/50719/5>. */
39+
res.append(.package(url: "https://github.com/Frizlab/UnwrapOrThrow.git", from: "1.0.1"))
40+
res.append(.package(url: "https://github.com/xcode-actions/clt-logger.git", from: "1.0.0-beta.4"))
41+
res.append(.package(url: "https://github.com/xcode-actions/stream-reader.git", from: "3.6.0"))
42+
res.append(.package(url: "https://github.com/xcode-actions/swift-signal-handling.git", .upToNextMinor(from: "1.1.2")))
43+
if useXtenderZ {
44+
res.append(.package(url: "https://github.com/Frizlab/eXtenderZ.git", from: "2.0.0"))
45+
}
46+
return res
47+
}(),
48+
targets: {
49+
var res = [Target]()
50+
51+
res.append(.target(name: "ProcessInvocation", dependencies: {
52+
var res = [Target.Dependency]()
53+
res.append(.product(name: "Logging", package: "swift-log"))
54+
res.append(.product(name: "SignalHandling", package: "swift-signal-handling"))
55+
res.append(.product(name: "StreamReader", package: "stream-reader"))
56+
res.append(.product(name: "UnwrapOrThrow", package: "UnwrapOrThrow"))
57+
res.append(.product(name: "SystemPackage", package: "swift-system"))
58+
res.append(.target(name: "CMacroExports"))
59+
if useXtenderZ {
60+
res.append(.product(name: "eXtenderZ-static", package: "eXtenderZ"))
61+
res.append(.target(name: "CNSTaskHelptender"))
62+
}
63+
if needsGNUSourceExports {
64+
res.append(.target(name: "CGNUSourceExports"))
65+
}
66+
/* The ProcessInvocation depends (indirectly) on the bridge. */
67+
res.append(.target(name: "ProcessInvocationBridge"))
68+
return res
69+
}(), swiftSettings: swiftSettings))
70+
71+
res.append(.executableTarget(name: "ProcessInvocationBridge", dependencies: {
72+
var res = [Target.Dependency]()
73+
res.append(.product(name: "ArgumentParser", package: "swift-argument-parser"))
74+
res.append(.product(name: "CLTLogger", package: "clt-logger"))
75+
res.append(.product(name: "Logging", package: "swift-log"))
76+
res.append(.product(name: "StreamReader", package: "stream-reader"))
77+
res.append(.product(name: "SystemPackage", package: "swift-system"))
78+
res.append(.target(name: "CMacroExports"))
79+
if needsGNUSourceExports {
80+
res.append(.target(name: "CGNUSourceExports"))
81+
}
82+
return res
83+
}(), swiftSettings: swiftSettings))
84+
85+
res.append(.testTarget(name: "ProcessInvocationTests", dependencies: {
86+
var res = [Target.Dependency]()
87+
res.append(.target(name: "ProcessInvocation")) /* <- Tested package */
88+
res.append(.product(name: "CLTLogger", package: "clt-logger"))
89+
res.append(.product(name: "Logging", package: "swift-log"))
90+
res.append(.product(name: "StreamReader", package: "stream-reader"))
91+
res.append(.product(name: "SystemPackage", package: "swift-system"))
92+
if needsGNUSourceExports {
93+
res.append(.target(name: "CGNUSourceExportsForTests"))
94+
}
95+
return res
96+
}(), swiftSettings: swiftSettings))
97+
98+
/* Some complex macros exported as functions to be used in Swift. */
99+
res.append(.target(name: "CMacroExports", swiftSettings: swiftSettings))
100+
if useXtenderZ {
101+
res.append(.target(name: "CNSTaskHelptender", dependencies: [.product(name: "eXtenderZ-static", package: "eXtenderZ")], swiftSettings: swiftSettings))
102+
}
103+
if needsGNUSourceExports {
104+
res.append(.target(name: "CGNUSourceExports", swiftSettings: swiftSettings))
105+
res.append(.target(name: "CGNUSourceExportsForTests", swiftSettings: swiftSettings))
106+
}
107+
108+
/* Some manual tests for stdin redirect behavior. */
109+
res.append(.executableTarget(name: "ManualTests", dependencies: [
110+
.target(name: "ProcessInvocation"), /* <- Tested package */
111+
.product(name: "CLTLogger", package: "clt-logger"),
112+
.product(name: "Logging", package: "swift-log"),
113+
.product(name: "StreamReader", package: "stream-reader"),
114+
], swiftSettings: swiftSettings))
115+
116+
return res
117+
}()
118+
)

0 commit comments

Comments
 (0)