@@ -129,39 +129,44 @@ struct GenericUnixToolchainRegistryExtension: ToolchainRegistryExtension {
129
129
130
130
let fs = context. fs
131
131
132
- if let swift = StackedSearchPath ( environment: . current, fs: fs) . lookup ( Path ( " swift " ) ) , fs. exists ( swift) {
133
- let realSwiftPath = try fs. realpath ( swift) . dirname. normalize ( )
134
- let hasUsrBin = realSwiftPath. str. hasSuffix ( " /usr/bin " )
135
- let hasUsrLocalBin = realSwiftPath. str. hasSuffix ( " /usr/local/bin " )
136
- let path : Path
137
- switch ( hasUsrBin, hasUsrLocalBin) {
138
- case ( true , false ) :
139
- path = realSwiftPath. dirname. dirname
140
- case ( false , true ) :
141
- path = realSwiftPath. dirname. dirname. dirname
142
- case ( false , false ) :
143
- throw StubError . error ( " Unexpected toolchain layout for Swift installation path: \( realSwiftPath) " )
144
- case ( true , true ) :
145
- preconditionFailure ( )
132
+ for swift in [
133
+ Environment . current [ " SWIFT_EXEC " ] . map ( Path . init) ,
134
+ StackedSearchPath ( environment: . current, fs: fs) . lookup ( Path ( " swift " ) )
135
+ ] . compactMap ( \. self) {
136
+ if fs. exists ( swift) {
137
+ let realSwiftPath = try fs. realpath ( swift) . dirname. normalize ( )
138
+ let hasUsrBin = realSwiftPath. str. hasSuffix ( " /usr/bin " )
139
+ let hasUsrLocalBin = realSwiftPath. str. hasSuffix ( " /usr/local/bin " )
140
+ let path : Path
141
+ switch ( hasUsrBin, hasUsrLocalBin) {
142
+ case ( true , false ) :
143
+ path = realSwiftPath. dirname. dirname
144
+ case ( false , true ) :
145
+ path = realSwiftPath. dirname. dirname. dirname
146
+ case ( false , false ) :
147
+ throw StubError . error ( " Unexpected toolchain layout for Swift installation path: \( realSwiftPath) " )
148
+ case ( true , true ) :
149
+ preconditionFailure ( )
150
+ }
151
+ let llvmDirectories = try Array ( fs. listdir ( Path ( " /usr/lib " ) ) . filter { $0. hasPrefix ( " llvm- " ) } . sorted ( ) . reversed ( ) )
152
+ let llvmDirectoriesLocal = try Array ( fs. listdir ( Path ( " /usr/local " ) ) . filter { $0. hasPrefix ( " llvm " ) } . sorted ( ) . reversed ( ) )
153
+ return [
154
+ Toolchain (
155
+ identifier: ToolchainRegistry . defaultToolchainIdentifier,
156
+ displayName: " Default " ,
157
+ version: Version ( ) ,
158
+ aliases: [ " default " ] ,
159
+ path: path,
160
+ frameworkPaths: [ ] ,
161
+ libraryPaths: llvmDirectories. map { " /usr/lib/ \( $0) /lib " } + llvmDirectoriesLocal. map { " /usr/local/ \( $0) /lib " } + [ " /usr/lib64 " ] ,
162
+ defaultSettings: [ : ] ,
163
+ overrideSettings: [ : ] ,
164
+ defaultSettingsWhenPrimary: [ : ] ,
165
+ executableSearchPaths: realSwiftPath. dirname. relativeSubpath ( from: path) . map { [ path. join ( $0) . join ( " bin " ) ] } ?? [ ] ,
166
+ testingLibraryPlatformNames: [ ] ,
167
+ fs: fs)
168
+ ]
146
169
}
147
- let llvmDirectories = try Array ( fs. listdir ( Path ( " /usr/lib " ) ) . filter { $0. hasPrefix ( " llvm- " ) } . sorted ( ) . reversed ( ) )
148
- let llvmDirectoriesLocal = try Array ( fs. listdir ( Path ( " /usr/local " ) ) . filter { $0. hasPrefix ( " llvm " ) } . sorted ( ) . reversed ( ) )
149
- return [
150
- Toolchain (
151
- identifier: ToolchainRegistry . defaultToolchainIdentifier,
152
- displayName: " Default " ,
153
- version: Version ( ) ,
154
- aliases: [ " default " ] ,
155
- path: path,
156
- frameworkPaths: [ ] ,
157
- libraryPaths: llvmDirectories. map { " /usr/lib/ \( $0) /lib " } + llvmDirectoriesLocal. map { " /usr/local/ \( $0) /lib " } + [ " /usr/lib64 " ] ,
158
- defaultSettings: [ : ] ,
159
- overrideSettings: [ : ] ,
160
- defaultSettingsWhenPrimary: [ : ] ,
161
- executableSearchPaths: realSwiftPath. dirname. relativeSubpath ( from: path) . map { [ path. join ( $0) . join ( " bin " ) ] } ?? [ ] ,
162
- testingLibraryPlatformNames: [ ] ,
163
- fs: fs)
164
- ]
165
170
}
166
171
167
172
return [ ]
0 commit comments