aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar Manuel Klimek <klimek@google.com>2015-03-12 09:12:45 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2015-03-13 14:16:27 +0000
commit12589f418383187269507a89c44beab4312dfa69 (patch)
tree49b8ea1c9def123c6bbf94dfba55f818ee6c8797 /src/main/java
parent2935d67a7611a24af4e35c8053367cf33d0aaa81 (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.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java16
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);