diff --git a/Source/cmState.cxx b/Source/cmState.cxx index 43f439c9d9..510501beec 100644 --- a/Source/cmState.cxx +++ b/Source/cmState.cxx @@ -12,10 +12,12 @@ #include "cmCacheManager.h" #include "cmCommand.h" #include "cmDefinitions.h" +#include "cmDisallowedCommand.h" #include "cmListFileCache.h" #include "cmStatePrivate.h" #include "cmStateSnapshot.h" #include "cmSystemTools.h" +#include "cmUnexpectedCommand.h" #include "cmake.h" cmState::cmState() @@ -410,6 +412,27 @@ void cmState::AddCommand(cmCommand* command) this->Commands.insert(std::make_pair(name, command)); } +void cmState::AddBuiltinCommand(std::string const& name, cmCommand* command) +{ + assert(name == cmSystemTools::LowerCase(name)); + assert(name == cmSystemTools::LowerCase(command->GetName())); + assert(this->Commands.find(name) == this->Commands.end()); + this->Commands.insert(std::make_pair(name, command)); +} + +void cmState::AddDisallowedCommand(std::string const& name, cmCommand* command, + cmPolicies::PolicyID policy, + const char* message) +{ + this->AddBuiltinCommand(name, + new cmDisallowedCommand(command, policy, message)); +} + +void cmState::AddUnexpectedCommand(std::string const& name, const char* error) +{ + this->AddBuiltinCommand(name, new cmUnexpectedCommand(name, error)); +} + cmCommand* cmState::GetCommand(std::string const& name) const { cmCommand* command = CM_NULLPTR; diff --git a/Source/cmState.h b/Source/cmState.h index 240d75bd98..603fe5dcf8 100644 --- a/Source/cmState.h +++ b/Source/cmState.h @@ -12,6 +12,7 @@ #include "cmDefinitions.h" #include "cmLinkedTree.h" +#include "cmPolicies.h" #include "cmProperty.h" #include "cmPropertyDefinitionMap.h" #include "cmPropertyMap.h" @@ -121,6 +122,10 @@ public: cmCommand* GetCommand(std::string const& name) const; void AddCommand(cmCommand* command); + void AddBuiltinCommand(std::string const& name, cmCommand* command); + void AddDisallowedCommand(std::string const& name, cmCommand* command, + cmPolicies::PolicyID policy, const char* message); + void AddUnexpectedCommand(std::string const& name, const char* error); void RenameCommand(std::string const& oldName, std::string const& newName); void RemoveUserDefinedCommands(); std::vector GetCommandNames() const; diff --git a/bootstrap b/bootstrap index 515e8bee96..b4b4c2868e 100755 --- a/bootstrap +++ b/bootstrap @@ -278,6 +278,7 @@ CMAKE_CXX_SOURCES="\ cmDefinitions \ cmDepends \ cmDependsC \ + cmDisallowedCommand \ cmDocumentationFormatter \ cmEnableLanguageCommand \ cmEnableTestingCommand \