1 /*============================================================================
2 CMake - Cross Platform Makefile Generator
3 Copyright 2012 Stephen Kelly <steveire@gmail.com>
5 Distributed under the OSI-approved BSD License (the "License");
6 see accompanying file Copyright.txt for details.
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
15 #include "cmStandardIncludes.h"
17 #include "cmGeneratorExpressionEvaluator.h"
19 #define CM_FOR_EACH_TRANSITIVE_PROPERTY_METHOD(F) \
20 F(EvaluatingIncludeDirectories) \
21 F(EvaluatingSystemIncludeDirectories) \
22 F(EvaluatingCompileDefinitions) \
23 F(EvaluatingCompileOptions)
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)
31 //----------------------------------------------------------------------------
32 struct cmGeneratorExpressionDAGChecker
34 cmGeneratorExpressionDAGChecker(const cmListFileBacktrace &backtrace,
35 const std::string &target,
36 const std::string &property,
37 const GeneratorExpressionContent *content,
38 cmGeneratorExpressionDAGChecker *parent);
49 void reportError(cmGeneratorExpressionContext *context,
50 const std::string &expr);
52 bool EvaluatingLinkLibraries(const char *tgt = 0);
54 #define DECLARE_TRANSITIVE_PROPERTY_METHOD(METHOD) \
57 CM_FOR_EACH_TRANSITIVE_PROPERTY_METHOD(DECLARE_TRANSITIVE_PROPERTY_METHOD)
59 bool GetTransitivePropertiesOnly();
60 void SetTransitivePropertiesOnly()
61 { this->TransitivePropertiesOnly = true; }
64 Result checkGraph() const;
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;
74 bool TransitivePropertiesOnly;