/*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile$ Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) 2000 National Library of Medicine All rights reserved. See COPYRIGHT.txt for copyright details. =========================================================================*/ #ifndef cmCommand_h #define cmCommand_h #include "cmStandardIncludes.h" #include "cmMakefile.h" /** \class cmCommand * \brief Superclass for all commands in CMake. * * cmCommand is the base class for all commands in CMake. A command * manifests as an entry in CMakeLists.txt and produces one or * more makefile rules. Commands are associated with a particular * makefile. This base class cmCommand defines the API for commands * to support such features as enable/disable, inheritance, * documentation, and construction. */ class cmCommand { public: /** * Construct the command. By default it is enabled with no makefile. */ cmCommand() {m_Makefile = 0; m_Enabled = true;} /** * Specify the makefile. */ void SetMakefile(cmMakefile*m) {m_Makefile = m; } /** * This is called when the command is first encountered in * the CMakeLists.txt file. */ virtual bool Invoke(std::vector& args) = 0; /** * This is called at the end after all the information * specified by the command is accumulated. Most commands do * not implement this method. At this point, reading and * writing to the cache can be done. */ virtual void FinalPass() {}; /** * This is a virtual constructor for the command. */ virtual cmCommand* Clone() = 0; /** * This determines if the command gets propagated down * to makefiles located in subdirectories. */ virtual bool IsInherited() { return false; } /** * The name of the command as specified in CMakeList.txt. */ virtual const char* GetName() = 0; /** * Succinct documentation. */ virtual const char* GetTerseDocumentation() = 0; /** * More documentation. */ virtual const char* GetFullDocumentation() = 0; /** * Enable the command. */ void EnabledOn() {m_Enabled = true;} /** * Disable the command. */ void EnabledOff() {m_Enabled = false;} /** * Query whether the command is enabled. */ bool GetEnabled() {return m_Enabled;} /** * Disable or enable the command. */ void SetEnabled(bool enabled) {m_Enabled = enabled;} /** * Return the last error string. */ const char* GetError() {return m_Error.c_str();} protected: void SetError(const char* e) { m_Error = this->GetName(); m_Error += " "; m_Error += e; } cmMakefile* m_Makefile; private: bool m_Enabled; std::string m_Error; }; #endif