Selaa lähdekoodia

genex: Fix erroneous handling of recursion for $<GENEX_EVAL:>

Fixes: #18894
Marc Chevrier 6 vuotta sitten
vanhempi
sitoutus
e429e9af42

+ 2 - 8
Source/cmGeneratorExpressionDAGChecker.cxx

@@ -157,14 +157,8 @@ bool cmGeneratorExpressionDAGChecker::GetTransitivePropertiesOnly()
 
 bool cmGeneratorExpressionDAGChecker::EvaluatingGenexExpression()
 {
-  const cmGeneratorExpressionDAGChecker* top = this;
-  const cmGeneratorExpressionDAGChecker* parent = this->Parent;
-  while (parent) {
-    top = parent;
-    parent = parent->Parent;
-  }
-
-  return top->Property == "TARGET_GENEX_EVAL" || top->Property == "GENEX_EVAL";
+  return this->Property.find("TARGET_GENEX_EVAL:") == 0 ||
+    this->Property.find("GENEX_EVAL:", 0) == 0;
 }
 
 bool cmGeneratorExpressionDAGChecker::EvaluatingPICExpression()

+ 2 - 2
Source/cmGeneratorExpressionNode.cxx

@@ -404,8 +404,8 @@ protected:
   {
     if (context->HeadTarget) {
       cmGeneratorExpressionDAGChecker dagChecker(
-        context->Backtrace, context->HeadTarget, genexOperator, content,
-        dagCheckerParent);
+        context->Backtrace, context->HeadTarget,
+        genexOperator + ":" + expression, content, dagCheckerParent);
       switch (dagChecker.Check()) {
         case cmGeneratorExpressionDAGChecker::SELF_REFERENCE:
         case cmGeneratorExpressionDAGChecker::CYCLIC_REFERENCE: {

+ 3 - 3
Tests/RunCMake/GeneratorExpression/GENEX_EVAL-recursion2-stderr.txt

@@ -1,7 +1,7 @@
 ^CMake Error at GENEX_EVAL-recursion2.cmake:8 \(add_custom_target\):
   Error evaluating generator expression:
 
-    \$<GENEX_EVAL:\$<TARGET_PROPERTY:CUSTOM_PROPERTY1>>
+    \$<GENEX_EVAL:\$<TARGET_PROPERTY:CUSTOM_PROPERTY2>>
 
   Dependency loop found.
 Call Stack \(most recent call first\):
@@ -11,7 +11,7 @@ Call Stack \(most recent call first\):
 CMake Error at GENEX_EVAL-recursion2.cmake:8 \(add_custom_target\):
   Loop step 1
 
-    \$<GENEX_EVAL:\$<TARGET_PROPERTY:CUSTOM_PROPERTY2>>
+    \$<GENEX_EVAL:\$<TARGET_PROPERTY:CUSTOM_PROPERTY1>>
 
 Call Stack \(most recent call first\):
   CMakeLists.txt:3 \(include\)
@@ -20,7 +20,7 @@ Call Stack \(most recent call first\):
 CMake Error at GENEX_EVAL-recursion2.cmake:8 \(add_custom_target\):
   Loop step 2
 
-    \$<TARGET_GENEX_EVAL:recursion,\$<TARGET_PROPERTY:recursion,CUSTOM_PROPERTY1>>
+    \$<GENEX_EVAL:\$<TARGET_PROPERTY:CUSTOM_PROPERTY2>>
 
 Call Stack \(most recent call first\):
   CMakeLists.txt:3 \(include\)

+ 2 - 1
Tests/RunCMake/GeneratorExpression/GENEX_EVAL.cmake

@@ -7,5 +7,6 @@ add_library (example SHARED empty.c)
 set_property (TARGET example PROPERTY CUSTOM_PROPERTY1 "PROPERTY1")
 set_property (TARGET example PROPERTY CUSTOM_PROPERTY2 "$<TARGET_PROPERTY:CUSTOM_PROPERTY1>")
 set_property (TARGET example PROPERTY CUSTOM_PROPERTY3 "$<GENEX_EVAL:BEFORE_$<TARGET_PROPERTY:CUSTOM_PROPERTY2>_AFTER>")
+set_property (TARGET example PROPERTY CUSTOM_PROPERTY4 "$<GENEX_EVAL:$<TARGET_PROPERTY:CUSTOM_PROPERTY3>>")
 
-file(GENERATE OUTPUT "GENEX_EVAL-generated.txt" CONTENT "$<TARGET_GENEX_EVAL:example,$<TARGET_PROPERTY:example,CUSTOM_PROPERTY3>>")
+file(GENERATE OUTPUT "GENEX_EVAL-generated.txt" CONTENT "$<TARGET_GENEX_EVAL:example,$<TARGET_PROPERTY:example,CUSTOM_PROPERTY4>>")