@@ -267,6 +267,7 @@ private func createResolvedPackages(
267267
268268 var dependencies = OrderedCollections . OrderedDictionary < PackageIdentity , ResolvedPackageBuilder > ( )
269269 var dependenciesByNameForTargetDependencyResolution = [ String: ResolvedPackageBuilder] ( )
270+ var dependencyNamesForTargetDependencyResolutionOnly = [ PackageIdentity: String] ( )
270271
271272 // Establish the manifest-declared package dependencies.
272273 package . manifest. dependenciesRequired ( for: packageBuilder. productFilter) . forEach { dependency in
@@ -334,12 +335,14 @@ private func createResolvedPackages(
334335
335336 let nameForTargetDependencyResolution = dependency. explicitNameForTargetDependencyResolutionOnly ?? dependency. identity. description
336337 dependenciesByNameForTargetDependencyResolution [ nameForTargetDependencyResolution] = resolvedPackage
338+ dependencyNamesForTargetDependencyResolutionOnly [ resolvedPackage. package . identity] = nameForTargetDependencyResolution
337339
338340 dependencies [ resolvedPackage. package . identity] = resolvedPackage
339341 }
340342 }
341343
342344 packageBuilder. dependencies = Array ( dependencies. values)
345+ packageBuilder. dependencyNamesForTargetDependencyResolutionOnly = dependencyNamesForTargetDependencyResolutionOnly
343346
344347 packageBuilder. defaultLocalization = package . manifest. defaultLocalization
345348
@@ -441,7 +444,13 @@ private func createResolvedPackages(
441444
442445 let productDependencyMap : [ String : ResolvedProductBuilder ]
443446 if lookupByProductIDs {
444- productDependencyMap = productDependencies. spm_createDictionary { ( $0. product. identity, $0) }
447+ productDependencyMap = productDependencies. spm_createDictionary {
448+ guard let packageName = packageBuilder. dependencyNamesForTargetDependencyResolutionOnly [ $0. packageBuilder. package . identity] else {
449+ fatalError ( )
450+ }
451+ let key = " \( packageName. lowercased ( ) ) _ \( $0. product. name) "
452+ return ( key, $0)
453+ }
445454 } else {
446455 productDependencyMap = try Dictionary (
447456 productDependencies. map { ( $0. product. name, $0) } ,
@@ -467,7 +476,8 @@ private func createResolvedPackages(
467476 for case . product( let productRef, let conditions) in targetBuilder. target. dependencies {
468477 // Find the product in this package's dependency products.
469478 // Look it up by ID if module aliasing is used, otherwise by name.
470- let product = lookupByProductIDs ? productDependencyMap [ productRef. identity] : productDependencyMap [ productRef. name]
479+ let key = " \( productRef. package ? . lowercased ( ) ?? productRef. name. lowercased ( ) ) _ \( productRef. name) "
480+ let product = lookupByProductIDs ? productDependencyMap [ key] : productDependencyMap [ productRef. name]
471481 guard let product else {
472482 // Only emit a diagnostic if there are no other diagnostics.
473483 // This avoids flooding the diagnostics with product not
@@ -962,6 +972,9 @@ private final class ResolvedPackageBuilder: ResolvedBuilder<ResolvedPackage> {
962972 /// The dependencies of this package.
963973 var dependencies : [ ResolvedPackageBuilder ] = [ ]
964974
975+ /// Map from package identity to the local name for target dependency resolution that has been given to that package through the dependency declaration.
976+ var dependencyNamesForTargetDependencyResolutionOnly : [ PackageIdentity : String ] = [ : ]
977+
965978 /// The defaultLocalization for this package.
966979 var defaultLocalization : String ? = nil
967980
0 commit comments