cmGeneratorTarget: Move ComputeLinkInterface from cmTarget.
This commit is contained in:
parent
6220241fd0
commit
84b847e42f
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue