diff options
author | Marcel Hlopko <hlopko@google.com> | 2017-03-08 12:10:47 +0000 |
---|---|---|
committer | Vladimir Moskva <vladmos@google.com> | 2017-03-08 13:55:50 +0000 |
commit | 967de7358db7cf774910019cefdaf8fd2ff5c789 (patch) | |
tree | d84534e2e447e3973d60d3d91dedeb12bf7d71b1 /src/main/java/com/google/devtools | |
parent | 3b99ad4144bc8530dc7454c539472ec5c7f415e8 (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.java | 20 |
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(); |