Skip to content

Commit 5586e17

Browse files
committed
Warn when SWIFT_EXEC or SWIFT_EXEC_MANIFEST point to invalid paths.
Previously when SWIFT_EXEC or SWIFT_EXEC_MANIFEST were set to non-existent or non-executable paths, swiftpm would silently ignore them and fall back to the default Swift compiler. This caused confusion during development when typos or incorrect paths were used.
1 parent b520573 commit 5586e17

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

Sources/PackageModel/UserToolchain.swift

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,10 +351,34 @@ public final class UserToolchain: Toolchain {
351351
}
352352

353353
let lookup = { UserToolchain.lookup(variable: $0, searchPaths: searchPaths, environment: environment) }
354+
355+
// Warn if SWIFT_EXEC or SWIFT_EXEC_MANIFEST is set but points to a non-existent or non-executable path
356+
func warnIfInvalid(envVar: String, value: String, resolved: AbsolutePath?) {
357+
guard resolved == nil else { return }
358+
359+
if let absolutePath = try? AbsolutePath(validating: value) {
360+
if fileSystem.exists(absolutePath) {
361+
fputs("warning: \(envVar) is set to '\(value)' which exists but is not executable; ignoring\n", stderr)
362+
} else {
363+
fputs("warning: \(envVar) is set to '\(value)' but the file does not exist; ignoring\n", stderr)
364+
}
365+
} else {
366+
fputs("warning: \(envVar) is set to '\(value)' but no executable was found in search paths; ignoring\n", stderr)
367+
}
368+
}
369+
354370
// Get overrides.
355371
let SWIFT_EXEC_MANIFEST = lookup("SWIFT_EXEC_MANIFEST")
356372
let SWIFT_EXEC = lookup("SWIFT_EXEC")
357373

374+
// Emit warnings if environment variables are set but lookup failed
375+
if let swiftExecValue = environment["SWIFT_EXEC"], !swiftExecValue.isEmpty {
376+
warnIfInvalid(envVar: "SWIFT_EXEC", value: swiftExecValue, resolved: SWIFT_EXEC)
377+
}
378+
if let swiftExecManifestValue = environment["SWIFT_EXEC_MANIFEST"], !swiftExecManifestValue.isEmpty {
379+
warnIfInvalid(envVar: "SWIFT_EXEC_MANIFEST", value: swiftExecManifestValue, resolved: SWIFT_EXEC_MANIFEST)
380+
}
381+
358382
// Validate the overrides.
359383
try validateCompiler(at: SWIFT_EXEC)
360384
try validateCompiler(at: SWIFT_EXEC_MANIFEST)

0 commit comments

Comments
 (0)