Echo stderr/stdout from clang subprocess to both the stderr of ccc-analyzer and

to an output file. This way users can both see the output of 'clang' as well as
enable background logging of files that clang encounters problems on.

llvm-svn: 56130
This commit is contained in:
Ted Kremenek 2008-09-11 23:05:26 +00:00
parent 7d01c0654c
commit 4ab81cbe2f
1 changed files with 14 additions and 5 deletions

View File

@ -117,15 +117,24 @@ sub Analyze {
# Capture the STDOUT of clang and reroute it to ccc-analyzer's STDERR.
# We save the output file in the 'crashes' directory if clang encounters
# any problems with the file.
my ($ofh, $ofile) = tempfile("clang_output_XXXXXX", DIR => $HtmlDir);
pipe (FROM_CHILD, TO_PARENT);
my $pid = fork();
if ($pid == 0) {
open(STDOUT,">&", \*STDERR);
open(STDERR,">&", $ofh);
close FROM_CHILD;
open(STDOUT,">&", \*TO_PARENT);
open(STDERR,">&", \*TO_PARENT);
exec $Cmd, @CmdArgs;
}
close ($ofh);
wait;
close TO_PARENT;
my ($ofh, $ofile) = tempfile("clang_output_XXXXXX", DIR => $HtmlDir);
while (<FROM_CHILD>) {
print $ofh $_;
print STDERR $_;
}
waitpid($pid,0);
my $Result = $?;
# Did the command die because of a signal?