Skip to content

Commit cee7076

Browse files
authored
Don't expect module deps if Swift explicit modules are turned off (#846)
We can't compute module deps if Swift explicit modules are turned off for a target, but we were still setting up the `ValidateDependencies` task to expect them. rdar://161603360
1 parent 300e900 commit cee7076

File tree

2 files changed

+64
-47
lines changed

2 files changed

+64
-47
lines changed

Sources/SWBCore/SpecImplementations/Tools/SwiftCompiler.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2311,7 +2311,7 @@ public final class SwiftCompilerSpec : CompilerSpec, SpecIdentifierType, SwiftDi
23112311
}
23122312

23132313
let dependencyValidationPayload: SwiftDependencyValidationPayload?
2314-
if let context = cbc.producer.moduleDependenciesContext, let outputPath = objectOutputPaths.first, context.validate != .no {
2314+
if explicitModuleBuildEnabled, let context = cbc.producer.moduleDependenciesContext, let outputPath = objectOutputPaths.first, context.validate != .no {
23152315
let primarySwiftBaseName = cbc.scope.evaluate(BuiltinMacros.TARGET_NAME) + compilationMode.moduleBaseNameSuffix + "-primary"
23162316
let dependencyValidationOutputPath = outputPath.dirname.join(primarySwiftBaseName + ".dependencies")
23172317
extraOutputPaths.append(dependencyValidationOutputPath)

Tests/SWBBuildSystemTests/DependencyValidationTests.swift

Lines changed: 63 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -345,8 +345,7 @@ fileprivate struct DependencyValidationTests: CoreBasedTests {
345345
}
346346
}
347347

348-
@Test(.requireSDKs(.host), .skipHostOS(.windows, "toolchain too old"), .skipHostOS(.linux, "toolchain too old"))
349-
func validateModuleDependenciesSwift() async throws {
348+
func validateModuleDependenciesSwift(explicitModules: Bool) async throws {
350349
try await withTemporaryDirectory { tmpDir in
351350
let testWorkspace = try await TestWorkspace(
352351
"Test",
@@ -366,8 +365,8 @@ fileprivate struct DependencyValidationTests: CoreBasedTests {
366365
buildSettings: [
367366
"PRODUCT_NAME": "$(TARGET_NAME)",
368367
"CLANG_ENABLE_MODULES": "YES",
369-
"CLANG_ENABLE_EXPLICIT_MODULES": "YES",
370-
"SWIFT_ENABLE_EXPLICIT_MODULES": "YES",
368+
"CLANG_ENABLE_EXPLICIT_MODULES": explicitModules ? "YES" : "NO",
369+
"SWIFT_ENABLE_EXPLICIT_MODULES": explicitModules ? "YES" : "NO",
371370
"SWIFT_UPCOMING_FEATURE_INTERNAL_IMPORTS_BY_DEFAULT": "YES",
372371
"SWIFT_VERSION": swiftVersion,
373372
"DEFINES_MODULE": "YES",
@@ -418,50 +417,58 @@ fileprivate struct DependencyValidationTests: CoreBasedTests {
418417
let projectXCConfigFinalLineNumber = projectXCConfigLines.count
419418
let projectXCConfigFinalColumnNumber = (projectXCConfigLines.last?.count ?? 0) + 1
420419

421-
let expectedDiagsByTarget: [String: [Diagnostic]] = [
422-
"TargetA": [
423-
Diagnostic(
424-
behavior: .error,
425-
location: Diagnostic.Location.path(projectXCConfigPath, line: 1, column: 47),
426-
data: DiagnosticData("Missing entries in MODULE_DEPENDENCIES: Foundation"),
427-
fixIts: [
428-
Diagnostic.FixIt(
429-
sourceRange: Diagnostic.SourceRange(path: projectXCConfigPath, startLine: 1, startColumn: 47, endLine: 1, endColumn: 47),
430-
newText: " \\\n Foundation"),
431-
],
432-
childDiagnostics: [
433-
Diagnostic(
434-
behavior: .error,
435-
location: Diagnostic.Location.path(swiftSourcePath, line: 1, column: 8),
436-
data: DiagnosticData("Missing entry in MODULE_DEPENDENCIES: Foundation"),
437-
fixIts: [Diagnostic.FixIt(
420+
let expectedDiagsByTarget: [String: [Diagnostic]]
421+
if explicitModules {
422+
expectedDiagsByTarget = [
423+
"TargetA": [
424+
Diagnostic(
425+
behavior: .error,
426+
location: Diagnostic.Location.path(projectXCConfigPath, line: 1, column: 47),
427+
data: DiagnosticData("Missing entries in MODULE_DEPENDENCIES: Foundation"),
428+
fixIts: [
429+
Diagnostic.FixIt(
438430
sourceRange: Diagnostic.SourceRange(path: projectXCConfigPath, startLine: 1, startColumn: 47, endLine: 1, endColumn: 47),
439-
newText: " \\\n Foundation")],
440-
),
441-
]),
442-
],
443-
"TargetB": [
444-
Diagnostic(
445-
behavior: .error,
446-
location: Diagnostic.Location.path(projectXCConfigPath, line: projectXCConfigFinalLineNumber, column: projectXCConfigFinalColumnNumber),
447-
data: DiagnosticData("Missing entries in MODULE_DEPENDENCIES: Foundation"),
448-
fixIts: [
449-
Diagnostic.FixIt(
450-
sourceRange: Diagnostic.SourceRange(path: projectXCConfigPath, startLine: projectXCConfigFinalLineNumber, startColumn: projectXCConfigFinalColumnNumber, endLine: projectXCConfigFinalLineNumber, endColumn: projectXCConfigFinalColumnNumber),
451-
newText: "\nMODULE_DEPENDENCIES[target=TargetB] = $(inherited) \\\n Foundation\n"),
452-
],
453-
childDiagnostics: [
454-
Diagnostic(
455-
behavior: .error,
456-
location: Diagnostic.Location.path(swiftSourcePath, line: 1, column: 8),
457-
data: DiagnosticData("Missing entry in MODULE_DEPENDENCIES: Foundation"),
458-
fixIts: [Diagnostic.FixIt(
431+
newText: " \\\n Foundation"),
432+
],
433+
childDiagnostics: [
434+
Diagnostic(
435+
behavior: .error,
436+
location: Diagnostic.Location.path(swiftSourcePath, line: 1, column: 8),
437+
data: DiagnosticData("Missing entry in MODULE_DEPENDENCIES: Foundation"),
438+
fixIts: [Diagnostic.FixIt(
439+
sourceRange: Diagnostic.SourceRange(path: projectXCConfigPath, startLine: 1, startColumn: 47, endLine: 1, endColumn: 47),
440+
newText: " \\\n Foundation")],
441+
),
442+
]),
443+
],
444+
"TargetB": [
445+
Diagnostic(
446+
behavior: .error,
447+
location: Diagnostic.Location.path(projectXCConfigPath, line: projectXCConfigFinalLineNumber, column: projectXCConfigFinalColumnNumber),
448+
data: DiagnosticData("Missing entries in MODULE_DEPENDENCIES: Foundation"),
449+
fixIts: [
450+
Diagnostic.FixIt(
459451
sourceRange: Diagnostic.SourceRange(path: projectXCConfigPath, startLine: projectXCConfigFinalLineNumber, startColumn: projectXCConfigFinalColumnNumber, endLine: projectXCConfigFinalLineNumber, endColumn: projectXCConfigFinalColumnNumber),
460-
newText: "\nMODULE_DEPENDENCIES[target=TargetB] = $(inherited) \\\n Foundation\n")],
461-
),
462-
]),
463-
],
464-
]
452+
newText: "\nMODULE_DEPENDENCIES[target=TargetB] = $(inherited) \\\n Foundation\n"),
453+
],
454+
childDiagnostics: [
455+
Diagnostic(
456+
behavior: .error,
457+
location: Diagnostic.Location.path(swiftSourcePath, line: 1, column: 8),
458+
data: DiagnosticData("Missing entry in MODULE_DEPENDENCIES: Foundation"),
459+
fixIts: [Diagnostic.FixIt(
460+
sourceRange: Diagnostic.SourceRange(path: projectXCConfigPath, startLine: projectXCConfigFinalLineNumber, startColumn: projectXCConfigFinalColumnNumber, endLine: projectXCConfigFinalLineNumber, endColumn: projectXCConfigFinalColumnNumber),
461+
newText: "\nMODULE_DEPENDENCIES[target=TargetB] = $(inherited) \\\n Foundation\n")],
462+
),
463+
]),
464+
],
465+
]
466+
} else {
467+
expectedDiagsByTarget = [
468+
"TargetA": [],
469+
"TargetB": [],
470+
]
471+
}
465472

466473
for (targetName, expectedDiags) in expectedDiagsByTarget {
467474
let target = try #require(tester.workspace.projects.only?.targets.first { $0.name == targetName })
@@ -482,6 +489,16 @@ fileprivate struct DependencyValidationTests: CoreBasedTests {
482489
}
483490
}
484491

492+
@Test(.requireSDKs(.host), .skipHostOS(.windows, "toolchain too old"), .skipHostOS(.linux, "toolchain too old"))
493+
func validateModuleDependenciesSwift() async throws {
494+
try await validateModuleDependenciesSwift(explicitModules: true)
495+
}
496+
497+
@Test(.requireSDKs(.host), .skipHostOS(.windows, "toolchain too old"), .skipHostOS(.linux, "toolchain too old"))
498+
func validateModuleDependenciesSwiftExplicitModulesOff() async throws {
499+
try await validateModuleDependenciesSwift(explicitModules: false)
500+
}
501+
485502
@Test(.requireSDKs(.host), .requireClangFeatures(.printHeadersDirectPerFile))
486503
func validateModuleDependenciesClang() async throws {
487504
try await withTemporaryDirectory { tmpDir async throws -> Void in

0 commit comments

Comments
 (0)