From 13f9226911981339225456f38f74d04c7bcbd92b Mon Sep 17 00:00:00 2001 From: Laszlo Csomor Date: Fri, 30 Jun 2017 16:22:41 +0200 Subject: 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 --- .../devtools/build/lib/windows/WindowsSubprocessFactory.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocessFactory.java') 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 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); } -- cgit v1.2.3