diff options
author | Andy Cedilnik <andy.cedilnik@kitware.com> | 2005-06-14 16:48:59 (GMT) |
---|---|---|
committer | Andy Cedilnik <andy.cedilnik@kitware.com> | 2005-06-14 16:48:59 (GMT) |
commit | 24a5c0a72e5a50637a285c1dd5427a6bb498ca06 (patch) | |
tree | 197a1d1b6ea27e0004445773afdd3f439a1b220a | |
parent | a95a4b000db076d7a7c1dff163508b1922344339 (diff) | |
download | CMake-24a5c0a72e5a50637a285c1dd5427a6bb498ca06.zip CMake-24a5c0a72e5a50637a285c1dd5427a6bb498ca06.tar.gz CMake-24a5c0a72e5a50637a285c1dd5427a6bb498ca06.tar.bz2 |
ENH: Save command that macro overwrites
-rw-r--r-- | Source/cmMacroCommand.cxx | 9 | ||||
-rw-r--r-- | Source/cmake.cxx | 14 | ||||
-rw-r--r-- | Source/cmake.h | 1 |
3 files changed, 24 insertions, 0 deletions
diff --git a/Source/cmMacroCommand.cxx b/Source/cmMacroCommand.cxx index 7780920..dea15bc 100644 --- a/Source/cmMacroCommand.cxx +++ b/Source/cmMacroCommand.cxx @@ -16,6 +16,8 @@ =========================================================================*/ #include "cmMacroCommand.h" +#include "cmake.h" + // define the class for macro commands class cmMacroHelperCommand : public cmCommand { @@ -38,6 +40,11 @@ public: } /** + * 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 diff --git a/Source/cmake.cxx b/Source/cmake.cxx index dcc4c05..a8006d8 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -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(); diff --git a/Source/cmake.h b/Source/cmake.h index 6d1c5f6..f83f393 100644 --- a/Source/cmake.h +++ b/Source/cmake.h @@ -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 |