CMake Nightly Date Stamp
[kiteware-cmake.git] / Source / cmGeneratorExpressionDAGChecker.h
blob8b0eea76b4e5d32787f4734c209cb37bdbe4ebc9
1 /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 file Copyright.txt or https://cmake.org/licensing for details. */
3 #pragma once
5 #include "cmConfigure.h" // IWYU pragma: keep
7 #include <map>
8 #include <set>
9 #include <string>
11 #include "cmListFileCache.h"
13 struct GeneratorExpressionContent;
14 struct cmGeneratorExpressionContext;
15 class cmGeneratorTarget;
16 class cmLocalGenerator;
18 struct cmGeneratorExpressionDAGChecker
20 cmGeneratorExpressionDAGChecker(cmListFileBacktrace backtrace,
21 cmGeneratorTarget const* target,
22 std::string property,
23 const GeneratorExpressionContent* content,
24 cmGeneratorExpressionDAGChecker* parent,
25 cmLocalGenerator const* contextLG,
26 std::string const& contextConfig);
27 cmGeneratorExpressionDAGChecker(cmGeneratorTarget const* target,
28 std::string property,
29 const GeneratorExpressionContent* content,
30 cmGeneratorExpressionDAGChecker* parent,
31 cmLocalGenerator const* contextLG,
32 std::string const& contextConfig);
34 enum Result
36 DAG,
37 SELF_REFERENCE,
38 CYCLIC_REFERENCE,
39 ALREADY_SEEN
42 Result Check() const;
44 void ReportError(cmGeneratorExpressionContext* context,
45 const std::string& expr);
47 bool EvaluatingTransitiveProperty() const;
48 bool EvaluatingGenexExpression() const;
49 bool EvaluatingPICExpression() const;
50 bool EvaluatingCompileExpression() const;
51 bool EvaluatingLinkExpression() const;
52 bool EvaluatingLinkOptionsExpression() const;
53 bool EvaluatingLinkerLauncher() const;
55 enum class ForGenex
57 ANY,
58 LINK_LIBRARY,
59 LINK_GROUP
61 bool EvaluatingLinkLibraries(cmGeneratorTarget const* tgt = nullptr,
62 ForGenex genex = ForGenex::ANY) const;
64 bool EvaluatingSources() const;
66 bool GetTransitivePropertiesOnly() const;
67 void SetTransitivePropertiesOnly() { this->TransitivePropertiesOnly = true; }
69 bool GetTransitivePropertiesOnlyCMP0131() const;
70 void SetTransitivePropertiesOnlyCMP0131() { this->CMP0131 = true; }
72 cmGeneratorTarget const* TopTarget() const;
74 private:
75 Result CheckGraph() const;
77 const cmGeneratorExpressionDAGChecker* const Parent;
78 const cmGeneratorExpressionDAGChecker* const Top;
79 cmGeneratorTarget const* Target;
80 const std::string Property;
81 mutable std::map<cmGeneratorTarget const*, std::set<std::string>> Seen;
82 const GeneratorExpressionContent* const Content;
83 const cmListFileBacktrace Backtrace;
84 Result CheckResult;
85 bool TransitivePropertiesOnly = false;
86 bool CMP0131 = false;
87 bool TopIsTransitiveProperty = false;