cmGeneratorTarget: Move ImportInfo from cmTarget.
This commit is contained in:
parent
5794dbc301
commit
8f363d6771
@ -1364,7 +1364,8 @@ bool cmGeneratorTarget::IsImportedSharedLibWithoutSOName(
|
|||||||
{
|
{
|
||||||
if(this->IsImported() && this->GetType() == cmState::SHARED_LIBRARY)
|
if(this->IsImported() && this->GetType() == cmState::SHARED_LIBRARY)
|
||||||
{
|
{
|
||||||
if(cmTarget::ImportInfo const* info = this->Target->GetImportInfo(config))
|
if(cmGeneratorTarget::ImportInfo const* info =
|
||||||
|
this->GetImportInfo(config))
|
||||||
{
|
{
|
||||||
return info->NoSOName;
|
return info->NoSOName;
|
||||||
}
|
}
|
||||||
@ -1405,7 +1406,8 @@ bool cmGeneratorTarget::HasMacOSXRpathInstallNameDir(
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Lookup the imported soname.
|
// Lookup the imported soname.
|
||||||
if(cmTarget::ImportInfo const* info = this->Target->GetImportInfo(config))
|
if(cmGeneratorTarget::ImportInfo const* info =
|
||||||
|
this->GetImportInfo(config))
|
||||||
{
|
{
|
||||||
if(!info->NoSOName && !info->SOName.empty())
|
if(!info->NoSOName && !info->SOName.empty())
|
||||||
{
|
{
|
||||||
@ -1492,7 +1494,8 @@ std::string cmGeneratorTarget::GetSOName(const std::string& config) const
|
|||||||
if(this->Target->IsImported())
|
if(this->Target->IsImported())
|
||||||
{
|
{
|
||||||
// Lookup the imported soname.
|
// Lookup the imported soname.
|
||||||
if(cmTarget::ImportInfo const* info = this->Target->GetImportInfo(config))
|
if(cmGeneratorTarget::ImportInfo const* info =
|
||||||
|
this->GetImportInfo(config))
|
||||||
{
|
{
|
||||||
if(info->NoSOName)
|
if(info->NoSOName)
|
||||||
{
|
{
|
||||||
@ -5080,7 +5083,7 @@ cmGeneratorTarget::GetImportLinkInterface(const std::string& config,
|
|||||||
cmGeneratorTarget const* headTarget,
|
cmGeneratorTarget const* headTarget,
|
||||||
bool usage_requirements_only) const
|
bool usage_requirements_only) const
|
||||||
{
|
{
|
||||||
cmTarget::ImportInfo const* info = this->Target->GetImportInfo(config);
|
cmGeneratorTarget::ImportInfo const* info = this->GetImportInfo(config);
|
||||||
if(!info)
|
if(!info)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
@ -5118,6 +5121,223 @@ cmGeneratorTarget::GetImportLinkInterface(const std::string& config,
|
|||||||
return &iface;
|
return &iface;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
cmGeneratorTarget::ImportInfo const*
|
||||||
|
cmGeneratorTarget::GetImportInfo(const std::string& config) const
|
||||||
|
{
|
||||||
|
// There is no imported information for non-imported targets.
|
||||||
|
if(!this->IsImported())
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Lookup/compute/cache the import information for this
|
||||||
|
// configuration.
|
||||||
|
std::string config_upper;
|
||||||
|
if(!config.empty())
|
||||||
|
{
|
||||||
|
config_upper = cmSystemTools::UpperCase(config);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
config_upper = "NOCONFIG";
|
||||||
|
}
|
||||||
|
|
||||||
|
ImportInfoMapType::const_iterator i =
|
||||||
|
this->ImportInfoMap.find(config_upper);
|
||||||
|
if(i == this->ImportInfoMap.end())
|
||||||
|
{
|
||||||
|
ImportInfo info;
|
||||||
|
this->ComputeImportInfo(config_upper, info);
|
||||||
|
ImportInfoMapType::value_type entry(config_upper, info);
|
||||||
|
i = this->ImportInfoMap.insert(entry).first;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this->GetType() == cmState::INTERFACE_LIBRARY)
|
||||||
|
{
|
||||||
|
return &i->second;
|
||||||
|
}
|
||||||
|
// If the location is empty then the target is not available for
|
||||||
|
// this configuration.
|
||||||
|
if(i->second.Location.empty() && i->second.ImportLibrary.empty())
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return the import information.
|
||||||
|
return &i->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void cmGeneratorTarget::ComputeImportInfo(std::string const& desired_config,
|
||||||
|
ImportInfo& info) const
|
||||||
|
{
|
||||||
|
// This method finds information about an imported target from its
|
||||||
|
// properties. The "IMPORTED_" namespace is reserved for properties
|
||||||
|
// defined by the project exporting the target.
|
||||||
|
|
||||||
|
// Initialize members.
|
||||||
|
info.NoSOName = false;
|
||||||
|
|
||||||
|
const char* loc = 0;
|
||||||
|
const char* imp = 0;
|
||||||
|
std::string suffix;
|
||||||
|
if (!this->Target->GetMappedConfig(desired_config, &loc, &imp, suffix))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the link interface.
|
||||||
|
{
|
||||||
|
std::string linkProp = "INTERFACE_LINK_LIBRARIES";
|
||||||
|
const char *propertyLibs = this->GetProperty(linkProp);
|
||||||
|
|
||||||
|
if (this->GetType() != cmState::INTERFACE_LIBRARY)
|
||||||
|
{
|
||||||
|
if(!propertyLibs)
|
||||||
|
{
|
||||||
|
linkProp = "IMPORTED_LINK_INTERFACE_LIBRARIES";
|
||||||
|
linkProp += suffix;
|
||||||
|
propertyLibs = this->GetProperty(linkProp);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!propertyLibs)
|
||||||
|
{
|
||||||
|
linkProp = "IMPORTED_LINK_INTERFACE_LIBRARIES";
|
||||||
|
propertyLibs = this->GetProperty(linkProp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(propertyLibs)
|
||||||
|
{
|
||||||
|
info.LibrariesProp = linkProp;
|
||||||
|
info.Libraries = propertyLibs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(this->GetType() == cmState::INTERFACE_LIBRARY)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// A provided configuration has been chosen. Load the
|
||||||
|
// configuration's properties.
|
||||||
|
|
||||||
|
// Get the location.
|
||||||
|
if(loc)
|
||||||
|
{
|
||||||
|
info.Location = loc;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::string impProp = "IMPORTED_LOCATION";
|
||||||
|
impProp += suffix;
|
||||||
|
if(const char* config_location = this->GetProperty(impProp))
|
||||||
|
{
|
||||||
|
info.Location = config_location;
|
||||||
|
}
|
||||||
|
else if(const char* location = this->GetProperty("IMPORTED_LOCATION"))
|
||||||
|
{
|
||||||
|
info.Location = location;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the soname.
|
||||||
|
if(this->GetType() == cmState::SHARED_LIBRARY)
|
||||||
|
{
|
||||||
|
std::string soProp = "IMPORTED_SONAME";
|
||||||
|
soProp += suffix;
|
||||||
|
if(const char* config_soname = this->GetProperty(soProp))
|
||||||
|
{
|
||||||
|
info.SOName = config_soname;
|
||||||
|
}
|
||||||
|
else if(const char* soname = this->GetProperty("IMPORTED_SONAME"))
|
||||||
|
{
|
||||||
|
info.SOName = soname;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the "no-soname" mark.
|
||||||
|
if(this->GetType() == cmState::SHARED_LIBRARY)
|
||||||
|
{
|
||||||
|
std::string soProp = "IMPORTED_NO_SONAME";
|
||||||
|
soProp += suffix;
|
||||||
|
if(const char* config_no_soname = this->GetProperty(soProp))
|
||||||
|
{
|
||||||
|
info.NoSOName = cmSystemTools::IsOn(config_no_soname);
|
||||||
|
}
|
||||||
|
else if(const char* no_soname = this->GetProperty("IMPORTED_NO_SONAME"))
|
||||||
|
{
|
||||||
|
info.NoSOName = cmSystemTools::IsOn(no_soname);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the import library.
|
||||||
|
if(imp)
|
||||||
|
{
|
||||||
|
info.ImportLibrary = imp;
|
||||||
|
}
|
||||||
|
else if(this->GetType() == cmState::SHARED_LIBRARY ||
|
||||||
|
this->Target->IsExecutableWithExports())
|
||||||
|
{
|
||||||
|
std::string impProp = "IMPORTED_IMPLIB";
|
||||||
|
impProp += suffix;
|
||||||
|
if(const char* config_implib = this->GetProperty(impProp))
|
||||||
|
{
|
||||||
|
info.ImportLibrary = config_implib;
|
||||||
|
}
|
||||||
|
else if(const char* implib = this->GetProperty("IMPORTED_IMPLIB"))
|
||||||
|
{
|
||||||
|
info.ImportLibrary = implib;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the link dependencies.
|
||||||
|
{
|
||||||
|
std::string linkProp = "IMPORTED_LINK_DEPENDENT_LIBRARIES";
|
||||||
|
linkProp += suffix;
|
||||||
|
if(const char* config_libs = this->GetProperty(linkProp))
|
||||||
|
{
|
||||||
|
info.SharedDeps = config_libs;
|
||||||
|
}
|
||||||
|
else if(const char* libs =
|
||||||
|
this->GetProperty("IMPORTED_LINK_DEPENDENT_LIBRARIES"))
|
||||||
|
{
|
||||||
|
info.SharedDeps = libs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the link languages.
|
||||||
|
if(this->Target->LinkLanguagePropagatesToDependents())
|
||||||
|
{
|
||||||
|
std::string linkProp = "IMPORTED_LINK_INTERFACE_LANGUAGES";
|
||||||
|
linkProp += suffix;
|
||||||
|
if(const char* config_libs = this->GetProperty(linkProp))
|
||||||
|
{
|
||||||
|
info.Languages = config_libs;
|
||||||
|
}
|
||||||
|
else if(const char* libs =
|
||||||
|
this->GetProperty("IMPORTED_LINK_INTERFACE_LANGUAGES"))
|
||||||
|
{
|
||||||
|
info.Languages = libs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the cyclic repetition count.
|
||||||
|
if(this->GetType() == cmState::STATIC_LIBRARY)
|
||||||
|
{
|
||||||
|
std::string linkProp = "IMPORTED_LINK_INTERFACE_MULTIPLICITY";
|
||||||
|
linkProp += suffix;
|
||||||
|
if(const char* config_reps = this->GetProperty(linkProp))
|
||||||
|
{
|
||||||
|
sscanf(config_reps, "%u", &info.Multiplicity);
|
||||||
|
}
|
||||||
|
else if(const char* reps =
|
||||||
|
this->GetProperty("IMPORTED_LINK_INTERFACE_MULTIPLICITY"))
|
||||||
|
{
|
||||||
|
sscanf(reps, "%u", &info.Multiplicity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
cmHeadToLinkInterfaceMap&
|
cmHeadToLinkInterfaceMap&
|
||||||
cmGeneratorTarget::GetHeadToLinkInterfaceMap(const std::string &config) const
|
cmGeneratorTarget::GetHeadToLinkInterfaceMap(const std::string &config) const
|
||||||
{
|
{
|
||||||
|
@ -516,6 +516,28 @@ private:
|
|||||||
cmHeadToLinkInterfaceMap& GetHeadToLinkInterfaceUsageRequirementsMap(
|
cmHeadToLinkInterfaceMap& GetHeadToLinkInterfaceUsageRequirementsMap(
|
||||||
std::string const& config) const;
|
std::string const& config) const;
|
||||||
|
|
||||||
|
// Cache import information from properties for each configuration.
|
||||||
|
struct ImportInfo
|
||||||
|
{
|
||||||
|
ImportInfo(): NoSOName(false), Multiplicity(0) {}
|
||||||
|
bool NoSOName;
|
||||||
|
int Multiplicity;
|
||||||
|
std::string Location;
|
||||||
|
std::string SOName;
|
||||||
|
std::string ImportLibrary;
|
||||||
|
std::string Languages;
|
||||||
|
std::string Libraries;
|
||||||
|
std::string LibrariesProp;
|
||||||
|
std::string SharedDeps;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef std::map<std::string, ImportInfo> ImportInfoMapType;
|
||||||
|
mutable ImportInfoMapType ImportInfoMap;
|
||||||
|
void ComputeImportInfo(std::string const& desired_config,
|
||||||
|
ImportInfo& info) const;
|
||||||
|
ImportInfo const* GetImportInfo(const std::string& config) const;
|
||||||
|
|
||||||
|
|
||||||
cmLinkInterface const*
|
cmLinkInterface const*
|
||||||
GetImportLinkInterface(const std::string& config,
|
GetImportLinkInterface(const std::string& config,
|
||||||
const cmGeneratorTarget* head,
|
const cmGeneratorTarget* head,
|
||||||
|
@ -1316,7 +1316,6 @@ void cmTarget::SetProperty(const std::string& prop, const char* value)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
this->Properties.SetProperty(prop, value);
|
this->Properties.SetProperty(prop, value);
|
||||||
this->MaybeInvalidatePropertyCache(prop);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1409,7 +1408,6 @@ void cmTarget::AppendProperty(const std::string& prop, const char* value,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
this->Properties.AppendProperty(prop, value, asString);
|
this->Properties.AppendProperty(prop, value, asString);
|
||||||
this->MaybeInvalidatePropertyCache(prop);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1507,16 +1505,6 @@ void cmTarget::InsertCompileDefinition(std::string const& entry,
|
|||||||
this->Internal->CompileDefinitionsBacktraces.push_back(bt);
|
this->Internal->CompileDefinitionsBacktraces.push_back(bt);
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
|
||||||
void cmTarget::MaybeInvalidatePropertyCache(const std::string& prop)
|
|
||||||
{
|
|
||||||
// Wipe out maps caching information affected by this property.
|
|
||||||
if(this->IsImported() && cmHasLiteralPrefix(prop, "IMPORTED"))
|
|
||||||
{
|
|
||||||
this->ImportInfoMap.clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
static void cmTargetCheckLINK_INTERFACE_LIBRARIES(
|
static void cmTargetCheckLINK_INTERFACE_LIBRARIES(
|
||||||
const std::string& prop, const char* value, cmMakefile* context,
|
const std::string& prop, const char* value, cmMakefile* context,
|
||||||
@ -2248,53 +2236,6 @@ const char* cmTarget::GetExportMacro() const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
|
||||||
cmTarget::ImportInfo const*
|
|
||||||
cmTarget::GetImportInfo(const std::string& config) const
|
|
||||||
{
|
|
||||||
// There is no imported information for non-imported targets.
|
|
||||||
if(!this->IsImported())
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Lookup/compute/cache the import information for this
|
|
||||||
// configuration.
|
|
||||||
std::string config_upper;
|
|
||||||
if(!config.empty())
|
|
||||||
{
|
|
||||||
config_upper = cmSystemTools::UpperCase(config);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
config_upper = "NOCONFIG";
|
|
||||||
}
|
|
||||||
|
|
||||||
ImportInfoMapType::const_iterator i =
|
|
||||||
this->ImportInfoMap.find(config_upper);
|
|
||||||
if(i == this->ImportInfoMap.end())
|
|
||||||
{
|
|
||||||
ImportInfo info;
|
|
||||||
this->ComputeImportInfo(config_upper, info);
|
|
||||||
ImportInfoMapType::value_type entry(config_upper, info);
|
|
||||||
i = this->ImportInfoMap.insert(entry).first;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this->GetType() == cmState::INTERFACE_LIBRARY)
|
|
||||||
{
|
|
||||||
return &i->second;
|
|
||||||
}
|
|
||||||
// If the location is empty then the target is not available for
|
|
||||||
// this configuration.
|
|
||||||
if(i->second.Location.empty() && i->second.ImportLibrary.empty())
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return the import information.
|
|
||||||
return &i->second;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool cmTarget::GetMappedConfig(std::string const& desired_config,
|
bool cmTarget::GetMappedConfig(std::string const& desired_config,
|
||||||
const char** loc,
|
const char** loc,
|
||||||
const char** imp,
|
const char** imp,
|
||||||
@ -2426,176 +2367,6 @@ bool cmTarget::GetMappedConfig(std::string const& desired_config,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
|
||||||
void cmTarget::ComputeImportInfo(std::string const& desired_config,
|
|
||||||
ImportInfo& info) const
|
|
||||||
{
|
|
||||||
// This method finds information about an imported target from its
|
|
||||||
// properties. The "IMPORTED_" namespace is reserved for properties
|
|
||||||
// defined by the project exporting the target.
|
|
||||||
|
|
||||||
// Initialize members.
|
|
||||||
info.NoSOName = false;
|
|
||||||
|
|
||||||
const char* loc = 0;
|
|
||||||
const char* imp = 0;
|
|
||||||
std::string suffix;
|
|
||||||
if (!this->GetMappedConfig(desired_config, &loc, &imp, suffix))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the link interface.
|
|
||||||
{
|
|
||||||
std::string linkProp = "INTERFACE_LINK_LIBRARIES";
|
|
||||||
const char *propertyLibs = this->GetProperty(linkProp);
|
|
||||||
|
|
||||||
if (this->GetType() != cmState::INTERFACE_LIBRARY)
|
|
||||||
{
|
|
||||||
if(!propertyLibs)
|
|
||||||
{
|
|
||||||
linkProp = "IMPORTED_LINK_INTERFACE_LIBRARIES";
|
|
||||||
linkProp += suffix;
|
|
||||||
propertyLibs = this->GetProperty(linkProp);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!propertyLibs)
|
|
||||||
{
|
|
||||||
linkProp = "IMPORTED_LINK_INTERFACE_LIBRARIES";
|
|
||||||
propertyLibs = this->GetProperty(linkProp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(propertyLibs)
|
|
||||||
{
|
|
||||||
info.LibrariesProp = linkProp;
|
|
||||||
info.Libraries = propertyLibs;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(this->GetType() == cmState::INTERFACE_LIBRARY)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// A provided configuration has been chosen. Load the
|
|
||||||
// configuration's properties.
|
|
||||||
|
|
||||||
// Get the location.
|
|
||||||
if(loc)
|
|
||||||
{
|
|
||||||
info.Location = loc;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::string impProp = "IMPORTED_LOCATION";
|
|
||||||
impProp += suffix;
|
|
||||||
if(const char* config_location = this->GetProperty(impProp))
|
|
||||||
{
|
|
||||||
info.Location = config_location;
|
|
||||||
}
|
|
||||||
else if(const char* location = this->GetProperty("IMPORTED_LOCATION"))
|
|
||||||
{
|
|
||||||
info.Location = location;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the soname.
|
|
||||||
if(this->GetType() == cmState::SHARED_LIBRARY)
|
|
||||||
{
|
|
||||||
std::string soProp = "IMPORTED_SONAME";
|
|
||||||
soProp += suffix;
|
|
||||||
if(const char* config_soname = this->GetProperty(soProp))
|
|
||||||
{
|
|
||||||
info.SOName = config_soname;
|
|
||||||
}
|
|
||||||
else if(const char* soname = this->GetProperty("IMPORTED_SONAME"))
|
|
||||||
{
|
|
||||||
info.SOName = soname;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the "no-soname" mark.
|
|
||||||
if(this->GetType() == cmState::SHARED_LIBRARY)
|
|
||||||
{
|
|
||||||
std::string soProp = "IMPORTED_NO_SONAME";
|
|
||||||
soProp += suffix;
|
|
||||||
if(const char* config_no_soname = this->GetProperty(soProp))
|
|
||||||
{
|
|
||||||
info.NoSOName = cmSystemTools::IsOn(config_no_soname);
|
|
||||||
}
|
|
||||||
else if(const char* no_soname = this->GetProperty("IMPORTED_NO_SONAME"))
|
|
||||||
{
|
|
||||||
info.NoSOName = cmSystemTools::IsOn(no_soname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the import library.
|
|
||||||
if(imp)
|
|
||||||
{
|
|
||||||
info.ImportLibrary = imp;
|
|
||||||
}
|
|
||||||
else if(this->GetType() == cmState::SHARED_LIBRARY ||
|
|
||||||
this->IsExecutableWithExports())
|
|
||||||
{
|
|
||||||
std::string impProp = "IMPORTED_IMPLIB";
|
|
||||||
impProp += suffix;
|
|
||||||
if(const char* config_implib = this->GetProperty(impProp))
|
|
||||||
{
|
|
||||||
info.ImportLibrary = config_implib;
|
|
||||||
}
|
|
||||||
else if(const char* implib = this->GetProperty("IMPORTED_IMPLIB"))
|
|
||||||
{
|
|
||||||
info.ImportLibrary = implib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the link dependencies.
|
|
||||||
{
|
|
||||||
std::string linkProp = "IMPORTED_LINK_DEPENDENT_LIBRARIES";
|
|
||||||
linkProp += suffix;
|
|
||||||
if(const char* config_libs = this->GetProperty(linkProp))
|
|
||||||
{
|
|
||||||
info.SharedDeps = config_libs;
|
|
||||||
}
|
|
||||||
else if(const char* libs =
|
|
||||||
this->GetProperty("IMPORTED_LINK_DEPENDENT_LIBRARIES"))
|
|
||||||
{
|
|
||||||
info.SharedDeps = libs;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the link languages.
|
|
||||||
if(this->LinkLanguagePropagatesToDependents())
|
|
||||||
{
|
|
||||||
std::string linkProp = "IMPORTED_LINK_INTERFACE_LANGUAGES";
|
|
||||||
linkProp += suffix;
|
|
||||||
if(const char* config_libs = this->GetProperty(linkProp))
|
|
||||||
{
|
|
||||||
info.Languages = config_libs;
|
|
||||||
}
|
|
||||||
else if(const char* libs =
|
|
||||||
this->GetProperty("IMPORTED_LINK_INTERFACE_LANGUAGES"))
|
|
||||||
{
|
|
||||||
info.Languages = libs;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the cyclic repetition count.
|
|
||||||
if(this->GetType() == cmState::STATIC_LIBRARY)
|
|
||||||
{
|
|
||||||
std::string linkProp = "IMPORTED_LINK_INTERFACE_MULTIPLICITY";
|
|
||||||
linkProp += suffix;
|
|
||||||
if(const char* config_reps = this->GetProperty(linkProp))
|
|
||||||
{
|
|
||||||
sscanf(config_reps, "%u", &info.Multiplicity);
|
|
||||||
}
|
|
||||||
else if(const char* reps =
|
|
||||||
this->GetProperty("IMPORTED_LINK_INTERFACE_MULTIPLICITY"))
|
|
||||||
{
|
|
||||||
sscanf(reps, "%u", &info.Multiplicity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
std::string cmTarget::CheckCMP0004(std::string const& item) const
|
std::string cmTarget::CheckCMP0004(std::string const& item) const
|
||||||
{
|
{
|
||||||
|
@ -419,32 +419,8 @@ private:
|
|||||||
bool LinkLibrariesForVS6Analyzed;
|
bool LinkLibrariesForVS6Analyzed;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Cache import information from properties for each configuration.
|
|
||||||
struct ImportInfo
|
|
||||||
{
|
|
||||||
ImportInfo(): NoSOName(false), Multiplicity(0) {}
|
|
||||||
bool NoSOName;
|
|
||||||
int Multiplicity;
|
|
||||||
std::string Location;
|
|
||||||
std::string SOName;
|
|
||||||
std::string ImportLibrary;
|
|
||||||
std::string Languages;
|
|
||||||
std::string Libraries;
|
|
||||||
std::string LibrariesProp;
|
|
||||||
std::string SharedDeps;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef std::map<std::string, ImportInfo> ImportInfoMapType;
|
|
||||||
mutable ImportInfoMapType ImportInfoMap;
|
|
||||||
|
|
||||||
ImportInfo const* GetImportInfo(const std::string& config) const;
|
|
||||||
void ComputeImportInfo(std::string const& desired_config,
|
|
||||||
ImportInfo& info) const;
|
|
||||||
|
|
||||||
std::string ProcessSourceItemCMP0049(const std::string& s);
|
std::string ProcessSourceItemCMP0049(const std::string& s);
|
||||||
|
|
||||||
void MaybeInvalidatePropertyCache(const std::string& prop);
|
|
||||||
|
|
||||||
/** Return whether or not the target has a DLL import library. */
|
/** Return whether or not the target has a DLL import library. */
|
||||||
bool HasImportLibrary() const;
|
bool HasImportLibrary() const;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user