diff options
author | 2016-08-09 15:08:40 +0000 | |
---|---|---|
committer | 2016-08-10 08:35:55 +0000 | |
commit | a8b13229be3bb7faec446be9e010838983d5a5a7 (patch) | |
tree | 92ddf0c11e82a2fcf5cc4df5f62af9a30a83d213 | |
parent | 603b540bbcd7414cd3e2c0b92c1c8985b035e41b (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
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(); } |