/*========================================================================= Program: CMake - Cross-Platform Makefile Generator Module: $RCSfile$ Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved. See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef cmIfCommand_h #define cmIfCommand_h #include "cmStandardIncludes.h" #include "cmCommand.h" #include "cmFunctionBlocker.h" /** \class cmIfFunctionBlocker * \brief subclass of function blocker * * */ class cmIfFunctionBlocker : public cmFunctionBlocker { public: cmIfFunctionBlocker() {} virtual ~cmIfFunctionBlocker() {} virtual bool IsFunctionBlocked(const cmListFileFunction& lff, cmMakefile &mf); virtual bool ShouldRemove(const cmListFileFunction& lff, cmMakefile &mf); virtual void ScopeEnded(cmMakefile &mf); std::vector m_Args; bool m_IsBlocking; }; /** \class cmIfCommand * \brief starts an if block * * cmIfCommand starts an if block */ class cmIfCommand : public cmCommand { public: /** * This is a virtual constructor for the command. */ virtual cmCommand* Clone() { return new cmIfCommand; } /** * This overrides the default InvokeInitialPass implementation. * It records the arguments before expansion. */ virtual bool InvokeInitialPass(const std::vector& args); /** * This is called when the command is first encountered in * the CMakeLists.txt file. */ virtual bool InitialPass(std::vector const& args) { return false; } /** * The name of the command as specified in CMakeList.txt. */ virtual const char* GetName() { return "IF";} /** * Succinct documentation. */ virtual const char* GetTerseDocumentation() { return "start an if block"; } /** * This determines if the command gets propagated down * to makefiles located in subdirectories. */ virtual bool IsInherited() {return true;} /** * More documentation. */ virtual const char* GetFullDocumentation() { return "IF (define) Starts an if block. Optionally it can be invoked " "using (NOT define) (def AND def2) (def OR def2) (def MATCHES def2) " "(COMMAND cmd) (EXISTS file) MATCHES checks if def matches the " "regular expression def2. COMMAND checks if the cmake command cmd " "is in this cmake executable. EXISTS file checks if file exists." "Additionally you can do comparisons using LESS GREATER STRLESS " "and STRGREATER. LESS and GREATER do numeric comparison while " "STRLESS and STRGREATER do string comparisons."; } // this is a shared function for both If and Else to determine if // the arguments were valid, and if so, was the response true static bool IsTrue(const std::vector &args, bool &isValid, const cmMakefile *mf); // Get a definition from the makefile. If it doesn't exist, // return the original string. static const char* GetVariableOrString(const char* str, const cmMakefile* mf); cmTypeMacro(cmIfCommand, cmCommand); }; #endif