diff --git a/Sources/SwiftBuildSupport/PackagePIFBuilder.swift b/Sources/SwiftBuildSupport/PackagePIFBuilder.swift index 53c7a428be8..cf398c2ddfa 100644 --- a/Sources/SwiftBuildSupport/PackagePIFBuilder.swift +++ b/Sources/SwiftBuildSupport/PackagePIFBuilder.swift @@ -26,6 +26,7 @@ import class PackageModel.Product import struct PackageModel.Platform import struct PackageModel.PlatformVersion import struct PackageModel.Resource +import struct PackageModel.PackageIdentity import enum PackageModel.ProductType import struct PackageGraph.ModulesGraph @@ -347,8 +348,8 @@ public final class PackagePIFBuilder { public struct LinkedPackageBinary { public let name: String - public let packageName: String public let type: BinaryType + public let packageIdentity: PackageIdentity @frozen public enum BinaryType { @@ -356,10 +357,16 @@ public final class PackagePIFBuilder { case target } - public init(name: String, packageName: String, type: BinaryType) { - self.name = name - self.packageName = packageName - self.type = type + public init(product: String, packageIdentity: PackageIdentity) { + self.name = product + self.type = .product + self.packageIdentity = packageIdentity + } + + public init(module: String, packageIdentity: PackageIdentity) { + self.name = module + self.type = .target + self.packageIdentity = packageIdentity } } @@ -695,29 +702,27 @@ enum PIFBuildingError: Error { } extension PackagePIFBuilder.LinkedPackageBinary { - init?(module: ResolvedModule, package: ResolvedPackage) { - let packageName = package.manifest.displayName - + init?(module: ResolvedModule) { switch module.type { case .executable, .snippet, .test: - self.init(name: module.name, packageName: packageName, type: .product) + self.init(product: module.name, packageIdentity: module.packageIdentity) case .library, .binary, .macro: - self.init(name: module.name, packageName: packageName, type: .target) + self.init(module: module.name, packageIdentity: module.packageIdentity) case .systemModule, .plugin: return nil } } - init?(dependency: ResolvedModule.Dependency, package: ResolvedPackage) { + init?(dependency: ResolvedModule.Dependency) { switch dependency { case .product(let productDependency, _): guard productDependency.hasSourceTargets else { return nil } - self.init(name: productDependency.name, packageName: package.name, type: .product) + self.init(product: productDependency.name, packageIdentity: productDependency.packageIdentity) case .module(let moduleDependency, _): - self.init(module: moduleDependency, package: package) + self.init(module: moduleDependency) } } } diff --git a/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Modules.swift b/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Modules.swift index a36ea1b48f2..acde62e2a2c 100644 --- a/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Modules.swift +++ b/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Modules.swift @@ -785,7 +785,7 @@ extension PackagePIFProjectBuilder { // Collect linked binaries. let linkedPackageBinaries: [PackagePIFBuilder.LinkedPackageBinary] = sourceModule.dependencies.compactMap { - PackagePIFBuilder.LinkedPackageBinary(dependency: $0, package: self.package) + PackagePIFBuilder.LinkedPackageBinary(dependency: $0) } let productOrModuleType: PackagePIFBuilder.ModuleOrProductType = if desiredModuleType == .dynamicLibrary { diff --git a/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Products.swift b/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Products.swift index e7c75b928d6..ba35884771e 100644 --- a/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Products.swift +++ b/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Products.swift @@ -490,7 +490,7 @@ extension PackagePIFProjectBuilder { // Collect linked binaries. let linkedPackageBinaries: [PackagePIFBuilder.LinkedPackageBinary] = mainModule.dependencies.compactMap { - PackagePIFBuilder.LinkedPackageBinary(dependency: $0, package: self.package) + PackagePIFBuilder.LinkedPackageBinary(dependency: $0) } let moduleOrProduct = PackagePIFBuilder.ModuleOrProduct( @@ -844,7 +844,7 @@ extension PackagePIFProjectBuilder { // Collect linked binaries. let linkedPackageBinaries = product.modules.compactMap { - PackagePIFBuilder.LinkedPackageBinary(module: $0, package: self.package) + PackagePIFBuilder.LinkedPackageBinary(module: $0) } let moduleOrProductType: PackagePIFBuilder.ModuleOrProductType = switch product.libraryType { diff --git a/Tests/SwiftBuildSupportTests/PIFBuilderTests.swift b/Tests/SwiftBuildSupportTests/PIFBuilderTests.swift index 80f00260ee5..74e62e96887 100644 --- a/Tests/SwiftBuildSupportTests/PIFBuilderTests.swift +++ b/Tests/SwiftBuildSupportTests/PIFBuilderTests.swift @@ -43,7 +43,11 @@ extension PIFBuilderParameters { } } -fileprivate func withGeneratedPIF(fromFixture fixtureName: String, addLocalRpaths: Bool = true, do doIt: (SwiftBuildSupport.PIF.TopLevelObject, TestingObservability) async throws -> ()) async throws { +fileprivate func withGeneratedPIF( + fromFixture fixtureName: String, + addLocalRpaths: Bool = true, + do doIt: (SwiftBuildSupport.PIF.TopLevelObject, TestingObservability) async throws -> () +) async throws { try await fixture(name: fixtureName) { fixturePath in let observabilitySystem = ObservabilitySystem.makeForTesting() let workspace = try Workspace( @@ -59,7 +63,10 @@ fileprivate func withGeneratedPIF(fromFixture fixtureName: String, addLocalRpath ) let builder = PIFBuilder( graph: graph, - parameters: try PIFBuilderParameters.constructDefaultParametersForTesting(temporaryDirectory: fixturePath, addLocalRpaths: addLocalRpaths), + parameters: try PIFBuilderParameters.constructDefaultParametersForTesting( + temporaryDirectory: fixturePath, + addLocalRpaths: addLocalRpaths + ), fileSystem: localFileSystem, observabilityScope: observabilitySystem.topScope )