summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2015-08-26 17:38:14 (GMT)
committerStephen Kelly <steveire@gmail.com>2015-08-26 17:38:14 (GMT)
commit84b847e42fde288bc102198aedeb68e19b41ef1e (patch)
tree16d9e6e81add439e4ee1065db57b9c6b48df62d2
parent6220241fd0bb7902c932742a7aa3d6a96fd0e919 (diff)
downloadCMake-84b847e42fde288bc102198aedeb68e19b41ef1e.zip
CMake-84b847e42fde288bc102198aedeb68e19b41ef1e.tar.gz
CMake-84b847e42fde288bc102198aedeb68e19b41ef1e.tar.bz2
cmGeneratorTarget: Move ComputeLinkInterface from cmTarget.
-rw-r--r--Source/cmGeneratorTarget.cxx100
-rw-r--r--Source/cmGeneratorTarget.h3
-rw-r--r--Source/cmTarget.cxx97
-rw-r--r--Source/cmTarget.h3
4 files changed, 102 insertions, 101 deletions
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index 5d84309..058a120 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -3399,9 +3399,107 @@ cmGeneratorTarget::GetLinkInterface(const std::string& config,
iface.AllDone = true;
if(iface.Exists)
{
- this->Target->ComputeLinkInterface(config, iface, head);
+ this->ComputeLinkInterface(config, iface, head);
}
}
return iface.Exists? &iface : 0;
}
+
+//----------------------------------------------------------------------------
+void cmGeneratorTarget::ComputeLinkInterface(const std::string& config,
+ cmOptionalLinkInterface &iface,
+ cmTarget const* headTarget) const
+{
+ if(iface.ExplicitLibraries)
+ {
+ if(this->GetType() == cmTarget::SHARED_LIBRARY
+ || this->GetType() == cmTarget::STATIC_LIBRARY
+ || this->GetType() == cmTarget::INTERFACE_LIBRARY)
+ {
+ // Shared libraries may have runtime implementation dependencies
+ // on other shared libraries that are not in the interface.
+ UNORDERED_SET<std::string> emitted;
+ for(std::vector<cmLinkItem>::const_iterator
+ li = iface.Libraries.begin(); li != iface.Libraries.end(); ++li)
+ {
+ emitted.insert(*li);
+ }
+ if (this->GetType() != cmTarget::INTERFACE_LIBRARY)
+ {
+ cmTarget::LinkImplementation const* impl =
+ this->Target->GetLinkImplementation(config);
+ for(std::vector<cmLinkImplItem>::const_iterator
+ li = impl->Libraries.begin(); li != impl->Libraries.end(); ++li)
+ {
+ if(emitted.insert(*li).second)
+ {
+ if(li->Target)
+ {
+ // This is a runtime dependency on another shared library.
+ if(li->Target->GetType() == cmTarget::SHARED_LIBRARY)
+ {
+ iface.SharedDeps.push_back(*li);
+ }
+ }
+ else
+ {
+ // TODO: Recognize shared library file names. Perhaps this
+ // should be moved to cmComputeLinkInformation, but that creates
+ // a chicken-and-egg problem since this list is needed for its
+ // construction.
+ }
+ }
+ }
+ }
+ }
+ }
+ else if (this->Target->GetPolicyStatusCMP0022() == cmPolicies::WARN
+ || this->Target->GetPolicyStatusCMP0022() == cmPolicies::OLD)
+ {
+ // The link implementation is the default link interface.
+ cmLinkImplementationLibraries const*
+ impl = this->Target->GetLinkImplementationLibrariesInternal(config,
+ headTarget);
+ iface.ImplementationIsInterface = true;
+ iface.WrongConfigLibraries = impl->WrongConfigLibraries;
+ }
+
+ if(this->Target->LinkLanguagePropagatesToDependents())
+ {
+ // Targets using this archive need its language runtime libraries.
+ if(cmTarget::LinkImplementation const* impl =
+ this->Target->GetLinkImplementation(config))
+ {
+ iface.Languages = impl->Languages;
+ }
+ }
+
+ if(this->GetType() == cmTarget::STATIC_LIBRARY)
+ {
+ // Construct the property name suffix for this configuration.
+ std::string suffix = "_";
+ if(!config.empty())
+ {
+ suffix += cmSystemTools::UpperCase(config);
+ }
+ else
+ {
+ suffix += "NOCONFIG";
+ }
+
+ // How many repetitions are needed if this library has cyclic
+ // dependencies?
+ std::string propName = "LINK_INTERFACE_MULTIPLICITY";
+ propName += suffix;
+ if(const char* config_reps = this->GetProperty(propName))
+ {
+ sscanf(config_reps, "%u", &iface.Multiplicity);
+ }
+ else if(const char* reps =
+ this->GetProperty("LINK_INTERFACE_MULTIPLICITY"))
+ {
+ sscanf(reps, "%u", &iface.Multiplicity);
+ }
+ }
+}
diff --git a/Source/cmGeneratorTarget.h b/Source/cmGeneratorTarget.h
index 2dbb502..282ab89 100644
--- a/Source/cmGeneratorTarget.h
+++ b/Source/cmGeneratorTarget.h
@@ -108,6 +108,9 @@ public:
cmLinkInterface const* GetLinkInterface(const std::string& config,
cmTarget const* headTarget) const;
+ void ComputeLinkInterface(const std::string& config,
+ cmOptionalLinkInterface& iface,
+ cmTarget const* head) const;
/** Get the full path to the target according to the settings in its
makefile and the configuration type. */
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index ee298ac..c8a9148 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -4358,103 +4358,6 @@ cmTarget::ComputeLinkInterfaceLibraries(
}
}
-//----------------------------------------------------------------------------
-void cmTarget::ComputeLinkInterface(const std::string& config,
- cmOptionalLinkInterface &iface,
- cmTarget const* headTarget) const
-{
- if(iface.ExplicitLibraries)
- {
- if(this->GetType() == cmTarget::SHARED_LIBRARY
- || this->GetType() == cmTarget::STATIC_LIBRARY
- || this->GetType() == cmTarget::INTERFACE_LIBRARY)
- {
- // Shared libraries may have runtime implementation dependencies
- // on other shared libraries that are not in the interface.
- UNORDERED_SET<std::string> emitted;
- for(std::vector<cmLinkItem>::const_iterator
- li = iface.Libraries.begin(); li != iface.Libraries.end(); ++li)
- {
- emitted.insert(*li);
- }
- if (this->GetType() != cmTarget::INTERFACE_LIBRARY)
- {
- cmTarget::LinkImplementation const* impl =
- this->GetLinkImplementation(config);
- for(std::vector<cmLinkImplItem>::const_iterator
- li = impl->Libraries.begin(); li != impl->Libraries.end(); ++li)
- {
- if(emitted.insert(*li).second)
- {
- if(li->Target)
- {
- // This is a runtime dependency on another shared library.
- if(li->Target->GetType() == cmTarget::SHARED_LIBRARY)
- {
- iface.SharedDeps.push_back(*li);
- }
- }
- else
- {
- // TODO: Recognize shared library file names. Perhaps this
- // should be moved to cmComputeLinkInformation, but that creates
- // a chicken-and-egg problem since this list is needed for its
- // construction.
- }
- }
- }
- }
- }
- }
- else if (this->GetPolicyStatusCMP0022() == cmPolicies::WARN
- || this->GetPolicyStatusCMP0022() == cmPolicies::OLD)
- {
- // The link implementation is the default link interface.
- cmLinkImplementationLibraries const*
- impl = this->GetLinkImplementationLibrariesInternal(config,
- headTarget);
- iface.ImplementationIsInterface = true;
- iface.WrongConfigLibraries = impl->WrongConfigLibraries;
- }
-
- if(this->LinkLanguagePropagatesToDependents())
- {
- // Targets using this archive need its language runtime libraries.
- if(cmTarget::LinkImplementation const* impl =
- this->GetLinkImplementation(config))
- {
- iface.Languages = impl->Languages;
- }
- }
-
- if(this->GetType() == cmTarget::STATIC_LIBRARY)
- {
- // Construct the property name suffix for this configuration.
- std::string suffix = "_";
- if(!config.empty())
- {
- suffix += cmSystemTools::UpperCase(config);
- }
- else
- {
- suffix += "NOCONFIG";
- }
-
- // How many repetitions are needed if this library has cyclic
- // dependencies?
- std::string propName = "LINK_INTERFACE_MULTIPLICITY";
- propName += suffix;
- if(const char* config_reps = this->GetProperty(propName))
- {
- sscanf(config_reps, "%u", &iface.Multiplicity);
- }
- else if(const char* reps =
- this->GetProperty("LINK_INTERFACE_MULTIPLICITY"))
- {
- sscanf(reps, "%u", &iface.Multiplicity);
- }
- }
-}
//----------------------------------------------------------------------------
void cmTargetInternals::AddInterfaceEntries(
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index a8c6e8f..e71820e 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -233,9 +233,6 @@ public:
void GetObjectLibrariesCMP0026(std::vector<cmTarget*>& objlibs) const;
- void ComputeLinkInterface(const std::string& config,
- cmOptionalLinkInterface& iface,
- cmTarget const* head) const;
void ComputeLinkInterfaceLibraries(const std::string& config,
cmOptionalLinkInterface &iface,
cmTarget const* head,