ENH: remove non/scriptable cmake commands from the script handler in ctest,
as discussed with David. This also gives a better ctest man page with just the commands you should actually use in ctest scripts. Until now these commands were more or less executed, but e.g. add_executable() didn't create an executable, project() failed with an error. Now you get an error instantly if using one of these commands. Alex
This commit is contained in:
parent
c64447c368
commit
6e28861c18
|
@ -301,6 +301,27 @@ void cmCTestScriptHandler::CreateCMake()
|
||||||
this->LocalGenerator->SetGlobalGenerator(this->GlobalGenerator);
|
this->LocalGenerator->SetGlobalGenerator(this->GlobalGenerator);
|
||||||
this->Makefile = this->LocalGenerator->GetMakefile();
|
this->Makefile = this->LocalGenerator->GetMakefile();
|
||||||
|
|
||||||
|
// remove all cmake commands which are not scriptable, since they can't be
|
||||||
|
// used in ctest scripts
|
||||||
|
std::vector<std::string> unscriptableCommands;
|
||||||
|
cmake::RegisteredCommandsMap* commands = this->CMake->GetCommands();
|
||||||
|
for (cmake::RegisteredCommandsMap::const_iterator pos = commands->begin();
|
||||||
|
pos != commands->end();
|
||||||
|
++pos)
|
||||||
|
{
|
||||||
|
if (!pos->second->IsScriptable())
|
||||||
|
{
|
||||||
|
unscriptableCommands.push_back(pos->first);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(std::vector<std::string>::const_iterator it=unscriptableCommands.begin();
|
||||||
|
it != unscriptableCommands.end();
|
||||||
|
++it)
|
||||||
|
{
|
||||||
|
// fprintf(stderr, "Removing %s\n", it->c_str());
|
||||||
|
this->CMake->RemoveCommand(it->c_str());
|
||||||
|
}
|
||||||
|
|
||||||
// add any ctest specific commands, probably should have common superclass
|
// add any ctest specific commands, probably should have common superclass
|
||||||
// for ctest commands to clean this up. If a couple more commands are
|
// for ctest commands to clean this up. If a couple more commands are
|
||||||
|
|
|
@ -260,6 +260,17 @@ void cmake::RenameCommand(const char*oldName, const char* newName)
|
||||||
this->Commands.erase(pos);
|
this->Commands.erase(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cmake::RemoveCommand(const char* name)
|
||||||
|
{
|
||||||
|
std::string sName = cmSystemTools::LowerCase(name);
|
||||||
|
RegisteredCommandsMap::iterator pos = this->Commands.find(sName);
|
||||||
|
if ( pos != this->Commands.end() )
|
||||||
|
{
|
||||||
|
delete pos->second;
|
||||||
|
this->Commands.erase(pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void cmake::AddCommand(cmCommand* wg)
|
void cmake::AddCommand(cmCommand* wg)
|
||||||
{
|
{
|
||||||
std::string name = cmSystemTools::LowerCase(wg->GetName());
|
std::string name = cmSystemTools::LowerCase(wg->GetName());
|
||||||
|
|
|
@ -193,6 +193,7 @@ class cmake
|
||||||
*/
|
*/
|
||||||
void AddCommand(cmCommand* );
|
void AddCommand(cmCommand* );
|
||||||
void RenameCommand(const char* oldName, const char* newName);
|
void RenameCommand(const char* oldName, const char* newName);
|
||||||
|
void RemoveCommand(const char* name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a command by its name
|
* Get a command by its name
|
||||||
|
|
Loading…
Reference in New Issue