aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar Marcel Hlopko <hlopko@google.com>2017-03-08 12:10:47 +0000
committerGravatar Vladimir Moskva <vladmos@google.com>2017-03-08 13:55:50 +0000
commit967de7358db7cf774910019cefdaf8fd2ff5c789 (patch)
treed84534e2e447e3973d60d3d91dedeb12bf7d71b1 /src/main/java/com/google/devtools
parent3b99ad4144bc8530dc7454c539472ec5c7f415e8 (diff)
Do not create symlink pointing at itself with strip_include_prefix/include_prefix
This cl fixes a bug when strip_include_prefix and include_prefix are used in such a way that the resulting virtual header is be accessible from the same path as the original header and bazel would attempt to create symlink pointing at itself. Fixes #2635 -- PiperOrigin-RevId: 149524480 MOS_MIGRATED_REVID=149524480
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java20
1 files changed, 14 insertions, 6 deletions
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 f29682238e..4151d995c7 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
@@ -1242,12 +1242,20 @@ public final class CcLibraryHelper {
includePath = prefix.getRelative(includePath);
}
- Artifact virtualHeader = ruleContext.getUniqueDirectoryArtifact("_virtual_includes",
- includePath, ruleContext.getBinOrGenfilesDirectory());
- ruleContext.registerAction(new SymlinkAction(
- ruleContext.getActionOwner(), originalHeader, virtualHeader,
- "Symlinking virtual headers for " + ruleContext.getLabel()));
- moduleHeadersBuilder.add(virtualHeader);
+ if (!originalHeader.getExecPath().equals(includePath)) {
+ Artifact virtualHeader =
+ ruleContext.getUniqueDirectoryArtifact(
+ "_virtual_includes", includePath, ruleContext.getBinOrGenfilesDirectory());
+ ruleContext.registerAction(
+ new SymlinkAction(
+ ruleContext.getActionOwner(),
+ originalHeader,
+ virtualHeader,
+ "Symlinking virtual headers for " + ruleContext.getLabel()));
+ moduleHeadersBuilder.add(virtualHeader);
+ } else {
+ moduleHeadersBuilder.add(originalHeader);
+ }
}
ImmutableList<Artifact> moduleMapHeaders = moduleHeadersBuilder.build();