summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2014-06-16 15:31:11 (GMT)
committerBrad King <brad.king@kitware.com>2014-06-23 12:50:08 (GMT)
commit8d15a1bbfbefff919d8a7aa0d04f54d08d1f1a11 (patch)
tree9606f93ffadda147ab3523dad9512d09ee5b534e
parent6354df92b12746dcb0f6fa263af2adf649cf1f3f (diff)
downloadCMake-8d15a1bbfbefff919d8a7aa0d04f54d08d1f1a11.zip
CMake-8d15a1bbfbefff919d8a7aa0d04f54d08d1f1a11.tar.gz
CMake-8d15a1bbfbefff919d8a7aa0d04f54d08d1f1a11.tar.bz2
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.
-rw-r--r--Source/cmTarget.cxx61
-rw-r--r--Source/cmTarget.h4
2 files changed, 31 insertions, 34 deletions
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 3b7bfaf..9d53fc2 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -3692,6 +3692,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
{
switch(this->GetType())
@@ -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;
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index 3b1b40a..ba3077e 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -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();