Skip to content

Commit de18528

Browse files
committed
Add support for looking up spec resources in a toolchain install
1 parent 3027a82 commit de18528

File tree

10 files changed

+31
-11
lines changed

10 files changed

+31
-11
lines changed

Package.swift

+4-2
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ func swiftSettings(languageMode: SwiftLanguageMode) -> [SwiftSetting] {
4545

4646
.swiftLanguageMode(.v5),
4747

48-
.define("USE_STATIC_PLUGIN_INITIALIZATION")
48+
.define("USE_STATIC_PLUGIN_INITIALIZATION"),
49+
.define("SEARCH_TOOLCHAIN_FOR_RESOURCES")
4950
]
5051
case .v6:
5152
return [
@@ -55,7 +56,8 @@ func swiftSettings(languageMode: SwiftLanguageMode) -> [SwiftSetting] {
5556

5657
.swiftLanguageMode(.v6),
5758

58-
.define("USE_STATIC_PLUGIN_INITIALIZATION")
59+
.define("USE_STATIC_PLUGIN_INITIALIZATION"),
60+
.define("SEARCH_TOOLCHAIN_FOR_RESOURCES")
5961
]
6062
default:
6163
fatalError("unexpected language mode")

Sources/SWBAndroidPlatform/Plugin.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import Foundation
2525

2626
struct AndroidPlatformSpecsExtension: SpecificationsExtension {
2727
func specificationFiles() -> Bundle? {
28-
.module
28+
findResourceBundle(nameWhenInstalledInToolchain: "SwiftBuild_SWBAndroidPlatform", defaultBundle: Bundle.module)
2929
}
3030

3131
func specificationDomains() -> [String : [String]] {

Sources/SWBApplePlatform/Plugin.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ struct ApplePlatformSpecsExtension: SpecificationsExtension {
9999
}
100100

101101
func specificationFiles() -> Bundle? {
102-
.module
102+
findResourceBundle(nameWhenInstalledInToolchain: "SwiftBuild_SWBApplePlatform", defaultBundle: Bundle.module)
103103
}
104104

105105
func specificationDomains() -> [String : [String]] {

Sources/SWBCore/Extensions/SpecificationsExtension.swift

+18
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,22 @@ extension SpecificationsExtension {
6969
public func specificationClassesClassic() -> [any SpecClassType.Type] { [] }
7070
public func specificationImplementations() -> [any SpecImplementationType.Type] { [] }
7171
public func specificationSearchPaths() -> [URL] { [] }
72+
73+
public func findResourceBundle(nameWhenInstalledInToolchain: String, defaultBundle: Bundle?) -> Bundle? {
74+
#if SEARCH_TOOLCHAIN_FOR_RESOURCES
75+
let resourceBundleExtension: String
76+
#if canImport(Darwin)
77+
resourceBundleExtension = "bundle"
78+
#else
79+
resourceBundleExtension = "resources"
80+
#endif
81+
if let executablePath = try? Path(CommandLine.arguments[0]).resolveSymlink(fs: localFS) {
82+
let prospectiveBundlePath = executablePath.dirname.dirname.join("share").join("pm").join("\(nameWhenInstalledInToolchain).\(resourceBundleExtension)")
83+
if let bundle = Bundle(path: prospectiveBundlePath.str) {
84+
return bundle
85+
}
86+
}
87+
#endif
88+
return defaultBundle
89+
}
7290
}

Sources/SWBCore/SpecImplementations/RegisterSpecs.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,6 @@ public struct BuiltinSpecsExtension: SpecificationsExtension {
144144
}
145145

146146
public func specificationFiles() -> Bundle? {
147-
.module
147+
findResourceBundle(nameWhenInstalledInToolchain: "SwiftBuild_SWBCore", defaultBundle: Bundle.module)
148148
}
149149
}

Sources/SWBGenericUnixPlatform/Plugin.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import Foundation
2020

2121
struct GenericUnixPlatformSpecsExtension: SpecificationsExtension {
2222
func specificationFiles() -> Bundle? {
23-
.module
23+
findResourceBundle(nameWhenInstalledInToolchain: "SwiftBuild_SWBGenericUnixPlatform", defaultBundle: Bundle.module)
2424
}
2525

2626
func specificationDomains() -> [String: [String]] {

Sources/SWBQNXPlatform/Plugin.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import Foundation
2525

2626
struct QNXPlatformSpecsExtension: SpecificationsExtension {
2727
func specificationFiles() -> Bundle? {
28-
.module
28+
findResourceBundle(nameWhenInstalledInToolchain: "SwiftBuild_SWBQNXPlatform", defaultBundle: Bundle.module)
2929
}
3030
}
3131

Sources/SWBUniversalPlatform/Plugin.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ struct UniversalPlatformSpecsExtension: SpecificationsExtension {
3636
}
3737

3838
func specificationFiles() -> Bundle? {
39-
.module
39+
findResourceBundle(nameWhenInstalledInToolchain: "SwiftBuild_SWBUniversalPlatform", defaultBundle: Bundle.module)
4040
}
4141

4242
// Allow locating the sole remaining `.xcbuildrules` file.
4343
func specificationSearchPaths() -> [URL] {
44-
Bundle.module.resourceURL.map { [$0] } ?? []
44+
findResourceBundle(nameWhenInstalledInToolchain: "SwiftBuild_SWBUniversalPlatform", defaultBundle: Bundle.module)?.resourceURL.map { [$0] } ?? []
4545
}
4646
}

Sources/SWBWebAssemblyPlatform/Plugin.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import Foundation
2323

2424
struct WebAssemblyPlatformSpecsExtension: SpecificationsExtension {
2525
func specificationFiles() -> Bundle? {
26-
.module
26+
findResourceBundle(nameWhenInstalledInToolchain: "SwiftBuild_SWBWebAssemblyPlatform", defaultBundle: Bundle.module)
2727
}
2828
}
2929

Sources/SWBWindowsPlatform/Plugin.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import Foundation
2121

2222
struct WindowsPlatformSpecsExtension: SpecificationsExtension {
2323
func specificationFiles() -> Bundle? {
24-
.module
24+
findResourceBundle(nameWhenInstalledInToolchain: "SwiftBuild_SWBWindowsPlatform", defaultBundle: Bundle.module)
2525
}
2626
}
2727

0 commit comments

Comments
 (0)