diff options
author | 2015-03-12 09:12:45 +0000 | |
---|---|---|
committer | 2015-03-13 14:16:27 +0000 | |
commit | 12589f418383187269507a89c44beab4312dfa69 (patch) | |
tree | 49b8ea1c9def123c6bbf94dfba55f818ee6c8797 /src/main/java | |
parent | 2935d67a7611a24af4e35c8053367cf33d0aaa81 (diff) |
Implements an attribute textual_hdrs for cc_library rules.
We currently use .inc as file extension for textual includes, as per
the style guide. This is not feasible for third_party libraries, including
libc and lib(std)c++.
RELNOTES: Add textual_hdrs attribute to cc_library rules.
--
MOS_MIGRATED_REVID=88422306
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java | 4 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java | 16 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java index 50864716ad..e028cbb7be 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java @@ -181,6 +181,10 @@ public abstract class CcLibrary implements RuleConfiguredTargetFactory { CppFileTypes.CPP_HEADER)); ruleContext.checkSrcsSamePackage(true); } + if (ruleContext.getRule().isAttrDefined("textual_hdrs", Type.LABEL_LIST)) { + helper.addPublicTextualHeaders( + ruleContext.getPrerequisiteArtifacts("textual_hdrs", Mode.TARGET).list()); + } if (common.getLinkopts().contains("-static")) { ruleContext.attributeWarning("linkopts", "Using '-static' here won't work. " diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java index 9e31b974b8..a03fd9cd85 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java @@ -152,6 +152,7 @@ public final class CcLibraryHelper { private final CppSemantics semantics; private final List<Artifact> publicHeaders = new ArrayList<>(); + private final List<Artifact> publicTextualHeaders = new ArrayList<>(); private final List<Artifact> privateHeaders = new ArrayList<>(); private final List<PathFragment> additionalExportedHeaders = new ArrayList<>(); private final List<Pair<Artifact, Label>> sources = new ArrayList<>(); @@ -233,6 +234,18 @@ public final class CcLibraryHelper { } /** + * Add the corresponding files as public textual header files. These files will not be compiled + * into a target's header module, but will be made visible as textual includes to dependent rules. + */ + public CcLibraryHelper addPublicTextualHeaders(Iterable<Artifact> textualHeaders) { + Iterables.addAll(this.publicTextualHeaders, textualHeaders); + for (Artifact header : textualHeaders) { + this.additionalExportedHeaders.add(header.getExecPath()); + } + return this; + } + + /** * Add the corresponding files as source files. These may also be header files, in which case * they will not be compiled, but also not made visible as includes to dependent rules. */ @@ -711,10 +724,13 @@ public final class CcLibraryHelper { // There are no ordering constraints for declared include dirs/srcs, or the pregrepped headers. contextBuilder.addDeclaredIncludeSrcs(publicHeaders); + contextBuilder.addDeclaredIncludeSrcs(publicTextualHeaders); contextBuilder.addDeclaredIncludeSrcs(privateHeaders); contextBuilder.addPregreppedHeaderMap( CppHelper.createExtractInclusions(ruleContext, publicHeaders)); contextBuilder.addPregreppedHeaderMap( + CppHelper.createExtractInclusions(ruleContext, publicTextualHeaders)); + contextBuilder.addPregreppedHeaderMap( CppHelper.createExtractInclusions(ruleContext, privateHeaders)); contextBuilder.addCompilationPrerequisites(prerequisites); |