Skip to content

Commit 3131ca3

Browse files
authored
Merge pull request #1845 from ahoppen/version-specific-manifest
Provide build settings for version-specific package manifests
2 parents 14e119d + cddd810 commit 3131ca3

File tree

2 files changed

+65
-7
lines changed

2 files changed

+65
-7
lines changed

Sources/BuildSystemIntegration/SwiftPMBuildSystem.swift

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -537,16 +537,29 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
537537
// (https://github.com/swiftlang/sourcekit-lsp/issues/1267)
538538
for target in request.targets {
539539
if target == .forPackageManifest {
540+
let packageManifestName = #/^Package@swift-(\d+)(?:\.(\d+))?(?:\.(\d+))?.swift$/#
541+
let versionSpecificManifests = try? FileManager.default.contentsOfDirectory(
542+
at: projectRoot,
543+
includingPropertiesForKeys: nil
544+
).compactMap { (url) -> SourceItem? in
545+
guard (try? packageManifestName.wholeMatch(in: url.lastPathComponent)) != nil else {
546+
return nil
547+
}
548+
return SourceItem(
549+
uri: DocumentURI(url),
550+
kind: .file,
551+
generated: false
552+
)
553+
}
554+
let packageManifest = SourceItem(
555+
uri: DocumentURI(projectRoot.appendingPathComponent("Package.swift")),
556+
kind: .file,
557+
generated: false
558+
)
540559
result.append(
541560
SourcesItem(
542561
target: target,
543-
sources: [
544-
SourceItem(
545-
uri: DocumentURI(projectRoot.appendingPathComponent("Package.swift")),
546-
kind: .file,
547-
generated: false
548-
)
549-
]
562+
sources: [packageManifest] + (versionSpecificManifests ?? [])
550563
)
551564
)
552565
}

Tests/BuildSystemIntegrationTests/SwiftPMBuildSystemTests.swift

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1103,6 +1103,51 @@ final class SwiftPMBuildSystemTests: XCTestCase {
11031103
XCTAssertEqual(end.token, begin.token)
11041104
XCTAssertEqual(end.value, .end(WorkDoneProgressEnd()))
11051105
}
1106+
1107+
func testBuildSettingsForVersionSpecificPackageManifest() async throws {
1108+
try await withTestScratchDir { tempDir in
1109+
try FileManager.default.createFiles(
1110+
root: tempDir,
1111+
files: [
1112+
"pkg/Sources/lib/a.swift": "",
1113+
"pkg/Package.swift": """
1114+
// swift-tools-version:4.2
1115+
import PackageDescription
1116+
let package = Package(
1117+
name: "a",
1118+
targets: [.target(name: "lib")]
1119+
)
1120+
""",
1121+
"pkg/[email protected]": """
1122+
// swift-tools-version:4.2
1123+
import PackageDescription
1124+
let package = Package(
1125+
name: "a",
1126+
targets: [.target(name: "lib")]
1127+
)
1128+
""",
1129+
]
1130+
)
1131+
let packageRoot = try tempDir.appendingPathComponent("pkg").realpath
1132+
let versionSpecificManifestURL = packageRoot.appendingPathComponent("[email protected]")
1133+
let buildSystemManager = await BuildSystemManager(
1134+
buildSystemSpec: BuildSystemSpec(kind: .swiftPM, projectRoot: packageRoot),
1135+
toolchainRegistry: .forTesting,
1136+
options: SourceKitLSPOptions(),
1137+
connectionToClient: DummyBuildSystemManagerConnectionToClient(),
1138+
buildSystemTestHooks: BuildSystemTestHooks()
1139+
)
1140+
await buildSystemManager.waitForUpToDateBuildGraph()
1141+
let settings = await buildSystemManager.buildSettingsInferredFromMainFile(
1142+
for: DocumentURI(versionSpecificManifestURL),
1143+
language: .swift,
1144+
fallbackAfterTimeout: false
1145+
)
1146+
let compilerArgs = try XCTUnwrap(settings?.compilerArguments)
1147+
XCTAssert(compilerArgs.contains("-package-description-version"))
1148+
XCTAssert(compilerArgs.contains(try versionSpecificManifestURL.filePath))
1149+
}
1150+
}
11061151
}
11071152

11081153
private func assertArgumentsDoNotContain(

0 commit comments

Comments
 (0)