diff options
author | 2017-06-30 16:22:41 +0200 | |
---|---|---|
committer | 2017-07-03 09:05:27 +0200 | |
commit | 13f9226911981339225456f38f74d04c7bcbd92b (patch) | |
tree | e1f5fbbc470695ad6a28bc3cc19a26e233f11e43 /src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocessFactory.java | |
parent | 59a0e4f10bf037dcd4f257b2e21573fa1b690e93 (diff) |
Windows, JNI: move around sources
Move the Java JNI sources to a separate package:
c.g.devtools.build.lib.windows.jni and
c.g.devtools.build.lib.windows.runfiles.
Make the native method declarations private,
create public wrapper methods for them that ensure
that the JNI library is loaded.
Split the C++ JNI source processes.cc into two
parts (processes-jni.cc and file-jni.cc), extract
common functionality to jni-util.{h,cc}.
This change preparse the code for Android rule
support on Windows, specifically it lets the
Android BusyBox use the file JNI library so it can
create junctions on Windows to work around long
path issues when calling external tools.
See https://github.com/bazelbuild/bazel/issues/3264
Change-Id: I7f1a746d73f822ae419d11b893a91f4eb45d64da
PiperOrigin-RevId: 160643355
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocessFactory.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocessFactory.java | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocessFactory.java b/src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocessFactory.java index e85325dcaa..e398a3b195 100644 --- a/src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocessFactory.java +++ b/src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocessFactory.java @@ -19,6 +19,7 @@ import com.google.devtools.build.lib.shell.Subprocess; import com.google.devtools.build.lib.shell.SubprocessBuilder; import com.google.devtools.build.lib.shell.SubprocessBuilder.StreamAction; import com.google.devtools.build.lib.vfs.PathFragment; +import com.google.devtools.build.lib.windows.jni.WindowsProcesses; import java.io.File; import java.io.IOException; import java.util.List; @@ -37,11 +38,9 @@ public class WindowsSubprocessFactory implements Subprocess.Factory { @Override public Subprocess create(SubprocessBuilder builder) throws IOException { - WindowsJniLoader.loadJni(); - List<String> argv = builder.getArgv(); - // DO NOT quote argv0, nativeCreateProcess will do it for us. + // DO NOT quote argv0, createProcess will do it for us. String argv0 = processArgv0(argv.get(0)); String argvRest = argv.size() > 1 ? WindowsProcesses.quoteCommandLine(argv.subList(1, argv.size())) : ""; @@ -51,11 +50,11 @@ public class WindowsSubprocessFactory implements Subprocess.Factory { String stderrPath = getRedirectPath(builder.getStderr(), builder.getStderrFile()); long nativeProcess = - WindowsProcesses.nativeCreateProcess( + WindowsProcesses.createProcess( argv0, argvRest, env, builder.getWorkingDirectory().getPath(), stdoutPath, stderrPath); - String error = WindowsProcesses.nativeProcessGetLastError(nativeProcess); + String error = WindowsProcesses.processGetLastError(nativeProcess); if (!error.isEmpty()) { - WindowsProcesses.nativeDeleteProcess(nativeProcess); + WindowsProcesses.deleteProcess(nativeProcess); throw new IOException(error); } |