diff --git a/Sources/SWBCore/Dependencies.swift b/Sources/SWBCore/Dependencies.swift index 23ecfab7..a1cfb927 100644 --- a/Sources/SWBCore/Dependencies.swift +++ b/Sources/SWBCore/Dependencies.swift @@ -88,8 +88,9 @@ public struct ModuleDependenciesContext: Sendable, SerializableCodable { public init?(settings: Settings) { let validate = settings.globalScope.evaluate(BuiltinMacros.VALIDATE_MODULE_DEPENDENCIES) guard validate != .no else { return nil } + let downgrade = settings.globalScope.evaluate(BuiltinMacros.VALIDATE_DEPENDENCIES_DOWNGRADE_ERRORS) let fixItContext = ModuleDependenciesContext.FixItContext(settings: settings) - self.init(validate: validate, moduleDependencies: settings.moduleDependencies, fixItContext: fixItContext) + self.init(validate: downgrade ? .yes : validate, moduleDependencies: settings.moduleDependencies, fixItContext: fixItContext) } /// Compute missing module dependencies. @@ -269,8 +270,9 @@ public struct HeaderDependenciesContext: Sendable, SerializableCodable { public init?(settings: Settings) { let validate = settings.globalScope.evaluate(BuiltinMacros.VALIDATE_HEADER_DEPENDENCIES) guard validate != .no else { return nil } + let downgrade = settings.globalScope.evaluate(BuiltinMacros.VALIDATE_DEPENDENCIES_DOWNGRADE_ERRORS) let fixItContext = HeaderDependenciesContext.FixItContext(settings: settings) - self.init(validate: validate, headerDependencies: settings.headerDependencies, fixItContext: fixItContext) + self.init(validate: downgrade ? .yes : validate, headerDependencies: settings.headerDependencies, fixItContext: fixItContext) } /// Make diagnostics for missing header dependencies. diff --git a/Sources/SWBCore/Settings/BuiltinMacros.swift b/Sources/SWBCore/Settings/BuiltinMacros.swift index d0f5dbd5..59105b13 100644 --- a/Sources/SWBCore/Settings/BuiltinMacros.swift +++ b/Sources/SWBCore/Settings/BuiltinMacros.swift @@ -1145,6 +1145,7 @@ public final class BuiltinMacros { public static let VALIDATE_PLIST_FILES_WHILE_COPYING = BuiltinMacros.declareBooleanMacro("VALIDATE_PLIST_FILES_WHILE_COPYING") public static let VALIDATE_PRODUCT = BuiltinMacros.declareBooleanMacro("VALIDATE_PRODUCT") public static let VALIDATE_DEPENDENCIES = BuiltinMacros.declareEnumMacro("VALIDATE_DEPENDENCIES") as EnumMacroDeclaration + public static let VALIDATE_DEPENDENCIES_DOWNGRADE_ERRORS = BuiltinMacros.declareBooleanMacro("VALIDATE_DEPENDENCIES_DOWNGRADE_ERRORS") public static let VALIDATE_DEVELOPMENT_ASSET_PATHS = BuiltinMacros.declareEnumMacro("VALIDATE_DEVELOPMENT_ASSET_PATHS") as EnumMacroDeclaration public static let VALIDATE_HEADER_DEPENDENCIES = BuiltinMacros.declareEnumMacro("VALIDATE_HEADER_DEPENDENCIES") as EnumMacroDeclaration public static let VALIDATE_MODULE_DEPENDENCIES = BuiltinMacros.declareEnumMacro("VALIDATE_MODULE_DEPENDENCIES") as EnumMacroDeclaration @@ -2375,6 +2376,7 @@ public final class BuiltinMacros { VALIDATE_CAS_EXEC, VALIDATE_PRODUCT, VALIDATE_DEPENDENCIES, + VALIDATE_DEPENDENCIES_DOWNGRADE_ERRORS, VALIDATE_DEVELOPMENT_ASSET_PATHS, VALIDATE_HEADER_DEPENDENCIES, VALIDATE_MODULE_DEPENDENCIES, diff --git a/Tests/SWBBuildSystemTests/DependencyValidationTests.swift b/Tests/SWBBuildSystemTests/DependencyValidationTests.swift index cfb51a93..7d5e16b7 100644 --- a/Tests/SWBBuildSystemTests/DependencyValidationTests.swift +++ b/Tests/SWBBuildSystemTests/DependencyValidationTests.swift @@ -546,8 +546,8 @@ fileprivate struct DependencyValidationTests: CoreBasedTests { } } - @Test(.requireSDKs(.host), .requireClangFeatures(.printHeadersDirectPerFile), .skipHostOS(.windows, "toolchain too old"), .skipHostOS(.linux, "toolchain too old")) - func validateModuleDependenciesMixedSource() async throws { + @Test(.requireSDKs(.host), .requireClangFeatures(.printHeadersDirectPerFile), .skipHostOS(.windows, "toolchain too old"), .skipHostOS(.linux, "toolchain too old"), arguments: [false, true]) + func validateModuleDependenciesMixedSource(downgradeErrors: Bool) async throws { try await withTemporaryDirectory { tmpDir async throws -> Void in let testWorkspace = try await TestWorkspace( "Test", @@ -573,6 +573,7 @@ fileprivate struct DependencyValidationTests: CoreBasedTests { "SWIFT_VERSION": swiftVersion, "GENERATE_INFOPLIST_FILE": "YES", "VALIDATE_MODULE_DEPENDENCIES": "YES_ERROR", + "VALIDATE_DEPENDENCIES_DOWNGRADE_ERRORS": downgradeErrors ? "YES" : "NO", "SDKROOT": "$(HOST_PLATFORM)", "SUPPORTED_PLATFORMS": "$(HOST_PLATFORM)", "DSTROOT": tmpDir.join("dstroot").str, @@ -615,7 +616,11 @@ fileprivate struct DependencyValidationTests: CoreBasedTests { } try await tester.checkBuild(parameters: BuildParameters(configuration: "Debug"), runDestination: .host, persistent: true) { results in - results.checkError(.contains("Missing entries in MODULE_DEPENDENCIES: Accelerate AppKit Foundation")) + if downgradeErrors { + results.checkWarning(.contains("Missing entries in MODULE_DEPENDENCIES: Accelerate AppKit Foundation")) + } else { + results.checkError(.contains("Missing entries in MODULE_DEPENDENCIES: Accelerate AppKit Foundation")) + } } } }