diff --git a/Sources/Build/BuildDescription/ClangTargetBuildDescription.swift b/Sources/Build/BuildDescription/ClangTargetBuildDescription.swift index 09548888d5c..1387d2933f4 100644 --- a/Sources/Build/BuildDescription/ClangTargetBuildDescription.swift +++ b/Sources/Build/BuildDescription/ClangTargetBuildDescription.swift @@ -323,6 +323,15 @@ package final class ClangTargetBuildDescription { args += ["-I", toolchainResourcesPath.pathString] } + // suppress warnings if the package is remote + if self.package.isRemote { + args += ["-w"] + // `-w` (suppress warnings) and `-Werror` (warnings as errors) flags are mutually exclusive + if let index = args.firstIndex(of: "-Werror") { + args.remove(at: index) + } + } + return args } diff --git a/Tests/BuildTests/ClangTargetBuildDescriptionTests.swift b/Tests/BuildTests/ClangTargetBuildDescriptionTests.swift index a7c4cbd6fbc..6a80831300c 100644 --- a/Tests/BuildTests/ClangTargetBuildDescriptionTests.swift +++ b/Tests/BuildTests/ClangTargetBuildDescriptionTests.swift @@ -22,6 +22,7 @@ final class ClangTargetBuildDescriptionTests: XCTestCase { func testClangIndexStorePath() throws { let targetDescription = try makeTargetBuildDescription("test") XCTAssertTrue(try targetDescription.basicArguments().contains("-index-store-path")) + XCTAssertFalse(try targetDescription.basicArguments().contains("-w")) } func testSwiftCorelibsFoundationIncludeWorkaround() throws { @@ -45,6 +46,11 @@ final class ClangTargetBuildDescriptionTests: XCTestCase { XCTAssertTrue(try androidDescription.basicArguments().contains("\(androidParameters.toolchain.swiftResourcesPath!)")) } + func testWarningSuppressionForRemotePackages() throws { + let targetDescription = try makeTargetBuildDescription("test-warning-supression", usesSourceControl: true) + XCTAssertTrue(try targetDescription.basicArguments().contains("-w")) + } + private func makeClangTarget() throws -> ClangTarget { try ClangTarget( name: "dummy", @@ -70,14 +76,20 @@ final class ClangTargetBuildDescriptionTests: XCTestCase { } private func makeTargetBuildDescription(_ packageName: String, - buildParameters: BuildParameters? = nil) throws -> ClangTargetBuildDescription { + buildParameters: BuildParameters? = nil, + usesSourceControl: Bool = false) throws -> ClangTargetBuildDescription { let observability = ObservabilitySystem.makeForTesting(verbose: false) - let manifest = Manifest.createRootManifest( - displayName: "dummy", - toolsVersion: .v5, - targets: [try TargetDescription(name: "dummy")] - ) + let manifest: Manifest + if usesSourceControl { + manifest = Manifest.createLocalSourceControlManifest( + displayName: packageName, path: AbsolutePath("/\(packageName)")) + } else { + manifest = Manifest.createRootManifest( + displayName: packageName, + toolsVersion: .v5, + targets: [try TargetDescription(name: "dummy")]) + } let target = try makeResolvedTarget()