aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp
diff options
context:
space:
mode:
authorGravatar Yun Peng <pcloudy@google.com>2017-06-13 16:21:15 +0200
committerGravatar Yun Peng <pcloudy@google.com>2017-06-13 17:13:28 +0200
commit9b3f76ee2731cb951177cb2d656de8bbf0d4a4b5 (patch)
treea6bf7039ca3aeab50e48f3697d2976da9d9a93eb /src/main/java/com/google/devtools/build/lib/rules/cpp
parentcec624e756d0090cda440937dd00da542d3932bd (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.java30
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());