ENH: Save command that macro overwrites

This commit is contained in:
Andy Cedilnik 2005-06-14 12:48:59 -04:00
parent a95a4b000d
commit 24a5c0a72e
3 changed files with 24 additions and 0 deletions

View File

@ -16,6 +16,8 @@
=========================================================================*/
#include "cmMacroCommand.h"
#include "cmake.h"
// define the class for macro commands
class cmMacroHelperCommand : public cmCommand
{
@ -37,6 +39,11 @@ public:
return newC;
}
/**
* This determines if the command is invoked when in script mode.
*/
virtual bool IsScriptable() { return true; }
/**
* This is called when the command is first encountered in
* the CMakeLists.txt file.
@ -265,6 +272,8 @@ IsFunctionBlocked(const cmListFileFunction& lff, cmMakefile &mf)
cmMacroHelperCommand *f = new cmMacroHelperCommand();
f->m_Args = this->m_Args;
f->m_Functions = this->m_Functions;
std::string newName = "_" + this->m_Args[0];
mf.GetCMakeInstance()->RenameCommand(this->m_Args[0].c_str(), newName.c_str());
mf.AddCommand(f);
// remove the function blocker now that the macro is defined

View File

@ -173,6 +173,20 @@ cmCommand *cmake::GetCommand(const char *name)
return rm;
}
void cmake::RenameCommand(const char*oldName, const char* newName)
{
// if the command already exists, free the old one
RegisteredCommandsMap::iterator pos = m_Commands.find(oldName);
if ( pos == m_Commands.end() )
{
return;
}
m_Commands.insert(RegisteredCommandsMap::value_type(newName, pos->second));
pos = m_Commands.find(oldName);
m_Commands.erase(pos);
}
void cmake::AddCommand(cmCommand* wg)
{
std::string name = wg->GetName();

View File

@ -192,6 +192,7 @@ class cmake
* Add a command to this cmake instance
*/
void AddCommand(cmCommand* );
void RenameCommand(const char* oldName, const char* newName);
/**
* Get a command by its name