| /* 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 <map> | |
| #include <set> | |
| #include <string> | |
| #include "cmListFileCache.h" | |
| namespace cm { | |
| namespace GenEx { | |
| struct Context; | |
| struct Evaluation; | |
| } | |
| } | |
| struct GeneratorExpressionContent; | |
| class cmGeneratorTarget; | |
| struct cmGeneratorExpressionDAGChecker | |
| { | |
| enum class ComputingLinkLibraries | |
| { | |
| No, | |
| Yes, | |
| }; | |
| cmGeneratorExpressionDAGChecker( | |
| cmGeneratorTarget const* target, std::string property, | |
| GeneratorExpressionContent const* content, | |
| cmGeneratorExpressionDAGChecker* parent, cm::GenEx::Context const& context, | |
| cmListFileBacktrace backtrace = cmListFileBacktrace(), | |
| ComputingLinkLibraries computingLinkLibraries = | |
| ComputingLinkLibraries::No); | |
| enum Result | |
| { | |
| DAG, | |
| SELF_REFERENCE, | |
| CYCLIC_REFERENCE, | |
| ALREADY_SEEN | |
| }; | |
| Result Check() const; | |
| void ReportError(cm::GenEx::Evaluation* eval, std::string const& expr); | |
| bool EvaluatingTransitiveProperty() const; | |
| bool EvaluatingGenexExpression() const; | |
| bool EvaluatingPICExpression() const; | |
| bool EvaluatingCompileExpression() const; | |
| bool EvaluatingLinkExpression() const; | |
| bool EvaluatingLinkOptionsExpression() const; | |
| bool EvaluatingLinkerLauncher() const; | |
| /** Returns true only when computing the actual link dependency | |
| graph for cmGeneratorTarget::GetLinkImplementationLibraries | |
| or cmGeneratorTarget::GetLinkInterfaceLibraries. */ | |
| bool IsComputingLinkLibraries() const; | |
| enum class ForGenex | |
| { | |
| ANY, | |
| LINK_LIBRARY, | |
| LINK_GROUP | |
| }; | |
| bool EvaluatingLinkLibraries(cmGeneratorTarget const* tgt = nullptr, | |
| ForGenex genex = ForGenex::ANY) const; | |
| bool EvaluatingSources() const; | |
| bool GetTransitivePropertiesOnly() const; | |
| void SetTransitivePropertiesOnly() { this->TransitivePropertiesOnly = true; } | |
| bool GetTransitivePropertiesOnlyCMP0131() const; | |
| void SetTransitivePropertiesOnlyCMP0131() { this->CMP0131 = true; } | |
| cmGeneratorTarget const* TopTarget() const; | |
| private: | |
| Result CheckGraph() const; | |
| cmGeneratorExpressionDAGChecker const* const Parent; | |
| cmGeneratorExpressionDAGChecker const* const Top; | |
| cmGeneratorTarget const* Target; | |
| std::string const Property; | |
| mutable std::map<cmGeneratorTarget const*, std::set<std::string>> Seen; | |
| GeneratorExpressionContent const* const Content; | |
| cmListFileBacktrace const Backtrace; | |
| Result CheckResult; | |
| bool TransitivePropertiesOnly = false; | |
| bool CMP0131 = false; | |
| bool TopIsTransitiveProperty = false; | |
| ComputingLinkLibraries const ComputingLinkLibraries_ = | |
| ComputingLinkLibraries::No; | |
| }; |