/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #pragma once #include "cmConfigure.h" // IWYU pragma: keep #include #include #include "cmListFileCache.h" class cmExecutionStatus; class cmMakefile; class cmFunctionBlocker { public: /** * should a function be blocked */ bool IsFunctionBlocked(cmListFileFunction const& lff, cmExecutionStatus& status); virtual ~cmFunctionBlocker() = default; /** Set/Get the context in which this blocker is created. */ void SetStartingContext(cmListFileContext const& lfc) { this->StartingContext = lfc; } cmListFileContext const& GetStartingContext() const { return this->StartingContext; } private: virtual cm::string_view StartCommandName() const = 0; virtual cm::string_view EndCommandName() const = 0; virtual bool ArgumentsMatch(cmListFileFunction const& lff, cmMakefile& mf) const = 0; virtual bool Replay(std::vector functions, cmExecutionStatus& status) = 0; cmListFileContext StartingContext; std::vector Functions; unsigned int ScopeDepth = 1; };