Skip to content

Commit a72dcb8

Browse files
committed
Disambiguate PIF target names
A product can have the same name as a target in SwiftPM, but since we create a PIF target for each, we need to come up with a unique name for products. rdar://82744792
1 parent 6e31f32 commit a72dcb8

File tree

2 files changed

+17
-13
lines changed

2 files changed

+17
-13
lines changed

Sources/XCBuildSupport/PIFBuilder.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -362,11 +362,15 @@ final class PackagePIFProjectBuilder: PIFProjectBuilder {
362362
}
363363
}
364364

365+
private func targetName(for product: ResolvedProduct) -> String {
366+
return "\(product.name)_\(String(product.name.hash, radix: 16, uppercase: true))_PackageProduct"
367+
}
368+
365369
private func addMainModuleTarget(for product: ResolvedProduct) {
366370
let productType: PIF.Target.ProductType = product.type == .executable ? .executable : .unitTest
367371
let pifTarget = addTarget(
368372
guid: product.pifTargetGUID,
369-
name: product.name,
373+
name: targetName(for: product),
370374
productType: productType,
371375
productName: product.name
372376
)
@@ -478,7 +482,7 @@ final class PackagePIFProjectBuilder: PIFProjectBuilder {
478482
// depends.
479483
let pifTarget = addTarget(
480484
guid: product.pifTargetGUID,
481-
name: product.name,
485+
name: targetName(for: product),
482486
productType: productType,
483487
productName: pifTargetProductName
484488
)

Tests/XCBuildSupportTests/PIFBuilderTests.swift

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,14 @@ class PIFBuilderTests: XCTestCase {
8282
let projectNames = pif.workspace.projects.map({ $0.name })
8383
XCTAssertEqual(projectNames, ["A", "B", "Aggregate"])
8484
let projectATargetNames = pif.workspace.projects[0].targets.map({ $0.name })
85-
XCTAssertEqual(projectATargetNames, ["aexe", "alib", "A2", "A3"])
85+
XCTAssertEqual(projectATargetNames, ["aexe_79CC9E117_PackageProduct", "alib_79D40CF5C_PackageProduct", "A2", "A3"])
8686
let targetAExeDependencies = pif.workspace.projects[0].targets[0].dependencies
8787
XCTAssertEqual(targetAExeDependencies.map{ $0.targetGUID }, ["PACKAGE-PRODUCT:blib", "PACKAGE-TARGET:A2", "PACKAGE-TARGET:A3"])
8888
let projectBTargetNames = pif.workspace.projects[1].targets.map({ $0.name })
8989
#if ENABLE_TARGET_BASED_DEPENDENCY_RESOLUTION
9090
XCTAssertEqual(projectBTargetNames, ["blib", "B2"])
9191
#else
92-
XCTAssertEqual(projectBTargetNames, ["bexe", "blib", "B2"])
92+
XCTAssertEqual(projectBTargetNames, ["bexe_7ADFD1428_PackageProduct", "blib_7AE74026D_PackageProduct", "B2"])
9393
#endif
9494
}
9595
}
@@ -441,7 +441,7 @@ class PIFBuilderTests: XCTestCase {
441441
// Root Swift executable target
442442

443443
project.checkTarget("PACKAGE-PRODUCT:foo") { target in
444-
XCTAssertEqual(target.name, "foo")
444+
XCTAssertEqual(target.name, "foo_1EF26F7F_PackageProduct")
445445
XCTAssertEqual(target.productType, .executable)
446446
XCTAssertEqual(target.productName, "foo")
447447
XCTAssertEqual(target.dependencies, [
@@ -512,7 +512,7 @@ class PIFBuilderTests: XCTestCase {
512512
// Root Clang executable target
513513

514514
project.checkTarget("PACKAGE-PRODUCT:cfoo") { target in
515-
XCTAssertEqual(target.name, "cfoo")
515+
XCTAssertEqual(target.name, "cfoo_7BF40D05B_PackageProduct")
516516
XCTAssertEqual(target.productType, .executable)
517517
XCTAssertEqual(target.productName, "cfoo")
518518
XCTAssertEqual(target.dependencies, [])
@@ -574,7 +574,7 @@ class PIFBuilderTests: XCTestCase {
574574
// Non-root Swift executable target
575575

576576
project.checkTarget("PACKAGE-PRODUCT:bar") { target in
577-
XCTAssertEqual(target.name, "bar")
577+
XCTAssertEqual(target.name, "bar_1ECDA8F8_PackageProduct")
578578
XCTAssertEqual(target.productType, .executable)
579579
XCTAssertEqual(target.productName, "bar")
580580
XCTAssertEqual(target.dependencies, ["PACKAGE-TARGET:BarLib"])
@@ -627,7 +627,7 @@ class PIFBuilderTests: XCTestCase {
627627
// Non-root Clang executable target
628628

629629
project.checkTarget("PACKAGE-PRODUCT:cbar") { target in
630-
XCTAssertEqual(target.name, "cbar")
630+
XCTAssertEqual(target.name, "cbar_7BEFB595C_PackageProduct")
631631
XCTAssertEqual(target.productType, .executable)
632632
XCTAssertEqual(target.productName, "cbar")
633633
XCTAssertEqual(target.dependencies, [])
@@ -985,7 +985,7 @@ class PIFBuilderTests: XCTestCase {
985985
PIFTester(pif) { workspace in
986986
workspace.checkProject("PACKAGE:/Foo") { project in
987987
project.checkTarget("PACKAGE-PRODUCT:FooLib1") { target in
988-
XCTAssertEqual(target.name, "FooLib1")
988+
XCTAssertEqual(target.name, "FooLib1_32B0F01AD0DD0FF3_PackageProduct")
989989
XCTAssertEqual(target.productType, .packageProduct)
990990
XCTAssertEqual(target.productName, "libFooLib1.a")
991991
XCTAssertEqual(target.dependencies, [
@@ -1022,7 +1022,7 @@ class PIFBuilderTests: XCTestCase {
10221022
}
10231023

10241024
project.checkTarget("PACKAGE-PRODUCT:FooLib2") { target in
1025-
XCTAssertEqual(target.name, "FooLib2")
1025+
XCTAssertEqual(target.name, "FooLib2_32B0F01AD0DD1074_PackageProduct")
10261026
XCTAssertEqual(target.productType, .packageProduct)
10271027
XCTAssertEqual(target.productName, "libFooLib2.a")
10281028
XCTAssertEqual(target.dependencies, [
@@ -1059,7 +1059,7 @@ class PIFBuilderTests: XCTestCase {
10591059

10601060
workspace.checkProject("PACKAGE:/Bar") { project in
10611061
project.checkTarget("PACKAGE-PRODUCT:BarLib") { target in
1062-
XCTAssertEqual(target.name, "BarLib")
1062+
XCTAssertEqual(target.name, "BarLib_175D063FAE17B2_PackageProduct")
10631063
XCTAssertEqual(target.productType, .framework)
10641064
XCTAssertEqual(target.productName, "BarLib.framework")
10651065
XCTAssertEqual(target.dependencies, ["PACKAGE-TARGET:BarLib"])
@@ -1449,7 +1449,7 @@ class PIFBuilderTests: XCTestCase {
14491449
PIFTester(pif) { workspace in
14501450
workspace.checkProject("PACKAGE:/Bar") { project in
14511451
project.checkTarget("PACKAGE-PRODUCT:BarLib") { target in
1452-
XCTAssertEqual(target.name, "BarLib")
1452+
XCTAssertEqual(target.name, "BarLib_175D063FAE17B2_PackageProduct")
14531453
XCTAssertEqual(target.productType, .dynamicLibrary)
14541454
XCTAssertEqual(target.productName, "libBarLib.dylib")
14551455
}
@@ -1496,7 +1496,7 @@ class PIFBuilderTests: XCTestCase {
14961496
PIFTester(pif) { workspace in
14971497
workspace.checkProject("PACKAGE:/Bar") { project in
14981498
project.checkTarget("PACKAGE-PRODUCT:BarLib") { target in
1499-
XCTAssertEqual(target.name, "BarLib")
1499+
XCTAssertEqual(target.name, "BarLib_175D063FAE17B2_PackageProduct")
15001500

15011501
target.checkBuildConfiguration("Debug") { configuration in
15021502
configuration.checkBuildSettings { settings in

0 commit comments

Comments
 (0)