Commit 7d57c1a2 authored by Stephen Kelly's avatar Stephen Kelly
Browse files

cmTarget: Extract location computation methods

parent a55cac4b
......@@ -1039,6 +1039,10 @@ public:
private:
static bool HandleLocationPropertyPolicy(std::string const& tgtName,
cmMakefile* context);
static const char* ComputeLocationForBuild(cmTarget const* tgt);
static const char* ComputeLocation(cmTarget const* tgt,
std::string const& config);
};
bool cmTargetPropertyComputer::HandleLocationPropertyPolicy(
......@@ -1072,6 +1076,42 @@ bool cmTargetPropertyComputer::HandleLocationPropertyPolicy(
return messageType != cmake::FATAL_ERROR;
}
const char* cmTargetPropertyComputer::ComputeLocationForBuild(
cmTarget const* tgt)
{
static std::string loc;
if (tgt->IsImported()) {
loc = tgt->ImportedGetFullPath("", false);
return loc.c_str();
}
cmGlobalGenerator* gg = tgt->GetMakefile()->GetGlobalGenerator();
if (!gg->GetConfigureDoneCMP0026()) {
gg->CreateGenerationObjects();
}
cmGeneratorTarget* gt = gg->FindGeneratorTarget(tgt->GetName());
loc = gt->GetLocationForBuild();
return loc.c_str();
}
const char* cmTargetPropertyComputer::ComputeLocation(
cmTarget const* tgt, std::string const& config)
{
static std::string loc;
if (tgt->IsImported()) {
loc = tgt->ImportedGetFullPath(config, false);
return loc.c_str();
}
cmGlobalGenerator* gg = tgt->GetMakefile()->GetGlobalGenerator();
if (!gg->GetConfigureDoneCMP0026()) {
gg->CreateGenerationObjects();
}
cmGeneratorTarget* gt = gg->FindGeneratorTarget(tgt->GetName());
loc = gt->GetFullPath(config, false);
return loc.c_str();
}
const char* cmTargetPropertyComputer::GetProperty(cmTarget const* tgt,
const std::string& prop,
cmMakefile* context)
......@@ -1089,31 +1129,7 @@ const char* cmTargetPropertyComputer::GetProperty(cmTarget const* tgt,
!HandleLocationPropertyPolicy(tgt->GetName(), context)) {
return CM_NULLPTR;
}
// Set the LOCATION property of the target.
//
// For an imported target this is the location of an arbitrary
// available configuration.
//
if (tgt->IsImported()) {
static std::string loc;
loc = tgt->ImportedGetFullPath("", false);
return loc.c_str();
} else {
// For a non-imported target this is deprecated because it
// cannot take into account the per-configuration name of the
// target because the configuration type may not be known at
// CMake time.
cmGlobalGenerator* gg = tgt->GetMakefile()->GetGlobalGenerator();
if (!gg->GetConfigureDoneCMP0026()) {
gg->CreateGenerationObjects();
}
cmGeneratorTarget* gt = gg->FindGeneratorTarget(tgt->GetName());
static std::string loc;
loc = gt->GetLocationForBuild();
return loc.c_str();
}
return ComputeLocationForBuild(tgt);
}
// Support "LOCATION_<CONFIG>".
......@@ -1123,22 +1139,9 @@ const char* cmTargetPropertyComputer::GetProperty(cmTarget const* tgt,
return CM_NULLPTR;
}
const char* configName = prop.c_str() + 9;
if (tgt->IsImported()) {
static std::string loc;
loc = tgt->ImportedGetFullPath(configName, false);
return loc.c_str();
} else {
cmGlobalGenerator* gg = tgt->GetMakefile()->GetGlobalGenerator();
if (!gg->GetConfigureDoneCMP0026()) {
gg->CreateGenerationObjects();
}
cmGeneratorTarget* gt = gg->FindGeneratorTarget(tgt->GetName());
static std::string loc;
loc = gt->GetFullPath(configName, false);
return loc.c_str();
}
return ComputeLocation(tgt, configName);
}
// Support "<CONFIG>_LOCATION".
else if (cmHasLiteralSuffix(prop, "_LOCATION") &&
!cmHasLiteralPrefix(prop, "XCODE_ATTRIBUTE_")) {
......@@ -1148,20 +1151,7 @@ const char* cmTargetPropertyComputer::GetProperty(cmTarget const* tgt,
!HandleLocationPropertyPolicy(tgt->GetName(), context)) {
return CM_NULLPTR;
}
if (tgt->IsImported()) {
static std::string loc;
loc = tgt->ImportedGetFullPath(configName, false);
return loc.c_str();
} else {
cmGlobalGenerator* gg = tgt->GetMakefile()->GetGlobalGenerator();
if (!gg->GetConfigureDoneCMP0026()) {
gg->CreateGenerationObjects();
}
cmGeneratorTarget* gt = gg->FindGeneratorTarget(tgt->GetName());
static std::string loc;
loc = gt->GetFullPath(configName, false);
return loc.c_str();
}
return ComputeLocation(tgt, configName);
}
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment