|
|
@@ -4365,27 +4365,15 @@ cmTarget::GetImportInfo(const char* config)
|
|
|
return &i->second;
|
|
|
}
|
|
|
|
|
|
-//----------------------------------------------------------------------------
|
|
|
-void cmTarget::ComputeImportInfo(std::string const& desired_config,
|
|
|
- ImportInfo& info)
|
|
|
+bool cmTarget::GetMappedConfig(std::string const& desired_config,
|
|
|
+ const char** loc,
|
|
|
+ const char** imp,
|
|
|
+ std::string& suffix)
|
|
|
{
|
|
|
- // 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;
|
|
|
-
|
|
|
// Track the configuration-specific property suffix.
|
|
|
- std::string suffix = "_";
|
|
|
+ suffix = "_";
|
|
|
suffix += desired_config;
|
|
|
|
|
|
- // On a DLL platform there may be only IMPORTED_IMPLIB for a shared
|
|
|
- // library or an executable with exports.
|
|
|
- bool allowImp = this->HasImportLibrary();
|
|
|
-
|
|
|
- // Look for a mapping from the current project's configuration to
|
|
|
- // the imported project's configuration.
|
|
|
std::vector<std::string> mappedConfigs;
|
|
|
{
|
|
|
std::string mapProp = "MAP_IMPORTED_CONFIG_";
|
|
|
@@ -4396,26 +4384,29 @@ void cmTarget::ComputeImportInfo(std::string const& desired_config,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // If we needed to find one of the mapped configurations but did not
|
|
|
+ // On a DLL platform there may be only IMPORTED_IMPLIB for a shared
|
|
|
+ // library or an executable with exports.
|
|
|
+ bool allowImp = this->HasImportLibrary();
|
|
|
+
|
|
|
// If a mapping was found, check its configurations.
|
|
|
- const char* loc = 0;
|
|
|
- const char* imp = 0;
|
|
|
for(std::vector<std::string>::const_iterator mci = mappedConfigs.begin();
|
|
|
- !loc && !imp && mci != mappedConfigs.end(); ++mci)
|
|
|
+ !*loc && !*imp && mci != mappedConfigs.end(); ++mci)
|
|
|
{
|
|
|
// Look for this configuration.
|
|
|
std::string mcUpper = cmSystemTools::UpperCase(mci->c_str());
|
|
|
std::string locProp = "IMPORTED_LOCATION_";
|
|
|
locProp += mcUpper;
|
|
|
- loc = this->GetProperty(locProp.c_str());
|
|
|
+ *loc = this->GetProperty(locProp.c_str());
|
|
|
if(allowImp)
|
|
|
{
|
|
|
std::string impProp = "IMPORTED_IMPLIB_";
|
|
|
impProp += mcUpper;
|
|
|
- imp = this->GetProperty(impProp.c_str());
|
|
|
+ *imp = this->GetProperty(impProp.c_str());
|
|
|
}
|
|
|
|
|
|
// If it was found, use it for all properties below.
|
|
|
- if(loc || imp)
|
|
|
+ if(*loc || *imp)
|
|
|
{
|
|
|
suffix = "_";
|
|
|
suffix += mcUpper;
|
|
|
@@ -4425,45 +4416,45 @@ void cmTarget::ComputeImportInfo(std::string const& desired_config,
|
|
|
// If we needed to find one of the mapped configurations but did not
|
|
|
// then the target is not found. The project does not want any
|
|
|
// other configuration.
|
|
|
- if(!mappedConfigs.empty() && !loc && !imp)
|
|
|
+ if(!mappedConfigs.empty() && !*loc && !*imp)
|
|
|
{
|
|
|
- return;
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
// If we have not yet found it then there are no mapped
|
|
|
// configurations. Look for an exact-match.
|
|
|
- if(!loc && !imp)
|
|
|
+ if(!*loc && !*imp)
|
|
|
{
|
|
|
std::string locProp = "IMPORTED_LOCATION";
|
|
|
locProp += suffix;
|
|
|
- loc = this->GetProperty(locProp.c_str());
|
|
|
+ *loc = this->GetProperty(locProp.c_str());
|
|
|
if(allowImp)
|
|
|
{
|
|
|
std::string impProp = "IMPORTED_IMPLIB";
|
|
|
impProp += suffix;
|
|
|
- imp = this->GetProperty(impProp.c_str());
|
|
|
+ *imp = this->GetProperty(impProp.c_str());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// If we have not yet found it then there are no mapped
|
|
|
// configurations and no exact match.
|
|
|
- if(!loc && !imp)
|
|
|
+ if(!*loc && !*imp)
|
|
|
{
|
|
|
// The suffix computed above is not useful.
|
|
|
suffix = "";
|
|
|
|
|
|
// Look for a configuration-less location. This may be set by
|
|
|
// manually-written code.
|
|
|
- loc = this->GetProperty("IMPORTED_LOCATION");
|
|
|
+ *loc = this->GetProperty("IMPORTED_LOCATION");
|
|
|
if(allowImp)
|
|
|
{
|
|
|
- imp = this->GetProperty("IMPORTED_IMPLIB");
|
|
|
+ *imp = this->GetProperty("IMPORTED_IMPLIB");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// If we have not yet found it then the project is willing to try
|
|
|
// any available configuration.
|
|
|
- if(!loc && !imp)
|
|
|
+ if(!*loc && !*imp)
|
|
|
{
|
|
|
std::vector<std::string> availableConfigs;
|
|
|
if(const char* iconfigs = this->GetProperty("IMPORTED_CONFIGURATIONS"))
|
|
|
@@ -4472,24 +4463,45 @@ void cmTarget::ComputeImportInfo(std::string const& desired_config,
|
|
|
}
|
|
|
for(std::vector<std::string>::const_iterator
|
|
|
aci = availableConfigs.begin();
|
|
|
- !loc && !imp && aci != availableConfigs.end(); ++aci)
|
|
|
+ !*loc && !*imp && aci != availableConfigs.end(); ++aci)
|
|
|
{
|
|
|
suffix = "_";
|
|
|
suffix += cmSystemTools::UpperCase(*aci);
|
|
|
std::string locProp = "IMPORTED_LOCATION";
|
|
|
locProp += suffix;
|
|
|
- loc = this->GetProperty(locProp.c_str());
|
|
|
+ *loc = this->GetProperty(locProp.c_str());
|
|
|
if(allowImp)
|
|
|
{
|
|
|
std::string impProp = "IMPORTED_IMPLIB";
|
|
|
impProp += suffix;
|
|
|
- imp = this->GetProperty(impProp.c_str());
|
|
|
+ *imp = this->GetProperty(impProp.c_str());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
// If we have not yet found it then the target is not available.
|
|
|
- if(!loc && !imp)
|
|
|
+ if(!*loc && !*imp)
|
|
|
+ {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
+//----------------------------------------------------------------------------
|
|
|
+void cmTarget::ComputeImportInfo(std::string const& desired_config,
|
|
|
+ ImportInfo& info)
|
|
|
+{
|
|
|
+ // 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;
|
|
|
}
|