Skip to content

Commit 8f391bc

Browse files
committed
_Subprocess: Update to a more recent version of vendored lib.
We have to keep a vendored lib _for now_ because we need to support 6.0 and upstream library has dropped that. We may eventually do so as well, but currently we cannot require 6.1 yet.
1 parent be895f4 commit 8f391bc

32 files changed

+5172
-4494
lines changed

Package.swift

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,10 @@ let package = Package(
195195
.package(url: "https://github.com/apple/swift-argument-parser", from: "1.5.0"),
196196
.package(url: "https://github.com/apple/swift-system", from: "1.4.0"),
197197

198+
// // FIXME: swift-subprocess stopped supporting 6.0 when it moved into a package;
199+
// // we'll need to drop 6.0 as well, but currently blocked on doing so by swiftpm plugin pending design questions
200+
// .package(url: "https://github.com/swiftlang/swift-subprocess.git", revision: "de15b67f7871c8a039ef7f4813eb39a8878f61a6"),
201+
198202
// Benchmarking
199203
.package(url: "https://github.com/ordo-one/package-benchmark", .upToNextMajor(from: "1.4.0")),
200204
],
@@ -363,6 +367,7 @@ let package = Package(
363367
"JavaTypes",
364368
"JavaKitShared",
365369
"JavaKitConfigurationShared",
370+
// .product(name: "Subprocess", package: "swift-subprocess")
366371
"_Subprocess", // using process spawning
367372
],
368373
swiftSettings: [
@@ -489,15 +494,15 @@ let package = Package(
489494

490495
// Experimental Foundation Subprocess Copy
491496
.target(
492-
name: "_CShims",
497+
name: "_SubprocessCShims",
493498
swiftSettings: [
494499
.swiftLanguageMode(.v5)
495500
]
496501
),
497502
.target(
498503
name: "_Subprocess",
499504
dependencies: [
500-
"_CShims",
505+
"_SubprocessCShims",
501506
.product(name: "SystemPackage", package: "swift-system"),
502507
],
503508
swiftSettings: [

Samples/JavaDependencySampleApp/%

Whitespace-only changes.

Sources/SwiftJavaTool/Commands/ResolveCommand.swift

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ import SwiftJavaLib
2222
import JavaKitConfigurationShared
2323
import JavaKitShared
2424
import _Subprocess
25+
import System
26+
27+
typealias Configuration = JavaKitConfigurationShared.Configuration
2528

2629
extension SwiftJava {
2730
struct ResolveCommand: SwiftJavaBaseAsyncParsableCommand, HasCommonOptions, HasCommonJVMOptions {
@@ -137,37 +140,39 @@ extension SwiftJava.ResolveCommand {
137140

138141
try! printGradleProject(directory: resolverDir, dependencies: dependencies)
139142

140-
let process = try! await Subprocess.run(
141-
.at(.init(resolverDir.appendingPathComponent("gradlew").path)),
142-
arguments: [
143-
"--no-daemon",
144-
"--rerun-tasks",
145-
"\(printRuntimeClasspathTaskName)",
146-
],
147-
workingDirectory: .init(platformString: resolverDir.path)
148-
)
149-
150-
let outString = String(
151-
data: process.standardOutput,
152-
encoding: .utf8
153-
)
154-
let errString = String(
155-
data: process.standardError,
156-
encoding: .utf8
157-
)
143+
if #available(macOS 15, *) {
144+
let process = try! await _Subprocess.run(
145+
.path(FilePath(resolverDir.appendingPathComponent("gradlew").path)),
146+
arguments: [
147+
"--no-daemon",
148+
"--rerun-tasks",
149+
"\(printRuntimeClasspathTaskName)",
150+
],
151+
workingDirectory: FilePath(resolverDir.path),
152+
// TODO: we could move to stream processing the outputs
153+
output: .string(limit: Int.max, encoding: UTF8.self), // Don't limit output, we know it will be reasonable size
154+
error: .string(limit: Int.max, encoding: UTF8.self) // Don't limit output, we know it will be reasonable size
155+
)
156+
157+
let outString = process.standardOutput ?? ""
158+
let errString = process.standardError ?? ""
159+
160+
let classpathOutput: String
161+
if let found = outString.split(separator: "\n").first(where: { $0.hasPrefix(self.SwiftJavaClasspathPrefix) }) {
162+
classpathOutput = String(found)
163+
} else if let found = errString.split(separator: "\n").first(where: { $0.hasPrefix(self.SwiftJavaClasspathPrefix) }) {
164+
classpathOutput = String(found)
165+
} else {
166+
let suggestDisablingSandbox = "It may be that the Sandbox has prevented dependency fetching, please re-run with '--disable-sandbox'."
167+
fatalError("Gradle output had no SWIFT_JAVA_CLASSPATH! \(suggestDisablingSandbox). \n" +
168+
"Output was:<<<\(outString ?? "<empty>")>>>; Err was:<<<\(errString ?? "<empty>")>>>")
169+
}
158170

159-
let classpathOutput: String
160-
if let found = outString?.split(separator: "\n").first(where: { $0.hasPrefix(self.SwiftJavaClasspathPrefix) }) {
161-
classpathOutput = String(found)
162-
} else if let found = errString?.split(separator: "\n").first(where: { $0.hasPrefix(self.SwiftJavaClasspathPrefix) }) {
163-
classpathOutput = String(found)
171+
return String(classpathOutput.dropFirst(SwiftJavaClasspathPrefix.count))
164172
} else {
165-
let suggestDisablingSandbox = "It may be that the Sandbox has prevented dependency fetching, please re-run with '--disable-sandbox'."
166-
fatalError("Gradle output had no SWIFT_JAVA_CLASSPATH! \(suggestDisablingSandbox). \n" +
167-
"Output was:<<<\(outString ?? "<empty>")>>>; Err was:<<<\(errString ?? "<empty>")>>>")
173+
// Subprocess is unavailable
174+
fatalError("Subprocess is unavailable yet required to execute `gradlew` subprocess. Please update to macOS 15+")
168175
}
169-
170-
return String(classpathOutput.dropFirst(SwiftJavaClasspathPrefix.count))
171176
}
172177

173178
func printGradleProject(directory: URL, dependencies: [JavaDependencyDescriptor]) throws {

0 commit comments

Comments
 (0)