|  | @@ -2311,7 +2311,7 @@ cmTarget::GetIncludeDirectories(const std::string& config) const
 | 
											
												
													
														|  |      if(this->Makefile->IsOn("APPLE"))
 |  |      if(this->Makefile->IsOn("APPLE"))
 | 
											
												
													
														|  |        {
 |  |        {
 | 
											
												
													
														|  |        LinkImplementation const* impl = this->GetLinkImplementation(config);
 |  |        LinkImplementation const* impl = this->GetLinkImplementation(config);
 | 
											
												
													
														|  | -      for(std::vector<std::string>::const_iterator
 |  | 
 | 
											
												
													
														|  | 
 |  | +      for(std::vector<cmLinkItem>::const_iterator
 | 
											
												
													
														|  |            it = impl->Libraries.begin();
 |  |            it = impl->Libraries.begin();
 | 
											
												
													
														|  |            it != impl->Libraries.end(); ++it)
 |  |            it != impl->Libraries.end(); ++it)
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
										
											
												
													
														|  | @@ -3513,13 +3513,11 @@ public:
 | 
											
												
													
														|  |      Makefile(target->GetMakefile()), Target(target)
 |  |      Makefile(target->GetMakefile()), Target(target)
 | 
											
												
													
														|  |    { this->Visited.insert(target); }
 |  |    { this->Visited.insert(target); }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -  void Visit(cmTarget const* from, const std::string& name)
 |  | 
 | 
											
												
													
														|  | 
 |  | +  void Visit(cmLinkItem const& item)
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
												
													
														|  | -    cmTarget const *target = from->FindTargetToLink(name);
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    if(!target)
 |  | 
 | 
											
												
													
														|  | 
 |  | +    if(!item.Target)
 | 
											
												
													
														|  |        {
 |  |        {
 | 
											
												
													
														|  | -      if(name.find("::") != std::string::npos)
 |  | 
 | 
											
												
													
														|  | 
 |  | +      if(item.find("::") != std::string::npos)
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
												
													
														|  |          bool noMessage = false;
 |  |          bool noMessage = false;
 | 
											
												
													
														|  |          cmake::MessageType messageType = cmake::FATAL_ERROR;
 |  |          cmake::MessageType messageType = cmake::FATAL_ERROR;
 | 
											
										
											
												
													
														|  | @@ -3545,7 +3543,7 @@ public:
 | 
											
												
													
														|  |          if(!noMessage)
 |  |          if(!noMessage)
 | 
											
												
													
														|  |            {
 |  |            {
 | 
											
												
													
														|  |            e << "Target \"" << this->Target->GetName()
 |  |            e << "Target \"" << this->Target->GetName()
 | 
											
												
													
														|  | -            << "\" links to target \"" << name
 |  | 
 | 
											
												
													
														|  | 
 |  | +            << "\" links to target \"" << item
 | 
											
												
													
														|  |              << "\" but the target was not found.  Perhaps a find_package() "
 |  |              << "\" but the target was not found.  Perhaps a find_package() "
 | 
											
												
													
														|  |              "call is missing for an IMPORTED target, or an ALIAS target is "
 |  |              "call is missing for an IMPORTED target, or an ALIAS target is "
 | 
											
												
													
														|  |              "missing?";
 |  |              "missing?";
 | 
											
										
											
												
													
														|  | @@ -3556,13 +3554,13 @@ public:
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |        return;
 |  |        return;
 | 
											
												
													
														|  |        }
 |  |        }
 | 
											
												
													
														|  | -    if(!this->Visited.insert(target).second)
 |  | 
 | 
											
												
													
														|  | 
 |  | +    if(!this->Visited.insert(item.Target).second)
 | 
											
												
													
														|  |        {
 |  |        {
 | 
											
												
													
														|  |        return;
 |  |        return;
 | 
											
												
													
														|  |        }
 |  |        }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      cmTarget::LinkInterface const* iface =
 |  |      cmTarget::LinkInterface const* iface =
 | 
											
												
													
														|  | -      target->GetLinkInterface(this->Config, this->HeadTarget);
 |  | 
 | 
											
												
													
														|  | 
 |  | +      item.Target->GetLinkInterface(this->Config, this->HeadTarget);
 | 
											
												
													
														|  |      if(!iface) { return; }
 |  |      if(!iface) { return; }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      for(std::vector<std::string>::const_iterator
 |  |      for(std::vector<std::string>::const_iterator
 | 
											
										
											
												
													
														|  | @@ -3571,10 +3569,10 @@ public:
 | 
											
												
													
														|  |        this->Languages.insert(*li);
 |  |        this->Languages.insert(*li);
 | 
											
												
													
														|  |        }
 |  |        }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    for(std::vector<std::string>::const_iterator
 |  | 
 | 
											
												
													
														|  | 
 |  | +    for(std::vector<cmLinkItem>::const_iterator
 | 
											
												
													
														|  |            li = iface->Libraries.begin(); li != iface->Libraries.end(); ++li)
 |  |            li = iface->Libraries.begin(); li != iface->Libraries.end(); ++li)
 | 
											
												
													
														|  |        {
 |  |        {
 | 
											
												
													
														|  | -      this->Visit(target, *li);
 |  | 
 | 
											
												
													
														|  | 
 |  | +      this->Visit(*li);
 | 
											
												
													
														|  |        }
 |  |        }
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  private:
 |  |  private:
 | 
											
										
											
												
													
														|  | @@ -3677,10 +3675,10 @@ void cmTarget::ComputeLinkClosure(const std::string& config,
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |    // Add interface languages from linked targets.
 |  |    // Add interface languages from linked targets.
 | 
											
												
													
														|  |    cmTargetCollectLinkLanguages cll(this, config, languages, this);
 |  |    cmTargetCollectLinkLanguages cll(this, config, languages, this);
 | 
											
												
													
														|  | -  for(std::vector<std::string>::const_iterator li = impl->Libraries.begin();
 |  | 
 | 
											
												
													
														|  | 
 |  | +  for(std::vector<cmLinkItem>::const_iterator li = impl->Libraries.begin();
 | 
											
												
													
														|  |        li != impl->Libraries.end(); ++li)
 |  |        li != impl->Libraries.end(); ++li)
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
												
													
														|  | -    cll.Visit(this, *li);
 |  | 
 | 
											
												
													
														|  | 
 |  | +    cll.Visit(*li);
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |    // Store the transitive closure of languages.
 |  |    // Store the transitive closure of languages.
 | 
											
										
											
												
													
														|  | @@ -3731,16 +3729,34 @@ void cmTarget::ExpandLinkItems(std::string const& prop,
 | 
											
												
													
														|  |                                 std::string const& value,
 |  |                                 std::string const& value,
 | 
											
												
													
														|  |                                 std::string const& config,
 |  |                                 std::string const& config,
 | 
											
												
													
														|  |                                 cmTarget const* headTarget,
 |  |                                 cmTarget const* headTarget,
 | 
											
												
													
														|  | -                               std::vector<std::string>& libs) const
 |  | 
 | 
											
												
													
														|  | 
 |  | +                               std::vector<cmLinkItem>& items) const
 | 
											
												
													
														|  |  {
 |  |  {
 | 
											
												
													
														|  |    cmGeneratorExpression ge;
 |  |    cmGeneratorExpression ge;
 | 
											
												
													
														|  |    cmGeneratorExpressionDAGChecker dagChecker(this->GetName(), prop, 0, 0);
 |  |    cmGeneratorExpressionDAGChecker dagChecker(this->GetName(), prop, 0, 0);
 | 
											
												
													
														|  | 
 |  | +  std::vector<std::string> libs;
 | 
											
												
													
														|  |    cmSystemTools::ExpandListArgument(ge.Parse(value)->Evaluate(
 |  |    cmSystemTools::ExpandListArgument(ge.Parse(value)->Evaluate(
 | 
											
												
													
														|  |                                        this->Makefile,
 |  |                                        this->Makefile,
 | 
											
												
													
														|  |                                        config,
 |  |                                        config,
 | 
											
												
													
														|  |                                        false,
 |  |                                        false,
 | 
											
												
													
														|  |                                        headTarget,
 |  |                                        headTarget,
 | 
											
												
													
														|  |                                        this, &dagChecker), libs);
 |  |                                        this, &dagChecker), libs);
 | 
											
												
													
														|  | 
 |  | +  this->LookupLinkItems(libs, items);
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +//----------------------------------------------------------------------------
 | 
											
												
													
														|  | 
 |  | +void cmTarget::LookupLinkItems(std::vector<std::string> const& names,
 | 
											
												
													
														|  | 
 |  | +                               std::vector<cmLinkItem>& items) const
 | 
											
												
													
														|  | 
 |  | +{
 | 
											
												
													
														|  | 
 |  | +  for(std::vector<std::string>::const_iterator i = names.begin();
 | 
											
												
													
														|  | 
 |  | +      i != names.end(); ++i)
 | 
											
												
													
														|  | 
 |  | +    {
 | 
											
												
													
														|  | 
 |  | +    std::string name = this->CheckCMP0004(*i);
 | 
											
												
													
														|  | 
 |  | +    if(name == this->GetName() || name.empty())
 | 
											
												
													
														|  | 
 |  | +      {
 | 
											
												
													
														|  | 
 |  | +      continue;
 | 
											
												
													
														|  | 
 |  | +      }
 | 
											
												
													
														|  | 
 |  | +    items.push_back(cmLinkItem(name, this->FindTargetToLink(name)));
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  //----------------------------------------------------------------------------
 |  |  //----------------------------------------------------------------------------
 | 
											
										
											
												
													
														|  | @@ -6158,7 +6174,11 @@ cmTarget::GetImportLinkInterface(const std::string& config,
 | 
											
												
													
														|  |      cmSystemTools::ExpandListArgument(info->Languages, iface.Languages);
 |  |      cmSystemTools::ExpandListArgument(info->Languages, iface.Languages);
 | 
											
												
													
														|  |      this->ExpandLinkItems(info->LibrariesProp, info->Libraries, config,
 |  |      this->ExpandLinkItems(info->LibrariesProp, info->Libraries, config,
 | 
											
												
													
														|  |                            headTarget, iface.Libraries);
 |  |                            headTarget, iface.Libraries);
 | 
											
												
													
														|  | -    cmSystemTools::ExpandListArgument(info->SharedDeps, iface.SharedDeps);
 |  | 
 | 
											
												
													
														|  | 
 |  | +    {
 | 
											
												
													
														|  | 
 |  | +    std::vector<std::string> deps;
 | 
											
												
													
														|  | 
 |  | +    cmSystemTools::ExpandListArgument(info->SharedDeps, deps);
 | 
											
												
													
														|  | 
 |  | +    this->LookupLinkItems(deps, iface.SharedDeps);
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      cmTargetInternals::ImportLinkInterfaceMapType::value_type
 |  |      cmTargetInternals::ImportLinkInterfaceMapType::value_type
 | 
											
												
													
														|  |        entry(key, iface);
 |  |        entry(key, iface);
 | 
											
										
											
												
													
														|  | @@ -6170,22 +6190,21 @@ cmTarget::GetImportLinkInterface(const std::string& config,
 | 
											
												
													
														|  |  //----------------------------------------------------------------------------
 |  |  //----------------------------------------------------------------------------
 | 
											
												
													
														|  |  void processILibs(const std::string& config,
 |  |  void processILibs(const std::string& config,
 | 
											
												
													
														|  |                    cmTarget const* headTarget,
 |  |                    cmTarget const* headTarget,
 | 
											
												
													
														|  | -                  cmTarget const* curTarget,
 |  | 
 | 
											
												
													
														|  | -                  std::string const& name,
 |  | 
 | 
											
												
													
														|  | 
 |  | +                  cmLinkItem const& item,
 | 
											
												
													
														|  |                    std::vector<cmTarget const*>& tgts,
 |  |                    std::vector<cmTarget const*>& tgts,
 | 
											
												
													
														|  |                    std::set<cmTarget const*>& emitted)
 |  |                    std::set<cmTarget const*>& emitted)
 | 
											
												
													
														|  |  {
 |  |  {
 | 
											
												
													
														|  | -  if (cmTarget const* tgt = curTarget->FindTargetToLink(name))
 |  | 
 | 
											
												
													
														|  | 
 |  | +  if (item.Target && emitted.insert(item.Target).second)
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
												
													
														|  | -    tgts.push_back(tgt);
 |  | 
 | 
											
												
													
														|  | 
 |  | +    tgts.push_back(item.Target);
 | 
											
												
													
														|  |      if(cmTarget::LinkInterface const* iface =
 |  |      if(cmTarget::LinkInterface const* iface =
 | 
											
												
													
														|  | -       tgt->GetLinkInterfaceLibraries(config, headTarget))
 |  | 
 | 
											
												
													
														|  | 
 |  | +       item.Target->GetLinkInterfaceLibraries(config, headTarget))
 | 
											
												
													
														|  |        {
 |  |        {
 | 
											
												
													
														|  | -      for(std::vector<std::string>::const_iterator
 |  | 
 | 
											
												
													
														|  | -          it = iface->Libraries.begin();
 |  | 
 | 
											
												
													
														|  | 
 |  | +      for(std::vector<cmLinkItem>::const_iterator
 | 
											
												
													
														|  | 
 |  | +            it = iface->Libraries.begin();
 | 
											
												
													
														|  |            it != iface->Libraries.end(); ++it)
 |  |            it != iface->Libraries.end(); ++it)
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
												
													
														|  | -        processILibs(config, headTarget, tgt, *it, tgts, emitted);
 |  | 
 | 
											
												
													
														|  | 
 |  | +        processILibs(config, headTarget, *it, tgts, emitted);
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |        }
 |  |        }
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
										
											
												
													
														|  | @@ -6205,10 +6224,10 @@ cmTarget::GetLinkImplementationClosure(const std::string& config) const
 | 
											
												
													
														|  |      cmTarget::LinkImplementation const* impl
 |  |      cmTarget::LinkImplementation const* impl
 | 
											
												
													
														|  |        = this->GetLinkImplementationLibraries(config);
 |  |        = this->GetLinkImplementationLibraries(config);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    for(std::vector<std::string>::const_iterator it = impl->Libraries.begin();
 |  | 
 | 
											
												
													
														|  | 
 |  | +    for(std::vector<cmLinkItem>::const_iterator it = impl->Libraries.begin();
 | 
											
												
													
														|  |          it != impl->Libraries.end(); ++it)
 |  |          it != impl->Libraries.end(); ++it)
 | 
											
												
													
														|  |        {
 |  |        {
 | 
											
												
													
														|  | -      processILibs(config, this, this, *it, tgts , emitted);
 |  | 
 | 
											
												
													
														|  | 
 |  | +      processILibs(config, this, *it, tgts , emitted);
 | 
											
												
													
														|  |        }
 |  |        }
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |    return tgts;
 |  |    return tgts;
 | 
											
										
											
												
													
														|  | @@ -6229,12 +6248,12 @@ void cmTarget::GetTransitivePropertyTargets(const std::string& config,
 | 
											
												
													
														|  |        || this->GetPolicyStatusCMP0022() == cmPolicies::WARN
 |  |        || this->GetPolicyStatusCMP0022() == cmPolicies::WARN
 | 
											
												
													
														|  |        || this->GetPolicyStatusCMP0022() == cmPolicies::OLD)
 |  |        || this->GetPolicyStatusCMP0022() == cmPolicies::OLD)
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
												
													
														|  | -    for(std::vector<std::string>::const_iterator it = iface->Libraries.begin();
 |  | 
 | 
											
												
													
														|  | 
 |  | +    for(std::vector<cmLinkItem>::const_iterator it = iface->Libraries.begin();
 | 
											
												
													
														|  |          it != iface->Libraries.end(); ++it)
 |  |          it != iface->Libraries.end(); ++it)
 | 
											
												
													
														|  |        {
 |  |        {
 | 
											
												
													
														|  | -      if (cmTarget const* tgt = this->FindTargetToLink(*it))
 |  | 
 | 
											
												
													
														|  | 
 |  | +      if (it->Target)
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
												
													
														|  | -        tgts.push_back(tgt);
 |  | 
 | 
											
												
													
														|  | 
 |  | +        tgts.push_back(it->Target);
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |        }
 |  |        }
 | 
											
												
													
														|  |      return;
 |  |      return;
 | 
											
										
											
												
													
														|  | @@ -6378,7 +6397,7 @@ const char* cmTarget::ComputeLinkInterfaceLibraries(const std::string& config,
 | 
											
												
													
														|  |        {
 |  |        {
 | 
											
												
													
														|  |        // Compare the link implementation fallback link interface to the
 |  |        // Compare the link implementation fallback link interface to the
 | 
											
												
													
														|  |        // preferred new link interface property and warn if different.
 |  |        // preferred new link interface property and warn if different.
 | 
											
												
													
														|  | -      std::vector<std::string> ifaceLibs;
 |  | 
 | 
											
												
													
														|  | 
 |  | +      std::vector<cmLinkItem> ifaceLibs;
 | 
											
												
													
														|  |        std::string newProp = "INTERFACE_LINK_LIBRARIES";
 |  |        std::string newProp = "INTERFACE_LINK_LIBRARIES";
 | 
											
												
													
														|  |        if(const char* newExplicitLibraries = this->GetProperty(newProp))
 |  |        if(const char* newExplicitLibraries = this->GetProperty(newProp))
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
										
											
												
													
														|  | @@ -6390,7 +6409,7 @@ const char* cmTarget::ComputeLinkInterfaceLibraries(const std::string& config,
 | 
											
												
													
														|  |          std::string oldLibraries;
 |  |          std::string oldLibraries;
 | 
											
												
													
														|  |          std::string newLibraries;
 |  |          std::string newLibraries;
 | 
											
												
													
														|  |          const char *sep = "";
 |  |          const char *sep = "";
 | 
											
												
													
														|  | -        for(std::vector<std::string>::const_iterator it
 |  | 
 | 
											
												
													
														|  | 
 |  | +        for(std::vector<cmLinkItem>::const_iterator it
 | 
											
												
													
														|  |                = impl->Libraries.begin(); it != impl->Libraries.end(); ++it)
 |  |                = impl->Libraries.begin(); it != impl->Libraries.end(); ++it)
 | 
											
												
													
														|  |            {
 |  |            {
 | 
											
												
													
														|  |            oldLibraries += sep;
 |  |            oldLibraries += sep;
 | 
											
										
											
												
													
														|  | @@ -6398,7 +6417,7 @@ const char* cmTarget::ComputeLinkInterfaceLibraries(const std::string& config,
 | 
											
												
													
														|  |            sep = ";";
 |  |            sep = ";";
 | 
											
												
													
														|  |            }
 |  |            }
 | 
											
												
													
														|  |          sep = "";
 |  |          sep = "";
 | 
											
												
													
														|  | -        for(std::vector<std::string>::const_iterator it
 |  | 
 | 
											
												
													
														|  | 
 |  | +        for(std::vector<cmLinkItem>::const_iterator it
 | 
											
												
													
														|  |                = ifaceLibs.begin(); it != ifaceLibs.end(); ++it)
 |  |                = ifaceLibs.begin(); it != ifaceLibs.end(); ++it)
 | 
											
												
													
														|  |            {
 |  |            {
 | 
											
												
													
														|  |            newLibraries += sep;
 |  |            newLibraries += sep;
 | 
											
										
											
												
													
														|  | @@ -6449,7 +6468,7 @@ void cmTargetInternals::ComputeLinkInterface(cmTarget const* thisTarget,
 | 
											
												
													
														|  |        // Shared libraries may have runtime implementation dependencies
 |  |        // Shared libraries may have runtime implementation dependencies
 | 
											
												
													
														|  |        // on other shared libraries that are not in the interface.
 |  |        // on other shared libraries that are not in the interface.
 | 
											
												
													
														|  |        std::set<std::string> emitted;
 |  |        std::set<std::string> emitted;
 | 
											
												
													
														|  | -      for(std::vector<std::string>::const_iterator
 |  | 
 | 
											
												
													
														|  | 
 |  | +      for(std::vector<cmLinkItem>::const_iterator
 | 
											
												
													
														|  |            li = iface.Libraries.begin(); li != iface.Libraries.end(); ++li)
 |  |            li = iface.Libraries.begin(); li != iface.Libraries.end(); ++li)
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
												
													
														|  |          emitted.insert(*li);
 |  |          emitted.insert(*li);
 | 
											
										
											
												
													
														|  | @@ -6458,15 +6477,15 @@ void cmTargetInternals::ComputeLinkInterface(cmTarget const* thisTarget,
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
												
													
														|  |          cmTarget::LinkImplementation const* impl =
 |  |          cmTarget::LinkImplementation const* impl =
 | 
											
												
													
														|  |              thisTarget->GetLinkImplementation(config);
 |  |              thisTarget->GetLinkImplementation(config);
 | 
											
												
													
														|  | -        for(std::vector<std::string>::const_iterator
 |  | 
 | 
											
												
													
														|  | 
 |  | +        for(std::vector<cmLinkItem>::const_iterator
 | 
											
												
													
														|  |                li = impl->Libraries.begin(); li != impl->Libraries.end(); ++li)
 |  |                li = impl->Libraries.begin(); li != impl->Libraries.end(); ++li)
 | 
											
												
													
														|  |            {
 |  |            {
 | 
											
												
													
														|  |            if(emitted.insert(*li).second)
 |  |            if(emitted.insert(*li).second)
 | 
											
												
													
														|  |              {
 |  |              {
 | 
											
												
													
														|  | -            if(cmTarget* tgt = thisTarget->Makefile->FindTargetToUse(*li))
 |  | 
 | 
											
												
													
														|  | 
 |  | +            if(li->Target)
 | 
											
												
													
														|  |                {
 |  |                {
 | 
											
												
													
														|  |                // This is a runtime dependency on another shared library.
 |  |                // This is a runtime dependency on another shared library.
 | 
											
												
													
														|  | -              if(tgt->GetType() == cmTarget::SHARED_LIBRARY)
 |  | 
 | 
											
												
													
														|  | 
 |  | +              if(li->Target->GetType() == cmTarget::SHARED_LIBRARY)
 | 
											
												
													
														|  |                  {
 |  |                  {
 | 
											
												
													
														|  |                  iface.SharedDeps.push_back(*li);
 |  |                  iface.SharedDeps.push_back(*li);
 | 
											
												
													
														|  |                  }
 |  |                  }
 | 
											
										
											
												
													
														|  | @@ -6617,10 +6636,10 @@ void cmTarget::ComputeLinkImplementation(const std::string& config,
 | 
											
												
													
														|  |        li != llibs.end(); ++li)
 |  |        li != llibs.end(); ++li)
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
												
													
														|  |      // Skip entries that resolve to the target itself or are empty.
 |  |      // Skip entries that resolve to the target itself or are empty.
 | 
											
												
													
														|  | -    std::string item = this->CheckCMP0004(*li);
 |  | 
 | 
											
												
													
														|  | -    if(item == this->GetName() || item.empty())
 |  | 
 | 
											
												
													
														|  | 
 |  | +    std::string name = this->CheckCMP0004(*li);
 | 
											
												
													
														|  | 
 |  | +    if(name == this->GetName() || name.empty())
 | 
											
												
													
														|  |        {
 |  |        {
 | 
											
												
													
														|  | -      if(item == this->GetName())
 |  | 
 | 
											
												
													
														|  | 
 |  | +      if(name == this->GetName())
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
												
													
														|  |          bool noMessage = false;
 |  |          bool noMessage = false;
 | 
											
												
													
														|  |          cmake::MessageType messageType = cmake::FATAL_ERROR;
 |  |          cmake::MessageType messageType = cmake::FATAL_ERROR;
 | 
											
										
											
												
													
														|  | @@ -6659,7 +6678,8 @@ void cmTarget::ComputeLinkImplementation(const std::string& config,
 | 
											
												
													
														|  |        }
 |  |        }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      // The entry is meant for this configuration.
 |  |      // The entry is meant for this configuration.
 | 
											
												
													
														|  | -    impl.Libraries.push_back(item);
 |  | 
 | 
											
												
													
														|  | 
 |  | +    impl.Libraries.push_back(
 | 
											
												
													
														|  | 
 |  | +      cmLinkItem(name, this->FindTargetToLink(name)));
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |    cmTarget::LinkLibraryType linkType = this->ComputeLinkType(config);
 |  |    cmTarget::LinkLibraryType linkType = this->ComputeLinkType(config);
 | 
											
										
											
												
													
														|  | @@ -6669,13 +6689,14 @@ void cmTarget::ComputeLinkImplementation(const std::string& config,
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
												
													
														|  |      if(li->second != cmTarget::GENERAL && li->second != linkType)
 |  |      if(li->second != cmTarget::GENERAL && li->second != linkType)
 | 
											
												
													
														|  |        {
 |  |        {
 | 
											
												
													
														|  | -      std::string item = this->CheckCMP0004(li->first);
 |  | 
 | 
											
												
													
														|  | -      if(item == this->GetName() || item.empty())
 |  | 
 | 
											
												
													
														|  | 
 |  | +      std::string name = this->CheckCMP0004(li->first);
 | 
											
												
													
														|  | 
 |  | +      if(name == this->GetName() || name.empty())
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
												
													
														|  |          continue;
 |  |          continue;
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |        // Support OLD behavior for CMP0003.
 |  |        // Support OLD behavior for CMP0003.
 | 
											
												
													
														|  | -      impl.WrongConfigLibraries.push_back(item);
 |  | 
 | 
											
												
													
														|  | 
 |  | +      impl.WrongConfigLibraries.push_back(
 | 
											
												
													
														|  | 
 |  | +        cmLinkItem(name, this->FindTargetToLink(name)));
 | 
											
												
													
														|  |        }
 |  |        }
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  }
 |  |  }
 |