mirror of
https://github.com/Kitware/CMake.git
synced 2026-08-10 17:14:10 +00:00
To manage the generation step, introduce cmGeneratorFileSet and cmGeneratorFileSets classes. These reorganizations of the code are done in preparation of the implementation of SOURCES file set type as well as user's file set types. Issues: #27550, #27383
110 lines
2.9 KiB
C++
110 lines
2.9 KiB
C++
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
file LICENSE.rst or https://cmake.org/licensing for details. */
|
|
|
|
#include "cmTargetPropertyEntry.h"
|
|
|
|
#include <string>
|
|
#include <utility>
|
|
|
|
#include <cm/memory>
|
|
|
|
#include "cmGeneratorExpression.h"
|
|
#include "cmLinkItem.h"
|
|
#include "cmListFileCache.h"
|
|
|
|
class cmake;
|
|
|
|
namespace cm {
|
|
cmLinkItem TargetPropertyEntry::NoLinkItem;
|
|
|
|
class TargetPropertyEntryString : public TargetPropertyEntry
|
|
{
|
|
public:
|
|
TargetPropertyEntryString(BT<std::string> propertyValue,
|
|
cmLinkItem const& item = NoLinkItem)
|
|
: TargetPropertyEntry(item)
|
|
, PropertyValue(std::move(propertyValue))
|
|
{
|
|
}
|
|
|
|
std::string const& Evaluate(cm::GenEx::Context const&,
|
|
cmGeneratorTarget const*,
|
|
cmGeneratorExpressionDAGChecker*) const override
|
|
{
|
|
return this->PropertyValue.Value;
|
|
}
|
|
|
|
cmListFileBacktrace GetBacktrace() const override
|
|
{
|
|
return this->PropertyValue.Backtrace;
|
|
}
|
|
std::string const& GetInput() const override
|
|
{
|
|
return this->PropertyValue.Value;
|
|
}
|
|
|
|
private:
|
|
BT<std::string> PropertyValue;
|
|
};
|
|
|
|
class TargetPropertyEntryGenex : public TargetPropertyEntry
|
|
{
|
|
public:
|
|
TargetPropertyEntryGenex(std::unique_ptr<cmCompiledGeneratorExpression> cge,
|
|
cmLinkItem const& item = NoLinkItem)
|
|
: TargetPropertyEntry(item)
|
|
, ge(std::move(cge))
|
|
{
|
|
}
|
|
|
|
std::string const& Evaluate(
|
|
cm::GenEx::Context const& context, cmGeneratorTarget const* headTarget,
|
|
cmGeneratorExpressionDAGChecker* dagChecker) const override
|
|
{
|
|
return this->ge->Evaluate(context, dagChecker, headTarget);
|
|
}
|
|
|
|
cmListFileBacktrace GetBacktrace() const override
|
|
{
|
|
return this->ge->GetBacktrace();
|
|
}
|
|
|
|
std::string const& GetInput() const override { return this->ge->GetInput(); }
|
|
|
|
bool GetHadContextSensitiveCondition() const override
|
|
{
|
|
return this->ge->GetHadContextSensitiveCondition();
|
|
}
|
|
|
|
private:
|
|
std::unique_ptr<cmCompiledGeneratorExpression> const ge;
|
|
};
|
|
|
|
std::unique_ptr<TargetPropertyEntry> TargetPropertyEntry::Create(
|
|
cmake& cmakeInstance, const BT<std::string>& propertyValue,
|
|
bool evaluateForBuildsystem)
|
|
{
|
|
if (cmGeneratorExpression::Find(propertyValue.Value) != std::string::npos) {
|
|
cmGeneratorExpression ge(cmakeInstance, propertyValue.Backtrace);
|
|
std::unique_ptr<cmCompiledGeneratorExpression> cge =
|
|
ge.Parse(propertyValue.Value);
|
|
cge->SetEvaluateForBuildsystem(evaluateForBuildsystem);
|
|
return std::unique_ptr<TargetPropertyEntry>(
|
|
cm::make_unique<TargetPropertyEntryGenex>(std::move(cge)));
|
|
}
|
|
|
|
return std::unique_ptr<TargetPropertyEntry>(
|
|
cm::make_unique<TargetPropertyEntryString>(propertyValue));
|
|
}
|
|
|
|
TargetPropertyEntry::TargetPropertyEntry(cmLinkItem const& item)
|
|
: LinkItem(item)
|
|
{
|
|
}
|
|
|
|
bool TargetPropertyEntry::GetHadContextSensitiveCondition() const
|
|
{
|
|
return false;
|
|
}
|
|
}
|