| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- /*============================================================================
- CMake - Cross Platform Makefile Generator
- Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
- Distributed under the OSI-approved BSD License (the "License");
- see accompanying file Copyright.txt for details.
- This software is distributed WITHOUT ANY WARRANTY; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the License for more information.
- ============================================================================*/
- #ifndef cmProcess_h
- #define cmProcess_h
- #include "cmStandardIncludes.h"
- #include <cmsys/Process.h>
- /** \class cmProcess
- * \brief run a process with c++
- *
- * cmProcess wraps the kwsys process stuff in a c++ class.
- */
- class cmProcess
- {
- public:
- cmProcess();
- ~cmProcess();
- const char* GetCommand() { return this->Command.c_str();}
- void SetCommand(const char* command);
- void SetCommandArguments(std::vector<std::string> const& arg);
- void SetWorkingDirectory(const char* dir) { this->WorkingDirectory = dir;}
- void SetTimeout(double t) { this->Timeout = t;}
- void ChangeTimeout(double t);
- void ResetStartTime();
- // Return true if the process starts
- bool StartProcess();
- // return the process status
- int GetProcessStatus();
- // Report the status of the program
- int ReportStatus();
- int GetId() { return this->Id; }
- void SetId(int id) { this->Id = id;}
- int GetExitValue() { return this->ExitValue;}
- double GetTotalTime() { return this->TotalTime;}
- int GetExitException();
- /**
- * Read one line of output but block for no more than timeout.
- * Returns:
- * cmsysProcess_Pipe_None = Process terminated and all output read
- * cmsysProcess_Pipe_STDOUT = Line came from stdout or stderr
- * cmsysProcess_Pipe_Timeout = Timeout expired while waiting
- */
- int GetNextOutputLine(std::string& line, double timeout);
- private:
- double Timeout;
- double StartTime;
- double TotalTime;
- cmsysProcess* Process;
- class Buffer: public std::vector<char>
- {
- // Half-open index range of partial line already scanned.
- size_type First;
- size_type Last;
- public:
- Buffer(): First(0), Last(0) {}
- bool GetLine(std::string& line);
- bool GetLast(std::string& line);
- };
- Buffer Output;
- std::string Command;
- std::string WorkingDirectory;
- std::vector<std::string> Arguments;
- std::vector<const char*> ProcessArgs;
- int Id;
- int ExitValue;
- };
- #endif
|