Skip to content

Commit 59f1edd

Browse files
committed
Include host triple test modules in ResolvedPackage (#7493)
Modified `ResolvedModule` build triples were not reflected in `ResolvedPackage`, which excluded those modules from the build graph. Verified manually with `swift-foundation` and `swift-testing` packages. More comprehensive automated tests will be included in a future PR. Resolves #7479. (cherry picked from commit b9eb3c1) # Conflicts: # Sources/PackageGraph/ModulesGraph+Loading.swift # Sources/PackageGraph/Resolution/ResolvedPackage.swift
1 parent ad1edc2 commit 59f1edd

File tree

9 files changed

+22
-18
lines changed

9 files changed

+22
-18
lines changed

Sources/Basics/Errors.swift

+1-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ public struct InternalError: Error {
2121
private let description: String
2222
public init(_ description: String) {
2323
assertionFailure(description)
24-
self
25-
.description =
24+
self.description =
2625
"Internal error. Please file a bug at https://github.com/apple/swift-package-manager/issues with this info. \(description)"
2726
}
2827
}

Sources/Build/BuildDescription/SwiftTargetBuildDescription.swift

+3-2
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,10 @@ public final class SwiftTargetBuildDescription {
6666
/// Path to the bundle generated for this module (if any).
6767
var bundlePath: AbsolutePath? {
6868
if let bundleName = target.underlying.potentialBundleName, needsResourceBundle {
69-
return self.defaultBuildParameters.bundlePath(named: bundleName)
69+
let suffix = self.defaultBuildParameters.suffix(triple: self.target.buildTriple)
70+
return self.defaultBuildParameters.bundlePath(named: bundleName + suffix)
7071
} else {
71-
return .none
72+
return nil
7273
}
7374
}
7475

Sources/Build/BuildManifest/LLBuildManifestBuilder+Resources.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ extension LLBuildManifestBuilder {
4545
outputs.append(output)
4646
}
4747

48-
let cmdName = target.target.getLLBuildResourcesCmdName(config: target.buildParameters.buildConfig)
48+
let cmdName = target.target.getLLBuildResourcesCmdName(buildParameters: target.buildParameters)
4949
self.manifest.addPhonyCmd(name: cmdName, inputs: outputs, outputs: [.virtual(cmdName)])
5050

5151
return .virtual(cmdName)

Sources/Build/BuildManifest/LLBuildManifestBuilder.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -325,8 +325,8 @@ extension ResolvedModule {
325325
"\(self.name)-\(buildParameters.buildConfig)\(buildParameters.suffix(triple: self.buildTriple)).module"
326326
}
327327

328-
package func getLLBuildResourcesCmdName(config: String) -> String {
329-
"\(self.name)-\(config).module-resources"
328+
package func getLLBuildResourcesCmdName(buildParameters: BuildParameters) -> String {
329+
"\(self.name)-\(buildParameters.buildConfig)\(buildParameters.suffix(triple: self.buildTriple)).module-resources"
330330
}
331331
}
332332

Sources/Build/BuildPlan/BuildPlan.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -700,7 +700,7 @@ extension Basics.Diagnostic {
700700
extension BuildParameters {
701701
/// Returns a named bundle's path inside the build directory.
702702
func bundlePath(named name: String) -> AbsolutePath {
703-
buildPath.appending(component: name + self.triple.nsbundleExtension)
703+
self.buildPath.appending(component: name + self.triple.nsbundleExtension)
704704
}
705705
}
706706

Sources/PackageGraph/ModulesGraph+Loading.swift

+7-3
Original file line numberDiff line numberDiff line change
@@ -1097,13 +1097,17 @@ private final class ResolvedPackageBuilder: ResolvedBuilder<ResolvedPackage> {
10971097
}
10981098

10991099
override func constructImpl() throws -> ResolvedPackage {
1100-
return ResolvedPackage(
1100+
let products = try self.products.map { try $0.construct() }
1101+
var targets = products.reduce(into: IdentifiableSet()) { $0.formUnion($1.targets) }
1102+
try targets.formUnion(self.targets.map { try $0.construct() })
1103+
1104+
return try ResolvedPackage(
11011105
underlying: self.package,
11021106
defaultLocalization: self.defaultLocalization,
11031107
supportedPlatforms: self.supportedPlatforms,
11041108
dependencies: self.dependencies.map { $0.package.identity },
1105-
targets: try self.targets.map{ try $0.construct() },
1106-
products: try self.products.map{ try $0.construct() },
1109+
targets: targets,
1110+
products: products,
11071111
registryMetadata: self.registryMetadata,
11081112
platformVersionProvider: self.platformVersionProvider
11091113
)

Sources/PackageGraph/Resolution/ResolvedPackage.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public struct ResolvedPackage {
3434
public let underlying: Package
3535

3636
/// The targets contained in the package.
37-
public let targets: [ResolvedModule]
37+
public let targets: IdentifiableSet<ResolvedModule>
3838

3939
/// The products produced by the package.
4040
public let products: [ResolvedProduct]
@@ -58,7 +58,7 @@ public struct ResolvedPackage {
5858
defaultLocalization: String?,
5959
supportedPlatforms: [SupportedPlatform],
6060
dependencies: [PackageIdentity],
61-
targets: [ResolvedModule],
61+
targets: IdentifiableSet<ResolvedModule>,
6262
products: [ResolvedProduct],
6363
registryMetadata: RegistryReleaseMetadata?,
6464
platformVersionProvider: PlatformVersionProvider

Tests/BuildTests/ClangTargetBuildDescriptionTests.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ final class ClangTargetBuildDescriptionTests: XCTestCase {
106106
defaultLocalization: nil,
107107
supportedPlatforms: [],
108108
dependencies: [],
109-
targets: [target],
109+
targets: .init([target]),
110110
products: [],
111111
registryMetadata: nil,
112112
platformVersionProvider: .init(implementation: .minimumDeploymentTargetDefault)),

Tests/CommandsTests/PackageCommandTests.swift

+4-4
Original file line numberDiff line numberDiff line change
@@ -3095,9 +3095,9 @@ final class PackageCommandTests: CommandsTestCase {
30953095
let execProducts = context.package.products(ofType: ExecutableProduct.self)
30963096
print("execProducts: \\(execProducts.map{ $0.name })")
30973097
let swiftTargets = context.package.targets(ofType: SwiftSourceModuleTarget.self)
3098-
print("swiftTargets: \\(swiftTargets.map{ $0.name })")
3098+
print("swiftTargets: \\(swiftTargets.map{ $0.name }.sorted())")
30993099
let swiftSources = swiftTargets.flatMap{ $0.sourceFiles(withSuffix: ".swift") }
3100-
print("swiftSources: \\(swiftSources.map{ $0.path.lastComponent })")
3100+
print("swiftSources: \\(swiftSources.map{ $0.path.lastComponent }.sorted())")
31013101
31023102
if let target = target.sourceModule {
31033103
print("Module kind of '\\(target.name)': \\(target.kind)")
@@ -3161,8 +3161,8 @@ final class PackageCommandTests: CommandsTestCase {
31613161
do {
31623162
let (stdout, _) = try SwiftPM.Package.execute(["print-target-dependencies", "--target", "FifthTarget"], packagePath: packageDir)
31633163
XCTAssertMatch(stdout, .contains("execProducts: [\"FifthTarget\"]"))
3164-
XCTAssertMatch(stdout, .contains("swiftTargets: [\"ThirdTarget\", \"TestTarget\", \"SecondTarget\", \"FourthTarget\", \"FirstTarget\", \"FifthTarget\"]"))
3165-
XCTAssertMatch(stdout, .contains("swiftSources: [\"library.swift\", \"tests.swift\", \"library.swift\", \"library.swift\", \"library.swift\", \"main.swift\"]"))
3164+
XCTAssertMatch(stdout, .contains("swiftTargets: [\"FifthTarget\", \"FirstTarget\", \"FourthTarget\", \"SecondTarget\", \"TestTarget\", \"ThirdTarget\"]"))
3165+
XCTAssertMatch(stdout, .contains("swiftSources: [\"library.swift\", \"library.swift\", \"library.swift\", \"library.swift\", \"main.swift\", \"tests.swift\"]"))
31663166
XCTAssertMatch(stdout, .contains("Module kind of 'FifthTarget': executable"))
31673167
}
31683168

0 commit comments

Comments
 (0)