summaryrefslogtreecommitdiffstats
path: root/Source/cmakexbuild.cxx
diff options
context:
space:
mode:
authorKen Martin <ken.martin@kitware.com>2006-04-04 17:04:28 (GMT)
committerKen Martin <ken.martin@kitware.com>2006-04-04 17:04:28 (GMT)
commitd81ebf0c23307162dfc5c4a3c978ad9360bee354 (patch)
tree615b1ec7ff9d411e5d9cffa5c90d3f40641fd446 /Source/cmakexbuild.cxx
parentb45f4a5d450c4fd56fd564fe67be00c7aeb4b59a (diff)
downloadCMake-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.cxx106
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)