summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2001-07-23 15:53:52 (GMT)
committerBrad King <brad.king@kitware.com>2001-07-23 15:53:52 (GMT)
commit572ecc9b8ac38f2b1c34577f53af7d3fcd67f6a5 (patch)
tree59d81e2aac24b48fd9bf0373055b0ef6b39e2b81
parentdc87e1906d94594b1957c56e4785c184d1743e81 (diff)
downloadCMake-572ecc9b8ac38f2b1c34577f53af7d3fcd67f6a5.zip
CMake-572ecc9b8ac38f2b1c34577f53af7d3fcd67f6a5.tar.gz
CMake-572ecc9b8ac38f2b1c34577f53af7d3fcd67f6a5.tar.bz2
ENH: Added support for non-verbose mode output from running a command. This can be used when it is expected that the command may fail.
-rw-r--r--Source/cmSystemTools.cxx28
-rw-r--r--Source/cmSystemTools.h6
2 files changed, 24 insertions, 10 deletions
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index 42ee9fd..136728e 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 d5566ba..a458b54 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();