diff options
author | Ken Martin <ken.martin@kitware.com> | 2006-04-04 17:04:28 (GMT) |
---|---|---|
committer | Ken Martin <ken.martin@kitware.com> | 2006-04-04 17:04:28 (GMT) |
commit | d81ebf0c23307162dfc5c4a3c978ad9360bee354 (patch) | |
tree | 615b1ec7ff9d411e5d9cffa5c90d3f40641fd446 /Source/cmakexbuild.cxx | |
parent | b45f4a5d450c4fd56fd564fe67be00c7aeb4b59a (diff) | |
download | CMake-d81ebf0c23307162dfc5c4a3c978ad9360bee354.zip CMake-d81ebf0c23307162dfc5c4a3c978ad9360bee354.tar.gz CMake-d81ebf0c23307162dfc5c4a3c978ad9360bee354.tar.bz2 |
ENH: added support for -SP scripts in new processes
Diffstat (limited to 'Source/cmakexbuild.cxx')
-rw-r--r-- | Source/cmakexbuild.cxx | 106 |
1 files changed, 2 insertions, 104 deletions
diff --git a/Source/cmakexbuild.cxx b/Source/cmakexbuild.cxx index 6bf4da4..5f673fb 100644 --- a/Source/cmakexbuild.cxx +++ b/Source/cmakexbuild.cxx @@ -8,108 +8,6 @@ // error, and re-runs xcodebuild until that error does // not show up. -int WaitForLine(cmsysProcess* process, std::string& line, - double timeout, - std::vector<char>& out, - std::vector<char>& err) -{ - line = ""; - std::vector<char>::iterator outiter = out.begin(); - std::vector<char>::iterator erriter = err.begin(); - while(1) - { - // Check for a newline in stdout. - for(;outiter != out.end(); ++outiter) - { - if((*outiter == '\r') && ((outiter+1) == out.end())) - { - break; - } - else if(*outiter == '\n' || *outiter == '\0') - { - int length = outiter-out.begin(); - if(length > 1 && *(outiter-1) == '\r') - { - --length; - } - if(length > 0) - { - line.append(&out[0], length); - } - out.erase(out.begin(), outiter+1); - return cmsysProcess_Pipe_STDOUT; - } - } - - // Check for a newline in stderr. - for(;erriter != err.end(); ++erriter) - { - if((*erriter == '\r') && ((erriter+1) == err.end())) - { - break; - } - else if(*erriter == '\n' || *erriter == '\0') - { - int length = erriter-err.begin(); - if(length > 1 && *(erriter-1) == '\r') - { - --length; - } - if(length > 0) - { - line.append(&err[0], length); - } - err.erase(err.begin(), erriter+1); - return cmsysProcess_Pipe_STDERR; - } - } - - // No newlines found. Wait for more data from the process. - int length; - char* data; - int pipe = cmsysProcess_WaitForData(process, &data, &length, &timeout); - if(pipe == cmsysProcess_Pipe_Timeout) - { - // Timeout has been exceeded. - return pipe; - } - else if(pipe == cmsysProcess_Pipe_STDOUT) - { - // Append to the stdout buffer. - std::vector<char>::size_type size = out.size(); - out.insert(out.end(), data, data+length); - outiter = out.begin()+size; - } - else if(pipe == cmsysProcess_Pipe_STDERR) - { - // Append to the stderr buffer. - std::vector<char>::size_type size = err.size(); - err.insert(err.end(), data, data+length); - erriter = err.begin()+size; - } - else if(pipe == cmsysProcess_Pipe_None) - { - // Both stdout and stderr pipes have broken. Return leftover data. - if(!out.empty()) - { - line.append(&out[0], outiter-out.begin()); - out.erase(out.begin(), out.end()); - return cmsysProcess_Pipe_STDOUT; - } - else if(!err.empty()) - { - line.append(&err[0], erriter-err.begin()); - err.erase(err.begin(), err.end()); - return cmsysProcess_Pipe_STDERR; - } - else - { - return cmsysProcess_Pipe_None; - } - } - } -} - int RunXCode(std::vector<const char*>& argv, bool& hitbug) { hitbug = false; @@ -120,7 +18,7 @@ int RunXCode(std::vector<const char*>& argv, bool& hitbug) std::vector<char> out; std::vector<char> err; std::string line; - int pipe =WaitForLine(cp, line, 100.0, out, err); + int pipe = cmSystemTools::WaitForLine(cp, line, 100.0, out, err); while(pipe != cmsysProcess_Pipe_None) { if(line.find("/bin/sh: bad interpreter: Text file busy") @@ -144,7 +42,7 @@ int RunXCode(std::vector<const char*>& argv, bool& hitbug) std::cout << line << "\n"; } } - pipe =WaitForLine(cp, line, 100, out, err); + pipe = cmSystemTools::WaitForLine(cp, line, 100, out, err); } cmsysProcess_WaitForExit(cp, 0); if(cmsysProcess_GetState(cp) == cmsysProcess_State_Exited) |