cmTarget: De-duplicate library list expansion
Create an ExpandLinkItems method to handle evaluation of generator expressions in a library list and expansion of the ;-list into a vector. Replace some duplicate copies of the implementation with calls to the new helper.
This commit is contained in:
parent
6354df92b1
commit
8d15a1bbfb
|
@ -3691,6 +3691,23 @@ void cmTarget::ComputeLinkClosure(const std::string& config, LinkClosure& lc,
|
|||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void cmTarget::ExpandLinkItems(std::string const& prop,
|
||||
std::string const& value,
|
||||
std::string const& config,
|
||||
cmTarget const* headTarget,
|
||||
std::vector<std::string>& libs) const
|
||||
{
|
||||
cmGeneratorExpression ge;
|
||||
cmGeneratorExpressionDAGChecker dagChecker(this->GetName(), prop, 0, 0);
|
||||
cmSystemTools::ExpandListArgument(ge.Parse(value)->Evaluate(
|
||||
this->Makefile,
|
||||
config,
|
||||
false,
|
||||
headTarget,
|
||||
this, &dagChecker), libs);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
const char* cmTarget::GetSuffixVariableInternal(bool implib) const
|
||||
{
|
||||
|
@ -5870,19 +5887,8 @@ void cmTarget::ComputeImportInfo(std::string const& desired_config,
|
|||
}
|
||||
if(propertyLibs)
|
||||
{
|
||||
cmGeneratorExpression ge;
|
||||
|
||||
cmGeneratorExpressionDAGChecker dagChecker(
|
||||
this->GetName(),
|
||||
linkProp, 0, 0);
|
||||
cmSystemTools::ExpandListArgument(ge.Parse(propertyLibs)
|
||||
->Evaluate(this->Makefile,
|
||||
desired_config,
|
||||
false,
|
||||
headTarget,
|
||||
this,
|
||||
&dagChecker),
|
||||
info.LinkInterface.Libraries);
|
||||
this->ExpandLinkItems(linkProp, propertyLibs, desired_config,
|
||||
headTarget, info.LinkInterface.Libraries);
|
||||
}
|
||||
}
|
||||
if(this->GetType() == INTERFACE_LIBRARY)
|
||||
|
@ -6302,15 +6308,8 @@ const char* cmTarget::ComputeLinkInterfaceLibraries(const std::string& config,
|
|||
if(explicitLibraries)
|
||||
{
|
||||
// The interface libraries have been explicitly set.
|
||||
cmGeneratorExpression ge;
|
||||
cmGeneratorExpressionDAGChecker dagChecker(this->GetName(),
|
||||
linkIfaceProp, 0, 0);
|
||||
cmSystemTools::ExpandListArgument(ge.Parse(explicitLibraries)->Evaluate(
|
||||
this->Makefile,
|
||||
config,
|
||||
false,
|
||||
headTarget,
|
||||
this, &dagChecker), iface.Libraries);
|
||||
this->ExpandLinkItems(linkIfaceProp, explicitLibraries, config,
|
||||
headTarget, iface.Libraries);
|
||||
}
|
||||
else if (this->PolicyStatusCMP0022 == cmPolicies::WARN
|
||||
|| this->PolicyStatusCMP0022 == cmPolicies::OLD)
|
||||
|
@ -6328,19 +6327,13 @@ const char* cmTarget::ComputeLinkInterfaceLibraries(const std::string& config,
|
|||
{
|
||||
// Compare the link implementation fallback link interface to the
|
||||
// preferred new link interface property and warn if different.
|
||||
cmGeneratorExpression ge;
|
||||
cmGeneratorExpressionDAGChecker dagChecker(this->GetName(),
|
||||
"INTERFACE_LINK_LIBRARIES", 0, 0);
|
||||
std::vector<std::string> ifaceLibs;
|
||||
const char* newExplicitLibraries =
|
||||
this->GetProperty("INTERFACE_LINK_LIBRARIES");
|
||||
cmSystemTools::ExpandListArgument(
|
||||
ge.Parse(newExplicitLibraries)->Evaluate(this->Makefile,
|
||||
config,
|
||||
false,
|
||||
headTarget,
|
||||
this, &dagChecker),
|
||||
ifaceLibs);
|
||||
std::string newProp = "INTERFACE_LINK_LIBRARIES";
|
||||
if(const char* newExplicitLibraries = this->GetProperty(newProp))
|
||||
{
|
||||
this->ExpandLinkItems(newProp, newExplicitLibraries, config,
|
||||
headTarget, ifaceLibs);
|
||||
}
|
||||
if (ifaceLibs != impl->Libraries)
|
||||
{
|
||||
std::string oldLibraries;
|
||||
|
|
|
@ -764,6 +764,10 @@ private:
|
|||
void ComputeLinkClosure(const std::string& config, LinkClosure& lc,
|
||||
cmTarget const* head) const;
|
||||
|
||||
void ExpandLinkItems(std::string const& prop, std::string const& value,
|
||||
std::string const& config, cmTarget const* headTarget,
|
||||
std::vector<std::string>& libs) const;
|
||||
|
||||
std::string ProcessSourceItemCMP0049(const std::string& s);
|
||||
|
||||
void ClearLinkMaps();
|
||||
|
|
Loading…
Reference in New Issue