mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-08 07:10:12 -05:00
cmGeneratorTarget: Factor out EvaluatedTargetProperty infrastructure
Make it available outside the `cmGeneratorTarget` implementation. In particular, we will later use it in `cmQtAutoGenInitializer`.
This commit is contained in:
committed by
Brad King
parent
2daba01ddf
commit
7cecb6353e
@@ -0,0 +1,80 @@
|
||||
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
file Copyright.txt or https://cmake.org/licensing for details. */
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "cmGeneratorTarget.h"
|
||||
#include "cmListFileCache.h"
|
||||
|
||||
class cmLinkImplItem;
|
||||
struct cmGeneratorExpressionDAGChecker;
|
||||
|
||||
// Represent a target property entry after evaluating generator expressions
|
||||
// and splitting up lists.
|
||||
struct EvaluatedTargetPropertyEntry
|
||||
{
|
||||
EvaluatedTargetPropertyEntry(cmLinkImplItem const& item,
|
||||
cmListFileBacktrace bt);
|
||||
|
||||
// Move-only.
|
||||
EvaluatedTargetPropertyEntry(EvaluatedTargetPropertyEntry&&) = default;
|
||||
EvaluatedTargetPropertyEntry(EvaluatedTargetPropertyEntry const&) = delete;
|
||||
EvaluatedTargetPropertyEntry& operator=(EvaluatedTargetPropertyEntry&&) =
|
||||
delete;
|
||||
EvaluatedTargetPropertyEntry& operator=(
|
||||
EvaluatedTargetPropertyEntry const&) = delete;
|
||||
|
||||
cmLinkImplItem const& LinkImplItem;
|
||||
cmListFileBacktrace Backtrace;
|
||||
std::vector<std::string> Values;
|
||||
bool ContextDependent = false;
|
||||
};
|
||||
|
||||
EvaluatedTargetPropertyEntry EvaluateTargetPropertyEntry(
|
||||
cmGeneratorTarget const* thisTarget, std::string const& config,
|
||||
std::string const& lang, cmGeneratorExpressionDAGChecker* dagChecker,
|
||||
cmGeneratorTarget::TargetPropertyEntry& entry);
|
||||
|
||||
struct EvaluatedTargetPropertyEntries
|
||||
{
|
||||
std::vector<EvaluatedTargetPropertyEntry> Entries;
|
||||
bool HadContextSensitiveCondition = false;
|
||||
};
|
||||
|
||||
EvaluatedTargetPropertyEntries EvaluateTargetPropertyEntries(
|
||||
cmGeneratorTarget const* thisTarget, std::string const& config,
|
||||
std::string const& lang, cmGeneratorExpressionDAGChecker* dagChecker,
|
||||
std::vector<std::unique_ptr<cmGeneratorTarget::TargetPropertyEntry>> const&
|
||||
in);
|
||||
|
||||
// IncludeRuntimeInterface is used to break the cycle in computing
|
||||
// the necessary transitive dependencies of targets that can occur
|
||||
// now that we have implicit language runtime targets.
|
||||
//
|
||||
// To determine the set of languages that a target has we need to iterate
|
||||
// all the sources which includes transitive INTERFACE sources.
|
||||
// Therefore we can't determine what language runtimes are needed
|
||||
// for a target until after all sources are computed.
|
||||
//
|
||||
// Therefore while computing the applicable INTERFACE_SOURCES we
|
||||
// must ignore anything in LanguageRuntimeLibraries or we would
|
||||
// create a cycle ( INTERFACE_SOURCES requires LanguageRuntimeLibraries,
|
||||
// LanguageRuntimeLibraries requires INTERFACE_SOURCES).
|
||||
//
|
||||
enum class IncludeRuntimeInterface
|
||||
{
|
||||
Yes,
|
||||
No
|
||||
};
|
||||
|
||||
void AddInterfaceEntries(cmGeneratorTarget const* headTarget,
|
||||
std::string const& config, std::string const& prop,
|
||||
std::string const& lang,
|
||||
cmGeneratorExpressionDAGChecker* dagChecker,
|
||||
EvaluatedTargetPropertyEntries& entries,
|
||||
IncludeRuntimeInterface searchRuntime,
|
||||
cmGeneratorTarget::LinkInterfaceFor interfaceFor =
|
||||
cmGeneratorTarget::LinkInterfaceFor::Usage);
|
||||
Reference in New Issue
Block a user