Skip to content

Commit 3f63a2d

Browse files
authored
Merge pull request swiftlang#2708 from abertelrud/61061140-unknown-files-under-declared-source-directories-are-not-ignored-in-pre-5.3-manifests
Fix a SwiftPM 5.2 regression that cause it to try to compile unknown files in pre-5.3 manifests
2 parents 0eda5ce + d124fac commit 3f63a2d

File tree

2 files changed

+52
-1
lines changed

2 files changed

+52
-1
lines changed

Sources/PackageLoading/TargetSourcesBuilder.swift

+4-1
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,10 @@ public struct TargetSourcesBuilder {
175175
if let ext = path.extension,
176176
FileRuleDescription.header.fileTypes.contains(ext) {
177177
matchedRule = Rule(rule: .header, localization: nil)
178-
} else {
178+
} else if toolsVersion >= .v5_3 {
179+
matchedRule = Rule(rule: .compile, localization: nil)
180+
} else if let ext = path.extension,
181+
SupportedLanguageExtension.validExtensions(toolsVersion: toolsVersion).contains(ext) {
179182
matchedRule = Rule(rule: .compile, localization: nil)
180183
}
181184
// The source file might have been declared twice so

Tests/PackageLoadingTests/PackageBuilderTests.swift

+48
Original file line numberDiff line numberDiff line change
@@ -1659,6 +1659,54 @@ class PackageBuilderTests: XCTestCase {
16591659
}
16601660
}
16611661

1662+
func testUnknownSourceFilesUnderDeclaredSourcesIgnoredInV5_2Manifest() throws {
1663+
// Files with unknown suffixes under declared sources are not considered valid sources in 5.2 manifest.
1664+
let fs = InMemoryFileSystem(emptyFiles:
1665+
"/Sources/lib/movie.mkv",
1666+
"/Sources/lib/lib.c",
1667+
"/Sources/lib/include/lib.h"
1668+
)
1669+
1670+
let manifest = Manifest.createManifest(
1671+
name: "pkg",
1672+
v: .v5_2,
1673+
targets: [
1674+
TargetDescription(name: "lib", dependencies: [], path: "./Sources/lib", sources: ["."]),
1675+
]
1676+
)
1677+
1678+
PackageBuilderTester(manifest, in: fs) { package, _ in
1679+
package.checkModule("lib") { module in
1680+
module.checkSources(root: "/Sources/lib", paths: "lib.c")
1681+
module.check(includeDir: "/Sources/lib/include")
1682+
}
1683+
}
1684+
}
1685+
1686+
func testUnknownSourceFilesUnderDeclaredSourcesCompiledInV5_3Manifest() throws {
1687+
// Files with unknown suffixes under declared sources are treated as compilable in 5.3 manifest.
1688+
let fs = InMemoryFileSystem(emptyFiles:
1689+
"/Sources/lib/movie.mkv",
1690+
"/Sources/lib/lib.c",
1691+
"/Sources/lib/include/lib.h"
1692+
)
1693+
1694+
let manifest = Manifest.createManifest(
1695+
name: "pkg",
1696+
v: .v5_3,
1697+
targets: [
1698+
TargetDescription(name: "lib", dependencies: [], path: "./Sources/lib", sources: ["."]),
1699+
]
1700+
)
1701+
1702+
PackageBuilderTester(manifest, in: fs) { package, _ in
1703+
package.checkModule("lib") { module in
1704+
module.checkSources(root: "/Sources/lib", paths: "movie.mkv", "lib.c")
1705+
module.check(includeDir: "/Sources/lib/include")
1706+
}
1707+
}
1708+
}
1709+
16621710
func testBuildSettings() {
16631711
let fs = InMemoryFileSystem(emptyFiles:
16641712
"/Sources/exe/main.swift",

0 commit comments

Comments
 (0)