summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorAndy Cedilnik <andy.cedilnik@kitware.com>2005-06-14 16:48:59 (GMT)
committerAndy Cedilnik <andy.cedilnik@kitware.com>2005-06-14 16:48:59 (GMT)
commit24a5c0a72e5a50637a285c1dd5427a6bb498ca06 (patch)
tree197a1d1b6ea27e0004445773afdd3f439a1b220a /Source
parenta95a4b000db076d7a7c1dff163508b1922344339 (diff)
downloadCMake-24a5c0a72e5a50637a285c1dd5427a6bb498ca06.zip
CMake-24a5c0a72e5a50637a285c1dd5427a6bb498ca06.tar.gz
CMake-24a5c0a72e5a50637a285c1dd5427a6bb498ca06.tar.bz2
ENH: Save command that macro overwrites
Diffstat (limited to 'Source')
-rw-r--r--Source/cmMacroCommand.cxx9
-rw-r--r--Source/cmake.cxx14
-rw-r--r--Source/cmake.h1
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