diff options
Diffstat (limited to 'src/main/java/com')
8 files changed, 32 insertions, 27 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java b/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java index 18904863af..eb4208aef4 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java @@ -306,6 +306,6 @@ public final class CommandHelper { private PathFragment shellPath(Map<String, String> executionInfo) { // Use vanilla /bin/bash for actions running on mac machines. return executionInfo.containsKey("requires-darwin") - ? new PathFragment("/bin/bash") : ruleContext.getConfiguration().getShExecutable(); + ? new PathFragment("/bin/bash") : ruleContext.getConfiguration().getShellExecutable(); } } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java index 6e34e0ffbd..988e1d812e 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java @@ -568,7 +568,7 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie Iterable<String> arguments = argumentsBuilder.build(); // Check to see if we need to use param file. Artifact paramsFile = ParamFileHelper.getParamsFileMaybe( - buildExecutableArgs(configuration.getShExecutable()), + buildExecutableArgs(configuration.getShellExecutable()), arguments, commandLine, paramFileInfo, @@ -589,7 +589,7 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie buildSpawnAction( owner, configuration.getLocalShellEnvironment(), - configuration.getShExecutable(), + configuration.getShellExecutable(), paramsFile, paramFileWriteAction)); if (paramFileWriteAction != null) { diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java index 272582da94..8f01d0d0fe 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java @@ -198,11 +198,13 @@ public final class BuildConfiguration { } /** - * Add mappings from generally available tool names (like "sh") to their paths - * that actions can access. + * Returns the shell to be used. + * + * <p>Each configuration instance must have at most one fragment that returns non-null. */ @SuppressWarnings("unused") - public void defineExecutables(ImmutableMap.Builder<String, PathFragment> builder) { + public PathFragment getShellExecutable() { + return null; } /** @@ -1065,7 +1067,7 @@ public final class BuildConfiguration { private final boolean actionsEnabled; // TODO(bazel-team): Move this to a configuration fragment. - private final PathFragment shExecutable; + private final PathFragment shellExecutable; /** * The global "make variables" such as "$(TARGET_CPU)"; these get applied to all rules analyzed in @@ -1285,7 +1287,7 @@ public final class BuildConfiguration { ? options.outputDirectoryName : mnemonic; this.platformName = buildPlatformName(); - this.shExecutable = collectExecutables().get("sh"); + this.shellExecutable = computeShellExecutable(); this.outputRoots = outputRoots != null ? outputRoots @@ -2066,8 +2068,8 @@ public final class BuildConfiguration { /** * Returns the path to sh. */ - public PathFragment getShExecutable() { - return shExecutable; + public PathFragment getShellExecutable() { + return shellExecutable; } /** @@ -2366,12 +2368,17 @@ public final class BuildConfiguration { /** * Collects executables defined by fragments. */ - private ImmutableMap<String, PathFragment> collectExecutables() { - ImmutableMap.Builder<String, PathFragment> builder = new ImmutableMap.Builder<>(); + private PathFragment computeShellExecutable() { + PathFragment result = null; + for (Fragment fragment : fragments.values()) { - fragment.defineExecutables(builder); + if (fragment.getShellExecutable() != null) { + Verify.verify(result == null); + result = fragment.getShellExecutable(); + } } - return builder.build(); + + return result; } /** diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfiguration.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfiguration.java index 5567f08e07..a09d9ba66a 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfiguration.java @@ -56,26 +56,24 @@ public class BazelConfiguration extends Fragment { } @Override - public void defineExecutables(ImmutableMap.Builder<String, PathFragment> builder) { + public PathFragment getShellExecutable() { if (OS.getCurrent() == OS.WINDOWS) { String path = System.getenv("BAZEL_SH"); if (path != null) { - builder.put("sh", new PathFragment(path)); + return new PathFragment(path); } else { - builder.put("sh", new PathFragment("c:/tools/msys64/usr/bin/bash.exe")); + return new PathFragment("c:/tools/msys64/usr/bin/bash.exe"); } - return; } if (OS.getCurrent() == OS.FREEBSD) { String path = System.getenv("BAZEL_SH"); if (path != null) { - builder.put("sh", new PathFragment(path)); + return new PathFragment(path); } else { - builder.put("sh", new PathFragment("/usr/local/bin/bash")); + return new PathFragment("/usr/local/bin/bash"); } - return; } - builder.put("sh", new PathFragment("/bin/bash")); + return new PathFragment("/bin/bash"); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java index bb4826e242..db3ab654fd 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java @@ -411,7 +411,7 @@ public final class LinkCommandLine extends CommandLine { case DYNAMIC_LIBRARY: if (interfaceOutput != null) { - argv.add(configuration.getShExecutable().getPathString()); + argv.add(configuration.getShellExecutable().getPathString()); argv.add("-c"); argv.add( "build_iface_so=\"$0\"; impl=\"$1\"; iface=\"$2\"; cmd=\"$3\"; shift 3; " diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java b/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java index 19bfdb339e..db3f5839cf 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java @@ -549,7 +549,7 @@ public class TestRunnerAction extends AbstractAction implements NotifyOnActionCa } public PathFragment getShExecutable() { - return configuration.getShExecutable(); + return configuration.getShellExecutable(); } public ImmutableMap<String, String> getLocalShellEnvironment() { diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/TestStrategy.java b/src/main/java/com/google/devtools/build/lib/rules/test/TestStrategy.java index ce9e08d8c6..9e26dfd0e2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/test/TestStrategy.java +++ b/src/main/java/com/google/devtools/build/lib/rules/test/TestStrategy.java @@ -219,7 +219,7 @@ public abstract class TestStrategy implements TestActionContext { args.addAll(execSettings.getRunUnder().getOptions()); args.addAll(execArgs); } else { - args.add(testAction.getConfiguration().getShExecutable().getPathString()); + args.add(testAction.getConfiguration().getShellExecutable().getPathString()); args.add("-c"); String runUnderCommand = ShellEscaper.escapeString(execSettings.getRunUnder().getCommand()); diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java index 26dda275a6..ca2b04a2a9 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java @@ -275,11 +275,11 @@ public class RunCommand implements BlazeCommand { runUnderValue += " " + ShellEscaper.escapeJoinAll(opts); } } - cmdLine.add(configuration.getShExecutable().getPathString()); + cmdLine.add(configuration.getShellExecutable().getPathString()); cmdLine.add("-c"); cmdLine.add(runUnderValue + " " + executablePath.getPathString() + " " + ShellEscaper.escapeJoinAll(args)); - prettyCmdLine.add(configuration.getShExecutable().getPathString()); + prettyCmdLine.add(configuration.getShellExecutable().getPathString()); prettyCmdLine.add("-c"); prettyCmdLine.add(runUnderValue + " " + prettyExecutablePath.getPathString() + " " + ShellEscaper.escapeJoinAll(args)); |