diff options
author | cpeyser <cpeyser@google.com> | 2017-05-26 16:30:01 +0200 |
---|---|---|
committer | Marcel Hlopko <hlopko@google.com> | 2017-05-26 16:53:36 +0200 |
commit | e3736d168deec840ba1bd83f47a554db9b814b75 (patch) | |
tree | 57e84ba05c9b136092a06ebad2a36a49e96f3983 /src | |
parent | 73fe48b508fb90a90aa15e40ee0f5058ba2bcced (diff) |
For objc rules, generated headers are mandatory inputs to CppCompileAction.
PiperOrigin-RevId: 157218175
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java | 14 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java | 8 |
2 files changed, 22 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java index c2e1bd8530..903f09bd8e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java @@ -19,6 +19,7 @@ import static com.google.devtools.build.lib.rules.objc.ObjcProvider.HEADER; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.STATIC_FRAMEWORK_FILE; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.collect.nestedset.NestedSet; @@ -99,6 +100,19 @@ public class ObjcCppSemantics implements CppSemantics { actionBuilder.addTransitiveMandatoryInputs(objcProvider.get(STATIC_FRAMEWORK_FILE)); actionBuilder.addTransitiveMandatoryInputs(objcProvider.get(DYNAMIC_FRAMEWORK_FILE)); + ImmutableSet.Builder<Artifact> generatedHeaders = ImmutableSet.builder(); + + // TODO(b/62060839): Identify the mechanism used to add generated headers in c++, and recycle + // it here. + PathFragment genfilesSegment = + ruleContext.getConfiguration().getGenfilesDirectory().getExecPath().getLastSegment(); + for (Artifact header : objcProvider.get(HEADER)) { + if (genfilesSegment.equals(header.getRoot().getExecPath().getLastSegment())) { + generatedHeaders.add(header); + } + } + actionBuilder.addMandatoryInputs(generatedHeaders.build()); + if (isHeaderThinningEnabled) { Artifact sourceFile = actionBuilder.getSourceFile(); if (!sourceFile.isTreeArtifact() diff --git a/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java b/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java index 41e45b1944..caad724f83 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java @@ -554,6 +554,14 @@ public abstract class PathFragment implements Comparable<PathFragment>, Serializ } /** + * Returns the last segment in this path, or null if this PathFragment represents the root of the + * filesystem. + */ + public PathFragment getLastSegment() { + return segments.length == 0 ? null : relativeTo(getParentDirectory()); + } + + /** * Returns a new PathFragment formed by appending {@code newName} to the * parent directory. Null is returned iff this method is called on a * PathFragment with zero segments. If {@code newName} designates an absolute path, |