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.
|
// Imported targets have their own link interface.
|
||||||
if(this->IsImported())
|
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
|
// 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.
|
// Lookup any existing link interface for this configuration.
|
||||||
cmHeadToLinkInterfaceMap& hm =
|
cmHeadToLinkInterfaceMap& hm =
|
||||||
this->Target->GetHeadToLinkInterfaceMap(config);
|
this->GetHeadToLinkInterfaceMap(config);
|
||||||
|
|
||||||
// If the link interface does not depend on the head target
|
// If the link interface does not depend on the head target
|
||||||
// then return the one we computed first.
|
// then return the one we computed first.
|
||||||
@ -3518,7 +3518,7 @@ cmGeneratorTarget::GetLinkInterfaceLibraries(const std::string& config,
|
|||||||
// Imported targets have their own link interface.
|
// Imported targets have their own link interface.
|
||||||
if(this->IsImported())
|
if(this->IsImported())
|
||||||
{
|
{
|
||||||
return this->Target->GetImportLinkInterface(config, head,
|
return this->GetImportLinkInterface(config, head,
|
||||||
usage_requirements_only);
|
usage_requirements_only);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3534,8 +3534,8 @@ cmGeneratorTarget::GetLinkInterfaceLibraries(const std::string& config,
|
|||||||
std::string CONFIG = cmSystemTools::UpperCase(config);
|
std::string CONFIG = cmSystemTools::UpperCase(config);
|
||||||
cmHeadToLinkInterfaceMap& hm =
|
cmHeadToLinkInterfaceMap& hm =
|
||||||
(usage_requirements_only ?
|
(usage_requirements_only ?
|
||||||
this->Target->GetHeadToLinkInterfaceUsageRequirementsMap(config) :
|
this->GetHeadToLinkInterfaceUsageRequirementsMap(config) :
|
||||||
this->Target->GetHeadToLinkInterfaceMap(config));
|
this->GetHeadToLinkInterfaceMap(config));
|
||||||
|
|
||||||
// If the link interface does not depend on the head target
|
// If the link interface does not depend on the head target
|
||||||
// then return the one we computed first.
|
// 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;
|
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::pair<std::string, bool> OutputNameKey;
|
||||||
typedef std::map<OutputNameKey, std::string> OutputNameMapType;
|
typedef std::map<OutputNameKey, std::string> OutputNameMapType;
|
||||||
mutable OutputNameMapType OutputNameMap;
|
mutable OutputNameMapType OutputNameMap;
|
||||||
|
@ -89,11 +89,6 @@ public:
|
|||||||
// The backtrace when the target was created.
|
// The backtrace when the target was created.
|
||||||
cmListFileBacktrace Backtrace;
|
cmListFileBacktrace Backtrace;
|
||||||
|
|
||||||
typedef std::map<std::string, cmHeadToLinkInterfaceMap>
|
|
||||||
LinkInterfaceMapType;
|
|
||||||
LinkInterfaceMapType LinkInterfaceMap;
|
|
||||||
LinkInterfaceMapType LinkInterfaceUsageRequirementsOnlyMap;
|
|
||||||
|
|
||||||
typedef std::map<std::string, cmTarget::OutputInfo> OutputInfoMapType;
|
typedef std::map<std::string, cmTarget::OutputInfo> OutputInfoMapType;
|
||||||
OutputInfoMapType OutputInfoMap;
|
OutputInfoMapType OutputInfoMap;
|
||||||
|
|
||||||
@ -510,8 +505,6 @@ void cmTarget::ClearLinkMaps()
|
|||||||
{
|
{
|
||||||
this->LinkImplementationLanguageIsContextDependent = true;
|
this->LinkImplementationLanguageIsContextDependent = true;
|
||||||
this->Internal->LinkImplMap.clear();
|
this->Internal->LinkImplMap.clear();
|
||||||
this->Internal->LinkInterfaceMap.clear();
|
|
||||||
this->Internal->LinkInterfaceUsageRequirementsOnlyMap.clear();
|
|
||||||
this->Internal->SourceFilesMap.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(
|
void cmTargetInternals::AddInterfaceEntries(
|
||||||
cmTarget const* thisTarget, std::string const& config,
|
cmTarget const* thisTarget, std::string const& config,
|
||||||
|
@ -233,11 +233,6 @@ public:
|
|||||||
|
|
||||||
void GetObjectLibrariesCMP0026(std::vector<cmTarget*>& objlibs) const;
|
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
|
struct LinkImplementation: public cmLinkImplementationLibraries
|
||||||
{
|
{
|
||||||
// Languages whose runtime libraries must be linked.
|
// Languages whose runtime libraries must be linked.
|
||||||
@ -559,11 +554,6 @@ private:
|
|||||||
void ComputeImportInfo(std::string const& desired_config,
|
void ComputeImportInfo(std::string const& desired_config,
|
||||||
ImportInfo& info) const;
|
ImportInfo& info) const;
|
||||||
|
|
||||||
|
|
||||||
cmLinkInterface const*
|
|
||||||
GetImportLinkInterface(const std::string& config, cmTarget const* head,
|
|
||||||
bool usage_requirements_only) const;
|
|
||||||
|
|
||||||
cmLinkImplementationLibraries const*
|
cmLinkImplementationLibraries const*
|
||||||
GetLinkImplementationLibrariesInternal(const std::string& config,
|
GetLinkImplementationLibrariesInternal(const std::string& config,
|
||||||
cmTarget const* head) const;
|
cmTarget const* head) const;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user