From 24a5c0a72e5a50637a285c1dd5427a6bb498ca06 Mon Sep 17 00:00:00 2001 From: Andy Cedilnik Date: Tue, 14 Jun 2005 12:48:59 -0400 Subject: [PATCH] ENH: Save command that macro overwrites --- Source/cmMacroCommand.cxx | 9 +++++++++ Source/cmake.cxx | 14 ++++++++++++++ Source/cmake.h | 1 + 3 files changed, 24 insertions(+) diff --git a/Source/cmMacroCommand.cxx b/Source/cmMacroCommand.cxx index 7780920ff..dea15bc04 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 { @@ -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 diff --git a/Source/cmake.cxx b/Source/cmake.cxx index dcc4c0586..a8006d8c7 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 6d1c5f68b..f83f3939b 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