Use the subprocess factory that uses the Win32 API on Windows. We should really do something about the mess that is loading our JNI libraries -- io.bazel.EnableJNI is mentioned eight times in the code in various diverse contexts. This change is not the right place to do it, though. -- MOS_MIGRATED_REVID=126570481
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java index f11b51a..f95aecd 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
@@ -71,6 +71,9 @@ import com.google.devtools.build.lib.server.AfUnixServer; import com.google.devtools.build.lib.server.RPCServer; import com.google.devtools.build.lib.server.signal.InterruptSignalHandler; +import com.google.devtools.build.lib.shell.JavaSubprocessFactory; +import com.google.devtools.build.lib.shell.Subprocess; +import com.google.devtools.build.lib.shell.SubprocessBuilder; import com.google.devtools.build.lib.skyframe.DiffAwareness; import com.google.devtools.build.lib.skyframe.PrecomputedValue; import com.google.devtools.build.lib.skyframe.SequencedSkyframeExecutorFactory; @@ -93,6 +96,7 @@ import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.lib.vfs.UnixFileSystem; import com.google.devtools.build.lib.vfs.WindowsFileSystem; +import com.google.devtools.build.lib.windows.WindowsSubprocessFactory; import com.google.devtools.build.skyframe.SkyFunction; import com.google.devtools.build.skyframe.SkyFunctionName; import com.google.devtools.common.options.Option; @@ -893,6 +897,14 @@ return OS.getCurrent() == OS.WINDOWS ? new WindowsFileSystem() : new UnixFileSystem(); } + private static Subprocess.Factory subprocessFactoryImplementation() { + if (!"0".equals(System.getProperty("io.bazel.EnableJni")) && OS.getCurrent() == OS.WINDOWS) { + return WindowsSubprocessFactory.INSTANCE; + } else { + return JavaSubprocessFactory.INSTANCE; + } + } + /** * Creates and returns a new Blaze RPCServer. Call {@link RPCServer#serve()} to start the server. */ @@ -1028,7 +1040,9 @@ if (fs == null) { fs = fileSystemImplementation(); } + Path.setFileSystemForSerialization(fs); + SubprocessBuilder.setSubprocessFactory(subprocessFactoryImplementation()); Path installBasePath = fs.getPath(installBase); Path outputBasePath = fs.getPath(outputBase);