Skip to content

Commit f97263c

Browse files
Annotate "$targetA is missing a dependency on $targetB" diagnostics with target location (rdar://149397709)
1 parent 4c10712 commit f97263c

File tree

3 files changed

+16
-15
lines changed

3 files changed

+16
-15
lines changed

Sources/SWBBuildSystem/BuildOperation.swift

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -879,8 +879,15 @@ package final class BuildOperation: BuildSystemOperation {
879879
}
880880

881881
package func taskDiscoveredRequiredTargetDependency(target: ConfiguredTarget, antecedent: ConfiguredTarget, reason: RequiredTargetDependencyReason, warningLevel: BooleanWarningLevel) {
882-
if !transitiveDependencyExists(target: target, antecedent: antecedent) {
882+
let diagnosticBehavior: SWBUtil.Diagnostic.Behavior
883+
switch warningLevel {
884+
case .yesError: diagnosticBehavior = .error
885+
case .yes: diagnosticBehavior = .warning
886+
case .no: return
887+
}
888+
let targetDiagnosticsEngine = buildOutputDelegate.diagnosticsEngine(for: target)
883889

890+
if !transitiveDependencyExists(target: target, antecedent: antecedent) {
884891
// Ensure we only diagnose missing dependencies when platform and SDK variant match. We perform this check as late as possible since computing settings can be expensive.
885892
let targetSettings = requestContext.getCachedSettings(target.parameters, target: target.target)
886893
let antecedentSettings = requestContext.getCachedSettings(antecedent.parameters, target: antecedent.target)
@@ -898,14 +905,8 @@ package final class BuildOperation: BuildSystemOperation {
898905
} else {
899906
message = DiagnosticData("'\(target.target.name)' is missing a dependency on '\(antecedent.target.name)' because \(reason)")
900907
}
901-
switch warningLevel {
902-
case .yes:
903-
buildOutputDelegate.emit(Diagnostic(behavior: .warning, location: .unknown, data: message))
904-
case .yesError:
905-
buildOutputDelegate.emit(Diagnostic(behavior: .error, location: .unknown, data: message))
906-
default:
907-
break
908-
}
908+
909+
targetDiagnosticsEngine.emit(Diagnostic(behavior: diagnosticBehavior, location: .unknown, data: message))
909910
}
910911
}
911912
}

Tests/SWBBuildSystemTests/ClangExplicitModulesTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2969,9 +2969,9 @@ fileprivate struct ClangExplicitModulesTests: CoreBasedTests {
29692969
try await tester.checkBuild(runDestination: destination, buildRequest: buildRequest, persistent: true) { results in
29702970
switch warningLevel {
29712971
case .yes:
2972-
results.checkWarning("'Framework2' is missing a dependency on 'Framework1' because dependency scan of 'file_2.c' discovered a dependency on 'Framework1'")
2972+
results.checkWarning("'Framework2' is missing a dependency on 'Framework1' because dependency scan of 'file_2.c' discovered a dependency on 'Framework1' (in target 'Framework2' from project 'aProject')")
29732973
case .yesError:
2974-
results.checkError("'Framework2' is missing a dependency on 'Framework1' because dependency scan of 'file_2.c' discovered a dependency on 'Framework1'")
2974+
results.checkError("'Framework2' is missing a dependency on 'Framework1' because dependency scan of 'file_2.c' discovered a dependency on 'Framework1' (in target 'Framework2' from project 'aProject')")
29752975
default:
29762976
break
29772977
}

Tests/SWBBuildSystemTests/SwiftDriverTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4597,11 +4597,11 @@ fileprivate struct SwiftDriverTests: CoreBasedTests {
45974597
try await tester.checkBuild(runDestination: .macOS, buildRequest: buildRequest, persistent: true) { results in
45984598
switch warningLevel {
45994599
case .yes:
4600-
results.checkWarning("'Framework3' is missing a dependency on 'Framework1' because dependency scan of Swift module 'Framework3' discovered a dependency on 'Framework1'")
4601-
results.checkWarning("'Framework3' is missing a dependency on 'Framework2' because dependency scan of Swift module 'Framework3' discovered a dependency on 'Framework2'")
4600+
results.checkWarning("'Framework3' is missing a dependency on 'Framework1' because dependency scan of Swift module 'Framework3' discovered a dependency on 'Framework1' (in target 'Framework3' from project 'aProject')")
4601+
results.checkWarning("'Framework3' is missing a dependency on 'Framework2' because dependency scan of Swift module 'Framework3' discovered a dependency on 'Framework2' (in target 'Framework3' from project 'aProject')")
46024602
case .yesError:
4603-
results.checkError("'Framework3' is missing a dependency on 'Framework1' because dependency scan of Swift module 'Framework3' discovered a dependency on 'Framework1'")
4604-
results.checkError("'Framework3' is missing a dependency on 'Framework2' because dependency scan of Swift module 'Framework3' discovered a dependency on 'Framework2'")
4603+
results.checkError("'Framework3' is missing a dependency on 'Framework1' because dependency scan of Swift module 'Framework3' discovered a dependency on 'Framework1' (in target 'Framework3' from project 'aProject')")
4604+
results.checkError("'Framework3' is missing a dependency on 'Framework2' because dependency scan of Swift module 'Framework3' discovered a dependency on 'Framework2' (in target 'Framework3' from project 'aProject')")
46054605
default:
46064606
break
46074607
}

0 commit comments

Comments
 (0)