ENH: implements SetProperties for TEST

This commit is contained in:
Ken Martin 2006-12-07 14:54:15 -05:00
parent 013ec39881
commit a00200e8d4
4 changed files with 69 additions and 24 deletions

View File

@ -16,6 +16,7 @@
=========================================================================*/
#include "cmSetPropertiesCommand.h"
#include "cmSetTargetPropertiesCommand.h"
#include "cmSetTestsPropertiesCommand.h"
// cmSetPropertiesCommand
bool cmSetPropertiesCommand::InitialPass(
@ -87,6 +88,11 @@ bool cmSetPropertiesCommand::InitialPass(
scope = cmProperty::TARGET;
scopeName = args[1].c_str();
}
else if (args[0] == "TEST" && numFiles == 2)
{
scope = cmProperty::TEST;
scopeName = args[1].c_str();
}
else
{
this->SetError("called with illegal arguments.");
@ -133,6 +139,17 @@ bool cmSetPropertiesCommand::InitialPass(
}
break;
case cmProperty::TEST:
{
std::string errors;
bool ret = cmSetTestsPropertiesCommand::
SetOneTest(scopeName,propertyPairs, this->Makefile, errors);
if (!ret)
{
this->SetError(errors.c_str());
}
return ret;
}
break;
case cmProperty::SOURCE_FILE:
// not implemented yet
break;

View File

@ -56,7 +56,7 @@ public:
" PROPERTIES prop1 value1\n"
" prop2 value2 ...)\n"
"Set properties on something. The scope_value is either GLOBAL "
"DIRECTORY dir_name> or TARGET tgt_name."
"DIRECTORY dir_name, TARGET tgt_name, or TEST test_name."
;
}

View File

@ -74,38 +74,61 @@ bool cmSetTestsPropertiesCommand::InitialPass(
return false;
}
std::vector<cmTest*> &tests = *this->Makefile->GetTests();
// now loop over all the targets
int i;
unsigned int k;
for(i = 0; i < numFiles; ++i)
{
bool found = false;
// if the file is already in the makefile just set properites on it
std::vector<cmTest*>::iterator it;
for ( it = tests.begin(); it != tests.end(); ++ it )
std::string errors;
bool ret =
cmSetTestsPropertiesCommand::SetOneTest(args[i].c_str(),
propertyPairs,
this->Makefile, errors);
if (!ret)
{
cmTest* test = *it;
if ( test->GetName() == args[i] )
{
// now loop through all the props and set them
for (k = 0; k < propertyPairs.size(); k = k + 2)
{
test->SetProperty(propertyPairs[k].c_str(),
propertyPairs[k+1].c_str());
}
found = true;
break;
}
this->SetError(errors.c_str());
return ret;
}
}
// if file is not already in the makefile, then add it
if ( ! found )
{
std::string message = "Can not find test to add properties to: ";
message += args[i];
this->SetError(message.c_str());
return true;
}
bool cmSetTestsPropertiesCommand
::SetOneTest(const char *tname,
std::vector<std::string> &propertyPairs,
cmMakefile *mf, std::string &errors)
{
std::vector<cmTest*> &tests = *mf->GetTests();
// now loop over all the targets
unsigned int k;
bool found = false;
// if the file is already in the makefile just set properites on it
std::vector<cmTest*>::iterator it;
for ( it = tests.begin(); it != tests.end(); ++ it )
{
cmTest* test = *it;
if ( test->GetName() == tname )
{
// now loop through all the props and set them
for (k = 0; k < propertyPairs.size(); k = k + 2)
{
test->SetProperty(propertyPairs[k].c_str(),
propertyPairs[k+1].c_str());
}
found = true;
break;
}
}
// if file is not already in the makefile, then add it
if ( ! found )
{
errors = "Can not find test to add properties to: ";
errors += tname;
return false;
}
return true;

View File

@ -71,6 +71,11 @@ public:
}
cmTypeMacro(cmSetTestsPropertiesCommand, cmCommand);
static bool SetOneTest(const char *tname,
std::vector<std::string> &propertyPairs,
cmMakefile *mf,
std::string &errors);
};