cmGeneratorTarget: Move GetLinkInterfaceLibraries from cmTarget.
This commit is contained in:
parent
84b847e42f
commit
0db9d92787
|
@ -1109,7 +1109,7 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
||||||
if(isInterfaceProperty)
|
if(isInterfaceProperty)
|
||||||
{
|
{
|
||||||
if(cmLinkInterfaceLibraries const* iface =
|
if(cmLinkInterfaceLibraries const* iface =
|
||||||
target->GetLinkInterfaceLibraries(context->Config, headTarget, true))
|
gtgt->GetLinkInterfaceLibraries(context->Config, headTarget, true))
|
||||||
{
|
{
|
||||||
linkedTargetsContent =
|
linkedTargetsContent =
|
||||||
getLinkedTargetsContent(iface->Libraries, target,
|
getLinkedTargetsContent(iface->Libraries, target,
|
||||||
|
|
|
@ -1507,20 +1507,22 @@ void cmGeneratorTarget::GetAutoUicOptions(std::vector<std::string> &result,
|
||||||
void processILibs(const std::string& config,
|
void processILibs(const std::string& config,
|
||||||
cmTarget const* headTarget,
|
cmTarget const* headTarget,
|
||||||
cmLinkItem const& item,
|
cmLinkItem const& item,
|
||||||
|
cmGlobalGenerator* gg,
|
||||||
std::vector<cmTarget const*>& tgts,
|
std::vector<cmTarget const*>& tgts,
|
||||||
std::set<cmTarget const*>& emitted)
|
std::set<cmTarget const*>& emitted)
|
||||||
{
|
{
|
||||||
if (item.Target && emitted.insert(item.Target).second)
|
if (item.Target && emitted.insert(item.Target).second)
|
||||||
{
|
{
|
||||||
tgts.push_back(item.Target);
|
tgts.push_back(item.Target);
|
||||||
|
cmGeneratorTarget* gt = gg->GetGeneratorTarget(item.Target);
|
||||||
if(cmLinkInterfaceLibraries const* iface =
|
if(cmLinkInterfaceLibraries const* iface =
|
||||||
item.Target->GetLinkInterfaceLibraries(config, headTarget, true))
|
gt->GetLinkInterfaceLibraries(config, headTarget, true))
|
||||||
{
|
{
|
||||||
for(std::vector<cmLinkItem>::const_iterator
|
for(std::vector<cmLinkItem>::const_iterator
|
||||||
it = iface->Libraries.begin();
|
it = iface->Libraries.begin();
|
||||||
it != iface->Libraries.end(); ++it)
|
it != iface->Libraries.end(); ++it)
|
||||||
{
|
{
|
||||||
processILibs(config, headTarget, *it, tgts, emitted);
|
processILibs(config, headTarget, *it, gg, tgts, emitted);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1545,7 +1547,9 @@ cmGeneratorTarget::GetLinkImplementationClosure(
|
||||||
it = impl->Libraries.begin();
|
it = impl->Libraries.begin();
|
||||||
it != impl->Libraries.end(); ++it)
|
it != impl->Libraries.end(); ++it)
|
||||||
{
|
{
|
||||||
processILibs(config, this->Target, *it, tgts , emitted);
|
processILibs(config, this->Target, *it,
|
||||||
|
this->LocalGenerator->GetGlobalGenerator(),
|
||||||
|
tgts , emitted);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return tgts;
|
return tgts;
|
||||||
|
@ -3503,3 +3507,49 @@ void cmGeneratorTarget::ComputeLinkInterface(const std::string& config,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
const cmLinkInterfaceLibraries *
|
||||||
|
cmGeneratorTarget::GetLinkInterfaceLibraries(const std::string& config,
|
||||||
|
cmTarget const* head,
|
||||||
|
bool usage_requirements_only) const
|
||||||
|
{
|
||||||
|
// Imported targets have their own link interface.
|
||||||
|
if(this->IsImported())
|
||||||
|
{
|
||||||
|
return this->Target->GetImportLinkInterface(config, head,
|
||||||
|
usage_requirements_only);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Link interfaces are not supported for executables that do not
|
||||||
|
// export symbols.
|
||||||
|
if(this->GetType() == cmTarget::EXECUTABLE &&
|
||||||
|
!this->Target->IsExecutableWithExports())
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Lookup any existing link interface for this configuration.
|
||||||
|
std::string CONFIG = cmSystemTools::UpperCase(config);
|
||||||
|
cmHeadToLinkInterfaceMap& hm =
|
||||||
|
(usage_requirements_only ?
|
||||||
|
this->Target->GetHeadToLinkInterfaceUsageRequirementsMap(config) :
|
||||||
|
this->Target->GetHeadToLinkInterfaceMap(config));
|
||||||
|
|
||||||
|
// If the link interface does not depend on the head target
|
||||||
|
// then return the one we computed first.
|
||||||
|
if(!hm.empty() && !hm.begin()->second.HadHeadSensitiveCondition)
|
||||||
|
{
|
||||||
|
return &hm.begin()->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmOptionalLinkInterface& iface = hm[head];
|
||||||
|
if(!iface.LibrariesDone)
|
||||||
|
{
|
||||||
|
iface.LibrariesDone = true;
|
||||||
|
this->Target->ComputeLinkInterfaceLibraries(
|
||||||
|
config, iface, head, usage_requirements_only);
|
||||||
|
}
|
||||||
|
|
||||||
|
return iface.Exists? &iface : 0;
|
||||||
|
}
|
||||||
|
|
|
@ -112,6 +112,11 @@ public:
|
||||||
cmOptionalLinkInterface& iface,
|
cmOptionalLinkInterface& iface,
|
||||||
cmTarget const* head) const;
|
cmTarget const* head) const;
|
||||||
|
|
||||||
|
cmLinkInterfaceLibraries const*
|
||||||
|
GetLinkInterfaceLibraries(const std::string& config,
|
||||||
|
cmTarget const* headTarget,
|
||||||
|
bool usage_requirements_only) const;
|
||||||
|
|
||||||
/** Get the full path to the target according to the settings in its
|
/** Get the full path to the target according to the settings in its
|
||||||
makefile and the configuration type. */
|
makefile and the configuration type. */
|
||||||
std::string GetFullPath(const std::string& config="", bool implib = false,
|
std::string GetFullPath(const std::string& config="", bool implib = false,
|
||||||
|
|
|
@ -4107,50 +4107,6 @@ void cmTarget::ComputeImportInfo(std::string const& desired_config,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
|
||||||
const cmLinkInterfaceLibraries *
|
|
||||||
cmTarget::GetLinkInterfaceLibraries(const std::string& config,
|
|
||||||
cmTarget const* head,
|
|
||||||
bool usage_requirements_only) const
|
|
||||||
{
|
|
||||||
// Imported targets have their own link interface.
|
|
||||||
if(this->IsImported())
|
|
||||||
{
|
|
||||||
return this->GetImportLinkInterface(config, head, usage_requirements_only);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Link interfaces are not supported for executables that do not
|
|
||||||
// export symbols.
|
|
||||||
if(this->GetType() == cmTarget::EXECUTABLE &&
|
|
||||||
!this->IsExecutableWithExports())
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Lookup any existing link interface for this configuration.
|
|
||||||
cmHeadToLinkInterfaceMap& hm =
|
|
||||||
(usage_requirements_only ?
|
|
||||||
this->GetHeadToLinkInterfaceUsageRequirementsMap(config) :
|
|
||||||
this->GetHeadToLinkInterfaceMap(config));
|
|
||||||
|
|
||||||
// If the link interface does not depend on the head target
|
|
||||||
// then return the one we computed first.
|
|
||||||
if(!hm.empty() && !hm.begin()->second.HadHeadSensitiveCondition)
|
|
||||||
{
|
|
||||||
return &hm.begin()->second;
|
|
||||||
}
|
|
||||||
|
|
||||||
cmOptionalLinkInterface& iface = hm[head];
|
|
||||||
if(!iface.LibrariesDone)
|
|
||||||
{
|
|
||||||
iface.LibrariesDone = true;
|
|
||||||
this->ComputeLinkInterfaceLibraries(
|
|
||||||
config, iface, head, usage_requirements_only);
|
|
||||||
}
|
|
||||||
|
|
||||||
return iface.Exists? &iface : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
cmHeadToLinkInterfaceMap&
|
cmHeadToLinkInterfaceMap&
|
||||||
cmTarget::GetHeadToLinkInterfaceMap(const std::string &config) const
|
cmTarget::GetHeadToLinkInterfaceMap(const std::string &config) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -238,11 +238,6 @@ public:
|
||||||
cmTarget const* head,
|
cmTarget const* head,
|
||||||
bool usage_requirements_only) const;
|
bool usage_requirements_only) const;
|
||||||
|
|
||||||
cmLinkInterfaceLibraries const*
|
|
||||||
GetLinkInterfaceLibraries(const std::string& config,
|
|
||||||
cmTarget const* headTarget,
|
|
||||||
bool usage_requirements_only) const;
|
|
||||||
|
|
||||||
cmHeadToLinkInterfaceMap&
|
cmHeadToLinkInterfaceMap&
|
||||||
GetHeadToLinkInterfaceMap(std::string const& config) const;
|
GetHeadToLinkInterfaceMap(std::string const& config) const;
|
||||||
cmHeadToLinkInterfaceMap& GetHeadToLinkInterfaceUsageRequirementsMap(
|
cmHeadToLinkInterfaceMap& GetHeadToLinkInterfaceUsageRequirementsMap(
|
||||||
|
|
Loading…
Reference in New Issue