diff options
author | 2017-06-13 16:21:15 +0200 | |
---|---|---|
committer | 2017-06-13 17:13:28 +0200 | |
commit | 9b3f76ee2731cb951177cb2d656de8bbf0d4a4b5 (patch) | |
tree | a6bf7039ca3aeab50e48f3697d2976da9d9a93eb /src/main/java/com/google/devtools/build/lib/rules/cpp | |
parent | cec624e756d0090cda440937dd00da542d3932bd (diff) |
Also filter stderr when parse_showincludes feature is enabled
On Windows, cl.exe generates include information to stdout.
But when using the cuda compiler(nvcc.exe) to invoke cl.exe,
it's redirected to stderr.
So we need to parse the output of stderr as well.
Change-Id: I9a763a6eefa531932bf1077ef4155f6bda934240
PiperOrigin-RevId: 158842448
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java | 30 |
1 files changed, 21 insertions, 9 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 352dc6bf14..3adb10d216 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 @@ -1158,12 +1158,15 @@ public class CppCompileAction extends AbstractAction Executor executor = actionExecutionContext.getExecutor(); CppCompileActionContext.Reply reply; - ShowIncludesFilter showIncludesFilter = null; + ShowIncludesFilter showIncludesFilterForStdout = null; + ShowIncludesFilter showIncludesFilterForStderr = null; // If parse_showincludes feature is enabled, instead of parsing dotD file we parse the output of // cl.exe caused by /showIncludes option. if (featureConfiguration.isEnabled(CppRuleClasses.PARSE_SHOWINCLUDES)) { - showIncludesFilter = new ShowIncludesFilter(getSourceFile().getFilename()); - actionExecutionContext.getFileOutErr().setOutputFilter(showIncludesFilter); + showIncludesFilterForStdout = new ShowIncludesFilter(getSourceFile().getFilename()); + showIncludesFilterForStderr = new ShowIncludesFilter(getSourceFile().getFilename()); + actionExecutionContext.getFileOutErr().setOutputFilter(showIncludesFilterForStdout); + actionExecutionContext.getFileOutErr().setErrorFilter(showIncludesFilterForStderr); } try { reply = executor.getContext(actionContext).execWithReply(this, actionExecutionContext); @@ -1178,10 +1181,13 @@ public class CppCompileAction extends AbstractAction Path execRoot = executor.getExecRoot(); NestedSet<Artifact> discoveredInputs; - if (showIncludesFilter != null) { + if (featureConfiguration.isEnabled(CppRuleClasses.PARSE_SHOWINCLUDES)) { discoveredInputs = - discoverInputsFromShowIncludesFilter( - execRoot, scanningContext.getArtifactResolver(), showIncludesFilter); + discoverInputsFromShowIncludesFilters( + execRoot, + scanningContext.getArtifactResolver(), + showIncludesFilterForStdout, + showIncludesFilterForStderr); } else { discoveredInputs = discoverInputsFromDotdFiles(execRoot, scanningContext.getArtifactResolver(), reply); @@ -1204,18 +1210,24 @@ public class CppCompileAction extends AbstractAction } @VisibleForTesting - public NestedSet<Artifact> discoverInputsFromShowIncludesFilter( - Path execRoot, ArtifactResolver artifactResolver, ShowIncludesFilter showIncludesFilter) + public NestedSet<Artifact> discoverInputsFromShowIncludesFilters( + Path execRoot, + ArtifactResolver artifactResolver, + ShowIncludesFilter showIncludesFilterForStdout, + ShowIncludesFilter showIncludesFilterForStderr) throws ActionExecutionException { if (!cppSemantics.needsDotdInputPruning()) { return NestedSetBuilder.emptySet(Order.STABLE_ORDER); } + ImmutableList.Builder<Path> dependencies = new ImmutableList.Builder<>(); + dependencies.addAll(showIncludesFilterForStdout.getDependencies(execRoot)); + dependencies.addAll(showIncludesFilterForStderr.getDependencies(execRoot)); HeaderDiscovery.Builder discoveryBuilder = new HeaderDiscovery.Builder() .setAction(this) .setSourceFile(getSourceFile()) .setSpecialInputsHandler(specialInputsHandler) - .setDependencies(showIncludesFilter.getDependencies(execRoot)) + .setDependencies(dependencies.build()) .setPermittedSystemIncludePrefixes(getPermittedSystemIncludePrefixes(execRoot)) .setAllowedDerivedinputsMap(getAllowedDerivedInputsMap()); |