From 4ab81cbe2ff93db82e104f7dd1183ad9880198c5 Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Thu, 11 Sep 2008 23:05:26 +0000 Subject: [PATCH] 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 --- clang/utils/ccc-analyzer | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/clang/utils/ccc-analyzer b/clang/utils/ccc-analyzer index 823c914203b9..739e24805e08 100755 --- a/clang/utils/ccc-analyzer +++ b/clang/utils/ccc-analyzer @@ -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 () { + print $ofh $_; + print STDERR $_; + } + + waitpid($pid,0); my $Result = $?; # Did the command die because of a signal?