@@ -38,6 +38,8 @@ public protocol Toolchain {
3838
3939  var  executor :  DriverExecutor  {  get  } 
4040
41+   var  executableSuffix :  String  {  get  } 
42+ 
4143  /// Retrieve the absolute path to a particular tool.
4244  func  getToolPath( _ tool:  Tool )  throws  ->  AbsolutePath 
4345
@@ -129,26 +131,25 @@ extension Toolchain {
129131  /// looks in the `executableDir`, `xcrunFind` or in the `searchPaths`.
130132  /// - Parameter executable: executable to look for [i.e. `swift`].
131133  func  lookup( executable:  String )  throws  ->  AbsolutePath  { 
134+     let  filename  =  executable +  executableSuffix
132135    if  let  overrideString =  envVar ( forExecutable:  executable)  { 
133136      return  try AbsolutePath ( validating:  overrideString) 
134-     }  else  if  let  path =  lookupExecutablePath ( filename:  executable ,  searchPaths:  [ executableDir] )  { 
137+     }  else  if  let  path =  lookupExecutablePath ( filename:  filename ,  searchPaths:  [ executableDir] )  { 
135138      return  path
136139    }  else  if  let  path =  try ? xcrunFind ( executable:  executable)  { 
137140      return  path
138-     }  else  if  ![ " swift-frontend " ,  " swift " ,   " swift-frontend.exe " ,   " swift.exe " ] . contains ( executable) , 
139-                let  parentDirectory =  try ? getToolPath ( . swiftCompiler) . parentDirectory, 
140-                parentDirectory !=  executableDir, 
141-                let  path =  lookupExecutablePath ( filename:  executable ,  searchPaths:  [ parentDirectory] )  { 
141+     }  else  if  ![ " swift-frontend " ,  " swift " ] . contains ( executable) , 
142+         let  parentDirectory =  try ? getToolPath ( . swiftCompiler) . parentDirectory, 
143+         parentDirectory !=  executableDir, 
144+         let  path =  lookupExecutablePath ( filename:  filename ,  searchPaths:  [ parentDirectory] )  { 
142145      // If the driver library's client and the frontend are in different directories,
143146      // try looking for tools next to the frontend.
144147      return  path
145-     }  else  if  let  path =  lookupExecutablePath ( filename:  executable ,  searchPaths:  searchPaths)  { 
148+     }  else  if  let  path =  lookupExecutablePath ( filename:  filename ,  searchPaths:  searchPaths)  { 
146149      return  path
147-     // Temporary shim: fall back to looking for "swift" before failing.
148150    }  else  if  executable ==  " swift-frontend "  { 
151+       // Temporary shim: fall back to looking for "swift" before failing.
149152      return  try lookup ( executable:  " swift " ) 
150-     }  else  if  executable ==  " swift-frontend.exe "  { 
151-       return  try lookup ( executable:  " swift.exe " ) 
152153    }  else  if  fallbackToExecutableDefaultPath { 
153154      return  AbsolutePath ( " /usr/bin/ "  +  executable) 
154155    }  else  { 
0 commit comments