| /* 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; | |
| } | |
| } |