diff options
author | Andy Cedilnik <andy.cedilnik@kitware.com> | 2002-08-08 15:29:19 -0400 |
---|---|---|
committer | Andy Cedilnik <andy.cedilnik@kitware.com> | 2002-08-08 15:29:19 -0400 |
commit | a898cfb17aabc7e54033208e760de8e237e2d2b1 (patch) | |
tree | a33c9a09b9a4c0785d1bd97e850b46d887747eda /Source/cmExecProgramCommand.cxx | |
parent | f3a656e3915627414bd6ca6e88693f57ac206a34 (diff) | |
download | cmake-a898cfb17aabc7e54033208e760de8e237e2d2b1.tar.gz |
Add return value support and add documentation
Diffstat (limited to 'Source/cmExecProgramCommand.cxx')
-rw-r--r-- | Source/cmExecProgramCommand.cxx | 56 |
1 files changed, 43 insertions, 13 deletions
diff --git a/Source/cmExecProgramCommand.cxx b/Source/cmExecProgramCommand.cxx index 431c316790..a5e6e53ce6 100644 --- a/Source/cmExecProgramCommand.cxx +++ b/Source/cmExecProgramCommand.cxx @@ -28,8 +28,10 @@ bool cmExecProgramCommand::InitialPass(std::vector<std::string> const& args) std::string arguments; bool doingargs = false; int count = 0; - std::string variable; - bool havevariable = false; + std::string output_variable; + bool haveoutput_variable = false; + std::string return_variable; + bool havereturn_variable = false; std::string e_command; for(size_t i=0; i < args.size(); ++i) { @@ -37,29 +39,49 @@ bool cmExecProgramCommand::InitialPass(std::vector<std::string> const& args) { count++; doingargs = false; - havevariable = true; + havereturn_variable = false; + haveoutput_variable = true; } - else if ( havevariable ) + else if ( haveoutput_variable ) { - if ( variable.size() > 0 ) + if ( output_variable.size() > 0 ) { this->SetError("called with incorrect number of arguments"); return false; } - variable = args[i]; + output_variable = args[i]; count ++; } - else if(doingargs) + else if(args[i] == "RETURN_VALUE") { - arguments += args[i]; - arguments += " "; count++; + doingargs = false; + haveoutput_variable = false; + havereturn_variable = true; + } + else if ( havereturn_variable ) + { + if ( return_variable.size() > 0 ) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + return_variable = args[i]; + count ++; } else if(args[i] == "ARGS") { count++; + havereturn_variable = false; + haveoutput_variable = false; doingargs = true; } + else if(doingargs) + { + arguments += args[i]; + arguments += " "; + count++; + } } std::string command; @@ -73,24 +95,32 @@ bool cmExecProgramCommand::InitialPass(std::vector<std::string> const& args) { command = args[0]; } + int retVal = 0; std::string output; if(args.size() - count == 2) { cmSystemTools::MakeDirectory(args[1].c_str()); - cmSystemTools::RunCommand(command.c_str(), output, + cmSystemTools::RunCommand(command.c_str(), output, retVal, cmSystemTools::ConvertToOutputPath(args[1].c_str()).c_str()); } else { - cmSystemTools::RunCommand(command.c_str(), output); + cmSystemTools::RunCommand(command.c_str(), output, retVal); } - if ( variable.size() > 0 ) + if ( output_variable.size() > 0 ) { std::string::size_type first = output.find_first_not_of(" \n\t\r"); std::string::size_type last = output.find_last_not_of(" \n\t\r"); std::string coutput = std::string(output, first, last); - m_Makefile->AddDefinition(variable.c_str(), coutput.c_str()); + m_Makefile->AddDefinition(output_variable.c_str(), coutput.c_str()); + } + + if ( return_variable.size() > 0 ) + { + char buffer[100]; + sprintf(buffer, "%d", retVal); + m_Makefile->AddDefinition(return_variable.c_str(), buffer); } return true; |