diff options
author | 2016-10-31 13:54:28 +0000 | |
---|---|---|
committer | 2016-10-31 15:04:59 +0000 | |
commit | 176ff2b4ada5c407c39bf4ea45ef2e64a7c154a6 (patch) | |
tree | 466c5bf9937aa50895eb45f5d4b0d67113f93f90 /src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java | |
parent | bb922271323b418addba47807b84ef71c195af96 (diff) |
ObjcCompileAction provides all headers to sandboxed execution. This allows
headers pruned by .d pruning to be re-added if they are changed.
--
MOS_MIGRATED_REVID=137697323
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java index 47c4ff1c6d..9179e74c60 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java @@ -21,13 +21,16 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.ActionExecutionContext; import com.google.devtools.build.lib.actions.ActionExecutionException; +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.ArtifactResolver; import com.google.devtools.build.lib.actions.Executor; import com.google.devtools.build.lib.actions.ResourceSet; +import com.google.devtools.build.lib.actions.Spawn; import com.google.devtools.build.lib.analysis.actions.CommandLine; import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.collect.nestedset.NestedSet; @@ -59,10 +62,27 @@ import java.util.Map; */ public class ObjcCompileAction extends SpawnAction { + /** + * A spawn that provides all headers to sandboxed execution to allow pruned headers to be + * re-introduced into action inputs. + */ + public class ObjcCompileActionSpawn extends ActionSpawn { + + public ObjcCompileActionSpawn(Map<String, String> clientEnv) { + super(clientEnv); + } + + @Override + public Iterable<? extends ActionInput> getInputFiles() { + return Iterables.concat(super.getInputFiles(), headers); + } + } + private final DotdFile dotdFile; private final Artifact sourceFile; private final NestedSet<Artifact> mandatoryInputs; private final HeaderDiscovery.DotdPruningMode dotdPruningPlan; + private final NestedSet<Artifact> headers; private static final String GUID = "a00d5bac-a72c-4f0f-99a7-d5fdc6072137"; @@ -83,7 +103,8 @@ public class ObjcCompileAction extends SpawnAction { DotdFile dotdFile, Artifact sourceFile, NestedSet<Artifact> mandatoryInputs, - HeaderDiscovery.DotdPruningMode dotdPruningPlan) { + HeaderDiscovery.DotdPruningMode dotdPruningPlan, + NestedSet<Artifact> headers) { super( owner, tools, @@ -104,6 +125,7 @@ public class ObjcCompileAction extends SpawnAction { this.sourceFile = sourceFile; this.mandatoryInputs = mandatoryInputs; this.dotdPruningPlan = dotdPruningPlan; + this.headers = headers; } /** Returns the DotdPruningPlan for this compile */ @@ -113,14 +135,18 @@ public class ObjcCompileAction extends SpawnAction { } @Override + public final Spawn getSpawn(Map<String, String> clientEnv) { + return new ObjcCompileActionSpawn(clientEnv); + } + + @Override public boolean discoversInputs() { return true; } @Override public Iterable<Artifact> discoverInputs(ActionExecutionContext actionExecutionContext) { - // We do not use include scanning for objc - return null; + return headers; } @Override @@ -225,6 +251,7 @@ public class ObjcCompileAction extends SpawnAction { private Artifact sourceFile; private final NestedSetBuilder<Artifact> mandatoryInputs = new NestedSetBuilder<>(STABLE_ORDER); private HeaderDiscovery.DotdPruningMode dotdPruningPlan; + private NestedSet<Artifact> headers; /** * Creates a new compile action builder with apple environment variables set that are typically @@ -293,6 +320,12 @@ public class ObjcCompileAction extends SpawnAction { return this; } + /** Sets the set of all possible headers that could be required by this compile action. */ + public Builder setHeaders(NestedSet<Artifact> headers) { + this.headers = Preconditions.checkNotNull(headers); + return this; + } + @Override protected SpawnAction createSpawnAction( ActionOwner owner, @@ -324,7 +357,8 @@ public class ObjcCompileAction extends SpawnAction { dotdFile, sourceFile, mandatoryInputs.build(), - dotdPruningPlan); + dotdPruningPlan, + headers); } } } |