Transitively consume the property from linked dependents. Implement configuration-specific support by following the pattern set out for compile definitions and includes in cmQtAutoGenerators. Implement support for origin-tracking with CMAKE_DEBUG_TARGET_PROPERTIES. This is motivated by the needs of KDE, which provides a separate translation system based on gettext instead of the Qt linguist translation system. The Qt uic tool provides command line options for configuring the method used to translate text, and to add an include directive to the generated file to provide the method. http://thread.gmane.org/gmane.comp.kde.devel.frameworks/7930/focus=7992 Implement the interface to provide the uic options as a usage-requirement on the KI18n target, as designed for KDE.
80 lines
2.5 KiB
C++
80 lines
2.5 KiB
C++
/*============================================================================
|
|
CMake - Cross Platform Makefile Generator
|
|
Copyright 2012 Stephen Kelly <steveire@gmail.com>
|
|
|
|
Distributed under the OSI-approved BSD License (the "License");
|
|
see accompanying file Copyright.txt for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
See the License for more information.
|
|
============================================================================*/
|
|
#ifndef cmGeneratorExpressionDAGChecker_h
|
|
#define cmGeneratorExpressionDAGChecker_h
|
|
|
|
#include "cmStandardIncludes.h"
|
|
|
|
#include "cmGeneratorExpressionEvaluator.h"
|
|
|
|
#define CM_FOR_EACH_TRANSITIVE_PROPERTY_METHOD(F) \
|
|
F(EvaluatingIncludeDirectories) \
|
|
F(EvaluatingSystemIncludeDirectories) \
|
|
F(EvaluatingCompileDefinitions) \
|
|
F(EvaluatingCompileOptions) \
|
|
F(EvaluatingAutoUicOptions)
|
|
|
|
#define CM_FOR_EACH_TRANSITIVE_PROPERTY_NAME(F) \
|
|
F(INCLUDE_DIRECTORIES) \
|
|
F(SYSTEM_INCLUDE_DIRECTORIES) \
|
|
F(COMPILE_DEFINITIONS) \
|
|
F(COMPILE_OPTIONS) \
|
|
F(AUTOUIC_OPTIONS)
|
|
|
|
//----------------------------------------------------------------------------
|
|
struct cmGeneratorExpressionDAGChecker
|
|
{
|
|
cmGeneratorExpressionDAGChecker(const cmListFileBacktrace &backtrace,
|
|
const std::string &target,
|
|
const std::string &property,
|
|
const GeneratorExpressionContent *content,
|
|
cmGeneratorExpressionDAGChecker *parent);
|
|
|
|
enum Result {
|
|
DAG,
|
|
SELF_REFERENCE,
|
|
CYCLIC_REFERENCE,
|
|
ALREADY_SEEN
|
|
};
|
|
|
|
Result check() const;
|
|
|
|
void reportError(cmGeneratorExpressionContext *context,
|
|
const std::string &expr);
|
|
|
|
bool EvaluatingLinkLibraries(const char *tgt = 0);
|
|
|
|
#define DECLARE_TRANSITIVE_PROPERTY_METHOD(METHOD) \
|
|
bool METHOD () const;
|
|
|
|
CM_FOR_EACH_TRANSITIVE_PROPERTY_METHOD(DECLARE_TRANSITIVE_PROPERTY_METHOD)
|
|
|
|
bool GetTransitivePropertiesOnly();
|
|
void SetTransitivePropertiesOnly()
|
|
{ this->TransitivePropertiesOnly = true; }
|
|
|
|
private:
|
|
Result checkGraph() const;
|
|
|
|
private:
|
|
const cmGeneratorExpressionDAGChecker * const Parent;
|
|
const std::string Target;
|
|
const std::string Property;
|
|
std::map<cmStdString, std::set<cmStdString> > Seen;
|
|
const GeneratorExpressionContent * const Content;
|
|
const cmListFileBacktrace Backtrace;
|
|
Result CheckResult;
|
|
bool TransitivePropertiesOnly;
|
|
};
|
|
|
|
#endif
|