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:
Alexander Neundorf 2007-06-12 10:56:40 -04:00
parent c64447c368
commit 6e28861c18
3 changed files with 33 additions and 0 deletions

View File

@ -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

View File

@ -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());

View File

@ -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