aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar Peter Schmitt <schmitt@google.com>2015-06-03 15:26:20 +0000
committerGravatar Florian Weikert <fwe@google.com>2015-06-05 09:37:20 +0000
commit13c3829357e6786e073800946185f74a3ae2c3a8 (patch)
treebb791eafe8d88d2e03c86a4143dd1f5842b22ca9 /src/main/java/com/google
parent59fa1c1125b92085d9280b08273e1c421e3758bf (diff)
Allow absolute system includes if they're builtins.
-- MOS_MIGRATED_REVID=95108839
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
index b2380f92b6..ded0cd39ec 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
@@ -265,16 +265,25 @@ public class CppCompileAction extends AbstractAction implements IncludeScannable
if (ruleContext == null) {
return;
}
+
+ Iterable<PathFragment> ignoredDirs = getValidationIgnoredDirs();
+
// We currently do not check the output of:
// - getQuoteIncludeDirs(): those only come from includes attributes, and are checked in
// CcCommon.getIncludeDirsFromIncludesAttribute().
// - getBuiltinIncludeDirs(): while in practice this doesn't happen, bazel can be configured
// to use an absolute system root, in which case the builtin include dirs might be absolute.
for (PathFragment include : Iterables.concat(getIncludeDirs(), getSystemIncludeDirs())) {
+
+ // Ignore headers from built-in include directories.
+ if (FileSystemUtils.startsWithAny(include, ignoredDirs)) {
+ continue;
+ }
+
if (include.isAbsolute()
|| !PathFragment.EMPTY_FRAGMENT.getRelative(include).normalize().isNormalized()) {
- ruleContext.ruleError("The include path '" + include
- + "' references a path outside of the execution root.");
+ ruleContext.ruleError(
+ "The include path '" + include + "' references a path outside of the execution root.");
}
}
}
@@ -656,10 +665,7 @@ public class CppCompileAction extends AbstractAction implements IncludeScannable
if (optionalSourceFile != null) {
allowedIncludes.add(optionalSourceFile);
}
- List<PathFragment> cxxSystemIncludeDirs =
- cppConfiguration.getBuiltInIncludeDirectories();
- Iterable<PathFragment> ignoreDirs = Iterables.concat(cxxSystemIncludeDirs,
- extraSystemIncludePrefixes, context.getSystemIncludeDirs());
+ Iterable<PathFragment> ignoreDirs = getValidationIgnoredDirs();
// Copy the sets to hash sets for fast contains checking.
// Avoid immutable sets here to limit memory churn.
@@ -724,6 +730,12 @@ public class CppCompileAction extends AbstractAction implements IncludeScannable
errors.assertProblemFree(this, getSourceFile());
}
+ private Iterable<PathFragment> getValidationIgnoredDirs() {
+ List<PathFragment> cxxSystemIncludeDirs = cppConfiguration.getBuiltInIncludeDirectories();
+ return Iterables.concat(
+ cxxSystemIncludeDirs, extraSystemIncludePrefixes, context.getSystemIncludeDirs());
+ }
+
/**
* Returns true if an included artifact is declared in a set of allowed
* include directories. The simple case is that the artifact's parent
@@ -735,8 +747,8 @@ public class CppCompileAction extends AbstractAction implements IncludeScannable
* <p>It also handles unseen non-nested-package subdirs by walking up the path looking
* for matches.
*/
- private static boolean isDeclaredIn(Artifact input, Set<PathFragment> declaredIncludeDirs,
- Set<Artifact> declaredIncludeSrcs) {
+ private static boolean isDeclaredIn(
+ Artifact input, Set<PathFragment> declaredIncludeDirs, Set<Artifact> declaredIncludeSrcs) {
// First check if it's listed in "srcs". If so, then its declared & OK.
if (declaredIncludeSrcs.contains(input)) {
return true;