diff options
-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 |