cmGeneratorTarget: Move GetImportLinkInterface from cmTarget.
This commit is contained in:
parent
6d3d099b4a
commit
2cb3e57402
|
@ -3370,7 +3370,7 @@ cmGeneratorTarget::GetLinkInterface(const std::string& config,
|
|||
// Imported targets have their own link interface.
|
||||
if(this->IsImported())
|
||||
{
|
||||
return this->Target->GetImportLinkInterface(config, head, false);
|
||||
return this->GetImportLinkInterface(config, head, false);
|
||||
}
|
||||
|
||||
// Link interfaces are not supported for executables that do not
|
||||
|
@ -3383,7 +3383,7 @@ cmGeneratorTarget::GetLinkInterface(const std::string& config,
|
|||
|
||||
// Lookup any existing link interface for this configuration.
|
||||
cmHeadToLinkInterfaceMap& hm =
|
||||
this->Target->GetHeadToLinkInterfaceMap(config);
|
||||
this->GetHeadToLinkInterfaceMap(config);
|
||||
|
||||
// If the link interface does not depend on the head target
|
||||
// then return the one we computed first.
|
||||
|
@ -3518,7 +3518,7 @@ cmGeneratorTarget::GetLinkInterfaceLibraries(const std::string& config,
|
|||
// Imported targets have their own link interface.
|
||||
if(this->IsImported())
|
||||
{
|
||||
return this->Target->GetImportLinkInterface(config, head,
|
||||
return this->GetImportLinkInterface(config, head,
|
||||
usage_requirements_only);
|
||||
}
|
||||
|
||||
|
@ -3534,8 +3534,8 @@ cmGeneratorTarget::GetLinkInterfaceLibraries(const std::string& config,
|
|||
std::string CONFIG = cmSystemTools::UpperCase(config);
|
||||
cmHeadToLinkInterfaceMap& hm =
|
||||
(usage_requirements_only ?
|
||||
this->Target->GetHeadToLinkInterfaceUsageRequirementsMap(config) :
|
||||
this->Target->GetHeadToLinkInterfaceMap(config));
|
||||
this->GetHeadToLinkInterfaceUsageRequirementsMap(config) :
|
||||
this->GetHeadToLinkInterfaceMap(config));
|
||||
|
||||
// If the link interface does not depend on the head target
|
||||
// then return the one we computed first.
|
||||
|
@ -3705,3 +3705,62 @@ cmGeneratorTarget::ComputeLinkInterfaceLibraries(
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
const cmLinkInterface *
|
||||
cmGeneratorTarget::GetImportLinkInterface(const std::string& config,
|
||||
cmTarget const* headTarget,
|
||||
bool usage_requirements_only) const
|
||||
{
|
||||
cmTarget::ImportInfo const* info = this->Target->GetImportInfo(config);
|
||||
if(!info)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::string CONFIG = cmSystemTools::UpperCase(config);
|
||||
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[headTarget];
|
||||
if(!iface.AllDone)
|
||||
{
|
||||
iface.AllDone = true;
|
||||
iface.Multiplicity = info->Multiplicity;
|
||||
cmSystemTools::ExpandListArgument(info->Languages, iface.Languages);
|
||||
this->Target->ExpandLinkItems(info->LibrariesProp, info->Libraries,
|
||||
config,
|
||||
headTarget, usage_requirements_only,
|
||||
iface.Libraries,
|
||||
iface.HadHeadSensitiveCondition);
|
||||
std::vector<std::string> deps;
|
||||
cmSystemTools::ExpandListArgument(info->SharedDeps, deps);
|
||||
this->Target->LookupLinkItems(deps, iface.SharedDeps);
|
||||
}
|
||||
|
||||
return &iface;
|
||||
}
|
||||
|
||||
cmHeadToLinkInterfaceMap&
|
||||
cmGeneratorTarget::GetHeadToLinkInterfaceMap(const std::string &config) const
|
||||
{
|
||||
std::string CONFIG = cmSystemTools::UpperCase(config);
|
||||
return this->LinkInterfaceMap[CONFIG];
|
||||
}
|
||||
|
||||
cmHeadToLinkInterfaceMap&
|
||||
cmGeneratorTarget::GetHeadToLinkInterfaceUsageRequirementsMap(
|
||||
const std::string &config) const
|
||||
{
|
||||
std::string CONFIG = cmSystemTools::UpperCase(config);
|
||||
return this->LinkInterfaceUsageRequirementsOnlyMap[CONFIG];
|
||||
}
|
||||
|
|
|
@ -390,6 +390,20 @@ private:
|
|||
};
|
||||
mutable std::map<std::string, LinkImplClosure> LinkImplClosureMap;
|
||||
|
||||
typedef std::map<std::string, cmHeadToLinkInterfaceMap>
|
||||
LinkInterfaceMapType;
|
||||
mutable LinkInterfaceMapType LinkInterfaceMap;
|
||||
mutable LinkInterfaceMapType LinkInterfaceUsageRequirementsOnlyMap;
|
||||
|
||||
cmHeadToLinkInterfaceMap&
|
||||
GetHeadToLinkInterfaceMap(std::string const& config) const;
|
||||
cmHeadToLinkInterfaceMap& GetHeadToLinkInterfaceUsageRequirementsMap(
|
||||
std::string const& config) const;
|
||||
|
||||
cmLinkInterface const*
|
||||
GetImportLinkInterface(const std::string& config, cmTarget const* head,
|
||||
bool usage_requirements_only) const;
|
||||
|
||||
typedef std::pair<std::string, bool> OutputNameKey;
|
||||
typedef std::map<OutputNameKey, std::string> OutputNameMapType;
|
||||
mutable OutputNameMapType OutputNameMap;
|
||||
|
|
|
@ -89,11 +89,6 @@ public:
|
|||
// The backtrace when the target was created.
|
||||
cmListFileBacktrace Backtrace;
|
||||
|
||||
typedef std::map<std::string, cmHeadToLinkInterfaceMap>
|
||||
LinkInterfaceMapType;
|
||||
LinkInterfaceMapType LinkInterfaceMap;
|
||||
LinkInterfaceMapType LinkInterfaceUsageRequirementsOnlyMap;
|
||||
|
||||
typedef std::map<std::string, cmTarget::OutputInfo> OutputInfoMapType;
|
||||
OutputInfoMapType OutputInfoMap;
|
||||
|
||||
|
@ -510,8 +505,6 @@ void cmTarget::ClearLinkMaps()
|
|||
{
|
||||
this->LinkImplementationLanguageIsContextDependent = true;
|
||||
this->Internal->LinkImplMap.clear();
|
||||
this->Internal->LinkInterfaceMap.clear();
|
||||
this->Internal->LinkInterfaceUsageRequirementsOnlyMap.clear();
|
||||
this->Internal->SourceFilesMap.clear();
|
||||
}
|
||||
|
||||
|
@ -4104,64 +4097,6 @@ void cmTarget::ComputeImportInfo(std::string const& desired_config,
|
|||
}
|
||||
}
|
||||
|
||||
cmHeadToLinkInterfaceMap&
|
||||
cmTarget::GetHeadToLinkInterfaceMap(const std::string &config) const
|
||||
{
|
||||
std::string CONFIG = cmSystemTools::UpperCase(config);
|
||||
return this->Internal->LinkInterfaceMap[CONFIG];
|
||||
}
|
||||
|
||||
cmHeadToLinkInterfaceMap&
|
||||
cmTarget::GetHeadToLinkInterfaceUsageRequirementsMap(
|
||||
const std::string &config) const
|
||||
{
|
||||
std::string CONFIG = cmSystemTools::UpperCase(config);
|
||||
return this->Internal->LinkInterfaceUsageRequirementsOnlyMap[CONFIG];
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
const cmLinkInterface *
|
||||
cmTarget::GetImportLinkInterface(const std::string& config,
|
||||
cmTarget const* headTarget,
|
||||
bool usage_requirements_only) const
|
||||
{
|
||||
cmTarget::ImportInfo const* info = this->GetImportInfo(config);
|
||||
if(!info)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::string CONFIG = cmSystemTools::UpperCase(config);
|
||||
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[headTarget];
|
||||
if(!iface.AllDone)
|
||||
{
|
||||
iface.AllDone = true;
|
||||
iface.Multiplicity = info->Multiplicity;
|
||||
cmSystemTools::ExpandListArgument(info->Languages, iface.Languages);
|
||||
this->ExpandLinkItems(info->LibrariesProp, info->Libraries, config,
|
||||
headTarget, usage_requirements_only,
|
||||
iface.Libraries,
|
||||
iface.HadHeadSensitiveCondition);
|
||||
std::vector<std::string> deps;
|
||||
cmSystemTools::ExpandListArgument(info->SharedDeps, deps);
|
||||
this->LookupLinkItems(deps, iface.SharedDeps);
|
||||
}
|
||||
|
||||
return &iface;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void cmTargetInternals::AddInterfaceEntries(
|
||||
cmTarget const* thisTarget, std::string const& config,
|
||||
|
|
|
@ -233,11 +233,6 @@ public:
|
|||
|
||||
void GetObjectLibrariesCMP0026(std::vector<cmTarget*>& objlibs) const;
|
||||
|
||||
cmHeadToLinkInterfaceMap&
|
||||
GetHeadToLinkInterfaceMap(std::string const& config) const;
|
||||
cmHeadToLinkInterfaceMap& GetHeadToLinkInterfaceUsageRequirementsMap(
|
||||
std::string const& config) const;
|
||||
|
||||
struct LinkImplementation: public cmLinkImplementationLibraries
|
||||
{
|
||||
// Languages whose runtime libraries must be linked.
|
||||
|
@ -559,11 +554,6 @@ private:
|
|||
void ComputeImportInfo(std::string const& desired_config,
|
||||
ImportInfo& info) const;
|
||||
|
||||
|
||||
cmLinkInterface const*
|
||||
GetImportLinkInterface(const std::string& config, cmTarget const* head,
|
||||
bool usage_requirements_only) const;
|
||||
|
||||
cmLinkImplementationLibraries const*
|
||||
GetLinkImplementationLibrariesInternal(const std::string& config,
|
||||
cmTarget const* head) const;
|
||||
|
|
Loading…
Reference in New Issue