Removed curl dependency by using cmake internal curl
[platform/upstream/cmake.git] / Source / cmGeneratorExpressionDAGChecker.h
1 /*============================================================================
2   CMake - Cross Platform Makefile Generator
3   Copyright 2012 Stephen Kelly <steveire@gmail.com>
4
5   Distributed under the OSI-approved BSD License (the "License");
6   see accompanying file Copyright.txt for details.
7
8   This software is distributed WITHOUT ANY WARRANTY; without even the
9   implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10   See the License for more information.
11 ============================================================================*/
12 #ifndef cmGeneratorExpressionDAGChecker_h
13 #define cmGeneratorExpressionDAGChecker_h
14
15 #include "cmStandardIncludes.h"
16
17 #include "cmGeneratorExpressionEvaluator.h"
18
19 #define CM_FOR_EACH_TRANSITIVE_PROPERTY_METHOD(F) \
20   F(EvaluatingIncludeDirectories) \
21   F(EvaluatingSystemIncludeDirectories) \
22   F(EvaluatingCompileDefinitions) \
23   F(EvaluatingCompileOptions)
24
25 #define CM_FOR_EACH_TRANSITIVE_PROPERTY_NAME(F) \
26   F(INTERFACE_INCLUDE_DIRECTORIES) \
27   F(INTERFACE_SYSTEM_INCLUDE_DIRECTORIES) \
28   F(INTERFACE_COMPILE_DEFINITIONS) \
29   F(INTERFACE_COMPILE_OPTIONS)
30
31 //----------------------------------------------------------------------------
32 struct cmGeneratorExpressionDAGChecker
33 {
34   cmGeneratorExpressionDAGChecker(const cmListFileBacktrace &backtrace,
35                                   const std::string &target,
36                                   const std::string &property,
37                                   const GeneratorExpressionContent *content,
38                                   cmGeneratorExpressionDAGChecker *parent);
39
40   enum Result {
41     DAG,
42     SELF_REFERENCE,
43     CYCLIC_REFERENCE,
44     ALREADY_SEEN
45   };
46
47   Result check() const;
48
49   void reportError(cmGeneratorExpressionContext *context,
50                    const std::string &expr);
51
52   bool EvaluatingLinkLibraries(const char *tgt = 0);
53
54 #define DECLARE_TRANSITIVE_PROPERTY_METHOD(METHOD) \
55   bool METHOD () const;
56
57 CM_FOR_EACH_TRANSITIVE_PROPERTY_METHOD(DECLARE_TRANSITIVE_PROPERTY_METHOD)
58
59   bool GetTransitivePropertiesOnly();
60   void SetTransitivePropertiesOnly()
61     { this->TransitivePropertiesOnly = true; }
62
63 private:
64   Result checkGraph() const;
65
66 private:
67   const cmGeneratorExpressionDAGChecker * const Parent;
68   const std::string Target;
69   const std::string Property;
70   std::map<cmStdString, std::set<cmStdString> > Seen;
71   const GeneratorExpressionContent * const Content;
72   const cmListFileBacktrace Backtrace;
73   Result CheckResult;
74   bool TransitivePropertiesOnly;
75 };
76
77 #endif