diff options
author | Brad King <brad.king@kitware.com> | 2014-06-16 18:27:42 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2014-06-25 14:20:52 (GMT) |
commit | 0192be51819f8765131fc059b3ee210011eb7b80 (patch) | |
tree | 52ea8a7ba437e97a078f98042ee18a103ba59cfb | |
parent | 6ead631bf9ec6da8eeca5fb39e5eba80e5022f15 (diff) | |
download | CMake-0192be51819f8765131fc059b3ee210011eb7b80.zip CMake-0192be51819f8765131fc059b3ee210011eb7b80.tar.gz CMake-0192be51819f8765131fc059b3ee210011eb7b80.tar.bz2 |
cmTarget: De-duplicate link interface evaluation for $<LINK_ONLY>
Teach GetTransitivePropertyTargets to use the GetLinkInterfaceLibraries
method with usage_requirements_only==true instead of evaluating the
INTERFACE_LINK_LIBRARIES property directly. This avoids duplicate
evaluations and makes use of the caching done by
GetLinkInterfaceLibraries.
-rw-r--r-- | Source/cmTarget.cxx | 44 |
1 files changed, 12 insertions, 32 deletions
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 325357d..cb52e15 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -6219,15 +6219,18 @@ void cmTarget::GetTransitivePropertyTargets(const std::string& config, cmTarget const* headTarget, std::vector<cmTarget const*> &tgts) const { - cmTarget::LinkInterface const* iface - = this->GetLinkInterfaceLibraries(config, headTarget, false); - if (!iface) - { - return; - } - if(this->GetType() != STATIC_LIBRARY - || this->GetPolicyStatusCMP0022() == cmPolicies::WARN - || this->GetPolicyStatusCMP0022() == cmPolicies::OLD) + // The $<LINK_ONLY> expression may be in a link interface to specify private + // link dependencies that are otherwise excluded from usage requirements. + // Currently $<LINK_ONLY> is internal to CMake and only ever added by + // target_link_libraries for PRIVATE dependencies of STATIC libraries in + // INTERFACE_LINK_LIBRARIES which is used under CMP0022 NEW behavior. + bool usage_requirements_only = + this->GetType() == STATIC_LIBRARY && + this->GetPolicyStatusCMP0022() != cmPolicies::WARN && + this->GetPolicyStatusCMP0022() != cmPolicies::OLD; + if(cmTarget::LinkInterface const* iface = + this->GetLinkInterfaceLibraries(config, headTarget, + usage_requirements_only)) { for(std::vector<cmLinkItem>::const_iterator it = iface->Libraries.begin(); it != iface->Libraries.end(); ++it) @@ -6237,29 +6240,6 @@ void cmTarget::GetTransitivePropertyTargets(const std::string& config, tgts.push_back(it->Target); } } - return; - } - - const char* linkIfaceProp = "INTERFACE_LINK_LIBRARIES"; - const char* interfaceLibs = this->GetProperty(linkIfaceProp); - - if (!interfaceLibs) - { - return; - } - - // The interface libraries have been explicitly set. - std::vector<cmLinkItem> libs; - this->ExpandLinkItems(linkIfaceProp, interfaceLibs, config, - headTarget, true, libs); - - for(std::vector<cmLinkItem>::const_iterator it = libs.begin(); - it != libs.end(); ++it) - { - if (it->Target) - { - tgts.push_back(it->Target); - } } } |