Browse Source

Workaround broken code where a target has itself in its link iface.

There is a test for this since commit 8e756d2b (Tolerate cycles in
shared library link interfaces (#12647), 2012-01-12), so make sure
it continues to pass, even as we require no self-references in new
INTERFACE_ property generator expressions.
Stephen Kelly 13 years ago
parent
commit
e72eaadc42
1 changed files with 7 additions and 0 deletions
  1. 7 0
      Source/cmGeneratorExpressionEvaluator.cxx

+ 7 - 0
Source/cmGeneratorExpressionEvaluator.cxx

@@ -471,6 +471,13 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
         if (propertyName == "INTERFACE_INCLUDE_DIRECTORIES"
             || propertyName == "INTERFACE_COMPILE_DEFINITIONS")
           {
+          if (*it == target->GetName())
+            {
+            // Broken code can have a target in its own link interface.
+            // Don't follow such link interface entries so as not to create a
+            // self-referencing loop.
+            continue;
+            }
           const cmTarget::LinkInterface *iface = target->GetLinkInterface(
                                                         context->Config,
                                                         context->HeadTarget);