aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/SkylarkActionFactory.java63
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java49
2 files changed, 67 insertions, 45 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkActionFactory.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkActionFactory.java
index ecfff67656..2bd1b4e8f2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkActionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkActionFactory.java
@@ -13,10 +13,17 @@
// limitations under the License.
package com.google.devtools.build.lib.rules;
+import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.actions.Action;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.Root;
+import com.google.devtools.build.lib.actions.extra.SpawnInfo;
+import com.google.devtools.build.lib.analysis.PseudoAction;
import com.google.devtools.build.lib.analysis.RuleContext;
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.skylarkinterface.Param;
+import com.google.devtools.build.lib.skylarkinterface.ParamType;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
@@ -24,7 +31,11 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.Printer;
import com.google.devtools.build.lib.syntax.Runtime;
+import com.google.devtools.build.lib.syntax.SkylarkList;
+import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
import com.google.devtools.build.lib.vfs.PathFragment;
+import java.nio.charset.StandardCharsets;
+import java.util.UUID;
/**
* Provides a Skylark interface for all action creation needs.
@@ -132,7 +143,57 @@ public class SkylarkActionFactory implements SkylarkValue {
}
- @Override
+ @SkylarkCallable(
+ name = "do_nothing",
+ doc =
+ "Creates an empty action that neither executes a command nor produces any "
+ + "output, but that is useful for inserting 'extra actions'.",
+ parameters = {
+ @Param(
+ name = "mnemonic",
+ type = String.class,
+ named = true,
+ positional = false,
+ doc = "a one-word description of the action, e.g. CppCompile or GoLink."
+ ),
+ @Param(
+ name = "inputs",
+ allowedTypes = {
+ @ParamType(type = SkylarkList.class),
+ @ParamType(type = SkylarkNestedSet.class),
+ },
+ generic1 = Artifact.class,
+ named = true,
+ positional = false,
+ defaultValue = "[]",
+ doc = "list of the input files of the action."
+ ),
+ }
+ )
+ public void doNothing(String mnemonic, Object inputs) throws EvalException {
+ context.checkMutable("actions.do_nothing");
+ NestedSet<Artifact> inputSet = inputs instanceof SkylarkNestedSet
+ ? ((SkylarkNestedSet) inputs).getSet(Artifact.class)
+ : NestedSetBuilder.<Artifact>compileOrder()
+ .addAll(((SkylarkList) inputs).getContents(Artifact.class, "inputs"))
+ .build();
+ Action action =
+ new PseudoAction<>(
+ UUID.nameUUIDFromBytes(
+ String.format("empty action %s", ruleContext.getLabel())
+ .getBytes(StandardCharsets.UTF_8)),
+ ruleContext.getActionOwner(),
+ inputSet,
+ ImmutableList.of(PseudoAction.getDummyOutput(ruleContext)),
+ mnemonic,
+ SpawnInfo.spawnInfo,
+ SpawnInfo.newBuilder().build());
+ ruleContext.registerAction(action);
+ }
+
+
+
+ @Override
public boolean isImmutable() {
return context.isImmutable();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java
index 5908834a0f..9488165e06 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java
@@ -16,17 +16,13 @@ package com.google.devtools.build.lib.rules;
import com.google.common.collect.ImmutableCollection;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
-import com.google.devtools.build.lib.actions.Action;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.RunfilesSupplier;
-import com.google.devtools.build.lib.actions.extra.SpawnInfo;
import com.google.devtools.build.lib.analysis.AbstractConfiguredTarget;
import com.google.devtools.build.lib.analysis.CommandHelper;
import com.google.devtools.build.lib.analysis.FileProvider;
import com.google.devtools.build.lib.analysis.FilesToRunProvider;
import com.google.devtools.build.lib.analysis.LocationExpander;
-import com.google.devtools.build.lib.analysis.PseudoAction;
-import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.Runfiles;
import com.google.devtools.build.lib.analysis.RunfilesProvider;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
@@ -35,8 +31,6 @@ import com.google.devtools.build.lib.analysis.actions.SpawnAction;
import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction;
import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction.Substitution;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.ParamType;
@@ -62,7 +56,6 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.UUID;
// TODO(bazel-team): function argument names are often duplicated,
// figure out a nicely readable way to get rid of the duplications.
@@ -444,7 +437,9 @@ public class SkylarkRuleImplementationFunctions {
@SkylarkSignature(
name = "empty_action",
doc =
- "Creates an empty action that neither executes a command nor produces any "
+ "DEPRECATED. Use <a href=\"actions.html#do_nothing\">ctx.actions.do_nothing</a> instead."
+ + " <br>"
+ + "Creates an empty action that neither executes a command nor produces any "
+ "output, but that is useful for inserting 'extra actions'.",
objectType = SkylarkRuleContext.class,
returnType = Runtime.NoneType.class,
@@ -475,45 +470,11 @@ public class SkylarkRuleImplementationFunctions {
new BuiltinFunction("empty_action") {
@SuppressWarnings("unused")
public Runtime.NoneType invoke(SkylarkRuleContext ctx, String mnemonic, Object inputs)
- throws EvalException, ConversionException {
+ throws EvalException {
ctx.checkMutable("empty_action");
- RuleContext ruleContext = ctx.getRuleContext();
- NestedSet<Artifact> inputSet = inputs instanceof SkylarkNestedSet
- ? ((SkylarkNestedSet) inputs).getSet(Artifact.class)
- : convertInputs((SkylarkList) inputs);
- Action action =
- new PseudoAction<>(
- generateUuid(ruleContext),
- ruleContext.getActionOwner(),
- inputSet,
- generateDummyOutputs(ruleContext),
- mnemonic,
- SpawnInfo.spawnInfo,
- createEmptySpawnInfo());
- ruleContext.registerAction(action);
-
+ ctx.actions().doNothing(mnemonic, inputs);
return Runtime.NONE;
}
-
- private NestedSet<Artifact> convertInputs(SkylarkList inputs) throws EvalException {
- return NestedSetBuilder.<Artifact>compileOrder()
- .addAll(inputs.getContents(Artifact.class, "inputs"))
- .build();
- }
-
- protected UUID generateUuid(RuleContext ruleContext) {
- return UUID.nameUUIDFromBytes(
- String.format("empty action %s", ruleContext.getLabel())
- .getBytes(StandardCharsets.UTF_8));
- }
-
- protected ImmutableList<Artifact> generateDummyOutputs(RuleContext ruleContext) {
- return ImmutableList.of(PseudoAction.getDummyOutput(ruleContext));
- }
-
- protected SpawnInfo createEmptySpawnInfo() {
- return SpawnInfo.newBuilder().build();
- }
};
@SkylarkSignature(