diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index 3a730b2a0..3ba72876c 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -17,6 +17,7 @@ #include #include #include +#include #ifdef __QNX__ # include /* for malloc/free on QNX */ #endif @@ -673,7 +674,16 @@ bool cmSystemTools::RunSingleCommand(std::vectorconst& command, { cmsysProcess_SetPipeShared(cp, cmsysProcess_Pipe_STDOUT, 1); cmsysProcess_SetPipeShared(cp, cmsysProcess_Pipe_STDERR, 1); + captureStdOut = 0; + captureStdErr = 0; } + else if (outputflag == OUTPUT_MERGE || + (captureStdErr && captureStdErr == captureStdOut)) + { + cmsysProcess_SetOption(cp, cmsysProcess_Option_MergeOutput, 1); + captureStdErr = 0; + } + assert(!captureStdErr || captureStdErr != captureStdOut); cmsysProcess_SetTimeout(cp, timeout); cmsysProcess_Execute(cp); @@ -699,40 +709,28 @@ bool cmSystemTools::RunSingleCommand(std::vectorconst& command, } } - if(pipe == cmsysProcess_Pipe_STDOUT || - (pipe == cmsysProcess_Pipe_STDERR && - captureStdOut == captureStdErr)) + if (pipe == cmsysProcess_Pipe_STDOUT) { + if (outputflag != OUTPUT_NONE) + { + cmSystemTools::Stdout(data, length); + } if (captureStdOut) { tempStdOut.insert(tempStdOut.end(), data, data+length); } } - else if(pipe == cmsysProcess_Pipe_STDERR) + else if (pipe == cmsysProcess_Pipe_STDERR) { + if (outputflag != OUTPUT_NONE) + { + cmSystemTools::Stderr(data, length); + } if (captureStdErr) { tempStdErr.insert(tempStdErr.end(), data, data+length); } } - if(outputflag != OUTPUT_NONE) - { - if(outputflag == OUTPUT_MERGE) - { - cmSystemTools::Stdout(data, length); - } - else - { - if(pipe == cmsysProcess_Pipe_STDERR) - { - cmSystemTools::Stderr(data, length); - } - else if(pipe == cmsysProcess_Pipe_STDOUT) - { - cmSystemTools::Stdout(data, length); - } - } - } } } @@ -741,7 +739,7 @@ bool cmSystemTools::RunSingleCommand(std::vectorconst& command, { captureStdOut->assign(tempStdOut.begin(), tempStdOut.end()); } - if (captureStdErr && captureStdErr != captureStdOut) + if (captureStdErr) { captureStdErr->assign(tempStdErr.begin(), tempStdErr.end()); }