diff options
Diffstat (limited to 'Source/CTest/cmCTestRunScriptCommand.cxx')
-rw-r--r-- | Source/CTest/cmCTestRunScriptCommand.cxx | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/Source/CTest/cmCTestRunScriptCommand.cxx b/Source/CTest/cmCTestRunScriptCommand.cxx new file mode 100644 index 0000000..32bf28f --- /dev/null +++ b/Source/CTest/cmCTestRunScriptCommand.cxx @@ -0,0 +1,53 @@ +/*============================================================================ + 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. +============================================================================*/ +#include "cmCTestRunScriptCommand.h" + +#include "cmCTestScriptHandler.h" + +bool cmCTestRunScriptCommand::InitialPass(std::vector<std::string> const& args, + cmExecutionStatus& /*unused*/) +{ + if (args.empty()) { + this->CTestScriptHandler->RunCurrentScript(); + return true; + } + + bool np = false; + unsigned int i = 0; + if (args[i] == "NEW_PROCESS") { + np = true; + i++; + } + int start = i; + // run each script + std::string returnVariable; + for (i = start; i < args.size(); ++i) { + if (args[i] == "RETURN_VALUE") { + ++i; + if (i < args.size()) { + returnVariable = args[i]; + } + } + } + for (i = start; i < args.size(); ++i) { + if (args[i] == "RETURN_VALUE") { + ++i; + } else { + int ret; + cmCTestScriptHandler::RunScript(this->CTest, args[i].c_str(), !np, &ret); + std::ostringstream str; + str << ret; + this->Makefile->AddDefinition(returnVariable, str.str().c_str()); + } + } + return true; +} |