CTest: Add options to set generator toolset

The ctest_configure command already reads the CTEST_CMAKE_GENERATOR
variable to get the value for the cmake -G option.  Read new variable
CTEST_CMAKE_GENERATOR_TOOLSET for -T.

The "ctest --build-and-test" mode already has "--build-generator" to
specify the -G option to CMake.  Add a "--build-generator-toolset" option
to specify the -T value.
This commit is contained in:
Brad King 2012-12-10 16:53:56 -05:00
parent f980a80495
commit e3841cf4a2
4 changed files with 31 additions and 4 deletions

View File

@ -67,6 +67,12 @@ int cmCTestBuildAndTestHandler::RunCMake(std::string* outstring,
generator += this->BuildGenerator; generator += this->BuildGenerator;
args.push_back(generator); args.push_back(generator);
} }
if(this->BuildGeneratorToolset.size())
{
std::string toolset = "-T";
toolset += this->BuildGeneratorToolset;
args.push_back(toolset);
}
const char* config = 0; const char* config = 0;
if ( this->CTest->GetConfigType().size() > 0 ) if ( this->CTest->GetConfigType().size() > 0 )
@ -229,10 +235,14 @@ int cmCTestBuildAndTestHandler::RunCMakeAndTest(std::string* outstring)
// should we cmake? // should we cmake?
cmake cm; cmake cm;
cm.SetProgressCallback(CMakeProgressCallback, &cmakeOutString); cm.SetProgressCallback(CMakeProgressCallback, &cmakeOutString);
cm.SetGlobalGenerator(cm.CreateGlobalGenerator(
this->BuildGenerator.c_str()));
if(!this->BuildNoCMake) if(this->BuildNoCMake)
{
cm.SetGlobalGenerator(cm.CreateGlobalGenerator(
this->BuildGenerator.c_str()));
cm.SetGeneratorToolset(this->BuildGeneratorToolset);
}
else
{ {
// do the cmake step, no timeout here since it is not a sub process // do the cmake step, no timeout here since it is not a sub process
if (this->RunCMake(outstring,out,cmakeOutString,cwd,&cm)) if (this->RunCMake(outstring,out,cmakeOutString,cwd,&cm))
@ -466,11 +476,17 @@ int cmCTestBuildAndTestHandler::ProcessCommandLineArguments(
idx++; idx++;
this->Timeout = atof(allArgs[idx].c_str()); this->Timeout = atof(allArgs[idx].c_str());
} }
if(currentArg.find("--build-generator",0) == 0 && idx < allArgs.size() - 1) if(currentArg == "--build-generator" && idx < allArgs.size() - 1)
{ {
idx++; idx++;
this->BuildGenerator = allArgs[idx]; this->BuildGenerator = allArgs[idx];
} }
if(currentArg == "--build-generator-toolset" &&
idx < allArgs.size() - 1)
{
idx++;
this->BuildGeneratorToolset = allArgs[idx];
}
if(currentArg.find("--build-project",0) == 0 && idx < allArgs.size() - 1) if(currentArg.find("--build-project",0) == 0 && idx < allArgs.size() - 1)
{ {
idx++; idx++;

View File

@ -57,6 +57,7 @@ protected:
cmStdString Output; cmStdString Output;
std::string BuildGenerator; std::string BuildGenerator;
std::string BuildGeneratorToolset;
std::vector<std::string> BuildOptions; std::vector<std::string> BuildOptions;
bool BuildTwoConfig; bool BuildTwoConfig;
std::string BuildMakeProgram; std::string BuildMakeProgram;

View File

@ -144,6 +144,15 @@ cmCTestGenericHandler* cmCTestConfigureCommand::InitializeHandler()
cmakeConfigureCommand += cmakeGeneratorName; cmakeConfigureCommand += cmakeGeneratorName;
cmakeConfigureCommand += "\""; cmakeConfigureCommand += "\"";
const char* cmakeGeneratorToolset =
this->Makefile->GetDefinition("CTEST_CMAKE_GENERATOR_TOOLSET");
if(cmakeGeneratorToolset && *cmakeGeneratorToolset)
{
cmakeConfigureCommand += " \"-T";
cmakeConfigureCommand += cmakeGeneratorToolset;
cmakeConfigureCommand += "\"";
}
cmakeConfigureCommand += " \""; cmakeConfigureCommand += " \"";
cmakeConfigureCommand += source_dir; cmakeConfigureCommand += source_dir;
cmakeConfigureCommand += "\""; cmakeConfigureCommand += "\"";

View File

@ -187,6 +187,7 @@ static const char * cmDocumentationOptions[][3] =
{"--build-two-config", "Run CMake twice", "" }, {"--build-two-config", "Run CMake twice", "" },
{"--build-exe-dir", "Specify the directory for the executable.", "" }, {"--build-exe-dir", "Specify the directory for the executable.", "" },
{"--build-generator", "Specify the generator to use.", "" }, {"--build-generator", "Specify the generator to use.", "" },
{"--build-generator-toolset", "Specify the generator-specific toolset.",""},
{"--build-project", "Specify the name of the project to build.", "" }, {"--build-project", "Specify the name of the project to build.", "" },
{"--build-makeprogram", "Specify the make program to use.", "" }, {"--build-makeprogram", "Specify the make program to use.", "" },
{"--build-noclean", "Skip the make clean step.", "" }, {"--build-noclean", "Skip the make clean step.", "" },