@@ -117,14 +117,20 @@ public final class BuildServerBuildSystem {
117
117
}
118
118
119
119
private func initializeBuildServer( ) throws {
120
- guard let interpreter =
121
- lookupExecutablePath ( filename: executable ( " python3 " ) ,
122
- searchPaths: searchPaths) ??
123
- lookupExecutablePath ( filename: executable ( " python " ) ,
124
- searchPaths: searchPaths) else {
125
- throw BuildServerTestError . executableNotFound ( " python3 " )
120
+ var serverPath = AbsolutePath ( serverConfig. argv [ 0 ] , relativeTo: projectRoot)
121
+ var flags = Array ( serverConfig. argv [ 1 ... ] )
122
+ if serverPath. suffix == " .py " {
123
+ flags = [ serverPath. pathString] + flags
124
+ guard let interpreterPath =
125
+ lookupExecutablePath ( filename: executable ( " python3 " ) ,
126
+ searchPaths: searchPaths) ??
127
+ lookupExecutablePath ( filename: executable ( " python " ) ,
128
+ searchPaths: searchPaths) else {
129
+ throw BuildServerTestError . executableNotFound ( " python3 " )
130
+ }
131
+
132
+ serverPath = interpreterPath
126
133
}
127
- let flags = [ AbsolutePath ( serverConfig. argv [ 0 ] , relativeTo: projectRoot) . pathString] + Array( serverConfig. argv [ 1 ... ] )
128
134
let languages = [
129
135
Language . c,
130
136
Language . cpp,
@@ -141,7 +147,7 @@ public final class BuildServerBuildSystem {
141
147
capabilities: BuildClientCapabilities ( languageIds: languages) )
142
148
143
149
let handler = BuildServerHandler ( )
144
- let buildServer = try makeJSONRPCBuildServer ( client: handler, interpreter : interpreter , serverFlags: flags)
150
+ let buildServer = try makeJSONRPCBuildServer ( client: handler, serverPath : serverPath , serverFlags: flags)
145
151
let response = try buildServer. sendSync ( initializeRequest)
146
152
buildServer. send ( InitializedBuildNotification ( ) )
147
153
log ( " initialized build server \( response. displayName) " )
@@ -306,7 +312,7 @@ struct BuildServerConfig: Codable {
306
312
let argv : [ String ]
307
313
}
308
314
309
- private func makeJSONRPCBuildServer( client: MessageHandler , interpreter : AbsolutePath , serverFlags: [ String ] ? ) throws -> JSONRPCConnection {
315
+ private func makeJSONRPCBuildServer( client: MessageHandler , serverPath : AbsolutePath , serverFlags: [ String ] ? ) throws -> JSONRPCConnection {
310
316
let clientToServer = Pipe ( )
311
317
let serverToClient = Pipe ( )
312
318
@@ -322,7 +328,7 @@ private func makeJSONRPCBuildServer(client: MessageHandler, interpreter: Absolut
322
328
withExtendedLifetime ( ( clientToServer, serverToClient) ) { }
323
329
}
324
330
let process = Foundation . Process ( )
325
- process. executableURL = interpreter . asURL
331
+ process. executableURL = serverPath . asURL
326
332
process. arguments = serverFlags
327
333
process. standardOutput = serverToClient
328
334
process. standardInput = clientToServer
0 commit comments