diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index 42ee9fd11..136728e34 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -805,7 +805,8 @@ bool cmSystemTools::IsOff(const char* val) bool cmSystemTools::RunCommand(const char* command, - std::string& output) + std::string& output, + bool verbose) { const int BUFFER_SIZE = 4096; char buffer[BUFFER_SIZE]; @@ -820,12 +821,15 @@ bool cmSystemTools::RunCommand(const char* command, std::ifstream fin(tempFile.c_str()); if(!fin) { - std::string errormsg = "RunCommand produced no output: command: \""; - errormsg += command; - errormsg += "\""; - errormsg += "\nOutput file: "; - errormsg += tempFile; - cmSystemTools::Error(errormsg.c_str()); + if(verbose) + { + std::string errormsg = "RunCommand produced no output: command: \""; + errormsg += command; + errormsg += "\""; + errormsg += "\nOutput file: "; + errormsg += tempFile; + cmSystemTools::Error(errormsg.c_str()); + } fin.close(); cmSystemTools::RemoveFile(tempFile.c_str()); return false; @@ -839,7 +843,10 @@ bool cmSystemTools::RunCommand(const char* command, cmSystemTools::RemoveFile(tempFile.c_str()); return true; #else - std::cout << "running " << command << std::endl; + if(verbose) + { + std::cout << "running " << command << std::endl; + } FILE* cpipe = popen(command, "r"); if(!cpipe) { @@ -848,7 +855,10 @@ bool cmSystemTools::RunCommand(const char* command, fgets(buffer, BUFFER_SIZE, cpipe); while(!feof(cpipe)) { - std::cout << buffer << std::flush; + if(verbose) + { + std::cout << buffer << std::flush; + } output += buffer; fgets(buffer, BUFFER_SIZE, cpipe); } diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h index d5566ba02..a458b5484 100644 --- a/Source/cmSystemTools.h +++ b/Source/cmSystemTools.h @@ -245,8 +245,12 @@ public: * Run an executable command and put the stdout in output. * A temporary file is created in the binaryDir for storing the * output because windows does not have popen. + * + * If verbose is false, no user-viewable output from the program + * being run will be generated. */ - static bool RunCommand(const char* command, std::string& output); + static bool RunCommand(const char* command, std::string& output, + bool verbose = true); ///! Generate a temporary file name static std::string TemporaryFileName();