summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Pfeifer <daniel@pfeifer-mail.de>2024-10-02 09:34:44 (GMT)
committerDaniel Pfeifer <daniel@pfeifer-mail.de>2024-10-02 09:37:10 (GMT)
commitf3dcbfaa8c6d52fe883472b2c243d53a1600f6c5 (patch)
tree59c703223c451bb5897603df474823a31cd9be29
parentffe07811064c850ff7c75d70965c81e4691bcbdc (diff)
downloadCMake-f3dcbfaa8c6d52fe883472b2c243d53a1600f6c5.zip
CMake-f3dcbfaa8c6d52fe883472b2c243d53a1600f6c5.tar.gz
CMake-f3dcbfaa8c6d52fe883472b2c243d53a1600f6c5.tar.bz2
CTest: Avoid infinite recursion with -SP option
This was broken since 49a37d5a97ccd6e59b9e205a96b9dec251708f76.
-rw-r--r--Source/CTest/cmCTestScriptHandler.cxx21
1 files changed, 11 insertions, 10 deletions
diff --git a/Source/CTest/cmCTestScriptHandler.cxx b/Source/CTest/cmCTestScriptHandler.cxx
index 2003ce6..ed567d4 100644
--- a/Source/CTest/cmCTestScriptHandler.cxx
+++ b/Source/CTest/cmCTestScriptHandler.cxx
@@ -139,10 +139,10 @@ int cmCTestScriptHandler::ExecuteScript(const std::string& total_script_arg)
{
// execute the script passing in the arguments to the script as well as the
// arguments from this invocation of cmake
- std::vector<const char*> argv;
- argv.push_back(cmSystemTools::GetCTestCommand().c_str());
+ std::vector<std::string> argv;
+ argv.push_back(cmSystemTools::GetCTestCommand());
argv.push_back("-SR");
- argv.push_back(total_script_arg.c_str());
+ argv.push_back(total_script_arg);
cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
"Executable for CTest is: " << cmSystemTools::GetCTestCommand()
@@ -151,10 +151,14 @@ int cmCTestScriptHandler::ExecuteScript(const std::string& total_script_arg)
// now pass through all the other arguments
std::vector<std::string>& initArgs =
this->CTest->GetInitialCommandLineArguments();
+ //*** need to make sure this does not have the current script ***
+ for (size_t i = 1; i < initArgs.size(); ++i) {
+ argv.push_back(initArgs[i]);
+ }
// Now create process object
cmUVProcessChainBuilder builder;
- builder.AddCommand(initArgs)
+ builder.AddCommand(argv)
.SetBuiltinStream(cmUVProcessChainBuilder::Stream_OUTPUT)
.SetBuiltinStream(cmUVProcessChainBuilder::Stream_ERROR);
auto process = builder.Start();
@@ -210,13 +214,10 @@ int cmCTestScriptHandler::ExecuteScript(const std::string& total_script_arg)
std::ostringstream message;
message << "Error running command: [";
message << static_cast<int>(result.first) << "] ";
- for (const char* arg : argv) {
- if (arg) {
- message << arg << " ";
- }
+ for (std::string const& arg : argv) {
+ message << arg << " ";
}
- cmCTestLog(this->CTest, ERROR_MESSAGE,
- message.str() << argv[0] << std::endl);
+ cmCTestLog(this->CTest, ERROR_MESSAGE, message.str() << std::endl);
return -1;
}
return retVal;