Skip to content

Commit 79f834c

Browse files
authored
Consolidate pkgConfig diagnostics (#3767)
It makes more sense to emit all pkgConfig related diagnostics as part of `pkgConfigArgs(for:)` so that clients of libSwiftPM won't have to duplicate them.
1 parent 22c4a11 commit 79f834c

File tree

2 files changed

+17
-18
lines changed

2 files changed

+17
-18
lines changed

Sources/Build/BuildPlan.swift

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1996,16 +1996,6 @@ public class BuildPlan {
19961996
let results = pkgConfigArgs(for: target, fileSystem: self.fileSystem, observabilityScope: self.observabilityScope)
19971997
var ret: [(cFlags: [String], libs: [String])] = []
19981998
for result in results {
1999-
// If there is no pc file on system and we have an available provider, emit a warning.
2000-
if let provider = result.provider, result.couldNotFindConfigFile {
2001-
self.observabilityScope.emit(.pkgConfigHint(pkgConfigName: result.pkgConfigName, installText: provider.installText))
2002-
} else if let error = result.error {
2003-
self.observabilityScope.emit(
2004-
warning: "\(error)",
2005-
metadata: .pkgConfig(pcFile: result.pkgConfigName, targetName: target.name)
2006-
)
2007-
}
2008-
20091999
ret.append((result.cFlags, result.libs))
20102000
}
20112001

@@ -2063,11 +2053,7 @@ private extension Basics.Diagnostic {
20632053
""")
20642054
}
20652055

2066-
static func pkgConfigHint(pkgConfigName: String, installText: String) -> Self {
2067-
.warning("you may be able to install \(pkgConfigName) using your system-packager:\n\(installText)")
2068-
}
2069-
2070-
static func binaryTargetsNotSupported() -> Self {
2056+
static func binaryTargetsNotSupported() -> Diagnostic.Message {
20712057
.error("binary targets are not supported on this platform")
20722058
}
20732059
}

Sources/PackageLoading/Target+PkgConfig.swift

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ public func pkgConfigArgs(for target: SystemLibraryTarget, brewPrefix: AbsoluteP
6767
var ret: [PkgConfigResult] = []
6868
// Get the pkg config flags.
6969
for pkgConfigName in pkgConfigNames.components(separatedBy: " ") {
70+
let result: PkgConfigResult
7071
do {
7172
let pkgConfig = try PkgConfig(
7273
name: pkgConfigName,
@@ -88,16 +89,28 @@ public func pkgConfigArgs(for target: SystemLibraryTarget, brewPrefix: AbsoluteP
8889
error = PkgConfigError.prohibitedFlags(filtered.unallowed.joined(separator: ", "))
8990
}
9091

91-
ret.append(PkgConfigResult(
92+
result = PkgConfigResult(
9293
pkgConfigName: pkgConfigName,
9394
cFlags: cFlags,
9495
libs: libs,
9596
error: error,
9697
provider: provider
97-
))
98+
)
9899
} catch {
99-
ret.append(PkgConfigResult(pkgConfigName: pkgConfigName, error: error, provider: provider))
100+
result = PkgConfigResult(pkgConfigName: pkgConfigName, error: error, provider: provider)
100101
}
102+
103+
// If there is no pc file on system and we have an available provider, emit a warning.
104+
if let provider = result.provider, result.couldNotFindConfigFile {
105+
observabilityScope.emit(warning: "you may be able to install \(result.pkgConfigName) using your system-packager:\n\(provider.installText)")
106+
} else if let error = result.error {
107+
observabilityScope.emit(
108+
warning: "\(error)",
109+
metadata: .pkgConfig(pcFile: result.pkgConfigName, targetName: target.name)
110+
)
111+
}
112+
113+
ret.append(result)
101114
}
102115
return ret
103116
}

0 commit comments

Comments
 (0)