aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Cal Peyser <cpeyser@google.com>2016-08-09 15:08:40 +0000
committerGravatar Yue Gan <yueg@google.com>2016-08-10 08:35:55 +0000
commita8b13229be3bb7faec446be9e010838983d5a5a7 (patch)
tree92ddf0c11e82a2fcf5cc4df5f62af9a30a83d213
parent603b540bbcd7414cd3e2c0b92c1c8985b035e41b (diff)
Rephrase tests so that they can be shared between objc_library and
experimental_objc_library. Do this by introducing CommandAction, which contains the common interface of SpawnAction and CppCompileAction needed for testing. This change will allow compilation, linking, and archiving tests to be copied over into the experimental tests. -- MOS_MIGRATED_REVID=129749930
-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();
}