CTest: Extend -D command line arg handling for variable definitions
If the argument following -D is not a valid dashboard type string, then try to parse it as a "var:type=value" string just like cmake already does.
This commit is contained in:
parent
af298480d0
commit
93d084c180
|
@ -435,6 +435,15 @@ int cmCTestScriptHandler::ReadInScript(const std::string& total_script_arg)
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add definitions of variables passed in on the command line:
|
||||||
|
const std::map<std::string, std::string> &defs =
|
||||||
|
this->CTest->GetDefinitions();
|
||||||
|
for (std::map<std::string, std::string>::const_iterator it = defs.begin();
|
||||||
|
it != defs.end(); ++it)
|
||||||
|
{
|
||||||
|
this->Makefile->AddDefinition(it->first.c_str(), it->second.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
// finally read in the script
|
// finally read in the script
|
||||||
if (!this->Makefile->ReadListFile(0, script.c_str()) ||
|
if (!this->Makefile->ReadListFile(0, script.c_str()) ||
|
||||||
cmSystemTools::GetErrorOccuredFlag())
|
cmSystemTools::GetErrorOccuredFlag())
|
||||||
|
|
|
@ -2229,6 +2229,22 @@ void cmCTest::HandleScriptArguments(size_t &i,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
bool cmCTest::AddVariableDefinition(const std::string &arg)
|
||||||
|
{
|
||||||
|
std::string name;
|
||||||
|
std::string value;
|
||||||
|
cmCacheManager::CacheEntryType type = cmCacheManager::UNINITIALIZED;
|
||||||
|
|
||||||
|
if (cmCacheManager::ParseEntry(arg.c_str(), name, value, type))
|
||||||
|
{
|
||||||
|
this->Definitions[name] = value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// the main entry point of ctest, called from main
|
// the main entry point of ctest, called from main
|
||||||
int cmCTest::Run(std::vector<std::string> &args, std::string* output)
|
int cmCTest::Run(std::vector<std::string> &args, std::string* output)
|
||||||
|
@ -2264,11 +2280,14 @@ int cmCTest::Run(std::vector<std::string> &args, std::string* output)
|
||||||
// AddTestsForDashboard parses the dashboard type and converts it
|
// AddTestsForDashboard parses the dashboard type and converts it
|
||||||
// into the separate stages
|
// into the separate stages
|
||||||
if (!this->AddTestsForDashboardType(targ))
|
if (!this->AddTestsForDashboardType(targ))
|
||||||
|
{
|
||||||
|
if (!this->AddVariableDefinition(targ))
|
||||||
{
|
{
|
||||||
this->ErrorMessageUnknownDashDValue(targ);
|
this->ErrorMessageUnknownDashDValue(targ);
|
||||||
executeTests = false;
|
executeTests = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(this->CheckArgument(arg, "-T", "--test-action") &&
|
if(this->CheckArgument(arg, "-T", "--test-action") &&
|
||||||
(i < args.size() -1) )
|
(i < args.size() -1) )
|
||||||
|
|
|
@ -418,6 +418,11 @@ public:
|
||||||
|
|
||||||
std::string GetCostDataFile();
|
std::string GetCostDataFile();
|
||||||
|
|
||||||
|
const std::map<std::string, std::string> &GetDefinitions()
|
||||||
|
{
|
||||||
|
return this->Definitions;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string ConfigType;
|
std::string ConfigType;
|
||||||
std::string ScheduleType;
|
std::string ScheduleType;
|
||||||
|
@ -520,6 +525,9 @@ private:
|
||||||
//! read as "emit an error message for an unknown -D value"
|
//! read as "emit an error message for an unknown -D value"
|
||||||
void ErrorMessageUnknownDashDValue(std::string &val);
|
void ErrorMessageUnknownDashDValue(std::string &val);
|
||||||
|
|
||||||
|
//! add a variable definition from a command line -D value
|
||||||
|
bool AddVariableDefinition(const std::string &arg);
|
||||||
|
|
||||||
//! parse and process most common command line arguments
|
//! parse and process most common command line arguments
|
||||||
void HandleCommandLineArguments(size_t &i,
|
void HandleCommandLineArguments(size_t &i,
|
||||||
std::vector<std::string> &args);
|
std::vector<std::string> &args);
|
||||||
|
@ -562,6 +570,8 @@ private:
|
||||||
int OutputLogFileLastTag;
|
int OutputLogFileLastTag;
|
||||||
|
|
||||||
bool OutputTestOutputOnTestFailure;
|
bool OutputTestOutputOnTestFailure;
|
||||||
|
|
||||||
|
std::map<std::string, std::string> Definitions;
|
||||||
};
|
};
|
||||||
|
|
||||||
class cmCTestLogWrite
|
class cmCTestLogWrite
|
||||||
|
|
|
@ -103,6 +103,12 @@ static const char * cmDocumentationOptions[][3] =
|
||||||
"a dashboard test. All tests are <Mode><Test>, where Mode can be "
|
"a dashboard test. All tests are <Mode><Test>, where Mode can be "
|
||||||
"Experimental, Nightly, and Continuous, and Test can be Start, Update, "
|
"Experimental, Nightly, and Continuous, and Test can be Start, Update, "
|
||||||
"Configure, Build, Test, Coverage, and Submit."},
|
"Configure, Build, Test, Coverage, and Submit."},
|
||||||
|
{"-D <var>:<type>=<value>", "Define a variable for script mode",
|
||||||
|
"Pass in variable values on the command line. Use in "
|
||||||
|
"conjunction with -S to pass variable values to a dashboard script. "
|
||||||
|
"Parsing -D arguments as variable values is only attempted if "
|
||||||
|
"the value following -D does not match any of the known dashboard "
|
||||||
|
"types."},
|
||||||
{"-M <model>, --test-model <model>", "Sets the model for a dashboard",
|
{"-M <model>, --test-model <model>", "Sets the model for a dashboard",
|
||||||
"This option tells ctest to act as a Dart client "
|
"This option tells ctest to act as a Dart client "
|
||||||
"where the TestModel can be Experimental, "
|
"where the TestModel can be Experimental, "
|
||||||
|
|
Loading…
Reference in New Issue