aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/BUILD6
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/BUILD1
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/CommandAction.java35
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibraryRule.java4
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();
}