|
|
@@ -2023,18 +2023,16 @@ struct TargetFilesystemArtifactResultGetter<ArtifactPathTag>
|
|
|
static std::string Get(const std::string& result) { return result; }
|
|
|
};
|
|
|
|
|
|
-template <typename ArtifactT, typename ComponentT>
|
|
|
-struct TargetFilesystemArtifact : public cmGeneratorExpressionNode
|
|
|
+struct TargetArtifactBase : public cmGeneratorExpressionNode
|
|
|
{
|
|
|
- TargetFilesystemArtifact() {} // NOLINT(modernize-use-equals-default)
|
|
|
-
|
|
|
- int NumExpectedParameters() const override { return 1; }
|
|
|
+ TargetArtifactBase() {} // NOLINT(modernize-use-equals-default)
|
|
|
|
|
|
- std::string Evaluate(
|
|
|
+protected:
|
|
|
+ cmGeneratorTarget* GetTarget(
|
|
|
const std::vector<std::string>& parameters,
|
|
|
cmGeneratorExpressionContext* context,
|
|
|
const GeneratorExpressionContent* content,
|
|
|
- cmGeneratorExpressionDAGChecker* dagChecker) const override
|
|
|
+ cmGeneratorExpressionDAGChecker* dagChecker) const
|
|
|
{
|
|
|
// Lookup the referenced target.
|
|
|
std::string name = parameters.front();
|
|
|
@@ -2042,20 +2040,20 @@ struct TargetFilesystemArtifact : public cmGeneratorExpressionNode
|
|
|
if (!cmGeneratorExpression::IsValidTargetName(name)) {
|
|
|
::reportError(context, content->GetOriginalExpression(),
|
|
|
"Expression syntax not recognized.");
|
|
|
- return std::string();
|
|
|
+ return nullptr;
|
|
|
}
|
|
|
cmGeneratorTarget* target = context->LG->FindGeneratorTargetToUse(name);
|
|
|
if (!target) {
|
|
|
::reportError(context, content->GetOriginalExpression(),
|
|
|
"No target \"" + name + "\"");
|
|
|
- return std::string();
|
|
|
+ return nullptr;
|
|
|
}
|
|
|
if (target->GetType() >= cmStateEnums::OBJECT_LIBRARY &&
|
|
|
target->GetType() != cmStateEnums::UNKNOWN_LIBRARY) {
|
|
|
::reportError(context, content->GetOriginalExpression(),
|
|
|
"Target \"" + name +
|
|
|
"\" is not an executable or library.");
|
|
|
- return std::string();
|
|
|
+ return nullptr;
|
|
|
}
|
|
|
if (dagChecker &&
|
|
|
(dagChecker->EvaluatingLinkLibraries(target) ||
|
|
|
@@ -2064,6 +2062,29 @@ struct TargetFilesystemArtifact : public cmGeneratorExpressionNode
|
|
|
::reportError(context, content->GetOriginalExpression(),
|
|
|
"Expressions which require the linker language may not "
|
|
|
"be used while evaluating link libraries");
|
|
|
+ return nullptr;
|
|
|
+ }
|
|
|
+
|
|
|
+ return target;
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+template <typename ArtifactT, typename ComponentT>
|
|
|
+struct TargetFilesystemArtifact : public TargetArtifactBase
|
|
|
+{
|
|
|
+ TargetFilesystemArtifact() {} // NOLINT(modernize-use-equals-default)
|
|
|
+
|
|
|
+ int NumExpectedParameters() const override { return 1; }
|
|
|
+
|
|
|
+ std::string Evaluate(
|
|
|
+ const std::vector<std::string>& parameters,
|
|
|
+ cmGeneratorExpressionContext* context,
|
|
|
+ const GeneratorExpressionContent* content,
|
|
|
+ cmGeneratorExpressionDAGChecker* dagChecker) const override
|
|
|
+ {
|
|
|
+ cmGeneratorTarget* target =
|
|
|
+ this->GetTarget(parameters, context, content, dagChecker);
|
|
|
+ if (!target) {
|
|
|
return std::string();
|
|
|
}
|
|
|
context->DependTargets.insert(target);
|