diff --git a/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Modules.swift b/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Modules.swift index ae3de279e84..fe2ba3597f0 100644 --- a/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Modules.swift +++ b/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Modules.swift @@ -227,7 +227,7 @@ extension PackagePIFProjectBuilder { case macro } - /// Constructs a *PIF target* for building a *module* target as a particular type. + /// Constructs a *PIF target* for building a *module* as a particular type. /// An optional target identifier suffix is passed when building variants of a target. @discardableResult private mutating func buildSourceModule( @@ -245,7 +245,8 @@ extension PackagePIFProjectBuilder { switch desiredModuleType { case .dynamicLibrary: - if pifBuilder.createDylibForDynamicProducts { // We are re-using this default for dynamic targets as well. + // We are re-using this default for dynamic targets as well. + if pifBuilder.createDylibForDynamicProducts { pifProductName = "lib\(sourceModule.name).dylib" executableName = pifProductName productType = .dynamicLibrary @@ -762,18 +763,25 @@ extension PackagePIFProjectBuilder { } } - // Set the imparted settings, which are ones that clients (both direct and indirect ones) use. - var debugImpartedSettings = impartedSettings - debugImpartedSettings[.LD_RUNPATH_SEARCH_PATHS] = - ["$(BUILT_PRODUCTS_DIR)/PackageFrameworks"] + - (debugImpartedSettings[.LD_RUNPATH_SEARCH_PATHS] ?? ["$(inherited)"]) + // Set the **imparted** settings, which are ones that clients (both direct and indirect ones) use. + // For instance, given targets A, B, C with the following dependency graph: + // + // A (executable) -> B (dynamicLibrary) -> C (objectFile) + // + // An imparted build setting on C will propagate back to both B and A. + impartedSettings[.LD_RUNPATH_SEARCH_PATHS] = + ["@loader_path"] + + (impartedSettings[.LD_RUNPATH_SEARCH_PATHS] ?? ["$(inherited)"]) + + var impartedDebugSettings = impartedSettings + impartedDebugSettings[.LD_RUNPATH_SEARCH_PATHS]! += ["$(BUILT_PRODUCTS_DIR)/PackageFrameworks"] self.project[keyPath: sourceModuleTargetKeyPath].common.addBuildConfig { id in BuildConfig( id: id, name: "Debug", settings: debugSettings, - impartedBuildSettings: debugImpartedSettings + impartedBuildSettings: impartedDebugSettings ) } self.project[keyPath: sourceModuleTargetKeyPath].common.addBuildConfig { id in