Skip to content

Commit 3498663

Browse files
committed
Add the underlying support to report the XTVERSION (coming soon)
1 parent a34e595 commit 3498663

4 files changed

Lines changed: 387 additions & 3 deletions

File tree

Package.swift

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,18 @@ let benchmarkDependencies: [Package.Dependency] = (isGitHubActions || disableBen
2222
.package(url: "https://github.com/ordo-one/package-benchmark", .upToNextMajor(from: "1.29.11"))
2323
]
2424

25+
let buildInfoTargets: [Target] = [
26+
.executableTarget(
27+
name: "SwiftTermBuildInfoGenerator",
28+
path: "Sources/SwiftTermBuildInfoGenerator"
29+
),
30+
.plugin(
31+
name: "SwiftTermBuildInfoPlugin",
32+
capability: .buildTool(),
33+
dependencies: ["SwiftTermBuildInfoGenerator"]
34+
)
35+
]
36+
2537
#if os(Windows)
2638
let products: [Product] = [
2739
.executable(name: "SwiftTermFuzz", targets: ["SwiftTermFuzz"]),
@@ -36,7 +48,10 @@ let targets: [Target] = [
3648
name: "SwiftTerm",
3749
dependencies: [],
3850
path: "Sources/SwiftTerm",
39-
exclude: platformExcludes + ["Mac/README.md"]
51+
exclude: platformExcludes + ["Mac/README.md"],
52+
plugins: [
53+
.plugin(name: "SwiftTermBuildInfoPlugin")
54+
]
4055
// swiftSettings: [
4156
// .unsafeFlags(["-enforce-exclusivity=none"])
4257
// ]
@@ -51,7 +66,7 @@ let targets: [Target] = [
5166
dependencies: ["SwiftTerm"],
5267
path: "Tests/SwiftTermTests"
5368
)
54-
]
69+
] + buildInfoTargets
5570
#else
5671
let products: [Product] = [
5772
.executable(name: "SwiftTermFuzz", targets: ["SwiftTermFuzz"]),
@@ -89,6 +104,9 @@ let targets: [Target] = [
89104
exclude: platformExcludes + ["Mac/README.md"],
90105
resources: [
91106
.process("Apple/Metal/Shaders.metal")
107+
],
108+
plugins: [
109+
.plugin(name: "SwiftTermBuildInfoPlugin")
92110
]
93111
// swiftSettings: [
94112
// .unsafeFlags(["-enforce-exclusivity=none"])
@@ -112,7 +130,7 @@ let targets: [Target] = [
112130
dependencies: ["SwiftTerm"],
113131
path: "Tests/SwiftTermTests"
114132
)
115-
] + benchmarkTargets
133+
] + benchmarkTargets + buildInfoTargets
116134
#endif
117135

118136
let package = Package(
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import Foundation
2+
import PackagePlugin
3+
4+
@main
5+
struct SwiftTermBuildInfoPlugin: BuildToolPlugin {
6+
func createBuildCommands(context: PluginContext, target: Target) async throws -> [Command] {
7+
let generator = try context.tool(named: "SwiftTermBuildInfoGenerator")
8+
let outputDirectory = context.pluginWorkDirectoryURL.appendingPathComponent("Generated")
9+
let outputFile = outputDirectory.appendingPathComponent("SwiftTermBuildInfo.swift")
10+
let triggerFile = context.pluginWorkDirectoryURL.appendingPathComponent("build-info-trigger")
11+
let fallbackVariableNames = [
12+
"SWIFTTERM_BUILD_BRANCH",
13+
"SWIFTTERM_BUILD_TAG",
14+
"SWIFTTERM_BUILD_COMMIT",
15+
"SWIFTTERM_BUILD_DIRTY"
16+
]
17+
let processEnvironment = ProcessInfo.processInfo.environment
18+
let fallbackEnvironment = fallbackVariableNames.reduce(into: [String: String]()) { result, name in
19+
if let value = processEnvironment[name] {
20+
result[name] = value
21+
}
22+
}
23+
24+
try FileManager.default.createDirectory(
25+
at: context.pluginWorkDirectoryURL,
26+
withIntermediateDirectories: true
27+
)
28+
try UUID().uuidString.write(to: triggerFile, atomically: true, encoding: .utf8)
29+
30+
return [
31+
.buildCommand(
32+
displayName: "Generate SwiftTerm build information",
33+
executable: generator.url,
34+
arguments: [
35+
context.package.directoryURL.path,
36+
outputFile.path
37+
],
38+
environment: fallbackEnvironment,
39+
inputFiles: [triggerFile],
40+
outputFiles: [outputFile]
41+
)
42+
]
43+
}
44+
}

0 commit comments

Comments
 (0)