/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file LICENSE.rst or https://cmake.org/licensing for details. */ #pragma once #include "cmConfigure.h" // IWYU pragma: keep #include #include #include #include "cmListFileCache.h" #include "cmMessageType.h" // IWYU pragma: keep #include "cmPolicies.h" #include "cmValue.h" class cmExpandedCommandArgument; class cmMakefile; class cmConditionEvaluator { public: cmConditionEvaluator(cmMakefile& makefile, cmListFileBacktrace bt); // this is a shared function for both If and Else to determine if the // arguments were valid, and if so, was the response true. If there is // an error, the errorString will be set. bool IsTrue(std::vector const& args, std::string& errorString, MessageType& status); private: class cmArgumentList; cmValue GetDefinitionIfUnquoted( cmExpandedCommandArgument const& argument) const; cmValue GetVariableOrString(cmExpandedCommandArgument const& argument) const; bool IsKeyword(cm::static_string_view keyword, cmExpandedCommandArgument const& argument) const; bool GetBooleanValue(cmExpandedCommandArgument& arg) const; template int matchKeysImpl(cmExpandedCommandArgument const&); template int matchKeysImpl(cmExpandedCommandArgument const&, T, Keys...); template int matchKeys(cmExpandedCommandArgument const&, Keys...); bool HandleLevel0(cmArgumentList& newArgs, std::string& errorString, MessageType& status); bool HandleLevel1(cmArgumentList& newArgs, std::string&, MessageType&); bool HandleLevel2(cmArgumentList& newArgs, std::string& errorString, MessageType& status); bool HandleLevel3(cmArgumentList& newArgs, std::string& errorString, MessageType& status); bool HandleLevel4(cmArgumentList& newArgs, std::string& errorString, MessageType& status); cmMakefile& Makefile; cmListFileBacktrace Backtrace; cmPolicies::PolicyStatus Policy139Status; };