From 19c1506c8b9301880f495866c126a497fe320718 Mon Sep 17 00:00:00 2001 From: Kabir Oberai Date: Tue, 20 Oct 2026 00:27:50 -0400 Subject: [PATCH] sdk: support env overrides for tarballs Co-authored-by: Mathieu Post --- Sources/XToolSupport/SDKBuilder.swift | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Sources/XToolSupport/SDKBuilder.swift b/Sources/XToolSupport/SDKBuilder.swift index 245c5075..11a96329 100644 --- a/Sources/XToolSupport/SDKBuilder.swift +++ b/Sources/XToolSupport/SDKBuilder.swift @@ -236,12 +236,27 @@ struct SDKBuilder { url: URL, destination directory: URL, displayName: String, + envOverride: String? = nil, ) async throws { try FileManager.default.createDirectory( at: directory, withIntermediateDirectories: false ) + if let envOverride, let path = ProcessInfo.processInfo.environment[envOverride] { + let archive = URL(fileURLWithPath: path) + print("[Extracting \(displayName)] \(archive.path)") + try await Subprocess.run( + .name("tar"), + arguments: ["xzf", archive.path], + workingDirectory: FilePath(directory), + output: .discarded, + error: .discarded, + ) + .checkSuccess() + return + } + @Dependency(\.httpClient) var httpClient let (response, body) = try await httpClient.send(HTTPRequest(url: url)) guard response.status == 200, let body else { @@ -280,6 +295,7 @@ struct SDKBuilder { .checkSuccess() } + // swiftlint:disable:next function_body_length private func installToolset(in output: URL) async throws { let toolsetDir = output.appendingPathComponent("toolset") let url = URL(string: """ @@ -290,6 +306,7 @@ struct SDKBuilder { url: url, destination: toolsetDir, displayName: "toolset", + envOverride: "XTL_TOOLSET_TARBALL", ) // swift-build assumes we have an Apple-flavored librarian for Apple platforms @@ -406,6 +423,7 @@ struct SDKBuilder { url: url, destination: macrosDir, displayName: "OpenAppleMacros", + envOverride: "XTL_OAM_TARBALL", ) struct MacrosInfo: Decodable {