diff options
6 files changed, 57 insertions, 25 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD index 7178895243..cd023db4e1 100644 --- a/src/main/java/com/google/devtools/build/lib/BUILD +++ b/src/main/java/com/google/devtools/build/lib/BUILD @@ -443,6 +443,11 @@ java_library( ) java_library( + name = "execution-info-specifier", + srcs = ["analysis/actions/ExecutionInfoSpecifier.java"], +) + +java_library( name = "transitive-info-provider", srcs = ["analysis/TransitiveInfoProvider.java"], ) @@ -480,6 +485,7 @@ java_library( ":collect", ":concurrent", ":events", + ":execution-info-specifier", ":exitcode-external", ":flags", ":graph", diff --git a/src/main/java/com/google/devtools/build/lib/actions/BUILD b/src/main/java/com/google/devtools/build/lib/actions/BUILD index a6f705ae36..a73d351930 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/BUILD +++ b/src/main/java/com/google/devtools/build/lib/actions/BUILD @@ -13,6 +13,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib:collect", "//src/main/java/com/google/devtools/build/lib:concurrent", "//src/main/java/com/google/devtools/build/lib:events", + "//src/main/java/com/google/devtools/build/lib:execution-info-specifier", "//src/main/java/com/google/devtools/build/lib:io", "//src/main/java/com/google/devtools/build/lib:packages-internal", "//src/main/java/com/google/devtools/build/lib:shell", diff --git a/src/main/java/com/google/devtools/build/lib/actions/CommandAction.java b/src/main/java/com/google/devtools/build/lib/actions/CommandAction.java new file mode 100644 index 0000000000..85d1bb159b --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/actions/CommandAction.java @@ -0,0 +1,35 @@ +// Copyright 2016 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.devtools.build.lib.actions; + +import com.google.common.collect.ImmutableMap; +import com.google.devtools.build.lib.analysis.actions.ExecutionInfoSpecifier; +import java.util.List; + +/** + * An action that exposes command line arguments and environment variables for the process in which + * that command line is executed. + */ +public interface CommandAction extends Action, ExecutionInfoSpecifier { + + /** Returns a list of command line arguments that implements this action. */ + public List<String> getArguments(); + + /** + * Returns a map of command line variables to their values that constitute the environment + * in which this action should be run. + */ + public ImmutableMap<String, String> getEnvironment(); +} 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 5832fdcc3f..c942f02094 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 @@ -30,6 +30,7 @@ import com.google.devtools.build.lib.actions.ActionInput; import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.BaseSpawn; +import com.google.devtools.build.lib.actions.CommandAction; import com.google.devtools.build.lib.actions.ExecException; import com.google.devtools.build.lib.actions.Executor; import com.google.devtools.build.lib.actions.ParameterFile.ParameterFileType; @@ -60,10 +61,8 @@ import java.util.Map; import javax.annotation.CheckReturnValue; import javax.annotation.Nullable; -/** - * An Action representing an arbitrary subprocess to be forked and exec'd. - */ -public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifier { +/** An Action representing an arbitrary subprocess to be forked and exec'd. */ +public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifier, CommandAction { private static class ExtraActionInfoSupplier<T> { private final GeneratedExtension<ExtraActionInfo, T> extension; private final T value; @@ -191,9 +190,7 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie this.extraActionInfoSupplier = extraActionInfoSupplier; } - /** - * Returns the (immutable) list of all arguments, including the command name, argv[0]. - */ + @Override @VisibleForTesting public List<String> getArguments() { return ImmutableList.copyOf(argv.arguments()); @@ -353,10 +350,8 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie } } - /** - * Returns the environment in which to run this action. - */ - public Map<String, String> getEnvironment() { + @Override + public ImmutableMap<String, String> getEnvironment() { return environment; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java index b4f1e9aaf4..91ff304ee0 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java @@ -29,6 +29,7 @@ import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.Artifact.ArtifactExpander; import com.google.devtools.build.lib.actions.ArtifactResolver; +import com.google.devtools.build.lib.actions.CommandAction; import com.google.devtools.build.lib.actions.ExecException; import com.google.devtools.build.lib.actions.Executor; import com.google.devtools.build.lib.actions.PackageRootResolutionException; @@ -64,7 +65,6 @@ import com.google.devtools.build.lib.util.ShellEscaper; import com.google.devtools.build.lib.vfs.FileSystemUtils; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.PathFragment; - import java.io.IOException; import java.util.ArrayList; import java.util.Collection; @@ -77,16 +77,13 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; - import javax.annotation.Nullable; import javax.annotation.concurrent.GuardedBy; -/** - * Action that represents some kind of C++ compilation step. - */ +/** Action that represents some kind of C++ compilation step. */ @ThreadCompatible public class CppCompileAction extends AbstractAction - implements IncludeScannable, ExecutionInfoSpecifier { + implements IncludeScannable, ExecutionInfoSpecifier, CommandAction { /** * Represents logic that determines if an artifact is a special input, meaning that it may require * additional inputs when it is compiled or may not be available to other actions. @@ -613,10 +610,7 @@ public class CppCompileAction extends AbstractAction return context.getDefines(); } - /** - * Returns an (immutable) map of environment key, value pairs to be - * provided to the C++ compiler. - */ + @Override public ImmutableMap<String, String> getEnvironment() { Map<String, String> environment = new LinkedHashMap<>(configuration.getLocalShellEnvironment()); if (configuration.isCodeCoverageEnabled()) { @@ -661,6 +655,11 @@ public class CppCompileAction extends AbstractAction return getArgv(getInternalOutputFile()); } + @Override + public List<String> getArguments() { + return getArgv(); + } + protected final List<String> getArgv(PathFragment outputFile) { return cppCompileCommandLine.getArgv(outputFile); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibraryRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibraryRule.java index 77c70f65de..9f4ae215f8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibraryRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibraryRule.java @@ -19,7 +19,6 @@ import com.google.devtools.build.lib.analysis.RuleDefinition; import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleClass.Builder; -import com.google.devtools.build.lib.packages.RuleClass.PackageNameConstraint; import com.google.devtools.build.lib.rules.apple.AppleConfiguration; import com.google.devtools.build.lib.rules.cpp.CppConfiguration; @@ -32,9 +31,6 @@ public class ExperimentalObjcLibraryRule implements RuleDefinition { return builder .requiresConfigurationFragments( ObjcConfiguration.class, AppleConfiguration.class, CppConfiguration.class) - // experimental_objc_library should only occur in bazel test code. We use the /objc - // directory for tests. - .setValidityPredicate(new PackageNameConstraint(1, "objc")) .build(); } |