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->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
|
||||
// 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);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
std::string name = cmSystemTools::LowerCase(wg->GetName());
|
||||
|
|
|
@ -193,6 +193,7 @@ class cmake
|
|||
*/
|
||||
void AddCommand(cmCommand* );
|
||||
void RenameCommand(const char* oldName, const char* newName);
|
||||
void RemoveCommand(const char* name);
|
||||
|
||||
/**
|
||||
* Get a command by its name
|
||||
|
|
Loading…
Reference in New Issue