summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmState.cxx110
-rw-r--r--Source/cmState.h10
-rw-r--r--Source/cmake.cxx88
-rw-r--r--Source/cmake.h2
4 files changed, 128 insertions, 82 deletions
diff --git a/Source/cmState.cxx b/Source/cmState.cxx
index be6a766..17b6cf2 100644
--- a/Source/cmState.cxx
+++ b/Source/cmState.cxx
@@ -13,6 +13,10 @@
#include "cmake.h"
#include "cmCacheManager.h"
+#include "cmCommand.h"
+#include "cmAlgorithms.h"
+
+#include <assert.h>
cmState::cmState(cmake* cm)
: CMakeInstance(cm),
@@ -20,6 +24,11 @@ cmState::cmState(cmake* cm)
{
}
+cmState::~cmState()
+{
+ cmDeleteAll(this->Commands);
+}
+
const char* cmCacheEntryTypes[] =
{ "BOOL",
"PATH",
@@ -274,3 +283,104 @@ void cmState::SetIsInTryCompile(bool b)
{
this->IsInTryCompile = b;
}
+
+void cmState::RenameCommand(std::string const& oldName,
+ std::string const& newName)
+{
+ // if the command already exists, free the old one
+ std::string sOldName = cmSystemTools::LowerCase(oldName);
+ std::string sNewName = cmSystemTools::LowerCase(newName);
+ std::map<std::string, cmCommand*>::iterator pos =
+ this->Commands.find(sOldName);
+ if ( pos == this->Commands.end() )
+ {
+ return;
+ }
+ cmCommand* cmd = pos->second;
+
+ pos = this->Commands.find(sNewName);
+ if (pos != this->Commands.end())
+ {
+ delete pos->second;
+ this->Commands.erase(pos);
+ }
+ this->Commands.insert(std::make_pair(sNewName, cmd));
+ pos = this->Commands.find(sOldName);
+ this->Commands.erase(pos);
+}
+
+void cmState::AddCommand(cmCommand* command)
+{
+ std::string name = cmSystemTools::LowerCase(command->GetName());
+ // if the command already exists, free the old one
+ std::map<std::string, cmCommand*>::iterator pos = this->Commands.find(name);
+ if (pos != this->Commands.end())
+ {
+ delete pos->second;
+ this->Commands.erase(pos);
+ }
+ this->Commands.insert(std::make_pair(name, command));
+}
+
+void cmState::RemoveUnscriptableCommands()
+{
+ std::vector<std::string> unscriptableCommands;
+ for (std::map<std::string, cmCommand*>::iterator
+ pos = this->Commands.begin();
+ pos != this->Commands.end(); )
+ {
+ if (!pos->second->IsScriptable())
+ {
+ delete pos->second;
+ this->Commands.erase(pos++);
+ }
+ else
+ {
+ ++pos;
+ }
+ }
+}
+
+cmCommand* cmState::GetCommand(std::string const& name) const
+{
+ cmCommand* command = 0;
+ std::string sName = cmSystemTools::LowerCase(name);
+ std::map<std::string, cmCommand*>::const_iterator pos =
+ this->Commands.find(sName);
+ if (pos != this->Commands.end())
+ {
+ command = (*pos).second;
+ }
+ return command;
+}
+
+std::vector<std::string> cmState::GetCommandNames() const
+{
+ std::vector<std::string> commandNames;
+ commandNames.reserve(this->Commands.size());
+ std::map<std::string, cmCommand*>::const_iterator cmds
+ = this->Commands.begin();
+ for ( ; cmds != this->Commands.end(); ++ cmds )
+ {
+ commandNames.push_back(cmds->first);
+ }
+ return commandNames;
+}
+
+void cmState::RemoveUserDefinedCommands()
+{
+ for(std::map<std::string, cmCommand*>::iterator j = this->Commands.begin();
+ j != this->Commands.end(); )
+ {
+ if (j->second->IsA("cmMacroHelperCommand") ||
+ j->second->IsA("cmFunctionHelperCommand"))
+ {
+ delete j->second;
+ this->Commands.erase(j++);
+ }
+ else
+ {
+ ++j;
+ }
+ }
+}
diff --git a/Source/cmState.h b/Source/cmState.h
index 6df6182..a7a17ee 100644
--- a/Source/cmState.h
+++ b/Source/cmState.h
@@ -16,11 +16,13 @@
#include "cmPropertyDefinitionMap.h"
class cmake;
+class cmCommand;
class cmState
{
public:
cmState(cmake* cm);
+ ~cmState();
enum CacheEntryType{ BOOL=0, PATH, FILEPATH, STRING, INTERNAL,STATIC,
UNINITIALIZED };
@@ -79,9 +81,17 @@ public:
bool GetIsInTryCompile() const;
void SetIsInTryCompile(bool b);
+ cmCommand* GetCommand(std::string const& name) const;
+ void AddCommand(cmCommand* command);
+ void RemoveUnscriptableCommands();
+ void RenameCommand(std::string const& oldName, std::string const& newName);
+ void RemoveUserDefinedCommands();
+ std::vector<std::string> GetCommandNames() const;
+
private:
std::map<cmProperty::ScopeType, cmPropertyDefinitionMap> PropertyDefinitions;
std::vector<std::string> EnabledLanguages;
+ std::map<std::string, cmCommand*> Commands;
cmake* CMakeInstance;
bool IsInTryCompile;
};
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index 6518207..89d5fea 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -179,7 +179,6 @@ cmake::~cmake()
delete this->GlobalGenerator;
this->GlobalGenerator = 0;
}
- cmDeleteAll(this->Commands);
cmDeleteAll(this->Generators);
#ifdef CMAKE_BUILD_WITH_CMAKE
delete this->VariableWatch;
@@ -197,94 +196,33 @@ void cmake::InitializeProperties()
void cmake::CleanupCommandsAndMacros()
{
this->InitializeProperties();
- for(RegisteredCommandsMap::iterator j = this->Commands.begin();
- j != this->Commands.end(); )
- {
- if (j->second->IsA("cmMacroHelperCommand") ||
- j->second->IsA("cmFunctionHelperCommand"))
- {
- delete j->second;
- this->Commands.erase(j++);
- }
- else
- {
- ++j;
- }
- }
+ this->State->RemoveUserDefinedCommands();
}
bool cmake::CommandExists(const std::string& name) const
{
- return this->GetCommand(name) ? true : false;
+ return this->State->GetCommand(name) ? true : false;
}
cmCommand *cmake::GetCommand(const std::string& name) const
{
- cmCommand* command = 0;
- std::string sName = cmSystemTools::LowerCase(name);
- RegisteredCommandsMap::const_iterator pos = this->Commands.find(sName);
- if (pos != this->Commands.end())
- {
- command = (*pos).second;
- }
- return command;
+ return this->State->GetCommand(name);
}
void cmake::RenameCommand(const std::string& oldName,
const std::string& newName)
{
- // if the command already exists, free the old one
- std::string sOldName = cmSystemTools::LowerCase(oldName);
- RegisteredCommandsMap::iterator pos = this->Commands.find(sOldName);
- if ( pos == this->Commands.end() )
- {
- return;
- }
- std::string sNewName = cmSystemTools::LowerCase(newName);
- cmCommand* cmd = pos->second;
-
- pos = this->Commands.find(sNewName);
- if (pos != this->Commands.end())
- {
- delete pos->second;
- this->Commands.erase(pos);
- }
- this->Commands.insert(std::make_pair(sNewName, cmd));
- pos = this->Commands.find(sOldName);
- this->Commands.erase(pos);
+ this->State->RenameCommand(oldName, newName);
}
void cmake::AddCommand(cmCommand* command)
{
- std::string name = cmSystemTools::LowerCase(command->GetName());
- // if the command already exists, free the old one
- RegisteredCommandsMap::iterator pos = this->Commands.find(name);
- if (pos != this->Commands.end())
- {
- delete pos->second;
- this->Commands.erase(pos);
- }
- this->Commands.insert(std::make_pair(name, command));
+ this->State->AddCommand(command);
}
-
void cmake::RemoveUnscriptableCommands()
{
- std::vector<std::string> unscriptableCommands;
- for (cmake::RegisteredCommandsMap::iterator
- pos = this->Commands.begin();
- pos != this->Commands.end(); )
- {
- if (!pos->second->IsScriptable())
- {
- delete pos->second;
- this->Commands.erase(pos++);
- }
- else
- {
- ++pos;
- }
- }
+ this->State->RemoveUnscriptableCommands();
}
// Parse the args
@@ -2301,18 +2239,8 @@ const char *cmake::GetProperty(const std::string& prop,
}
else if ( prop == "COMMANDS" )
{
- cmake::RegisteredCommandsMap::iterator cmds
- = this->Commands.begin();
- for (unsigned int cc=0 ; cmds != this->Commands.end(); ++ cmds )
- {
- if ( cc > 0 )
- {
- output += ";";
- }
- output += cmds->first.c_str();
- cc++;
- }
- this->SetProperty("COMMANDS",output.c_str());
+ std::vector<std::string> commands = this->State->GetCommandNames();
+ this->SetProperty("COMMANDS", cmJoin(commands, ";").c_str());
}
else if ( prop == "IN_TRY_COMPILE" )
{
diff --git a/Source/cmake.h b/Source/cmake.h
index 455b54e..e7a8acb 100644
--- a/Source/cmake.h
+++ b/Source/cmake.h
@@ -93,7 +93,6 @@ class cmake
*/
FIND_PACKAGE_MODE
};
- typedef std::map<std::string, cmCommand*> RegisteredCommandsMap;
typedef std::map<std::string, cmInstalledFile> InstalledFilesMap;
/// Default constructor
@@ -362,7 +361,6 @@ protected:
typedef std::map<std::string,
CreateExtraGeneratorFunctionType> RegisteredExtraGeneratorsMap;
typedef std::vector<cmGlobalGeneratorFactory*> RegisteredGeneratorsVector;
- RegisteredCommandsMap Commands;
RegisteredGeneratorsVector Generators;
RegisteredExtraGeneratorsMap ExtraGenerators;
void AddDefaultCommands();