ENH: Add OPTIONS argument to the ctest_configure command so that you can pass -D arguments to the cmake configure step from a ctest -S script. Also clarify/correct some not so helpful error messages.

This commit is contained in:
David Cole 2008-12-30 09:13:02 -05:00
parent b640257884
commit 9457ca3cf5
4 changed files with 50 additions and 14 deletions

View File

@ -19,8 +19,22 @@
#include "cmCTest.h"
#include "cmCTestGenericHandler.h"
cmCTestConfigureCommand::cmCTestConfigureCommand()
{
this->Arguments[ctc_OPTIONS] = "OPTIONS";
this->Arguments[ctc_LAST] = 0;
this->Last = ctc_LAST;
}
cmCTestGenericHandler* cmCTestConfigureCommand::InitializeHandler()
{
std::vector<std::string> options;
if (this->Values[ctc_OPTIONS])
{
cmSystemTools::ExpandListArgument(this->Values[ctc_OPTIONS], options);
}
if ( this->Values[ct_BUILD] )
{
this->CTest->SetCTestConfiguration("BuildDirectory",
@ -33,6 +47,7 @@ cmCTestGenericHandler* cmCTestConfigureCommand::InitializeHandler()
cmSystemTools::CollapseFullPath(
this->Makefile->GetDefinition("CTEST_BINARY_DIRECTORY")).c_str());
}
if ( this->Values[ct_SOURCE] )
{
this->CTest->SetCTestConfiguration("SourceDirectory",
@ -45,6 +60,7 @@ cmCTestGenericHandler* cmCTestConfigureCommand::InitializeHandler()
cmSystemTools::CollapseFullPath(
this->Makefile->GetDefinition("CTEST_SOURCE_DIRECTORY")).c_str());
}
if ( this->CTest->GetCTestConfiguration("BuildDirectory").empty() )
{
this->SetError("Build directory not specified. Either use BUILD "
@ -77,11 +93,26 @@ cmCTestGenericHandler* cmCTestConfigureCommand::InitializeHandler()
}
std::string cmakeConfigureCommand = "\"";
cmakeConfigureCommand += this->CTest->GetCMakeExecutable();
cmakeConfigureCommand += "\" \"-G";
cmakeConfigureCommand += "\"";
std::vector<std::string>::const_iterator it;
std::string option;
for (it= options.begin(); it!=options.end(); ++it)
{
option = *it;
cmakeConfigureCommand += " \"";
cmakeConfigureCommand += option;
cmakeConfigureCommand += "\"";
}
cmakeConfigureCommand += " \"-G";
cmakeConfigureCommand += cmakeGeneratorName;
cmakeConfigureCommand += "\" \"";
cmakeConfigureCommand += "\"";
cmakeConfigureCommand += " \"";
cmakeConfigureCommand += source_dir;
cmakeConfigureCommand += "\"";
this->CTest->SetCTestConfiguration("ConfigureCommand",
cmakeConfigureCommand.c_str());
}
@ -104,5 +135,3 @@ cmCTestGenericHandler* cmCTestConfigureCommand::InitializeHandler()
}
return handler;
}

View File

@ -27,8 +27,7 @@
class cmCTestConfigureCommand : public cmCTestHandlerCommand
{
public:
cmCTestConfigureCommand() {}
cmCTestConfigureCommand();
/**
* This is a virtual constructor for the command.
@ -60,10 +59,12 @@ public:
virtual const char* GetFullDocumentation()
{
return
" ctest_configure(BUILD build_dir RETURN_VALUE res)\n"
" ctest_configure(BUILD build_dir OPTIONS options RETURN_VALUE res)\n"
"Configures the given build directory and stores results in "
"Configure.xml. The second argument is a variable that will hold "
"return value.";
"Configure.xml. The OPTIONS arguments are passed as command line "
"arguments to the configure command. "
"The RETURN_VALUE argument is a variable that will hold "
"the return value.";
}
cmTypeMacro(cmCTestConfigureCommand, cmCTestHandlerCommand);
@ -71,6 +72,11 @@ public:
protected:
cmCTestGenericHandler* InitializeHandler();
enum {
ctc_FIRST = ct_LAST,
ctc_OPTIONS,
ctc_LAST
};
};

View File

@ -98,7 +98,7 @@ int cmCTestConfigureHandler::ProcessHandler()
<< std::endl
<< "\t<StartConfigureTime>" << start_time_time
<< "</StartConfigureTime>\n";
if ( res == cmsysProcess_State_Exited && retVal )
{
os << retVal;
@ -129,7 +129,7 @@ int cmCTestConfigureHandler::ProcessHandler()
if (! res || retVal )
{
cmCTestLog(this->CTest, ERROR_MESSAGE,
"Error(s) when updating the project" << std::endl);
"Error(s) when configuring the project" << std::endl);
return -1;
}
return 0;

View File

@ -123,8 +123,10 @@ bool cmCTestGenericHandler::StartResultingXML(const char* name,
if(this->CTest->GetCurrentTag().empty())
{
cmCTestLog(this->CTest, ERROR_MESSAGE,
"Current Tag empty, this may mean"
" NightlyStartTime was not set correctly." << std::endl);
"Current Tag empty, this may mean NightlyStartTime / "
"CTEST_NIGHTLY_START_TIME was not set correctly. Or "
"maybe you forgot to call ctest_start() before calling "
"ctest_configure()." << std::endl);
cmSystemTools::SetFatalErrorOccured();
return false;
}
@ -175,4 +177,3 @@ bool cmCTestGenericHandler::StartLogFile(const char* name,
}
return true;
}