@@ -161,20 +161,39 @@ public struct Triple: Encodable, Equatable {
161
161
162
162
/// Determine the versioned host triple using the Swift compiler.
163
163
public static func getHostTriple( usingSwiftCompiler swiftCompiler: AbsolutePath ) -> Triple {
164
+ // Call the compiler to get the target info JSON.
165
+ let compilerOutput : String
164
166
do {
165
167
let result = try Process . popen ( args: swiftCompiler. pathString, " -print-target-info " )
166
- let output = try result. utf8Output ( ) . spm_chomp ( )
167
- let targetInfo = try JSON ( string: output)
168
- let tripleString : String = try targetInfo. get ( " target " ) . get ( " triple " )
169
- return try Triple ( tripleString)
168
+ compilerOutput = try result. utf8Output ( ) . spm_chomp ( )
170
169
} catch {
171
170
// FIXME: Remove the macOS special-casing once the latest version of Xcode comes with
172
171
// a Swift compiler that supports -print-target-info.
173
- #if os(macOS)
174
- return . macOS
175
- #else
176
- fatalError ( " could not determine host triple: \( error) " )
177
- #endif
172
+ #if os(macOS)
173
+ return . macOS
174
+ #else
175
+ fatalError ( " Failed to get target info ( \( error) ) " )
176
+ #endif
177
+ }
178
+ // Parse the compiler's JSON output.
179
+ let parsedTargetInfo : JSON
180
+ do {
181
+ parsedTargetInfo = try JSON ( string: compilerOutput)
182
+ } catch {
183
+ fatalError ( " Failed to parse target info ( \( error) ). \n Raw compiler output: \( compilerOutput) " )
184
+ }
185
+ // Get the triple string from the parsed JSON.
186
+ let tripleString : String
187
+ do {
188
+ tripleString = try parsedTargetInfo. get ( " target " ) . get ( " triple " )
189
+ } catch {
190
+ fatalError ( " Target info does not contain a triple string ( \( error) ). \n Target info: \( parsedTargetInfo) " )
191
+ }
192
+ // Parse the triple string.
193
+ do {
194
+ return try Triple ( tripleString)
195
+ } catch {
196
+ fatalError ( " Failed to parse triple string ( \( error) ). \n Triple string: \( tripleString) " )
178
197
}
179
198
}
180
199
}
0 commit comments