summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2015-10-20 15:16:45 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2015-10-20 15:16:45 (GMT)
commit9afbb733ec2a55424e6c25c6afa7fdd14219d6b1 (patch)
treecf1f8a0124d239bb85b0c2f07afd19a6759a4520 /Source
parent5ec8064b76aca89b6e0274e53c272f298655b992 (diff)
parentd8f8940bc68f09e382320d1ffe36947ba880ae65 (diff)
downloadCMake-9afbb733ec2a55424e6c25c6afa7fdd14219d6b1.zip
CMake-9afbb733ec2a55424e6c25c6afa7fdd14219d6b1.tar.gz
CMake-9afbb733ec2a55424e6c25c6afa7fdd14219d6b1.tar.bz2
Merge topic 'use-generator-target'
d8f8940b cmGeneratorTarget: Move IsCFBundleOnApple from cmTarget. 7550879f cmGeneratorTarget: Move IsXCTestOnApple from cmTarget. 88d10d55 cmGeneratorTarget: Copy IsAppBundleOnApple from cmTarget. b5f5de70 cmGeneratorTarget: Copy IsFrameworkOnApple from cmTarget. 8e20ea6e cmGeneratorTarget: Move IsLinkable from cmTarget. a527abf0 Xcode: Port internal API to cmGeneratorTarget. eb3be7d6 cmGeneratorTarget: Move GetExportName from cmTarget. d231c31b Export: Port internal API to cmGeneratorTarget. e6661282 Export: Port internal utility to cmGeneratorTarget. 2b9cc1e2 Export: Port some API to cmGlobalGenerator. 97062ac2 cmInstallTargetGenerator: Port GetInstallFilename to cmGeneratorTarget. 6a72b3c8 Export: Port interface to cmGeneratorTarget. 1293c156 cmExportTryCompileFileGenerator: Port to cmGeneratorTarget. 381e7afd cmExportSet: Store a cmGeneratorTarget. 65911cae cmGlobalGenerator: Compute export() related classes early. 37ab74a6 cmLocalGenerator: Port PList handling to cmGeneratorTarget. ...
Diffstat (limited to 'Source')
-rw-r--r--Source/cmCommonTargetGenerator.cxx16
-rw-r--r--Source/cmComputeLinkInformation.cxx4
-rw-r--r--Source/cmComputeTargetDepends.cxx2
-rw-r--r--Source/cmCoreTryCompile.cxx7
-rw-r--r--Source/cmCustomCommandGenerator.cxx2
-rw-r--r--Source/cmExportBuildFileGenerator.cxx58
-rw-r--r--Source/cmExportBuildFileGenerator.h11
-rw-r--r--Source/cmExportFileGenerator.cxx69
-rw-r--r--Source/cmExportFileGenerator.h33
-rw-r--r--Source/cmExportInstallFileGenerator.cxx63
-rw-r--r--Source/cmExportInstallFileGenerator.h11
-rw-r--r--Source/cmExportSet.cxx10
-rw-r--r--Source/cmExportSet.h3
-rw-r--r--Source/cmExportTryCompileFileGenerator.cxx45
-rw-r--r--Source/cmExportTryCompileFileGenerator.h22
-rw-r--r--Source/cmExtraSublimeTextGenerator.cxx6
-rw-r--r--Source/cmGeneratorExpressionNode.cxx6
-rw-r--r--Source/cmGeneratorTarget.cxx630
-rw-r--r--Source/cmGeneratorTarget.h69
-rw-r--r--Source/cmGhsMultiTargetGenerator.cxx13
-rw-r--r--Source/cmGlobalGenerator.cxx26
-rw-r--r--Source/cmGlobalGenerator.h7
-rw-r--r--Source/cmGlobalNinjaGenerator.cxx5
-rw-r--r--Source/cmGlobalUnixMakefileGenerator3.cxx6
-rw-r--r--Source/cmGlobalVisualStudioGenerator.cxx5
-rw-r--r--Source/cmGlobalXCodeGenerator.cxx72
-rw-r--r--Source/cmGlobalXCodeGenerator.h4
-rw-r--r--Source/cmIncludeCommand.cxx1
-rw-r--r--Source/cmInstallCommand.cxx9
-rw-r--r--Source/cmInstallExportGenerator.cxx1
-rw-r--r--Source/cmInstallTargetGenerator.cxx27
-rw-r--r--Source/cmInstallTargetGenerator.h3
-rw-r--r--Source/cmLocalGenerator.cxx76
-rw-r--r--Source/cmLocalGenerator.h29
-rw-r--r--Source/cmLocalGhsMultiGenerator.cxx2
-rw-r--r--Source/cmLocalUnixMakefileGenerator3.cxx26
-rw-r--r--Source/cmLocalUnixMakefileGenerator3.h9
-rw-r--r--Source/cmLocalVisualStudio6Generator.cxx22
-rw-r--r--Source/cmLocalVisualStudio7Generator.cxx12
-rw-r--r--Source/cmLocalVisualStudio7Generator.h3
-rw-r--r--Source/cmMakefileExecutableTargetGenerator.cxx20
-rw-r--r--Source/cmMakefileLibraryTargetGenerator.cxx49
-rw-r--r--Source/cmMakefileTargetGenerator.cxx26
-rw-r--r--Source/cmMakefileUtilityTargetGenerator.cxx11
-rw-r--r--Source/cmNinjaNormalTargetGenerator.cxx21
-rw-r--r--Source/cmNinjaTargetGenerator.cxx13
-rw-r--r--Source/cmNinjaUtilityTargetGenerator.cxx3
-rw-r--r--Source/cmOSXBundleGenerator.cxx6
-rw-r--r--Source/cmQtAutoGeneratorInitializer.cxx23
-rw-r--r--Source/cmTarget.cxx509
-rw-r--r--Source/cmTarget.h63
-rw-r--r--Source/cmTargetExport.h5
-rw-r--r--Source/cmVisualStudio10TargetGenerator.cxx132
53 files changed, 1232 insertions, 1074 deletions
diff --git a/Source/cmCommonTargetGenerator.cxx b/Source/cmCommonTargetGenerator.cxx
index 96fcc90..41af89b 100644
--- a/Source/cmCommonTargetGenerator.cxx
+++ b/Source/cmCommonTargetGenerator.cxx
@@ -109,7 +109,7 @@ std::string cmCommonTargetGenerator::ComputeFortranModuleDirectory() const
{
std::string mod_dir;
const char* target_mod_dir =
- this->Target->GetProperty("Fortran_MODULE_DIRECTORY");
+ this->GeneratorTarget->GetProperty("Fortran_MODULE_DIRECTORY");
const char* moddir_flag =
this->Makefile->GetDefinition("CMAKE_Fortran_MODDIR_FLAG");
if(target_mod_dir && moddir_flag)
@@ -214,7 +214,7 @@ cmCommonTargetGenerator
this->LocalGenerator->GetFortranFormat(srcfmt);
if(format == cmLocalGenerator::FortranFormatNone)
{
- const char* tgtfmt = this->Target->GetProperty("Fortran_FORMAT");
+ const char* tgtfmt = this->GeneratorTarget->GetProperty("Fortran_FORMAT");
format = this->LocalGenerator->GetFortranFormat(tgtfmt);
}
const char* var = 0;
@@ -316,10 +316,11 @@ std::string cmCommonTargetGenerator::GetFlags(const std::string &l)
this->AddFortranFlags(flags);
}
- this->LocalGenerator->AddCMP0018Flags(flags, this->Target,
+ this->LocalGenerator->AddCMP0018Flags(flags, this->GeneratorTarget,
lang, this->ConfigName);
- this->LocalGenerator->AddVisibilityPresetFlags(flags, this->Target,
+ this->LocalGenerator->AddVisibilityPresetFlags(flags,
+ this->GeneratorTarget,
lang);
// Append old-style preprocessor definition flags.
@@ -331,7 +332,7 @@ std::string cmCommonTargetGenerator::GetFlags(const std::string &l)
AppendFlags(flags,this->GetFrameworkFlags(l));
// Add target-specific flags.
- this->LocalGenerator->AddCompileOptions(flags, this->Target,
+ this->LocalGenerator->AddCompileOptions(flags, this->GeneratorTarget,
lang, this->ConfigName);
ByLanguageMap::value_type entry(l, flags);
@@ -354,7 +355,7 @@ std::string cmCommonTargetGenerator::GetDefines(const std::string &l)
}
// Add preprocessor definitions for this target and configuration.
- this->LocalGenerator->AddCompileDefinitions(defines, this->Target,
+ this->LocalGenerator->AddCompileDefinitions(defines, this->GeneratorTarget,
this->LocalGenerator->GetConfigName(), l);
std::string definesString;
@@ -400,8 +401,7 @@ cmCommonTargetGenerator::GetLinkedTargetDirectories() const
&& emitted.insert(linkee).second)
{
cmLocalGenerator* lg = linkee->GetLocalGenerator();
- cmMakefile* mf = linkee->Target->GetMakefile();
- std::string di = mf->GetCurrentBinaryDirectory();
+ std::string di = lg->GetCurrentBinaryDirectory();
di += "/";
di += lg->GetTargetDirectory(linkee);
dirs.push_back(di);
diff --git a/Source/cmComputeLinkInformation.cxx b/Source/cmComputeLinkInformation.cxx
index 7bdc555..2497f82 100644
--- a/Source/cmComputeLinkInformation.cxx
+++ b/Source/cmComputeLinkInformation.cxx
@@ -643,7 +643,7 @@ void cmComputeLinkInformation::AddItem(std::string const& item,
return;
}
- if(tgt && tgt->Target->IsLinkable())
+ if(tgt && tgt->IsLinkable())
{
// This is a CMake target. Ask the target for its real name.
if(impexe && this->LoaderFlag)
@@ -1111,7 +1111,7 @@ void cmComputeLinkInformation::AddTargetItem(std::string const& item,
// For compatibility with CMake 2.4 include the item's directory in
// the linker search path.
- if(this->OldLinkDirMode && !target->Target->IsFrameworkOnApple() &&
+ if(this->OldLinkDirMode && !target->IsFrameworkOnApple() &&
this->OldLinkDirMask.find(cmSystemTools::GetFilenamePath(item)) ==
this->OldLinkDirMask.end())
{
diff --git a/Source/cmComputeTargetDepends.cxx b/Source/cmComputeTargetDepends.cxx
index f6de2ab..a5a1f29 100644
--- a/Source/cmComputeTargetDepends.cxx
+++ b/Source/cmComputeTargetDepends.cxx
@@ -417,7 +417,7 @@ void cmComputeTargetDepends::AddTargetDepend(int depender_index,
const cmGeneratorTarget* dependee,
bool linking)
{
- if(dependee->Target->IsImported() ||
+ if(dependee->IsImported() ||
dependee->GetType() == cmState::INTERFACE_LIBRARY)
{
// Skip IMPORTED and INTERFACE targets but follow their utility
diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx
index 5bb0f99..4a1f770 100644
--- a/Source/cmCoreTryCompile.cxx
+++ b/Source/cmCoreTryCompile.cxx
@@ -34,7 +34,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv)
std::string outputVariable;
std::string copyFile;
std::string copyFileError;
- std::vector<cmTarget const*> targets;
+ std::vector<std::string> targets;
std::string libsToLink = " ";
bool useOldLinkLibs = true;
char targetNameBuf[64];
@@ -112,7 +112,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv)
}
if (tgt->IsImported())
{
- targets.push_back(tgt);
+ targets.push_back(argv[i]);
}
}
}
@@ -375,9 +375,8 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv)
if (!targets.empty())
{
std::string fname = "/" + std::string(targetName) + "Targets.cmake";
- cmExportTryCompileFileGenerator tcfg(gg);
+ cmExportTryCompileFileGenerator tcfg(gg, targets, this->Makefile);
tcfg.SetExportFile((this->BinaryDirectory + fname).c_str());
- tcfg.SetExports(targets);
tcfg.SetConfig(this->Makefile->GetSafeDefinition(
"CMAKE_TRY_COMPILE_CONFIGURATION"));
diff --git a/Source/cmCustomCommandGenerator.cxx b/Source/cmCustomCommandGenerator.cxx
index 8f7b480..dc06678 100644
--- a/Source/cmCustomCommandGenerator.cxx
+++ b/Source/cmCustomCommandGenerator.cxx
@@ -45,7 +45,7 @@ std::string cmCustomCommandGenerator::GetCommand(unsigned int c) const
cmGeneratorTarget* target =
this->LG->FindGeneratorTargetToUse(argv0);
if(target && target->GetType() == cmState::EXECUTABLE &&
- (target->Target->IsImported()
+ (target->IsImported()
|| !this->LG->GetMakefile()->IsOn("CMAKE_CROSSCOMPILING")))
{
return target->GetLocation(this->Config);
diff --git a/Source/cmExportBuildFileGenerator.cxx b/Source/cmExportBuildFileGenerator.cxx
index 2d74b97..3af7b71 100644
--- a/Source/cmExportBuildFileGenerator.cxx
+++ b/Source/cmExportBuildFileGenerator.cxx
@@ -27,6 +27,10 @@ cmExportBuildFileGenerator::cmExportBuildFileGenerator()
void cmExportBuildFileGenerator::Compute(cmLocalGenerator* lg)
{
this->LG = lg;
+ if (this->ExportSet)
+ {
+ this->ExportSet->Compute(lg);
+ }
}
//----------------------------------------------------------------------------
@@ -44,9 +48,9 @@ bool cmExportBuildFileGenerator::GenerateMainFile(std::ostream& os)
{
cmGeneratorTarget *te = this->LG
->FindGeneratorTargetToUse(*tei);
- expectedTargets += sep + this->Namespace + te->Target->GetExportName();
+ expectedTargets += sep + this->Namespace + te->GetExportName();
sep = " ";
- if(this->ExportedTargets.insert(te->Target).second)
+ if(this->ExportedTargets.insert(te).second)
{
this->Exports.push_back(te);
}
@@ -76,45 +80,44 @@ bool cmExportBuildFileGenerator::GenerateMainFile(std::ostream& os)
tei != this->Exports.end(); ++tei)
{
cmGeneratorTarget* gte = *tei;
- cmTarget* te = gte->Target;
- this->GenerateImportTargetCode(os, te);
+ this->GenerateImportTargetCode(os, gte);
- te->AppendBuildInterfaceIncludes();
+ gte->Target->AppendBuildInterfaceIncludes();
ImportPropertyMap properties;
- this->PopulateInterfaceProperty("INTERFACE_INCLUDE_DIRECTORIES", te,
+ this->PopulateInterfaceProperty("INTERFACE_INCLUDE_DIRECTORIES", gte,
cmGeneratorExpression::BuildInterface,
properties, missingTargets);
- this->PopulateInterfaceProperty("INTERFACE_SOURCES", te,
+ this->PopulateInterfaceProperty("INTERFACE_SOURCES", gte,
cmGeneratorExpression::BuildInterface,
properties, missingTargets);
- this->PopulateInterfaceProperty("INTERFACE_COMPILE_DEFINITIONS", te,
+ this->PopulateInterfaceProperty("INTERFACE_COMPILE_DEFINITIONS", gte,
cmGeneratorExpression::BuildInterface,
properties, missingTargets);
- this->PopulateInterfaceProperty("INTERFACE_COMPILE_OPTIONS", te,
+ this->PopulateInterfaceProperty("INTERFACE_COMPILE_OPTIONS", gte,
cmGeneratorExpression::BuildInterface,
properties, missingTargets);
- this->PopulateInterfaceProperty("INTERFACE_AUTOUIC_OPTIONS", te,
+ this->PopulateInterfaceProperty("INTERFACE_AUTOUIC_OPTIONS", gte,
cmGeneratorExpression::BuildInterface,
properties, missingTargets);
- this->PopulateInterfaceProperty("INTERFACE_COMPILE_FEATURES", te,
+ this->PopulateInterfaceProperty("INTERFACE_COMPILE_FEATURES", gte,
cmGeneratorExpression::BuildInterface,
properties, missingTargets);
this->PopulateInterfaceProperty("INTERFACE_POSITION_INDEPENDENT_CODE",
- te, properties);
+ gte, properties);
const bool newCMP0022Behavior =
- te->GetPolicyStatusCMP0022() != cmPolicies::WARN
- && te->GetPolicyStatusCMP0022() != cmPolicies::OLD;
+ gte->Target->GetPolicyStatusCMP0022() != cmPolicies::WARN
+ && gte->Target->GetPolicyStatusCMP0022() != cmPolicies::OLD;
if (newCMP0022Behavior)
{
- this->PopulateInterfaceLinkLibrariesProperty(te,
+ this->PopulateInterfaceLinkLibrariesProperty(gte,
cmGeneratorExpression::BuildInterface,
properties, missingTargets);
}
this->PopulateCompatibleInterfaceProperties(gte, properties);
- this->GenerateInterfaceProperties(te, os, properties);
+ this->GenerateInterfaceProperties(gte, os, properties);
}
// Generate import file content for each configuration.
@@ -171,7 +174,7 @@ cmExportBuildFileGenerator
// properties);
// Generate code in the export file.
- this->GenerateImportPropertyCode(os, config, target->Target,
+ this->GenerateImportPropertyCode(os, config, target,
properties);
}
}
@@ -199,7 +202,7 @@ cmExportBuildFileGenerator
std::string prop = "IMPORTED_LOCATION";
prop += suffix;
std::string value;
- if(target->Target->IsAppBundleOnApple())
+ if(target->IsAppBundleOnApple())
{
value = target->GetFullPath(config, false);
}
@@ -232,14 +235,18 @@ cmExportBuildFileGenerator
//----------------------------------------------------------------------------
void
cmExportBuildFileGenerator::HandleMissingTarget(
- std::string& link_libs, std::vector<std::string>& missingTargets,
- cmMakefile* mf, cmTarget* depender, cmTarget* dependee)
+ std::string& link_libs,
+ std::vector<std::string>& missingTargets,
+ cmGeneratorTarget* depender,
+ cmGeneratorTarget* dependee)
{
// The target is not in the export.
if(!this->AppendMode)
{
const std::string name = dependee->GetName();
- std::vector<std::string> namespaces = this->FindNamespaces(mf, name);
+ cmGlobalGenerator* gg =
+ dependee->GetLocalGenerator()->GetGlobalGenerator();
+ std::vector<std::string> namespaces = this->FindNamespaces(gg, name);
int targetOccurrences = (int)namespaces.size();
if (targetOccurrences == 1)
@@ -274,7 +281,7 @@ void cmExportBuildFileGenerator
tei = this->ExportSet->GetTargetExports()->begin();
tei != this->ExportSet->GetTargetExports()->end(); ++tei)
{
- targets.push_back((*tei)->Target->GetName());
+ targets.push_back((*tei)->TargetName);
}
return;
}
@@ -284,10 +291,9 @@ void cmExportBuildFileGenerator
//----------------------------------------------------------------------------
std::vector<std::string>
cmExportBuildFileGenerator
-::FindNamespaces(cmMakefile* mf, const std::string& name)
+::FindNamespaces(cmGlobalGenerator* gg, const std::string& name)
{
std::vector<std::string> namespaces;
- cmGlobalGenerator* gg = mf->GetGlobalGenerator();
std::map<std::string, cmExportBuildFileGenerator*>& exportSets
= gg->GetBuildExportSets();
@@ -310,8 +316,8 @@ cmExportBuildFileGenerator
//----------------------------------------------------------------------------
void
cmExportBuildFileGenerator
-::ComplainAboutMissingTarget(cmTarget* depender,
- cmTarget* dependee,
+::ComplainAboutMissingTarget(cmGeneratorTarget* depender,
+ cmGeneratorTarget* dependee,
int occurrences)
{
if(cmSystemTools::GetErrorOccuredFlag())
diff --git a/Source/cmExportBuildFileGenerator.h b/Source/cmExportBuildFileGenerator.h
index 16695f1..85aae2f 100644
--- a/Source/cmExportBuildFileGenerator.h
+++ b/Source/cmExportBuildFileGenerator.h
@@ -54,12 +54,11 @@ protected:
std::vector<std::string> &missingTargets);
virtual void HandleMissingTarget(std::string& link_libs,
std::vector<std::string>& missingTargets,
- cmMakefile* mf,
- cmTarget* depender,
- cmTarget* dependee);
+ cmGeneratorTarget* depender,
+ cmGeneratorTarget* dependee);
- void ComplainAboutMissingTarget(cmTarget* depender,
- cmTarget* dependee,
+ void ComplainAboutMissingTarget(cmGeneratorTarget* depender,
+ cmGeneratorTarget* dependee,
int occurrences);
/** Fill in properties indicating built file locations. */
@@ -72,7 +71,7 @@ protected:
const std::string& config);
std::vector<std::string>
- FindNamespaces(cmMakefile* mf, const std::string& name);
+ FindNamespaces(cmGlobalGenerator* gg, const std::string& name);
std::vector<std::string> Targets;
cmExportSet *ExportSet;
diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx
index 6127626..5177ec8 100644
--- a/Source/cmExportFileGenerator.cxx
+++ b/Source/cmExportFileGenerator.cxx
@@ -18,7 +18,6 @@
#include "cmLocalGenerator.h"
#include "cmMakefile.h"
#include "cmSystemTools.h"
-#include "cmTarget.h"
#include "cmTargetExport.h"
#include "cmVersion.h"
#include "cmComputeLinkInformation.h"
@@ -155,7 +154,7 @@ void cmExportFileGenerator::GenerateImportConfig(std::ostream& os,
//----------------------------------------------------------------------------
void cmExportFileGenerator::PopulateInterfaceProperty(
const std::string& propName,
- cmTarget *target,
+ cmGeneratorTarget *target,
ImportPropertyMap &properties)
{
const char *input = target->GetProperty(propName);
@@ -169,7 +168,7 @@ void cmExportFileGenerator::PopulateInterfaceProperty(
void cmExportFileGenerator::PopulateInterfaceProperty(
const std::string& propName,
const std::string& outputName,
- cmTarget *target,
+ cmGeneratorTarget *target,
cmGeneratorExpression::PreprocessContext preprocessRule,
ImportPropertyMap &properties,
std::vector<std::string> &missingTargets)
@@ -206,7 +205,7 @@ void cmExportFileGenerator::GenerateRequiredCMakeVersion(std::ostream& os,
//----------------------------------------------------------------------------
bool cmExportFileGenerator::PopulateInterfaceLinkLibrariesProperty(
- cmTarget *target,
+ cmGeneratorTarget *target,
cmGeneratorExpression::PreprocessContext preprocessRule,
ImportPropertyMap &properties,
std::vector<std::string> &missingTargets)
@@ -398,11 +397,11 @@ void cmExportFileGenerator::PopulateSourcesInterface(
ImportPropertyMap &properties,
std::vector<std::string> &missingTargets)
{
- cmTarget *target = tei->Target;
+ cmGeneratorTarget* gt = tei->Target;
assert(preprocessRule == cmGeneratorExpression::InstallInterface);
const char *propName = "INTERFACE_SOURCES";
- const char *input = target->GetProperty(propName);
+ const char *input = gt->GetProperty(propName);
if (!input)
{
@@ -420,11 +419,9 @@ void cmExportFileGenerator::PopulateSourcesInterface(
true);
if (!prepro.empty())
{
- this->ResolveTargetsInGeneratorExpressions(prepro, target,
+ this->ResolveTargetsInGeneratorExpressions(prepro, gt,
missingTargets);
- cmGeneratorTarget* gt = target->GetMakefile()
- ->GetGlobalGenerator()->GetGeneratorTarget(target);
if (!checkInterfaceDirs(prepro, gt, propName))
{
return;
@@ -440,9 +437,7 @@ void cmExportFileGenerator::PopulateIncludeDirectoriesInterface(
ImportPropertyMap &properties,
std::vector<std::string> &missingTargets)
{
- cmGeneratorTarget *target = tei->Target->GetMakefile()
- ->GetGlobalGenerator()
- ->GetGeneratorTarget(tei->Target);
+ cmGeneratorTarget *target = tei->Target;
assert(preprocessRule == cmGeneratorExpression::InstallInterface);
const char *propName = "INTERFACE_INCLUDE_DIRECTORIES";
@@ -492,7 +487,7 @@ void cmExportFileGenerator::PopulateIncludeDirectoriesInterface(
true);
if (!prepro.empty())
{
- this->ResolveTargetsInGeneratorExpressions(prepro, target->Target,
+ this->ResolveTargetsInGeneratorExpressions(prepro, target,
missingTargets);
if (!checkInterfaceDirs(prepro, target, propName))
@@ -506,7 +501,7 @@ void cmExportFileGenerator::PopulateIncludeDirectoriesInterface(
//----------------------------------------------------------------------------
void cmExportFileGenerator::PopulateInterfaceProperty(
const std::string& propName,
- cmTarget *target,
+ cmGeneratorTarget* target,
cmGeneratorExpression::PreprocessContext preprocessRule,
ImportPropertyMap &properties,
std::vector<std::string> &missingTargets)
@@ -578,15 +573,14 @@ void cmExportFileGenerator::PopulateCompatibleInterfaceProperties(
cmGeneratorTarget *gtarget,
ImportPropertyMap &properties)
{
- cmTarget *target = gtarget->Target;
this->PopulateInterfaceProperty("COMPATIBLE_INTERFACE_BOOL",
- target, properties);
+ gtarget, properties);
this->PopulateInterfaceProperty("COMPATIBLE_INTERFACE_STRING",
- target, properties);
+ gtarget, properties);
this->PopulateInterfaceProperty("COMPATIBLE_INTERFACE_NUMBER_MIN",
- target, properties);
+ gtarget, properties);
this->PopulateInterfaceProperty("COMPATIBLE_INTERFACE_NUMBER_MAX",
- target, properties);
+ gtarget, properties);
std::set<std::string> ifaceProperties;
@@ -597,12 +591,12 @@ void cmExportFileGenerator::PopulateCompatibleInterfaceProperties(
getPropertyContents(gtarget, "COMPATIBLE_INTERFACE_NUMBER_MAX",
ifaceProperties);
- if (target->GetType() != cmState::INTERFACE_LIBRARY)
+ if (gtarget->GetType() != cmState::INTERFACE_LIBRARY)
{
getCompatibleInterfaceProperties(gtarget, ifaceProperties, "");
std::vector<std::string> configNames;
- target->GetMakefile()->GetConfigurations(configNames);
+ gtarget->Target->GetMakefile()->GetConfigurations(configNames);
for (std::vector<std::string>::const_iterator ci = configNames.begin();
ci != configNames.end(); ++ci)
@@ -615,12 +609,13 @@ void cmExportFileGenerator::PopulateCompatibleInterfaceProperties(
it != ifaceProperties.end(); ++it)
{
this->PopulateInterfaceProperty("INTERFACE_" + *it,
- target, properties);
+ gtarget, properties);
}
}
//----------------------------------------------------------------------------
-void cmExportFileGenerator::GenerateInterfaceProperties(cmTarget const* target,
+void cmExportFileGenerator::GenerateInterfaceProperties(
+ const cmGeneratorTarget* target,
std::ostream& os,
const ImportPropertyMap &properties)
{
@@ -642,12 +637,12 @@ void cmExportFileGenerator::GenerateInterfaceProperties(cmTarget const* target,
//----------------------------------------------------------------------------
bool
cmExportFileGenerator::AddTargetNamespace(std::string &input,
- cmTarget* target,
+ cmGeneratorTarget* target,
std::vector<std::string> &missingTargets)
{
- cmMakefile *mf = target->GetMakefile();
+ cmLocalGenerator *lg = target->GetLocalGenerator();
- cmTarget *tgt = mf->FindTargetToUse(input);
+ cmGeneratorTarget *tgt = lg->FindGeneratorTargetToUse(input);
if (!tgt)
{
return false;
@@ -665,7 +660,7 @@ cmExportFileGenerator::AddTargetNamespace(std::string &input,
{
std::string namespacedTarget;
this->HandleMissingTarget(namespacedTarget, missingTargets,
- mf, target, tgt);
+ target, tgt);
if (!namespacedTarget.empty())
{
input = namespacedTarget;
@@ -678,7 +673,7 @@ cmExportFileGenerator::AddTargetNamespace(std::string &input,
void
cmExportFileGenerator::ResolveTargetsInGeneratorExpressions(
std::string &input,
- cmTarget* target,
+ cmGeneratorTarget* target,
std::vector<std::string> &missingTargets,
FreeTargetsReplace replace)
{
@@ -715,14 +710,12 @@ cmExportFileGenerator::ResolveTargetsInGeneratorExpressions(
void
cmExportFileGenerator::ResolveTargetsInGeneratorExpression(
std::string &input,
- cmTarget* target,
+ cmGeneratorTarget* target,
std::vector<std::string> &missingTargets)
{
std::string::size_type pos = 0;
std::string::size_type lastPos = pos;
- cmMakefile *mf = target->GetMakefile();
-
while((pos = input.find("$<TARGET_PROPERTY:", lastPos)) != input.npos)
{
std::string::size_type nameStartPos = pos +
@@ -783,7 +776,7 @@ cmExportFileGenerator::ResolveTargetsInGeneratorExpression(
if (!errorString.empty())
{
- mf->IssueMessage(cmake::FATAL_ERROR, errorString);
+ target->GetLocalGenerator()->IssueMessage(cmake::FATAL_ERROR, errorString);
}
}
@@ -864,7 +857,7 @@ cmExportFileGenerator
preprocessRule);
if (!prepro.empty())
{
- this->ResolveTargetsInGeneratorExpressions(prepro, target->Target,
+ this->ResolveTargetsInGeneratorExpressions(prepro, target,
missingTargets,
ReplaceFreeTargets);
properties["IMPORTED_LINK_INTERFACE_LIBRARIES" + suffix] = prepro;
@@ -966,7 +959,7 @@ cmExportFileGenerator
sep = ";";
std::string temp = *li;
- this->AddTargetNamespace(temp, target->Target, missingTargets);
+ this->AddTargetNamespace(temp, target, missingTargets);
link_entries += temp;
}
@@ -1048,7 +1041,7 @@ void cmExportFileGenerator::GenerateExpectedTargetsCode(std::ostream& os,
//----------------------------------------------------------------------------
void
cmExportFileGenerator
-::GenerateImportTargetCode(std::ostream& os, cmTarget const* target)
+::GenerateImportTargetCode(std::ostream& os, const cmGeneratorTarget* target)
{
// Construct the imported target name.
std::string targetName = this->Namespace;
@@ -1082,7 +1075,7 @@ cmExportFileGenerator
}
// Mark the imported executable if it has exports.
- if(target->IsExecutableWithExports())
+ if(target->Target->IsExecutableWithExports())
{
os << "set_property(TARGET " << targetName
<< " PROPERTY ENABLE_EXPORTS 1)\n";
@@ -1114,7 +1107,7 @@ cmExportFileGenerator
void
cmExportFileGenerator
::GenerateImportPropertyCode(std::ostream& os, const std::string& config,
- cmTarget const* target,
+ cmGeneratorTarget const* target,
ImportPropertyMap const& properties)
{
// Construct the imported target name.
@@ -1234,7 +1227,7 @@ cmExportFileGenerator::GenerateImportedFileCheckLoop(std::ostream& os)
//----------------------------------------------------------------------------
void
cmExportFileGenerator
-::GenerateImportedFileChecksCode(std::ostream& os, cmTarget* target,
+::GenerateImportedFileChecksCode(std::ostream& os, cmGeneratorTarget* target,
ImportPropertyMap const& properties,
const std::set<std::string>& importedLocations)
{
diff --git a/Source/cmExportFileGenerator.h b/Source/cmExportFileGenerator.h
index 44f779b..18f0b00 100644
--- a/Source/cmExportFileGenerator.h
+++ b/Source/cmExportFileGenerator.h
@@ -75,11 +75,13 @@ protected:
const std::string& config = "");
void GenerateImportFooterCode(std::ostream& os);
void GenerateImportVersionCode(std::ostream& os);
- void GenerateImportTargetCode(std::ostream& os, cmTarget const* target);
+ void GenerateImportTargetCode(std::ostream& os,
+ cmGeneratorTarget const* target);
void GenerateImportPropertyCode(std::ostream& os, const std::string& config,
- cmTarget const* target,
+ cmGeneratorTarget const* target,
ImportPropertyMap const& properties);
- void GenerateImportedFileChecksCode(std::ostream& os, cmTarget* target,
+ void GenerateImportedFileChecksCode(std::ostream& os,
+ cmGeneratorTarget* target,
ImportPropertyMap const& properties,
const std::set<std::string>& importedLocations);
void GenerateImportedFileCheckLoop(std::ostream& os);
@@ -118,23 +120,24 @@ protected:
* export set. */
virtual void HandleMissingTarget(std::string& link_libs,
std::vector<std::string>& missingTargets,
- cmMakefile* mf,
- cmTarget* depender,
- cmTarget* dependee) = 0;
+ cmGeneratorTarget* depender,
+ cmGeneratorTarget* dependee) = 0;
void PopulateInterfaceProperty(const std::string&,
- cmTarget *target,
+ cmGeneratorTarget *target,
cmGeneratorExpression::PreprocessContext,
ImportPropertyMap &properties,
std::vector<std::string> &missingTargets);
- bool PopulateInterfaceLinkLibrariesProperty(cmTarget *target,
+ bool PopulateInterfaceLinkLibrariesProperty(cmGeneratorTarget* target,
cmGeneratorExpression::PreprocessContext,
ImportPropertyMap &properties,
std::vector<std::string> &missingTargets);
- void PopulateInterfaceProperty(const std::string& propName, cmTarget *target,
+ void PopulateInterfaceProperty(const std::string& propName,
+ cmGeneratorTarget* target,
ImportPropertyMap &properties);
void PopulateCompatibleInterfaceProperties(cmGeneratorTarget *target,
ImportPropertyMap &properties);
- void GenerateInterfaceProperties(cmTarget const* target, std::ostream& os,
+ void GenerateInterfaceProperties(cmGeneratorTarget const* target,
+ std::ostream& os,
const ImportPropertyMap &properties);
void PopulateIncludeDirectoriesInterface(
cmTargetExport *target,
@@ -159,7 +162,7 @@ protected:
};
void ResolveTargetsInGeneratorExpressions(std::string &input,
- cmTarget* target,
+ cmGeneratorTarget* target,
std::vector<std::string> &missingTargets,
FreeTargetsReplace replace = NoReplaceFreeTargets);
@@ -182,20 +185,20 @@ protected:
bool AppendMode;
// The set of targets included in the export.
- std::set<cmTarget*> ExportedTargets;
+ std::set<cmGeneratorTarget*> ExportedTargets;
private:
void PopulateInterfaceProperty(const std::string&, const std::string&,
- cmTarget *target,
+ cmGeneratorTarget* target,
cmGeneratorExpression::PreprocessContext,
ImportPropertyMap &properties,
std::vector<std::string> &missingTargets);
- bool AddTargetNamespace(std::string &input, cmTarget* target,
+ bool AddTargetNamespace(std::string &input, cmGeneratorTarget* target,
std::vector<std::string> &missingTargets);
void ResolveTargetsInGeneratorExpression(std::string &input,
- cmTarget* target,
+ cmGeneratorTarget* target,
std::vector<std::string> &missingTargets);
virtual void ReplaceInstallPrefix(std::string &input);
diff --git a/Source/cmExportInstallFileGenerator.cxx b/Source/cmExportInstallFileGenerator.cxx
index 5a51442..a2d6ad1 100644
--- a/Source/cmExportInstallFileGenerator.cxx
+++ b/Source/cmExportInstallFileGenerator.cxx
@@ -48,7 +48,8 @@ bool cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os)
tei = this->IEGen->GetExportSet()->GetTargetExports()->begin();
tei != this->IEGen->GetExportSet()->GetTargetExports()->end(); ++tei)
{
- expectedTargets += sep + this->Namespace + (*tei)->Target->GetExportName();
+ expectedTargets +=
+ sep + this->Namespace + (*tei)->Target->GetExportName();
sep = " ";
cmTargetExport * te = *tei;
if(this->ExportedTargets.insert(te->Target).second)
@@ -131,12 +132,12 @@ bool cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os)
tei = allTargets.begin();
tei != allTargets.end(); ++tei)
{
- cmTarget* te = (*tei)->Target;
+ cmGeneratorTarget* gt = (*tei)->Target;
requiresConfigFiles = requiresConfigFiles
- || te->GetType() != cmState::INTERFACE_LIBRARY;
+ || gt->GetType() != cmState::INTERFACE_LIBRARY;
- this->GenerateImportTargetCode(os, te);
+ this->GenerateImportTargetCode(os, gt);
ImportPropertyMap properties;
@@ -147,32 +148,32 @@ bool cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os)
cmGeneratorExpression::InstallInterface,
properties, missingTargets);
this->PopulateInterfaceProperty("INTERFACE_SYSTEM_INCLUDE_DIRECTORIES",
- te,
+ gt,
cmGeneratorExpression::InstallInterface,
properties, missingTargets);
this->PopulateInterfaceProperty("INTERFACE_COMPILE_DEFINITIONS",
- te,
+ gt,
cmGeneratorExpression::InstallInterface,
properties, missingTargets);
this->PopulateInterfaceProperty("INTERFACE_COMPILE_OPTIONS",
- te,
+ gt,
cmGeneratorExpression::InstallInterface,
properties, missingTargets);
this->PopulateInterfaceProperty("INTERFACE_AUTOUIC_OPTIONS",
- te,
+ gt,
cmGeneratorExpression::InstallInterface,
properties, missingTargets);
this->PopulateInterfaceProperty("INTERFACE_COMPILE_FEATURES",
- te,
+ gt,
cmGeneratorExpression::InstallInterface,
properties, missingTargets);
const bool newCMP0022Behavior =
- te->GetPolicyStatusCMP0022() != cmPolicies::WARN
- && te->GetPolicyStatusCMP0022() != cmPolicies::OLD;
+ gt->Target->GetPolicyStatusCMP0022() != cmPolicies::WARN
+ && gt->Target->GetPolicyStatusCMP0022() != cmPolicies::OLD;
if (newCMP0022Behavior)
{
- if (this->PopulateInterfaceLinkLibrariesProperty(te,
+ if (this->PopulateInterfaceLinkLibrariesProperty(gt,
cmGeneratorExpression::InstallInterface,
properties, missingTargets)
&& !this->ExportOld)
@@ -180,11 +181,11 @@ bool cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os)
require2_8_12 = true;
}
}
- if (te->GetType() == cmState::INTERFACE_LIBRARY)
+ if (gt->GetType() == cmState::INTERFACE_LIBRARY)
{
require3_0_0 = true;
}
- if(te->GetProperty("INTERFACE_SOURCES"))
+ if(gt->GetProperty("INTERFACE_SOURCES"))
{
// We can only generate INTERFACE_SOURCES in CMake 3.3, but CMake 3.1
// can consume them.
@@ -192,14 +193,11 @@ bool cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os)
}
this->PopulateInterfaceProperty("INTERFACE_POSITION_INDEPENDENT_CODE",
- te, properties);
- cmGeneratorTarget *gtgt = te->GetMakefile()
- ->GetGlobalGenerator()
- ->GetGeneratorTarget(te);
+ gt, properties);
- this->PopulateCompatibleInterfaceProperties(gtgt, properties);
+ this->PopulateCompatibleInterfaceProperties(gt, properties);
- this->GenerateInterfaceProperties(te, os, properties);
+ this->GenerateInterfaceProperties(gt, os, properties);
}
if (require3_1_0)
@@ -362,8 +360,7 @@ cmExportInstallFileGenerator
if(!properties.empty())
{
// Get the rest of the target details.
- cmGeneratorTarget *gtgt = te->Target->GetMakefile()
- ->GetGlobalGenerator()->GetGeneratorTarget(te->Target);
+ cmGeneratorTarget *gtgt = te->Target;
this->SetImportDetailProperties(config, suffix,
gtgt, properties, missingTargets);
@@ -378,8 +375,8 @@ cmExportInstallFileGenerator
// properties);
// Generate code in the export file.
- this->GenerateImportPropertyCode(os, config, te->Target, properties);
- this->GenerateImportedFileChecksCode(os, te->Target, properties,
+ this->GenerateImportPropertyCode(os, config, gtgt, properties);
+ this->GenerateImportedFileChecksCode(os, gtgt, properties,
importedLocations);
}
}
@@ -402,7 +399,7 @@ cmExportInstallFileGenerator
}
// Get the target to be installed.
- cmTarget* target = itgen->GetTarget()->Target;
+ cmGeneratorTarget* target = itgen->GetTarget();
// Construct the installed location of the target.
std::string dest = itgen->GetDestination(config);
@@ -456,12 +453,13 @@ cmExportInstallFileGenerator
//----------------------------------------------------------------------------
void
-cmExportInstallFileGenerator::HandleMissingTarget(
- std::string& link_libs, std::vector<std::string>& missingTargets,
- cmMakefile* mf, cmTarget* depender, cmTarget* dependee)
+cmExportInstallFileGenerator::HandleMissingTarget(std::string& link_libs,
+ std::vector<std::string>& missingTargets,
+ cmGeneratorTarget* depender, cmGeneratorTarget* dependee)
{
const std::string name = dependee->GetName();
- std::vector<std::string> namespaces = this->FindNamespaces(mf, name);
+ cmGlobalGenerator* gg = dependee->GetLocalGenerator()->GetGlobalGenerator();
+ std::vector<std::string> namespaces = this->FindNamespaces(gg, name);
int targetOccurrences = (int)namespaces.size();
if (targetOccurrences == 1)
{
@@ -482,10 +480,9 @@ cmExportInstallFileGenerator::HandleMissingTarget(
//----------------------------------------------------------------------------
std::vector<std::string>
cmExportInstallFileGenerator
-::FindNamespaces(cmMakefile* mf, const std::string& name)
+::FindNamespaces(cmGlobalGenerator* gg, const std::string& name)
{
std::vector<std::string> namespaces;
- cmGlobalGenerator* gg = mf->GetGlobalGenerator();
const cmExportSetMap& exportSets = gg->GetExportSets();
for(cmExportSetMap::const_iterator expIt = exportSets.begin();
@@ -523,8 +520,8 @@ cmExportInstallFileGenerator
//----------------------------------------------------------------------------
void
cmExportInstallFileGenerator
-::ComplainAboutMissingTarget(cmTarget* depender,
- cmTarget* dependee,
+::ComplainAboutMissingTarget(cmGeneratorTarget* depender,
+ cmGeneratorTarget* dependee,
int occurrences)
{
std::ostringstream e;
diff --git a/Source/cmExportInstallFileGenerator.h b/Source/cmExportInstallFileGenerator.h
index b06fee5..13dae89 100644
--- a/Source/cmExportInstallFileGenerator.h
+++ b/Source/cmExportInstallFileGenerator.h
@@ -57,17 +57,16 @@ protected:
std::vector<std::string> &missingTargets);
virtual void HandleMissingTarget(std::string& link_libs,
std::vector<std::string>& missingTargets,
- cmMakefile* mf,
- cmTarget* depender,
- cmTarget* dependee);
+ cmGeneratorTarget* depender,
+ cmGeneratorTarget* dependee);
virtual void ReplaceInstallPrefix(std::string &input);
- void ComplainAboutMissingTarget(cmTarget* depender,
- cmTarget* dependee,
+ void ComplainAboutMissingTarget(cmGeneratorTarget* depender,
+ cmGeneratorTarget* dependee,
int occurrences);
- std::vector<std::string> FindNamespaces(cmMakefile* mf,
+ std::vector<std::string> FindNamespaces(cmGlobalGenerator* gg,
const std::string& name);
diff --git a/Source/cmExportSet.cxx b/Source/cmExportSet.cxx
index 4148fb5..0059b64 100644
--- a/Source/cmExportSet.cxx
+++ b/Source/cmExportSet.cxx
@@ -13,12 +13,22 @@
#include "cmExportSet.h"
#include "cmTargetExport.h"
#include "cmAlgorithms.h"
+#include "cmLocalGenerator.h"
cmExportSet::~cmExportSet()
{
cmDeleteAll(this->TargetExports);
}
+void cmExportSet::Compute(cmLocalGenerator* lg)
+{
+ for (std::vector<cmTargetExport*>::iterator it = this->TargetExports.begin();
+ it != this->TargetExports.end(); ++it)
+ {
+ (*it)->Target = lg->FindGeneratorTargetToUse((*it)->TargetName);
+ }
+}
+
void cmExportSet::AddTargetExport(cmTargetExport* te)
{
this->TargetExports.push_back(te);
diff --git a/Source/cmExportSet.h b/Source/cmExportSet.h
index a57aa12..d780a22 100644
--- a/Source/cmExportSet.h
+++ b/Source/cmExportSet.h
@@ -15,6 +15,7 @@
#include "cmSystemTools.h"
class cmTargetExport;
class cmInstallExportGenerator;
+class cmLocalGenerator;
/// A set of targets that were installed with the same EXPORT parameter.
class cmExportSet
@@ -25,6 +26,8 @@ public:
/// Destructor
~cmExportSet();
+ void Compute(cmLocalGenerator* lg);
+
void AddTargetExport(cmTargetExport* tgt);
void AddInstallation(cmInstallExportGenerator const* installation);
diff --git a/Source/cmExportTryCompileFileGenerator.cxx b/Source/cmExportTryCompileFileGenerator.cxx
index d0e65e1..1daa67e 100644
--- a/Source/cmExportTryCompileFileGenerator.cxx
+++ b/Source/cmExportTryCompileFileGenerator.cxx
@@ -14,22 +14,25 @@
#include "cmGeneratedFileStream.h"
#include "cmGlobalGenerator.h"
+#include "cmLocalGenerator.h"
#include "cmGeneratorExpressionDAGChecker.h"
//----------------------------------------------------------------------------
cmExportTryCompileFileGenerator::cmExportTryCompileFileGenerator(
- cmGlobalGenerator* gg)
+ cmGlobalGenerator* gg,
+ const std::vector<std::string>& targets,
+ cmMakefile* mf)
{
- gg->CreateGenerationObjects(cmGlobalGenerator::ImportedOnly);
+ gg->CreateImportedGenerationObjects(mf, targets, this->Exports);
}
bool cmExportTryCompileFileGenerator::GenerateMainFile(std::ostream& os)
{
- std::set<cmTarget const*> emitted;
- std::set<cmTarget const*> emittedDeps;
+ std::set<cmGeneratorTarget const*> emitted;
+ std::set<cmGeneratorTarget const*> emittedDeps;
while(!this->Exports.empty())
{
- cmTarget const* te = this->Exports.back();
+ cmGeneratorTarget const* te = this->Exports.back();
this->Exports.pop_back();
if (emitted.insert(te).second)
{
@@ -54,9 +57,9 @@ bool cmExportTryCompileFileGenerator::GenerateMainFile(std::ostream& os)
}
std::string cmExportTryCompileFileGenerator::FindTargets(
- const std::string& propName,
- cmTarget const* tgt,
- std::set<cmTarget const*> &emitted)
+ const std::string& propName,
+ cmGeneratorTarget const* tgt,
+ std::set<cmGeneratorTarget const*> &emitted)
{
const char *prop = tgt->GetProperty(propName);
if(!prop)
@@ -74,24 +77,22 @@ std::string cmExportTryCompileFileGenerator::FindTargets(
cmTarget dummyHead;
dummyHead.SetType(cmState::EXECUTABLE, "try_compile_dummy_exe");
- dummyHead.SetMakefile(tgt->GetMakefile());
+ dummyHead.SetMakefile(tgt->Target->GetMakefile());
- cmGeneratorTarget* gtgt =
- tgt->GetMakefile()->GetGlobalGenerator()->GetGeneratorTarget(tgt);
- cmGeneratorTarget gDummyHead(&dummyHead, gtgt->GetLocalGenerator());
+ cmGeneratorTarget gDummyHead(&dummyHead, tgt->GetLocalGenerator());
- std::string result = cge->Evaluate(gtgt->GetLocalGenerator(), this->Config,
+ std::string result = cge->Evaluate(tgt->GetLocalGenerator(), this->Config,
false, &gDummyHead,
- gtgt, &dagChecker);
+ tgt, &dagChecker);
const std::set<cmGeneratorTarget const*> &allTargets =
cge->GetAllTargetsSeen();
for(std::set<cmGeneratorTarget const*>::const_iterator li =
allTargets.begin(); li != allTargets.end(); ++li)
{
- if(emitted.insert((*li)->Target).second)
+ if(emitted.insert(*li).second)
{
- this->Exports.push_back((*li)->Target);
+ this->Exports.push_back(*li);
}
}
return result;
@@ -99,11 +100,12 @@ std::string cmExportTryCompileFileGenerator::FindTargets(
//----------------------------------------------------------------------------
void
-cmExportTryCompileFileGenerator::PopulateProperties(cmTarget const* target,
- ImportPropertyMap& properties,
- std::set<cmTarget const*> &emitted)
+cmExportTryCompileFileGenerator::PopulateProperties(
+ const cmGeneratorTarget* target,
+ ImportPropertyMap& properties,
+ std::set<cmGeneratorTarget const*> &emitted)
{
- cmPropertyMap props = target->GetProperties();
+ cmPropertyMap props = target->Target->GetProperties();
for(cmPropertyMap::const_iterator i = props.begin(); i != props.end(); ++i)
{
properties[i->first] = i->second.GetValue();
@@ -120,7 +122,8 @@ cmExportTryCompileFileGenerator::PopulateProperties(cmTarget const* target,
for(std::vector<std::string>::const_iterator li = depends.begin();
li != depends.end(); ++li)
{
- cmTarget *tgt = target->GetMakefile()->FindTargetToUse(*li);
+ cmGeneratorTarget *tgt =
+ target->GetLocalGenerator()->FindGeneratorTargetToUse(*li);
if(tgt && emitted.insert(tgt).second)
{
this->Exports.push_back(tgt);
diff --git a/Source/cmExportTryCompileFileGenerator.h b/Source/cmExportTryCompileFileGenerator.h
index 8838eca..fc135a4 100644
--- a/Source/cmExportTryCompileFileGenerator.h
+++ b/Source/cmExportTryCompileFileGenerator.h
@@ -20,11 +20,11 @@ class cmInstallTargetGenerator;
class cmExportTryCompileFileGenerator: public cmExportFileGenerator
{
public:
- cmExportTryCompileFileGenerator(cmGlobalGenerator* gg);
+ cmExportTryCompileFileGenerator(cmGlobalGenerator* gg,
+ std::vector<std::string> const& targets,
+ cmMakefile* mf);
/** Set the list of targets to export. */
- void SetExports(const std::vector<cmTarget const*> &exports)
- { this->Exports = exports; }
void SetConfig(const std::string& config) { this->Config = config; }
protected:
@@ -37,22 +37,22 @@ protected:
std::vector<std::string>&) {}
virtual void HandleMissingTarget(std::string&,
std::vector<std::string>&,
- cmMakefile*,
- cmTarget*,
- cmTarget*) {}
+ cmGeneratorTarget*,
+ cmGeneratorTarget*) {}
- void PopulateProperties(cmTarget const* target,
+ void PopulateProperties(cmGeneratorTarget const* target,
ImportPropertyMap& properties,
- std::set<cmTarget const*> &emitted);
+ std::set<const cmGeneratorTarget*>& emitted);
std::string InstallNameDir(cmGeneratorTarget* target,
const std::string& config);
private:
- std::string FindTargets(const std::string& prop, cmTarget const* tgt,
- std::set<cmTarget const*> &emitted);
+ std::string FindTargets(const std::string& prop,
+ const cmGeneratorTarget* tgt,
+ std::set<const cmGeneratorTarget*>& emitted);
- std::vector<cmTarget const*> Exports;
+ std::vector<cmGeneratorTarget const*> Exports;
std::string Config;
};
diff --git a/Source/cmExtraSublimeTextGenerator.cxx b/Source/cmExtraSublimeTextGenerator.cxx
index d1599c4..a6b14ba 100644
--- a/Source/cmExtraSublimeTextGenerator.cxx
+++ b/Source/cmExtraSublimeTextGenerator.cxx
@@ -388,7 +388,7 @@ cmExtraSublimeTextGenerator::ComputeFlagsForObject(cmSourceFile* source,
// }
// Add shared-library flags if needed.
- lg->AddCMP0018Flags(flags, gtgt->Target, language, config);
+ lg->AddCMP0018Flags(flags, gtgt, language, config);
// Add include directory flags.
{
@@ -403,7 +403,7 @@ cmExtraSublimeTextGenerator::ComputeFlagsForObject(cmSourceFile* source,
lg->AppendFlags(flags, makefile->GetDefineFlags());
// Add target-specific flags.
- lg->AddCompileOptions(flags, gtgt->Target, language, config);
+ lg->AddCompileOptions(flags, gtgt, language, config);
// Add source file specific flags.
lg->AppendFlags(flags, source->GetProperty("COMPILE_FLAGS"));
@@ -433,7 +433,7 @@ ComputeDefines(cmSourceFile *source, cmLocalGenerator* lg,
}
// Add preprocessor definitions for this target and configuration.
- lg->AddCompileDefinitions(defines, target->Target, config, language);
+ lg->AddCompileDefinitions(defines, target, config, language);
lg->AppendDefines(defines, source->GetProperty("COMPILE_DEFINITIONS"));
{
std::string defPropName = "COMPILE_DEFINITIONS_";
diff --git a/Source/cmGeneratorExpressionNode.cxx b/Source/cmGeneratorExpressionNode.cxx
index 945c284..1a878e2 100644
--- a/Source/cmGeneratorExpressionNode.cxx
+++ b/Source/cmGeneratorExpressionNode.cxx
@@ -1497,11 +1497,11 @@ static const struct TargetPolicyNode : public cmGeneratorExpressionNode
const char *policy = targetPolicyWhitelist[i];
if (parameters.front() == policy)
{
- cmMakefile *mf = context->HeadTarget->Target->GetMakefile();
+ cmLocalGenerator* lg = context->HeadTarget->GetLocalGenerator();
switch(statusForTarget(context->HeadTarget, policy))
{
case cmPolicies::WARN:
- mf->IssueMessage(cmake::AUTHOR_WARNING,
+ lg->IssueMessage(cmake::AUTHOR_WARNING,
cmPolicies::GetPolicyWarning(policyForString(policy)));
case cmPolicies::REQUIRED_IF_USED:
case cmPolicies::REQUIRED_ALWAYS:
@@ -1654,7 +1654,7 @@ struct TargetFilesystemArtifactResultCreator<ArtifactLinkerTag>
const GeneratorExpressionContent *content)
{
// The file used to link to the target (.so, .lib, .a).
- if(!target->Target->IsLinkable())
+ if(!target->IsLinkable())
{
::reportError(context, content->GetOriginalExpression(),
"TARGET_LINKER_FILE is allowed only for libraries and "
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index 4fd9cec..b2959fe 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -335,6 +335,26 @@ std::string cmGeneratorTarget::GetName() const
}
//----------------------------------------------------------------------------
+std::string cmGeneratorTarget::GetExportName() const
+{
+ const char *exportName = this->GetProperty("EXPORT_NAME");
+
+ if (exportName && *exportName)
+ {
+ if (!cmGeneratorExpression::IsValidTargetName(exportName))
+ {
+ std::ostringstream e;
+ e << "EXPORT_NAME property \"" << exportName << "\" for \""
+ << this->GetName() << "\": is not valid.";
+ cmSystemTools::Error(e.str().c_str());
+ return "";
+ }
+ return exportName;
+ }
+ return this->GetName();
+}
+
+//----------------------------------------------------------------------------
const char *cmGeneratorTarget::GetProperty(const std::string& prop) const
{
return this->Target->GetProperty(prop);
@@ -774,9 +794,8 @@ std::set<cmLinkItem> const& cmGeneratorTarget::GetUtilityItems() const
for(std::set<std::string>::const_iterator i = utilities.begin();
i != utilities.end(); ++i)
{
- cmTarget* tgt = this->Makefile->FindTargetToUse(*i);
- cmGeneratorTarget* gt = tgt ? this->GlobalGenerator
- ->GetGeneratorTarget(tgt) : 0;
+ cmGeneratorTarget* gt =
+ this->LocalGenerator->FindGeneratorTargetToUse(*i);
this->UtilityItems.insert(cmLinkItem(*i, gt));
}
}
@@ -797,7 +816,7 @@ void cmGeneratorTarget
const char* cmGeneratorTarget::GetLocation(const std::string& config) const
{
static std::string location;
- if (this->Target->IsImported())
+ if (this->IsImported())
{
location = this->Target->ImportedGetFullPath(config, false);
}
@@ -832,7 +851,7 @@ const char* cmGeneratorTarget::GetLocationForBuild() const
location += cfgid;
}
- if(this->Target->IsAppBundleOnApple())
+ if(this->IsAppBundleOnApple())
{
std::string macdir = this->BuildMacContentDirectory("", "",
false);
@@ -986,7 +1005,7 @@ static bool processSources(cmGeneratorTarget const* tgt,
{
if(!e.empty())
{
- cmake* cm = mf->GetCMakeInstance();
+ cmake* cm = tgt->GetLocalGenerator()->GetCMakeInstance();
cm->IssueMessage(cmake::FATAL_ERROR, e,
tgt->Target->GetBacktrace());
}
@@ -1044,7 +1063,7 @@ void cmGeneratorTarget::GetSourceFiles(std::vector<std::string> &files,
{
assert(this->GetType() != cmState::INTERFACE_LIBRARY);
- if (!this->Makefile->GetGlobalGenerator()->GetConfigureDoneCMP0026())
+ if (!this->LocalGenerator->GetGlobalGenerator()->GetConfigureDoneCMP0026())
{
// At configure-time, this method can be called as part of getting the
// LOCATION property or to export() a file to be include()d. However
@@ -1089,7 +1108,7 @@ void cmGeneratorTarget::GetSourceFiles(std::vector<std::string> &files,
"SOURCES")
!= debugProperties.end();
- if (this->Makefile->GetGlobalGenerator()->GetConfigureDoneCMP0026())
+ if (this->LocalGenerator->GetGlobalGenerator()->GetConfigureDoneCMP0026())
{
this->DebugSourcesDone = true;
}
@@ -1365,7 +1384,8 @@ bool cmGeneratorTarget::IsImportedSharedLibWithoutSOName(
{
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;
}
@@ -1406,7 +1426,8 @@ bool cmGeneratorTarget::HasMacOSXRpathInstallNameDir(
else
{
// 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())
{
@@ -1448,7 +1469,7 @@ bool cmGeneratorTarget::HasMacOSXRpathInstallNameDir(
w << " This could be because you are using a Mac OS X version";
w << " less than 10.5 or because CMake's platform configuration is";
w << " corrupt.";
- cmake* cm = this->Makefile->GetCMakeInstance();
+ cmake* cm = this->LocalGenerator->GetCMakeInstance();
cm->IssueMessage(cmake::FATAL_ERROR, w.str(),
this->Target->GetBacktrace());
}
@@ -1475,7 +1496,7 @@ bool cmGeneratorTarget::MacOSXRpathInstallNameDirDefault() const
if(cmp0042 == cmPolicies::WARN)
{
- this->Makefile->GetGlobalGenerator()->
+ this->LocalGenerator->GetGlobalGenerator()->
AddCMP0042WarnTarget(this->GetName());
}
@@ -1490,10 +1511,11 @@ bool cmGeneratorTarget::MacOSXRpathInstallNameDirDefault() const
//----------------------------------------------------------------------------
std::string cmGeneratorTarget::GetSOName(const std::string& config) const
{
- if(this->Target->IsImported())
+ if(this->IsImported())
{
// Lookup the imported soname.
- if(cmTarget::ImportInfo const* info = this->Target->GetImportInfo(config))
+ if(cmGeneratorTarget::ImportInfo const* info =
+ this->GetImportInfo(config))
{
if(info->NoSOName)
{
@@ -1550,9 +1572,9 @@ cmGeneratorTarget::GetAppBundleDirectory(const std::string& config,
//----------------------------------------------------------------------------
bool cmGeneratorTarget::IsBundleOnApple() const
{
- return this->Target->IsFrameworkOnApple()
- || this->Target->IsAppBundleOnApple()
- || this->Target->IsCFBundleOnApple();
+ return this->IsFrameworkOnApple()
+ || this->IsAppBundleOnApple()
+ || this->IsCFBundleOnApple();
}
//----------------------------------------------------------------------------
@@ -1565,7 +1587,7 @@ std::string cmGeneratorTarget::GetCFBundleDirectory(const std::string& config,
const char *ext = this->GetProperty("BUNDLE_EXTENSION");
if (!ext)
{
- if (this->Target->IsXCTestOnApple())
+ if (this->IsXCTestOnApple())
{
ext = "xctest";
}
@@ -1604,9 +1626,9 @@ cmGeneratorTarget::GetFrameworkDirectory(const std::string& config,
std::string
cmGeneratorTarget::GetFullName(const std::string& config, bool implib) const
{
- if(this->Target->IsImported())
+ if(this->IsImported())
{
- return this->Target->GetFullNameImported(config, implib);
+ return this->GetFullNameImported(config, implib);
}
else
{
@@ -1691,7 +1713,7 @@ public:
cmGeneratorTarget const* head):
Config(config), Languages(languages), HeadTarget(head),
Makefile(target->Target->GetMakefile()), Target(target)
- { this->Visited.insert(target->Target); }
+ { this->Visited.insert(target); }
void Visit(cmLinkItem const& item)
{
@@ -1732,7 +1754,7 @@ public:
}
return;
}
- if(!this->Visited.insert(item.Target->Target).second)
+ if(!this->Visited.insert(item.Target).second)
{
return;
}
@@ -1758,7 +1780,7 @@ private:
cmGeneratorTarget const* HeadTarget;
cmMakefile* Makefile;
const cmGeneratorTarget* Target;
- std::set<cmTarget const*> Visited;
+ std::set<cmGeneratorTarget const*> Visited;
};
//----------------------------------------------------------------------------
@@ -1783,14 +1805,12 @@ class cmTargetSelectLinker
{
int Preference;
cmGeneratorTarget const* Target;
- cmMakefile* Makefile;
cmGlobalGenerator* GG;
std::set<std::string> Preferred;
public:
cmTargetSelectLinker(cmGeneratorTarget const* target)
: Preference(0), Target(target)
{
- this->Makefile = this->Target->Makefile;
this->GG = this->Target->GetLocalGenerator()->GetGlobalGenerator();
}
void Consider(const char* lang)
@@ -1824,7 +1844,7 @@ public:
e << " " << *li << "\n";
}
e << "Set the LINKER_LANGUAGE property for this target.";
- cmake* cm = this->Makefile->GetCMakeInstance();
+ cmake* cm = this->Target->GetLocalGenerator()->GetCMakeInstance();
cm->IssueMessage(cmake::FATAL_ERROR, e.str(),
this->Target->Target->GetBacktrace());
}
@@ -1915,15 +1935,15 @@ cmGeneratorTarget::BuildMacContentDirectory(const std::string& base,
bool contentOnly) const
{
std::string fpath = base;
- if(this->Target->IsAppBundleOnApple())
+ if(this->IsAppBundleOnApple())
{
fpath += this->GetAppBundleDirectory(config, contentOnly);
}
- if(this->Target->IsFrameworkOnApple())
+ if(this->IsFrameworkOnApple())
{
fpath += this->GetFrameworkDirectory(config, contentOnly);
}
- if(this->Target->IsCFBundleOnApple())
+ if(this->IsCFBundleOnApple())
{
fpath += this->GetCFBundleDirectory(config, contentOnly);
}
@@ -1939,7 +1959,7 @@ cmGeneratorTarget::GetMacContentDirectory(const std::string& config,
std::string fpath = this->GetDirectory(config, implib);
fpath += "/";
bool contentOnly = true;
- if(this->Target->IsFrameworkOnApple())
+ if(this->IsFrameworkOnApple())
{
// additional files with a framework go into the version specific
// directory
@@ -2004,27 +2024,26 @@ cmGeneratorTarget::UseObjectLibraries(std::vector<std::string>& objs,
{
std::vector<cmSourceFile const*> objectFiles;
this->GetExternalObjects(objectFiles, config);
- std::vector<cmTarget*> objectLibraries;
+ std::vector<cmGeneratorTarget*> objectLibraries;
for(std::vector<cmSourceFile const*>::const_iterator
it = objectFiles.begin(); it != objectFiles.end(); ++it)
{
std::string objLib = (*it)->GetObjectLibrary();
- if (cmTarget* tgt = this->Makefile->FindTargetToUse(objLib))
+ if (cmGeneratorTarget* tgt =
+ this->LocalGenerator->FindGeneratorTargetToUse(objLib))
{
objectLibraries.push_back(tgt);
}
}
- std::vector<cmTarget*>::const_iterator end
+ std::vector<cmGeneratorTarget*>::const_iterator end
= cmRemoveDuplicates(objectLibraries);
- for(std::vector<cmTarget*>::const_iterator
+ for(std::vector<cmGeneratorTarget*>::const_iterator
ti = objectLibraries.begin();
ti != end; ++ti)
{
- cmTarget* objLib = *ti;
- cmGeneratorTarget* ogt =
- this->GlobalGenerator->GetGeneratorTarget(objLib);
+ cmGeneratorTarget* ogt = *ti;
std::vector<cmSourceFile const*> objectSources;
ogt->GetObjectSources(objectSources, config);
for(std::vector<cmSourceFile const*>::const_iterator
@@ -2121,9 +2140,9 @@ public:
cmTargetTraceDependencies(cmGeneratorTarget* target);
void Trace();
private:
- cmTarget* Target;
cmGeneratorTarget* GeneratorTarget;
cmMakefile* Makefile;
+ cmLocalGenerator* LocalGenerator;
cmGlobalGenerator const* GlobalGenerator;
typedef cmGeneratorTarget::SourceEntry SourceEntry;
SourceEntry* CurrentEntry;
@@ -2147,11 +2166,12 @@ private:
//----------------------------------------------------------------------------
cmTargetTraceDependencies
::cmTargetTraceDependencies(cmGeneratorTarget* target):
- Target(target->Target), GeneratorTarget(target)
+ GeneratorTarget(target)
{
// Convenience.
- this->Makefile = this->Target->GetMakefile();
- this->GlobalGenerator = target->GetLocalGenerator()->GetGlobalGenerator();
+ this->Makefile = target->Target->GetMakefile();
+ this->LocalGenerator = target->GetLocalGenerator();
+ this->GlobalGenerator = this->LocalGenerator->GetGlobalGenerator();
this->CurrentEntry = 0;
// Queue all the source files already specified for the target.
@@ -2194,9 +2214,12 @@ cmTargetTraceDependencies
}
// Queue pre-build, pre-link, and post-build rule dependencies.
- this->CheckCustomCommands(this->Target->GetPreBuildCommands());
- this->CheckCustomCommands(this->Target->GetPreLinkCommands());
- this->CheckCustomCommands(this->Target->GetPostBuildCommands());
+ this->CheckCustomCommands(
+ this->GeneratorTarget->Target->GetPreBuildCommands());
+ this->CheckCustomCommands(
+ this->GeneratorTarget->Target->GetPreLinkCommands());
+ this->CheckCustomCommands(
+ this->GeneratorTarget->Target->GetPostBuildCommands());
}
//----------------------------------------------------------------------------
@@ -2325,7 +2348,7 @@ bool cmTargetTraceDependencies::IsUtility(std::string const& dep)
tLocation = cmSystemTools::CollapseFullPath(tLocation);
if(depLocation == tLocation)
{
- this->Target->AddUtility(util);
+ this->GeneratorTarget->Target->AddUtility(util);
return true;
}
}
@@ -2334,7 +2357,7 @@ bool cmTargetTraceDependencies::IsUtility(std::string const& dep)
{
// The original name of the dependency was not a full path. It
// must name a target, so add the target-level dependency.
- this->Target->AddUtility(util);
+ this->GeneratorTarget->Target->AddUtility(util);
return true;
}
}
@@ -2360,7 +2383,8 @@ cmTargetTraceDependencies
{
std::string const& command = *cit->begin();
// Check for a target with this name.
- if(cmTarget* t = this->Makefile->FindTargetToUse(command))
+ if(cmGeneratorTarget* t =
+ this->LocalGenerator->FindGeneratorTargetToUse(command))
{
if(t->GetType() == cmState::EXECUTABLE)
{
@@ -2368,7 +2392,7 @@ cmTargetTraceDependencies
// this project. Add the target-level dependency to make
// sure the executable is up to date before this custom
// command possibly runs.
- this->Target->AddUtility(command);
+ this->GeneratorTarget->Target->AddUtility(command);
}
}
@@ -2387,7 +2411,7 @@ cmTargetTraceDependencies
for(std::set<cmGeneratorTarget*>::iterator ti = targets.begin();
ti != targets.end(); ++ti)
{
- this->Target->AddUtility((*ti)->GetName());
+ this->GeneratorTarget->Target->AddUtility((*ti)->GetName());
}
// Queue the custom command dependencies.
@@ -3029,7 +3053,7 @@ void cmGeneratorTarget::GetCompileDefinitions(std::vector<std::string> &list,
void cmGeneratorTarget::ComputeTargetManifest(
const std::string& config) const
{
- if (this->Target->IsImported())
+ if (this->IsImported())
{
return;
}
@@ -3103,7 +3127,7 @@ void cmGeneratorTarget::ComputeTargetManifest(
std::string cmGeneratorTarget::GetFullPath(const std::string& config,
bool implib, bool realname) const
{
- if(this->Target->IsImported())
+ if(this->IsImported())
{
return this->Target->ImportedGetFullPath(config, implib);
}
@@ -3119,7 +3143,7 @@ std::string cmGeneratorTarget::NormalGetFullPath(const std::string& config,
{
std::string fpath = this->GetDirectory(config, implib);
fpath += "/";
- if(this->Target->IsAppBundleOnApple())
+ if(this->IsAppBundleOnApple())
{
fpath = this->BuildMacContentDirectory(fpath, config, false);
fpath += "/";
@@ -3148,7 +3172,7 @@ cmGeneratorTarget::NormalGetRealName(const std::string& config) const
// This should not be called for imported targets.
// TODO: Split cmTarget into a class hierarchy to get compile-time
// enforcement of the limited imported target API.
- if(this->Target->IsImported())
+ if(this->IsImported())
{
std::string msg = "NormalGetRealName called on imported target: ";
msg += this->GetName();
@@ -3190,7 +3214,7 @@ void cmGeneratorTarget::GetLibraryNames(std::string& name,
// This should not be called for imported targets.
// TODO: Split cmTarget into a class hierarchy to get compile-time
// enforcement of the limited imported target API.
- if(this->Target->IsImported())
+ if(this->IsImported())
{
std::string msg = "GetLibraryNames called on imported target: ";
msg += this->GetName();
@@ -3203,7 +3227,7 @@ void cmGeneratorTarget::GetLibraryNames(std::string& name,
const char* version = this->GetProperty("VERSION");
const char* soversion = this->GetProperty("SOVERSION");
if(!this->HasSOName(config) ||
- this->Target->IsFrameworkOnApple())
+ this->IsFrameworkOnApple())
{
// Versioning is supported only for shared libraries and modules,
// and then only when the platform supports an soname flag.
@@ -3231,7 +3255,7 @@ void cmGeneratorTarget::GetLibraryNames(std::string& name,
// The library name.
name = prefix+base+suffix;
- if(this->Target->IsFrameworkOnApple())
+ if(this->IsFrameworkOnApple())
{
realName = prefix;
if(!this->Makefile->PlatformIsAppleIos())
@@ -3246,11 +3270,11 @@ void cmGeneratorTarget::GetLibraryNames(std::string& name,
else
{
// The library's soname.
- this->Target->ComputeVersionedName(soName, prefix, base, suffix,
+ this->ComputeVersionedName(soName, prefix, base, suffix,
name, soversion);
// The library's real name on disk.
- this->Target->ComputeVersionedName(realName, prefix, base, suffix,
+ this->ComputeVersionedName(realName, prefix, base, suffix,
name, version);
}
@@ -3279,7 +3303,7 @@ void cmGeneratorTarget::GetExecutableNames(std::string& name,
// This should not be called for imported targets.
// TODO: Split cmTarget into a class hierarchy to get compile-time
// enforcement of the limited imported target API.
- if(this->Target->IsImported())
+ if(this->IsImported())
{
std::string msg =
"GetExecutableNames called on imported target: ";
@@ -3343,6 +3367,24 @@ std::string cmGeneratorTarget::GetFullNameInternal(const std::string& config,
}
//----------------------------------------------------------------------------
+const char*
+cmGeneratorTarget::ImportedGetLocation(const std::string& config) const
+{
+ static std::string location;
+ assert(this->IsImported());
+ location = this->Target->ImportedGetFullPath(config, false);
+ return location.c_str();
+}
+
+//----------------------------------------------------------------------------
+std::string cmGeneratorTarget::GetFullNameImported(const std::string& config,
+ bool implib) const
+{
+ return cmSystemTools::GetFilenameName(
+ this->Target->ImportedGetFullPath(config, implib));
+}
+
+//----------------------------------------------------------------------------
void cmGeneratorTarget::GetFullNameInternal(const std::string& config,
bool implib,
std::string& outPrefix,
@@ -3396,8 +3438,7 @@ void cmGeneratorTarget::GetFullNameInternal(const std::string& config,
configPostfix = this->GetProperty(configProp);
// Mac application bundles and frameworks have no postfix.
if(configPostfix &&
- (this->Target->IsAppBundleOnApple()
- || this->Target->IsFrameworkOnApple()))
+ (this->IsAppBundleOnApple() || this->IsFrameworkOnApple()))
{
configPostfix = 0;
}
@@ -3434,7 +3475,7 @@ void cmGeneratorTarget::GetFullNameInternal(const std::string& config,
// frameworks have directory prefix but no suffix
std::string fw_prefix;
- if(this->Target->IsFrameworkOnApple())
+ if(this->IsFrameworkOnApple())
{
fw_prefix = this->GetOutputName(config, false);
fw_prefix += ".framework/";
@@ -3442,7 +3483,7 @@ void cmGeneratorTarget::GetFullNameInternal(const std::string& config,
targetSuffix = 0;
}
- if(this->Target->IsCFBundleOnApple())
+ if(this->IsCFBundleOnApple())
{
fw_prefix = this->GetCFBundleDirectory(config, false);
fw_prefix += "/";
@@ -4377,6 +4418,61 @@ cmGeneratorTarget::GetLinkInformation(const std::string& config) const
}
//----------------------------------------------------------------------------
+void cmGeneratorTarget::GetTargetVersion(int& major, int& minor) const
+{
+ int patch;
+ this->GetTargetVersion(false, major, minor, patch);
+}
+
+//----------------------------------------------------------------------------
+void cmGeneratorTarget::GetTargetVersion(bool soversion,
+ int& major, int& minor, int& patch) const
+{
+ // Set the default values.
+ major = 0;
+ minor = 0;
+ patch = 0;
+
+ assert(this->GetType() != cmState::INTERFACE_LIBRARY);
+
+ // Look for a VERSION or SOVERSION property.
+ const char* prop = soversion? "SOVERSION" : "VERSION";
+ if(const char* version = this->GetProperty(prop))
+ {
+ // Try to parse the version number and store the results that were
+ // successfully parsed.
+ int parsed_major;
+ int parsed_minor;
+ int parsed_patch;
+ switch(sscanf(version, "%d.%d.%d",
+ &parsed_major, &parsed_minor, &parsed_patch))
+ {
+ case 3: patch = parsed_patch; // no break!
+ case 2: minor = parsed_minor; // no break!
+ case 1: major = parsed_major; // no break!
+ default: break;
+ }
+ }
+}
+
+//----------------------------------------------------------------------------
+void cmGeneratorTarget::ComputeVersionedName(std::string& vName,
+ std::string const& prefix,
+ std::string const& base,
+ std::string const& suffix,
+ std::string const& name,
+ const char* version) const
+{
+ vName = this->Makefile->IsOn("APPLE") ? (prefix+base) : name;
+ if(version)
+ {
+ vName += ".";
+ vName += version;
+ }
+ vName += this->Makefile->IsOn("APPLE") ? suffix : std::string();
+}
+
+//----------------------------------------------------------------------------
void
cmGeneratorTarget::ReportPropertyOrigin(const std::string &p,
const std::string &result,
@@ -4423,7 +4519,7 @@ void cmGeneratorTarget::LookupLinkItems(std::vector<std::string> const& names,
for(std::vector<std::string>::const_iterator i = names.begin();
i != names.end(); ++i)
{
- std::string name = this->Target->CheckCMP0004(*i);
+ std::string name = this->CheckCMP0004(*i);
if(name == this->GetName() || name.empty())
{
continue;
@@ -4658,7 +4754,7 @@ cmGeneratorTarget::GetLinkInterfaceLibraries(const std::string& config,
std::string cmGeneratorTarget::GetDirectory(const std::string& config,
bool implib) const
{
- if (this->Target->IsImported())
+ if (this->IsImported())
{
// Return the directory from which the target is imported.
return
@@ -4782,7 +4878,7 @@ bool cmGeneratorTarget::ComputeOutputDir(const std::string& config,
// Skip per-configuration subdirectory.
conf = "";
}
- else if(const char* outdir = this->Target->GetProperty(propertyName))
+ else if(const char* outdir = this->GetProperty(propertyName))
{
// Use the user-specified output directory.
cmGeneratorExpression ge;
@@ -4820,7 +4916,7 @@ bool cmGeneratorTarget::ComputeOutputDir(const std::string& config,
// specified as a relative path. Treat a relative path as
// relative to the current output directory for this makefile.
out = (cmSystemTools::CollapseFullPath
- (out, this->Makefile->GetCurrentBinaryDirectory()));
+ (out, this->LocalGenerator->GetCurrentBinaryDirectory()));
// The generator may add the configuration's subdirectory.
if(!conf.empty())
@@ -4885,7 +4981,7 @@ bool cmGeneratorTarget::ComputePDBOutputDir(const std::string& kind,
// specified as a relative path. Treat a relative path as
// relative to the current output directory for this makefile.
out = (cmSystemTools::CollapseFullPath
- (out, this->Makefile->GetCurrentBinaryDirectory()));
+ (out, this->LocalGenerator->GetCurrentBinaryDirectory()));
// The generator may add the configuration's subdirectory.
if(!conf.empty())
@@ -5061,7 +5157,7 @@ cmGeneratorTarget::GetImportLinkInterface(const std::string& config,
cmGeneratorTarget const* headTarget,
bool usage_requirements_only) const
{
- cmTarget::ImportInfo const* info = this->Target->GetImportInfo(config);
+ cmGeneratorTarget::ImportInfo const* info = this->GetImportInfo(config);
if(!info)
{
return 0;
@@ -5099,6 +5195,223 @@ cmGeneratorTarget::GetImportLinkInterface(const std::string& config,
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&
cmGeneratorTarget::GetHeadToLinkInterfaceMap(const std::string &config) const
{
@@ -5119,7 +5432,7 @@ const cmLinkImplementation *
cmGeneratorTarget::GetLinkImplementation(const std::string& config) const
{
// There is no link implementation for imported targets.
- if(this->Target->IsImported())
+ if(this->IsImported())
{
return 0;
}
@@ -5197,6 +5510,105 @@ bool cmGeneratorTarget::GetConfigCommonSourceFiles(
}
//----------------------------------------------------------------------------
+void cmGeneratorTarget::GetObjectLibrariesCMP0026(
+ std::vector<cmGeneratorTarget*>& objlibs) const
+{
+ // At configure-time, this method can be called as part of getting the
+ // LOCATION property or to export() a file to be include()d. However
+ // there is no cmGeneratorTarget at configure-time, so search the SOURCES
+ // for TARGET_OBJECTS instead for backwards compatibility with OLD
+ // behavior of CMP0024 and CMP0026 only.
+ cmStringRange rng = this->Target->GetSourceEntries();
+ for(std::vector<std::string>::const_iterator
+ i = rng.begin(); i != rng.end(); ++i)
+ {
+ std::string const& entry = *i;
+
+ std::vector<std::string> files;
+ cmSystemTools::ExpandListArgument(entry, files);
+ for (std::vector<std::string>::const_iterator
+ li = files.begin(); li != files.end(); ++li)
+ {
+ if(cmHasLiteralPrefix(*li, "$<TARGET_OBJECTS:") &&
+ (*li)[li->size() - 1] == '>')
+ {
+ std::string objLibName = li->substr(17, li->size()-18);
+
+ if (cmGeneratorExpression::Find(objLibName) != std::string::npos)
+ {
+ continue;
+ }
+ cmGeneratorTarget *objLib =
+ this->LocalGenerator->FindGeneratorTargetToUse(objLibName);
+ if(objLib)
+ {
+ objlibs.push_back(objLib);
+ }
+ }
+ }
+ }
+}
+
+//----------------------------------------------------------------------------
+std::string cmGeneratorTarget::CheckCMP0004(std::string const& item) const
+{
+ // Strip whitespace off the library names because we used to do this
+ // in case variables were expanded at generate time. We no longer
+ // do the expansion but users link to libraries like " ${VAR} ".
+ std::string lib = item;
+ std::string::size_type pos = lib.find_first_not_of(" \t\r\n");
+ if(pos != lib.npos)
+ {
+ lib = lib.substr(pos, lib.npos);
+ }
+ pos = lib.find_last_not_of(" \t\r\n");
+ if(pos != lib.npos)
+ {
+ lib = lib.substr(0, pos+1);
+ }
+ if(lib != item)
+ {
+ cmake* cm = this->LocalGenerator->GetCMakeInstance();
+ switch(this->Target->GetPolicyStatusCMP0004())
+ {
+ case cmPolicies::WARN:
+ {
+ std::ostringstream w;
+ w << cmPolicies::GetPolicyWarning(cmPolicies::CMP0004) << "\n"
+ << "Target \"" << this->GetName() << "\" links to item \""
+ << item << "\" which has leading or trailing whitespace.";
+ cm->IssueMessage(cmake::AUTHOR_WARNING, w.str(),
+ this->Target->GetBacktrace());
+ }
+ case cmPolicies::OLD:
+ break;
+ case cmPolicies::NEW:
+ {
+ std::ostringstream e;
+ e << "Target \"" << this->GetName() << "\" links to item \""
+ << item << "\" which has leading or trailing whitespace. "
+ << "This is now an error according to policy CMP0004.";
+ cm->IssueMessage(cmake::FATAL_ERROR, e.str(),
+ this->Target->GetBacktrace());
+ }
+ break;
+ case cmPolicies::REQUIRED_IF_USED:
+ case cmPolicies::REQUIRED_ALWAYS:
+ {
+ std::ostringstream e;
+ e << cmPolicies::GetRequiredPolicyError(cmPolicies::CMP0004) << "\n"
+ << "Target \"" << this->GetName() << "\" links to item \""
+ << item << "\" which has leading or trailing whitespace.";
+ cm->IssueMessage(cmake::FATAL_ERROR, e.str(),
+ this->Target->GetBacktrace());
+ }
+ break;
+ }
+ }
+ return lib;
+}
+
+//----------------------------------------------------------------------------
void cmGeneratorTarget::GetLanguages(std::set<std::string>& languages,
const std::string& config) const
{
@@ -5216,14 +5628,13 @@ void cmGeneratorTarget::GetLanguages(std::set<std::string>& languages,
std::vector<cmSourceFile const*> externalObjects;
if (!this->GlobalGenerator->GetConfigureDoneCMP0026())
{
- std::vector<cmTarget*> objectTargets;
- this->Target->GetObjectLibrariesCMP0026(objectTargets);
+ std::vector<cmGeneratorTarget*> objectTargets;
+ this->GetObjectLibrariesCMP0026(objectTargets);
objectLibraries.reserve(objectTargets.size());
- for (std::vector<cmTarget*>::const_iterator it = objectTargets.begin();
- it != objectTargets.end(); ++it)
+ for (std::vector<cmGeneratorTarget*>::const_iterator it =
+ objectTargets.begin(); it != objectTargets.end(); ++it)
{
- objectLibraries.push_back(this->GlobalGenerator
- ->GetGeneratorTarget(*it));
+ objectLibraries.push_back(*it);
}
}
else
@@ -5233,10 +5644,10 @@ void cmGeneratorTarget::GetLanguages(std::set<std::string>& languages,
i = externalObjects.begin(); i != externalObjects.end(); ++i)
{
std::string objLib = (*i)->GetObjectLibrary();
- if (cmTarget* tgt = this->Makefile->FindTargetToUse(objLib))
+ if (cmGeneratorTarget* tgt =
+ this->LocalGenerator->FindGeneratorTargetToUse(objLib))
{
- objectLibraries.push_back(this->GlobalGenerator
- ->GetGeneratorTarget(tgt));
+ objectLibraries.push_back(tgt);
}
}
}
@@ -5358,7 +5769,7 @@ void cmGeneratorTarget::ComputeLinkImplementationLibraries(
li != llibs.end(); ++li)
{
// Skip entries that resolve to the target itself or are empty.
- std::string name = this->Target->CheckCMP0004(*li);
+ std::string name = this->CheckCMP0004(*li);
if(name == this->GetName() || name.empty())
{
if(name == this->GetName())
@@ -5424,7 +5835,7 @@ void cmGeneratorTarget::ComputeLinkImplementationLibraries(
{
if(li->second != GENERAL_LibraryType && li->second != linkType)
{
- std::string name = this->Target->CheckCMP0004(li->first);
+ std::string name = this->CheckCMP0004(li->first);
if(name == this->GetName() || name.empty())
{
continue;
@@ -5440,13 +5851,14 @@ void cmGeneratorTarget::ComputeLinkImplementationLibraries(
cmGeneratorTarget*
cmGeneratorTarget::FindTargetToLink(std::string const& name) const
{
- cmTarget const* tgt = this->Makefile->FindTargetToUse(name);
+ cmGeneratorTarget* tgt =
+ this->LocalGenerator->FindGeneratorTargetToUse(name);
// Skip targets that will not really be linked. This is probably a
// name conflict between an external library and an executable
// within the project.
if(tgt && tgt->GetType() == cmState::EXECUTABLE &&
- !tgt->IsExecutableWithExports())
+ !tgt->Target->IsExecutableWithExports())
{
tgt = 0;
}
@@ -5459,17 +5871,13 @@ cmGeneratorTarget::FindTargetToLink(std::string const& name) const
"allowed. "
"One may link only to STATIC or SHARED libraries, or to executables "
"with the ENABLE_EXPORTS property set.";
- cmake* cm = this->Makefile->GetCMakeInstance();
+ cmake* cm = this->LocalGenerator->GetCMakeInstance();
cm->IssueMessage(cmake::FATAL_ERROR, e.str(),
this->Target->GetBacktrace());
tgt = 0;
}
- if (!tgt)
- {
- return 0;
- }
- return this->GlobalGenerator->GetGeneratorTarget(tgt);
+ return tgt;
}
//----------------------------------------------------------------------------
@@ -5516,7 +5924,7 @@ bool cmGeneratorTarget::HasImportLibrary() const
//----------------------------------------------------------------------------
std::string cmGeneratorTarget::GetSupportDirectory() const
{
- std::string dir = this->Makefile->GetCurrentBinaryDirectory();
+ std::string dir = this->LocalGenerator->GetCurrentBinaryDirectory();
dir += cmake::GetCMakeFilesDirectory();
dir += "/";
dir += this->GetName();
@@ -5527,3 +5935,45 @@ std::string cmGeneratorTarget::GetSupportDirectory() const
#endif
return dir;
}
+
+//----------------------------------------------------------------------------
+bool cmGeneratorTarget::IsLinkable() const
+{
+ return (this->GetType() == cmState::STATIC_LIBRARY ||
+ this->GetType() == cmState::SHARED_LIBRARY ||
+ this->GetType() == cmState::MODULE_LIBRARY ||
+ this->GetType() == cmState::UNKNOWN_LIBRARY ||
+ this->GetType() == cmState::INTERFACE_LIBRARY ||
+ this->Target->IsExecutableWithExports());
+}
+
+//----------------------------------------------------------------------------
+bool cmGeneratorTarget::IsFrameworkOnApple() const
+{
+ return (this->GetType() == cmState::SHARED_LIBRARY &&
+ this->Makefile->IsOn("APPLE") &&
+ this->GetPropertyAsBool("FRAMEWORK"));
+}
+
+//----------------------------------------------------------------------------
+bool cmGeneratorTarget::IsAppBundleOnApple() const
+{
+ return (this->GetType() == cmState::EXECUTABLE &&
+ this->Makefile->IsOn("APPLE") &&
+ this->GetPropertyAsBool("MACOSX_BUNDLE"));
+}
+
+//----------------------------------------------------------------------------
+bool cmGeneratorTarget::IsXCTestOnApple() const
+{
+ return (this->IsCFBundleOnApple() &&
+ this->GetPropertyAsBool("XCTEST"));
+}
+
+//----------------------------------------------------------------------------
+bool cmGeneratorTarget::IsCFBundleOnApple() const
+{
+ return (this->GetType() == cmState::MODULE_LIBRARY &&
+ this->Makefile->IsOn("APPLE") &&
+ this->GetPropertyAsBool("BUNDLE"));
+}
diff --git a/Source/cmGeneratorTarget.h b/Source/cmGeneratorTarget.h
index 05a7d4d..6537421 100644
--- a/Source/cmGeneratorTarget.h
+++ b/Source/cmGeneratorTarget.h
@@ -43,6 +43,8 @@ public:
cmState::TargetType GetType() const;
std::string GetName() const;
+ std::string GetExportName() const;
+
const char *GetProperty(const std::string& prop) const;
bool GetPropertyAsBool(const std::string& prop) const;
void GetSourceFiles(std::vector<cmSourceFile*>& files,
@@ -226,6 +228,12 @@ public:
void GetLanguages(std::set<std::string>& languages,
std::string const& config) const;
+ void
+ GetObjectLibrariesCMP0026(std::vector<cmGeneratorTarget*>& objlibs) const;
+
+ std::string GetFullNameImported(const std::string& config,
+ bool implib) const;
+
bool GetConfigCommonSourceFiles(std::vector<cmSourceFile*>& files) const;
bool HaveBuildTreeRPATH(const std::string& config) const;
@@ -404,6 +412,22 @@ public:
/** Get a build-tree directory in which to place target support files. */
std::string GetSupportDirectory() const;
+ /** Return whether this target may be used to link another target. */
+ bool IsLinkable() const;
+
+ /** Return whether this target is a shared library Framework on
+ Apple. */
+ bool IsFrameworkOnApple() const;
+
+ /** Return whether this target is an executable Bundle on Apple. */
+ bool IsAppBundleOnApple() const;
+
+ /** Return whether this target is a XCTest on Apple. */
+ bool IsXCTestOnApple() const;
+
+ /** Return whether this target is a CFBundle (plugin) on Apple. */
+ bool IsCFBundleOnApple() const;
+
struct SourceFileFlags
GetTargetSourceFileFlags(const cmSourceFile* sf) const;
@@ -437,6 +461,19 @@ public:
no soname at all. */
bool IsImportedSharedLibWithoutSOName(const std::string& config) const;
+ const char* ImportedGetLocation(const std::string& config) const;
+
+ /** Get the target major and minor version numbers interpreted from
+ the VERSION property. Version 0 is returned if the property is
+ not set or cannot be parsed. */
+ void GetTargetVersion(int& major, int& minor) const;
+
+ /** Get the target major, minor, and patch version numbers
+ interpreted from the VERSION or SOVERSION property. Version 0
+ is returned if the property is not set or cannot be parsed. */
+ void
+ GetTargetVersion(bool soversion, int& major, int& minor, int& patch) const;
+
private:
friend class cmTargetTraceDependencies;
struct SourceEntry { std::vector<cmSourceFile*> Depends; };
@@ -464,6 +501,13 @@ private:
// Returns ARCHIVE, LIBRARY, or RUNTIME based on platform and type.
const char* GetOutputTargetType(bool implib) const;
+ void ComputeVersionedName(std::string& vName,
+ std::string const& prefix,
+ std::string const& base,
+ std::string const& suffix,
+ std::string const& name,
+ const char* version) const;
+
struct CompatibleInterfacesBase
{
std::set<std::string> PropsBool;
@@ -508,6 +552,31 @@ private:
cmHeadToLinkInterfaceMap& GetHeadToLinkInterfaceUsageRequirementsMap(
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;
+
+ /** Strip off leading and trailing whitespace from an item named in
+ the link dependencies of this target. */
+ std::string CheckCMP0004(std::string const& item) const;
+
cmLinkInterface const*
GetImportLinkInterface(const std::string& config,
const cmGeneratorTarget* head,
diff --git a/Source/cmGhsMultiTargetGenerator.cxx b/Source/cmGhsMultiTargetGenerator.cxx
index c687ba7..019cdd1 100644
--- a/Source/cmGhsMultiTargetGenerator.cxx
+++ b/Source/cmGhsMultiTargetGenerator.cxx
@@ -265,8 +265,11 @@ void cmGhsMultiTargetGenerator::SetCompilerFlags(std::string const &config,
this->LocalGenerator->AddLanguageFlags(
flags, lang + std::string("_GHS_KERNEL"), config);
}
- this->LocalGenerator->AddCMP0018Flags(flags, this->Target, lang, config);
- this->LocalGenerator->AddVisibilityPresetFlags(flags, this->Target, lang);
+ this->LocalGenerator->AddCMP0018Flags(flags, this->GeneratorTarget,
+ lang, config);
+ this->LocalGenerator->AddVisibilityPresetFlags(flags,
+ this->GeneratorTarget,
+ lang);
// Append old-style preprocessor definition flags.
if (std::string(" ") != std::string(this->Makefile->GetDefineFlags()))
@@ -276,7 +279,8 @@ void cmGhsMultiTargetGenerator::SetCompilerFlags(std::string const &config,
}
// Add target-specific flags.
- this->LocalGenerator->AddCompileOptions(flags, this->Target, lang, config);
+ this->LocalGenerator->AddCompileOptions(flags, this->GeneratorTarget,
+ lang, config);
std::map<std::string, std::string>::value_type entry(language, flags);
i = this->FlagsByLanguage.insert(entry).first;
@@ -299,7 +303,8 @@ std::string cmGhsMultiTargetGenerator::GetDefines(const std::string &language,
}
// Add preprocessor definitions for this target and configuration.
- this->LocalGenerator->AddCompileDefinitions(defines, this->Target, config,
+ this->LocalGenerator->AddCompileDefinitions(defines,
+ this->GeneratorTarget, config,
language);
std::string definesString;
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index a42ea22..1142ddd 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -1199,6 +1199,27 @@ void cmGlobalGenerator::CreateGenerationObjects(TargetTypes targetTypes)
cmDeleteAll(this->GeneratorTargets);
this->GeneratorTargets.clear();
this->CreateGeneratorTargets(targetTypes);
+ this->ComputeBuildFileGenerators();
+}
+
+void cmGlobalGenerator::CreateImportedGenerationObjects(cmMakefile* mf,
+ const std::vector<std::string>& targets,
+ std::vector<const cmGeneratorTarget*>& exports)
+{
+ this->CreateGenerationObjects(ImportedOnly);
+ std::vector<cmMakefile*>::iterator mfit =
+ std::find(this->Makefiles.begin(), this->Makefiles.end(), mf);
+ cmLocalGenerator* lg =
+ this->LocalGenerators[std::distance(this->Makefiles.begin(), mfit)];
+ for (std::vector<std::string>::const_iterator it = targets.begin();
+ it != targets.end(); ++it)
+ {
+ cmGeneratorTarget* gt = lg->FindGeneratorTargetToUse(*it);
+ if (gt)
+ {
+ exports.push_back(gt);
+ }
+ }
}
cmExportBuildFileGenerator*
@@ -1279,8 +1300,6 @@ bool cmGlobalGenerator::Compute()
this->CreateQtAutoGeneratorsTargets();
#endif
- this->ComputeBuildFileGenerators();
-
unsigned int i;
// Add generator specific helper commands
@@ -2189,7 +2208,8 @@ cmGlobalGenerator::NameResolvesToFramework(const std::string& libname) const
if(cmTarget* tgt = this->FindTarget(libname))
{
- if(tgt->IsFrameworkOnApple())
+ cmGeneratorTarget* gt = this->GetGeneratorTarget(tgt);
+ if(gt->IsFrameworkOnApple())
{
return true;
}
diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h
index 6887409..4e6b11d 100644
--- a/Source/cmGlobalGenerator.h
+++ b/Source/cmGlobalGenerator.h
@@ -91,6 +91,9 @@ public:
ImportedOnly
};
+ void CreateImportedGenerationObjects(cmMakefile* mf,
+ std::vector<std::string> const& targets,
+ std::vector<cmGeneratorTarget const*>& exports);
void CreateGenerationObjects(TargetTypes targetTypes = AllTargets);
/**
@@ -365,8 +368,6 @@ public:
bool GetConfigureDoneCMP0026() const
{ return this->ConfigureDoneCMP0026AndCMP0024; }
- void ComputeBuildFileGenerators();
-
std::string MakeSilentFlag;
protected:
typedef std::vector<cmLocalGenerator*> GeneratorVector;
@@ -471,6 +472,8 @@ private:
void CheckCompilerIdCompatibility(cmMakefile* mf,
std::string const& lang) const;
+ void ComputeBuildFileGenerators();
+
cmExternalMakefileProjectGenerator* ExtraGenerator;
// track files replaced during a Generate
diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx
index 02da028..89a6dff 100644
--- a/Source/cmGlobalNinjaGenerator.cxx
+++ b/Source/cmGlobalNinjaGenerator.cxx
@@ -917,11 +917,13 @@ cmGlobalNinjaGenerator
std::string configName =
target->GetMakefile()->GetSafeDefinition("CMAKE_BUILD_TYPE");
+ cmGeneratorTarget *gtgt = this->GetGeneratorTarget(target);
+
// for frameworks, we want the real name, not smple name
// frameworks always appear versioned, and the build.ninja
// will always attempt to manage symbolic links instead
// of letting cmOSXBundleGenerator do it.
- bool realname = target->IsFrameworkOnApple();
+ bool realname = gtgt->IsFrameworkOnApple();
switch (target->GetType()) {
case cmState::EXECUTABLE:
@@ -929,7 +931,6 @@ cmGlobalNinjaGenerator
case cmState::STATIC_LIBRARY:
case cmState::MODULE_LIBRARY:
{
- cmGeneratorTarget *gtgt = this->GetGeneratorTarget(target);
outputs.push_back(this->ConvertToNinjaPath(
gtgt->GetFullPath(configName, false, realname)));
break;
diff --git a/Source/cmGlobalUnixMakefileGenerator3.cxx b/Source/cmGlobalUnixMakefileGenerator3.cxx
index ee31e28..8e671a3 100644
--- a/Source/cmGlobalUnixMakefileGenerator3.cxx
+++ b/Source/cmGlobalUnixMakefileGenerator3.cxx
@@ -473,7 +473,7 @@ cmGlobalUnixMakefileGenerator3
(type == cmState::OBJECT_LIBRARY) ||
(type == cmState::UTILITY))
{
- if(gtarget->Target->IsImported())
+ if(gtarget->IsImported())
{
continue;
}
@@ -632,7 +632,7 @@ cmGlobalUnixMakefileGenerator3
t != targets.end(); ++t)
{
cmGeneratorTarget* gtarget = t->second;
- if(gtarget->Target->IsImported())
+ if(gtarget->IsImported())
{
continue;
}
@@ -733,7 +733,7 @@ cmGlobalUnixMakefileGenerator3
t != targets.end(); ++t)
{
cmGeneratorTarget* gtarget = t->second;
- if(gtarget->Target->IsImported())
+ if(gtarget->IsImported())
{
continue;
}
diff --git a/Source/cmGlobalVisualStudioGenerator.cxx b/Source/cmGlobalVisualStudioGenerator.cxx
index d81d3b8..9af5b35 100644
--- a/Source/cmGlobalVisualStudioGenerator.cxx
+++ b/Source/cmGlobalVisualStudioGenerator.cxx
@@ -385,7 +385,7 @@ bool cmGlobalVisualStudioGenerator::ComputeTargetDepends()
}
//----------------------------------------------------------------------------
-static bool VSLinkable(cmTarget const* t)
+static bool VSLinkable(cmGeneratorTarget const* t)
{
return t->IsLinkable() || t->GetType() == cmState::OBJECT_LIBRARY;
}
@@ -475,7 +475,8 @@ void cmGlobalVisualStudioGenerator::ComputeVSTargetDepends(cmTarget& target)
di != utilDepends.end(); ++di)
{
cmTarget const* dep = *di;
- if(allowLinkable || !VSLinkable(dep) || linked.count(dep))
+ cmGeneratorTarget* dgt = this->GetGeneratorTarget(dep);
+ if(allowLinkable || !VSLinkable(dgt) || linked.count(dep))
{
// Direct dependency allowed.
vsTargetDepend.insert(dep->GetName());
diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx
index bc05aea..ea1b1a0 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -787,14 +787,16 @@ cmGlobalXCodeGenerator::CreateXCodeSourceFile(cmLocalGenerator* lg,
// Is this a resource file in this target? Add it to the resources group...
//
+
+ cmGeneratorTarget* gtgt = this->GetGeneratorTarget(&cmtarget);
cmGeneratorTarget::SourceFileFlags tsFlags =
- this->GetGeneratorTarget(&cmtarget)->GetTargetSourceFileFlags(sf);
+ gtgt->GetTargetSourceFileFlags(sf);
bool isResource = tsFlags.Type == cmGeneratorTarget::SourceFileTypeResource;
// Is this a "private" or "public" framework header file?
// Set the ATTRIBUTES attribute appropriately...
//
- if(cmtarget.IsFrameworkOnApple())
+ if(gtgt->IsFrameworkOnApple())
{
if(tsFlags.Type == cmGeneratorTarget::SourceFileTypePrivateHeader)
{
@@ -1193,9 +1195,9 @@ cmGlobalXCodeGenerator::CreateXCodeTargets(cmLocalGenerator* gen,
}
// some build phases only apply to bundles and/or frameworks
- bool isFrameworkTarget = cmtarget.IsFrameworkOnApple();
+ bool isFrameworkTarget = gtgt->IsFrameworkOnApple();
bool isBundleTarget = cmtarget.GetPropertyAsBool("MACOSX_BUNDLE");
- bool isCFBundleTarget = cmtarget.IsCFBundleOnApple();
+ bool isCFBundleTarget = gtgt->IsCFBundleOnApple();
cmXCodeObject* buildFiles = 0;
@@ -1289,7 +1291,7 @@ cmGlobalXCodeGenerator::CreateXCodeTargets(cmLocalGenerator* gen,
copyFilesBuildPhase->AddAttribute("dstSubfolderSpec",
this->CreateString("6"));
std::ostringstream ostr;
- if (cmtarget.IsFrameworkOnApple())
+ if (gtgt->IsFrameworkOnApple())
{
// dstPath in frameworks is relative to Versions/<version>
ostr << mit->first;
@@ -1467,8 +1469,10 @@ void cmGlobalXCodeGenerator::CreateCustomCommands(cmXCodeObject* buildPhases,
std::vector<cmCustomCommand> postbuild
= cmtarget.GetPostBuildCommands();
+ cmGeneratorTarget* gtgt = this->GetGeneratorTarget(&cmtarget);
+
if(cmtarget.GetType() == cmState::SHARED_LIBRARY &&
- !cmtarget.IsFrameworkOnApple())
+ !gtgt->IsFrameworkOnApple())
{
cmCustomCommandLines cmd;
cmd.resize(1);
@@ -1500,7 +1504,6 @@ void cmGlobalXCodeGenerator::CreateCustomCommands(cmXCodeObject* buildPhases,
}
std::vector<cmSourceFile*> classes;
- cmGeneratorTarget* gtgt = this->GetGeneratorTarget(&cmtarget);
if (!gtgt->GetConfigCommonSourceFiles(classes))
{
return;
@@ -1814,14 +1817,14 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target,
this->CurrentLocalGenerator->AddLanguageFlags(flags, lang, configName);
// Add shared-library flags if needed.
- this->CurrentLocalGenerator->AddCMP0018Flags(flags, &target,
+ this->CurrentLocalGenerator->AddCMP0018Flags(flags, gtgt,
lang, configName);
- this->CurrentLocalGenerator->AddVisibilityPresetFlags(flags, &target,
+ this->CurrentLocalGenerator->AddVisibilityPresetFlags(flags, gtgt,
lang);
this->CurrentLocalGenerator->
- AddCompileOptions(flags, &target, lang, configName);
+ AddCompileOptions(flags, gtgt, lang, configName);
}
std::string llang = gtgt->GetLinkerLanguage(configName);
@@ -1884,7 +1887,7 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target,
this->CurrentLocalGenerator
->GetStaticLibraryFlags(extraLinkOptions,
cmSystemTools::UpperCase(configName),
- &target);
+ gtgt);
}
else
{
@@ -1943,7 +1946,7 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target,
const char* version = target.GetProperty("VERSION");
const char* soversion = target.GetProperty("SOVERSION");
- if(!gtgt->HasSOName(configName) || target.IsFrameworkOnApple())
+ if(!gtgt->HasSOName(configName) || gtgt->IsFrameworkOnApple())
{
version = 0;
soversion = 0;
@@ -1990,7 +1993,7 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target,
pndir = gtgt->GetDirectory(configName);
}
- if(target.IsFrameworkOnApple() || target.IsCFBundleOnApple())
+ if(gtgt->IsFrameworkOnApple() || gtgt->IsCFBundleOnApple())
{
pnprefix = "";
}
@@ -2043,7 +2046,7 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target,
{
buildSettings->AddAttribute("LIBRARY_STYLE",
this->CreateString("BUNDLE"));
- if (target.IsCFBundleOnApple())
+ if (gtgt->IsCFBundleOnApple())
{
// It turns out that a BUNDLE is basically the same
// in many ways as an application bundle, as far as
@@ -2062,7 +2065,7 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target,
// a per-configuration Info.plist file. The cfbundle plist
// is very similar to the application bundle plist
this->CurrentLocalGenerator
- ->GenerateAppleInfoPList(&target, "$(EXECUTABLE_NAME)",
+ ->GenerateAppleInfoPList(gtgt, "$(EXECUTABLE_NAME)",
plist.c_str());
std::string path =
this->ConvertToRelativeForXCode(plist.c_str());
@@ -2111,7 +2114,7 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target,
// so let it replace the framework name. This avoids creating
// a per-configuration Info.plist file.
this->CurrentLocalGenerator
- ->GenerateFrameworkInfoPList(&target, "$(EXECUTABLE_NAME)",
+ ->GenerateFrameworkInfoPList(gtgt, "$(EXECUTABLE_NAME)",
plist.c_str());
std::string path =
this->ConvertToRelativeForXCode(plist.c_str());
@@ -2154,7 +2157,7 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target,
// so let it replace the executable name. This avoids creating
// a per-configuration Info.plist file.
this->CurrentLocalGenerator
- ->GenerateAppleInfoPList(&target, "$(EXECUTABLE_NAME)",
+ ->GenerateAppleInfoPList(gtgt, "$(EXECUTABLE_NAME)",
plist.c_str());
std::string path =
this->ConvertToRelativeForXCode(plist.c_str());
@@ -2422,7 +2425,7 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target,
int patch;
// VERSION -> current_version
- target.GetTargetVersion(false, major, minor, patch);
+ gtgt->GetTargetVersion(false, major, minor, patch);
std::ostringstream v;
// Xcode always wants at least 1.0.0 or nothing
@@ -2434,7 +2437,7 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target,
this->CreateString(v.str().c_str()));
// SOVERSION -> compatibility_version
- target.GetTargetVersion(true, major, minor, patch);
+ gtgt->GetTargetVersion(true, major, minor, patch);
std::ostringstream vso;
// Xcode always wants at least 1.0.0 or nothing
@@ -2639,23 +2642,24 @@ cmGlobalXCodeGenerator::GetTargetLinkFlagsVar(cmTarget const& cmtarget) const
}
//----------------------------------------------------------------------------
-const char* cmGlobalXCodeGenerator::GetTargetFileType(cmTarget& cmtarget)
+const char* cmGlobalXCodeGenerator::GetTargetFileType(
+ cmGeneratorTarget* target)
{
- switch(cmtarget.GetType())
+ switch(target->GetType())
{
case cmState::OBJECT_LIBRARY:
case cmState::STATIC_LIBRARY:
return "archive.ar";
case cmState::MODULE_LIBRARY:
- if (cmtarget.IsXCTestOnApple())
+ if (target->IsXCTestOnApple())
return "wrapper.cfbundle";
- else if (cmtarget.IsCFBundleOnApple())
+ else if (target->IsCFBundleOnApple())
return "wrapper.plug-in";
else
return ((this->XcodeVersion >= 22)?
"compiled.mach-o.executable" : "compiled.mach-o.dylib");
case cmState::SHARED_LIBRARY:
- return (cmtarget.GetPropertyAsBool("FRAMEWORK")?
+ return (target->GetPropertyAsBool("FRAMEWORK")?
"wrapper.framework" : "compiled.mach-o.dylib");
case cmState::EXECUTABLE:
return "compiled.mach-o.executable";
@@ -2665,28 +2669,29 @@ const char* cmGlobalXCodeGenerator::GetTargetFileType(cmTarget& cmtarget)
}
//----------------------------------------------------------------------------
-const char* cmGlobalXCodeGenerator::GetTargetProductType(cmTarget& cmtarget)
+const char* cmGlobalXCodeGenerator::GetTargetProductType(
+ cmGeneratorTarget* target)
{
- switch(cmtarget.GetType())
+ switch(target->GetType())
{
case cmState::OBJECT_LIBRARY:
case cmState::STATIC_LIBRARY:
return "com.apple.product-type.library.static";
case cmState::MODULE_LIBRARY:
- if (cmtarget.IsXCTestOnApple())
+ if (target->IsXCTestOnApple())
return "com.apple.product-type.bundle.unit-test";
- else if (cmtarget.IsCFBundleOnApple())
+ else if (target->IsCFBundleOnApple())
return "com.apple.product-type.bundle";
else
return ((this->XcodeVersion >= 22)?
"com.apple.product-type.tool" :
"com.apple.product-type.library.dynamic");
case cmState::SHARED_LIBRARY:
- return (cmtarget.GetPropertyAsBool("FRAMEWORK")?
+ return (target->GetPropertyAsBool("FRAMEWORK")?
"com.apple.product-type.framework" :
"com.apple.product-type.library.dynamic");
case cmState::EXECUTABLE:
- return (cmtarget.GetPropertyAsBool("MACOSX_BUNDLE")?
+ return (target->GetPropertyAsBool("MACOSX_BUNDLE")?
"com.apple.product-type.application" :
"com.apple.product-type.tool");
default: break;
@@ -2727,9 +2732,11 @@ cmGlobalXCodeGenerator::CreateXCodeTarget(cmTarget& cmtarget,
target->AddAttribute("name", this->CreateString(cmtarget.GetName()));
target->AddAttribute("productName",this->CreateString(cmtarget.GetName()));
+ cmGeneratorTarget *gtgt = this->GetGeneratorTarget(&cmtarget);
+
cmXCodeObject* fileRef =
this->CreateObject(cmXCodeObject::PBXFileReference);
- if(const char* fileType = this->GetTargetFileType(cmtarget))
+ if(const char* fileType = this->GetTargetFileType(gtgt))
{
fileRef->AddAttribute("explicitFileType", this->CreateString(fileType));
}
@@ -2742,7 +2749,6 @@ cmGlobalXCodeGenerator::CreateXCodeTarget(cmTarget& cmtarget,
}
else
{
- cmGeneratorTarget *gtgt = this->GetGeneratorTarget(&cmtarget);
fullName = gtgt->GetFullName(defConfig.c_str());
}
fileRef->AddAttribute("path", this->CreateString(fullName.c_str()));
@@ -2752,7 +2758,7 @@ cmGlobalXCodeGenerator::CreateXCodeTarget(cmTarget& cmtarget,
fileRef->SetComment(cmtarget.GetName().c_str());
target->AddAttribute("productReference",
this->CreateObjectReference(fileRef));
- if(const char* productType = this->GetTargetProductType(cmtarget))
+ if(const char* productType = this->GetTargetProductType(gtgt))
{
target->AddAttribute("productType", this->CreateString(productType));
}
diff --git a/Source/cmGlobalXCodeGenerator.h b/Source/cmGlobalXCodeGenerator.h
index 9daf0ab..feb5009 100644
--- a/Source/cmGlobalXCodeGenerator.h
+++ b/Source/cmGlobalXCodeGenerator.h
@@ -137,8 +137,8 @@ private:
void ForceLinkerLanguages();
void ForceLinkerLanguage(cmTarget& cmtarget);
const char* GetTargetLinkFlagsVar(cmTarget const& cmtarget) const;
- const char* GetTargetFileType(cmTarget& cmtarget);
- const char* GetTargetProductType(cmTarget& cmtarget);
+ const char* GetTargetFileType(cmGeneratorTarget* target);
+ const char* GetTargetProductType(cmGeneratorTarget* target);
std::string AddConfigurations(cmXCodeObject* target, cmTarget& cmtarget);
void AppendOrAddBuildSetting(cmXCodeObject* settings, const char* attr,
const char* value);
diff --git a/Source/cmIncludeCommand.cxx b/Source/cmIncludeCommand.cxx
index 97d4d56..8890e2b 100644
--- a/Source/cmIncludeCommand.cxx
+++ b/Source/cmIncludeCommand.cxx
@@ -126,7 +126,6 @@ bool cmIncludeCommand
}
}
gg->CreateGenerationObjects();
- gg->ComputeBuildFileGenerators();
gg->GenerateImportFile(fname_abs);
}
diff --git a/Source/cmInstallCommand.cxx b/Source/cmInstallCommand.cxx
index c22edf3..6b06fce 100644
--- a/Source/cmInstallCommand.cxx
+++ b/Source/cmInstallCommand.cxx
@@ -773,7 +773,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
if(!exports.GetString().empty() && !namelinkOnly)
{
cmTargetExport *te = new cmTargetExport;
- te->Target = &target;
+ te->TargetName = target.GetName();
te->ArchiveGenerator = archiveGenerator;
te->BundleGenerator = bundleGenerator;
te->FrameworkGenerator = frameworkGenerator;
@@ -1379,16 +1379,17 @@ bool cmInstallCommand::HandleExportMode(std::vector<std::string> const& args)
tei != exportSet->GetTargetExports()->end(); ++tei)
{
cmTargetExport const* te = *tei;
+ cmTarget* tgt = this->Makefile->FindTarget(te->TargetName);
const bool newCMP0022Behavior =
- te->Target->GetPolicyStatusCMP0022() != cmPolicies::WARN
- && te->Target->GetPolicyStatusCMP0022() != cmPolicies::OLD;
+ tgt->GetPolicyStatusCMP0022() != cmPolicies::WARN
+ && tgt->GetPolicyStatusCMP0022() != cmPolicies::OLD;
if(!newCMP0022Behavior)
{
std::ostringstream e;
e << "INSTALL(EXPORT) given keyword \""
<< "EXPORT_LINK_INTERFACE_LIBRARIES" << "\", but target \""
- << te->Target->GetName()
+ << te->TargetName
<< "\" does not have policy CMP0022 set to NEW.";
this->SetError(e.str());
return false;
diff --git a/Source/cmInstallExportGenerator.cxx b/Source/cmInstallExportGenerator.cxx
index f7c9cc2..9570ba3 100644
--- a/Source/cmInstallExportGenerator.cxx
+++ b/Source/cmInstallExportGenerator.cxx
@@ -56,6 +56,7 @@ cmInstallExportGenerator::~cmInstallExportGenerator()
void cmInstallExportGenerator::Compute(cmLocalGenerator* lg)
{
this->LocalGenerator = lg;
+ this->ExportSet->Compute(lg);
}
//----------------------------------------------------------------------------
diff --git a/Source/cmInstallTargetGenerator.cxx b/Source/cmInstallTargetGenerator.cxx
index 2f08165..a97cc5f 100644
--- a/Source/cmInstallTargetGenerator.cxx
+++ b/Source/cmInstallTargetGenerator.cxx
@@ -150,7 +150,7 @@ void cmInstallTargetGenerator::GenerateScriptForConfig(std::ostream& os,
std::string to1 = toDir + targetName;
// Handle OSX Bundles.
- if(this->Target->Target->IsAppBundleOnApple())
+ if(this->Target->IsAppBundleOnApple())
{
// Install the whole app bundle directory.
type = cmInstallType_DIRECTORY;
@@ -208,7 +208,7 @@ void cmInstallTargetGenerator::GenerateScriptForConfig(std::ostream& os,
// An import library looks like a static library.
type = cmInstallType_STATIC_LIBRARY;
}
- else if(this->Target->Target->IsFrameworkOnApple())
+ else if(this->Target->IsFrameworkOnApple())
{
// There is a bug in cmInstallCommand if this fails.
assert(this->NamelinkMode == NamelinkModeNone);
@@ -226,7 +226,7 @@ void cmInstallTargetGenerator::GenerateScriptForConfig(std::ostream& os,
filesFrom.push_back(from1);
filesTo.push_back(to1);
}
- else if(this->Target->Target->IsCFBundleOnApple())
+ else if(this->Target->IsCFBundleOnApple())
{
// Install the whole app bundle directory.
type = cmInstallType_DIRECTORY;
@@ -359,34 +359,31 @@ cmInstallTargetGenerator::GetInstallFilename(const std::string& config) const
{
NameType nameType = this->ImportLibrary? NameImplib : NameNormal;
return
- cmInstallTargetGenerator::GetInstallFilename(this->Target->Target, config,
+ cmInstallTargetGenerator::GetInstallFilename(this->Target, config,
nameType);
}
//----------------------------------------------------------------------------
std::string
-cmInstallTargetGenerator::GetInstallFilename(cmTarget const* target,
+cmInstallTargetGenerator::GetInstallFilename(cmGeneratorTarget const* target,
const std::string& config,
NameType nameType)
{
std::string fname;
// Compute the name of the library.
- cmGeneratorTarget *gtgt = target->GetMakefile()
- ->GetGlobalGenerator()
- ->GetGeneratorTarget(target);
if(target->GetType() == cmState::EXECUTABLE)
{
std::string targetName;
std::string targetNameReal;
std::string targetNameImport;
std::string targetNamePDB;
- gtgt->GetExecutableNames(targetName, targetNameReal,
+ target->GetExecutableNames(targetName, targetNameReal,
targetNameImport, targetNamePDB,
config);
if(nameType == NameImplib)
{
// Use the import library name.
- if(!gtgt->GetImplibGNUtoMS(targetNameImport, fname,
+ if(!target->GetImplibGNUtoMS(targetNameImport, fname,
"${CMAKE_IMPORT_LIBRARY_SUFFIX}"))
{
fname = targetNameImport;
@@ -410,12 +407,12 @@ cmInstallTargetGenerator::GetInstallFilename(cmTarget const* target,
std::string targetNameReal;
std::string targetNameImport;
std::string targetNamePDB;
- gtgt->GetLibraryNames(targetName, targetNameSO, targetNameReal,
+ target->GetLibraryNames(targetName, targetNameSO, targetNameReal,
targetNameImport, targetNamePDB, config);
if(nameType == NameImplib)
{
// Use the import library name.
- if(!gtgt->GetImplibGNUtoMS(targetNameImport, fname,
+ if(!target->GetImplibGNUtoMS(targetNameImport, fname,
"${CMAKE_IMPORT_LIBRARY_SUFFIX}"))
{
fname = targetNameImport;
@@ -585,7 +582,7 @@ cmInstallTargetGenerator
// The directory portions differ. Append the filename to
// create the mapping.
std::string fname =
- this->GetInstallFilename(tgt->Target, config, NameSO);
+ this->GetInstallFilename(tgt, config, NameSO);
// Map from the build-tree install_name.
for_build += fname;
@@ -608,7 +605,7 @@ cmInstallTargetGenerator
std::string for_install =
this->Target->GetInstallNameDirForInstallTree();
- if(this->Target->Target->IsFrameworkOnApple() && for_install.empty())
+ if(this->Target->IsFrameworkOnApple() && for_install.empty())
{
// Frameworks seem to have an id corresponding to their own full
// path.
@@ -622,7 +619,7 @@ cmInstallTargetGenerator
{
// Prepare to refer to the install-tree install_name.
new_id = for_install;
- new_id += this->GetInstallFilename(this->Target->Target, config, NameSO);
+ new_id += this->GetInstallFilename(this->Target, config, NameSO);
}
}
diff --git a/Source/cmInstallTargetGenerator.h b/Source/cmInstallTargetGenerator.h
index a8f4a75..ec89c05 100644
--- a/Source/cmInstallTargetGenerator.h
+++ b/Source/cmInstallTargetGenerator.h
@@ -14,7 +14,6 @@
#include "cmInstallGenerator.h"
-class cmTarget;
class cmGeneratorTarget;
/** \class cmInstallTargetGenerator
@@ -54,7 +53,7 @@ public:
NameReal
};
- static std::string GetInstallFilename(cmTarget const* target,
+ static std::string GetInstallFilename(const cmGeneratorTarget* target,
const std::string& config,
NameType nameType = NameNormal);
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index e4cfcde..9d5dd8e 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -476,7 +476,7 @@ void cmLocalGenerator::ComputeTargetManifest()
{
continue;
}
- if (target.Target->IsImported())
+ if (target.IsImported())
{
continue;
}
@@ -920,7 +920,7 @@ cmLocalGenerator::ExpandRuleVariables(std::string& s,
}
//----------------------------------------------------------------------------
-const char* cmLocalGenerator::GetRuleLauncher(cmTarget* target,
+const char* cmLocalGenerator::GetRuleLauncher(cmGeneratorTarget* target,
const std::string& prop)
{
if(target)
@@ -934,7 +934,8 @@ const char* cmLocalGenerator::GetRuleLauncher(cmTarget* target,
}
//----------------------------------------------------------------------------
-void cmLocalGenerator::InsertRuleLauncher(std::string& s, cmTarget* target,
+void cmLocalGenerator::InsertRuleLauncher(std::string& s,
+ cmGeneratorTarget* target,
const std::string& prop)
{
if(const char* val = this->GetRuleLauncher(target, prop))
@@ -1087,27 +1088,23 @@ std::string cmLocalGenerator::GetIncludeFlags(
//----------------------------------------------------------------------------
void cmLocalGenerator::AddCompileDefinitions(std::set<std::string>& defines,
- cmTarget const* target,
+ cmGeneratorTarget const* target,
const std::string& config,
const std::string& lang)
{
std::vector<std::string> targetDefines;
- cmGeneratorTarget* gtgt = this->GlobalGenerator->GetGeneratorTarget(target);
- gtgt->GetCompileDefinitions(targetDefines, config, lang);
+ target->GetCompileDefinitions(targetDefines, config, lang);
this->AppendDefines(defines, targetDefines);
}
//----------------------------------------------------------------------------
void cmLocalGenerator::AddCompileOptions(
- std::string& flags, cmTarget* target,
+ std::string& flags, cmGeneratorTarget* target,
const std::string& lang, const std::string& config
)
{
std::string langFlagRegexVar = std::string("CMAKE_")+lang+"_FLAG_REGEX";
- cmGeneratorTarget* gtgt =
- this->GlobalGenerator->GetGeneratorTarget(target);
-
if(const char* langFlagRegexStr =
this->Makefile->GetDefinition(langFlagRegexVar))
{
@@ -1118,7 +1115,7 @@ void cmLocalGenerator::AddCompileOptions(
{
cmSystemTools::ParseWindowsCommandLine(targetFlags, opts);
}
- gtgt->GetCompileOptions(opts, config, lang);
+ target->GetCompileOptions(opts, config, lang);
for(std::vector<std::string>::const_iterator i = opts.begin();
i != opts.end(); ++i)
{
@@ -1139,7 +1136,7 @@ void cmLocalGenerator::AddCompileOptions(
this->AppendFlags(flags, targetFlags);
}
std::vector<std::string> opts;
- gtgt->GetCompileOptions(opts, config, lang);
+ target->GetCompileOptions(opts, config, lang);
for(std::vector<std::string>::const_iterator i = opts.begin();
i != opts.end(); ++i)
{
@@ -1148,19 +1145,19 @@ void cmLocalGenerator::AddCompileOptions(
}
}
std::vector<std::string> features;
- gtgt->GetCompileFeatures(features, config);
+ target->GetCompileFeatures(features, config);
for(std::vector<std::string>::const_iterator it = features.begin();
it != features.end(); ++it)
{
- if (!this->Makefile->AddRequiredTargetFeature(target, *it))
+ if (!this->Makefile->AddRequiredTargetFeature(target->Target, *it))
{
return;
}
}
for(std::map<std::string, std::string>::const_iterator it
- = gtgt->GetMaxLanguageStandards().begin();
- it != gtgt->GetMaxLanguageStandards().end(); ++it)
+ = target->GetMaxLanguageStandards().begin();
+ it != target->GetMaxLanguageStandards().end(); ++it)
{
const char* standard = target->GetProperty(it->first + "_STANDARD");
if(!standard)
@@ -1314,7 +1311,7 @@ void cmLocalGenerator::GetIncludeDirectories(std::vector<std::string>& dirs,
void cmLocalGenerator::GetStaticLibraryFlags(std::string& flags,
std::string const& config,
- cmTarget* target)
+ cmGeneratorTarget* target)
{
this->AppendFlags(flags,
this->Makefile->GetSafeDefinition("CMAKE_STATIC_LINKER_FLAGS"));
@@ -1348,7 +1345,7 @@ void cmLocalGenerator::GetTargetFlags(std::string& linkLibs,
switch(target->GetType())
{
case cmState::STATIC_LIBRARY:
- this->GetStaticLibraryFlags(linkFlags, buildType, target->Target);
+ this->GetStaticLibraryFlags(linkFlags, buildType, target);
break;
case cmState::MODULE_LIBRARY:
libraryLinkVariable = "CMAKE_MODULE_LINKER_FLAGS";
@@ -1421,7 +1418,7 @@ void cmLocalGenerator::GetTargetFlags(std::string& linkLibs,
{
cmSystemTools::Error
("CMake can not determine linker language for target: ",
- target->Target->GetName().c_str());
+ target->GetName().c_str());
return;
}
this->AddLanguageFlags(flags, linkLanguage, buildType);
@@ -1904,7 +1901,8 @@ void cmLocalGenerator::AddSharedFlags(std::string& flags,
//----------------------------------------------------------------------------
void cmLocalGenerator::
-AddCompilerRequirementFlag(std::string &flags, cmTarget const* target,
+AddCompilerRequirementFlag(std::string &flags,
+ cmGeneratorTarget const* target,
const std::string& lang)
{
if (lang.empty())
@@ -1942,7 +1940,8 @@ AddCompilerRequirementFlag(std::string &flags, cmTarget const* target,
"CMAKE_" + lang + standardProp
+ "_" + type + "_COMPILE_OPTION";
- const char *opt = target->GetMakefile()->GetDefinition(option_flag);
+ const char *opt = target->Target->GetMakefile()
+ ->GetDefinition(option_flag);
if (!opt)
{
std::ostringstream e;
@@ -1983,7 +1982,7 @@ AddCompilerRequirementFlag(std::string &flags, cmTarget const* target,
std::string e =
lang + "_STANDARD is set to invalid value '" + standard + "'";
this->GetGlobalGenerator()->GetCMakeInstance()
- ->IssueMessage(cmake::FATAL_ERROR, e, target->GetBacktrace());
+ ->IssueMessage(cmake::FATAL_ERROR, e, target->Target->GetBacktrace());
return;
}
@@ -2007,7 +2006,7 @@ AddCompilerRequirementFlag(std::string &flags, cmTarget const* target,
+ "_" + type + "_COMPILE_OPTION";
const char *opt =
- target->GetMakefile()->GetRequiredDefinition(option_flag);
+ target->Target->GetMakefile()->GetRequiredDefinition(option_flag);
this->AppendFlagEscape(flags, opt);
return;
}
@@ -2018,7 +2017,8 @@ AddCompilerRequirementFlag(std::string &flags, cmTarget const* target,
"CMAKE_" + lang + *stdIt
+ "_" + type + "_COMPILE_OPTION";
- if (const char *opt = target->GetMakefile()->GetDefinition(option_flag))
+ if (const char *opt = target->Target
+ ->GetMakefile()->GetDefinition(option_flag))
{
this->AppendFlagEscape(flags, opt);
return;
@@ -2094,7 +2094,7 @@ static void AddInlineVisibilityCompileOption(std::string &flags,
//----------------------------------------------------------------------------
void cmLocalGenerator
-::AddVisibilityPresetFlags(std::string &flags, cmTarget const* target,
+::AddVisibilityPresetFlags(std::string &flags, cmGeneratorTarget const* target,
const std::string& lang)
{
if (lang.empty())
@@ -2106,9 +2106,9 @@ void cmLocalGenerator
std::string *pWarnCMP0063 = 0;
if (target->GetType() != cmState::SHARED_LIBRARY &&
target->GetType() != cmState::MODULE_LIBRARY &&
- !target->IsExecutableWithExports())
+ !target->Target->IsExecutableWithExports())
{
- switch (target->GetPolicyStatusCMP0063())
+ switch (target->Target->GetPolicyStatusCMP0063())
{
case cmPolicies::OLD:
return;
@@ -2120,11 +2120,12 @@ void cmLocalGenerator
}
}
- AddVisibilityCompileOption(flags, target, this, lang, pWarnCMP0063);
+ AddVisibilityCompileOption(flags, target->Target, this, lang, pWarnCMP0063);
if(lang == "CXX")
{
- AddInlineVisibilityCompileOption(flags, target, this, pWarnCMP0063);
+ AddInlineVisibilityCompileOption(flags, target->Target,
+ this, pWarnCMP0063);
}
if (!warnCMP0063.empty() &&
@@ -2138,14 +2139,15 @@ void cmLocalGenerator
"has the following visibility properties set for " << lang << ":\n" <<
warnCMP0063 <<
"For compatibility CMake is not honoring them for this target.";
- target->GetMakefile()->GetCMakeInstance()
- ->IssueMessage(cmake::AUTHOR_WARNING, w.str(), target->GetBacktrace());
+ target->Target->GetMakefile()->GetCMakeInstance()
+ ->IssueMessage(cmake::AUTHOR_WARNING, w.str(),
+ target->Target->GetBacktrace());
}
}
//----------------------------------------------------------------------------
void cmLocalGenerator::AddCMP0018Flags(std::string &flags,
- cmTarget const* target,
+ cmGeneratorTarget const* target,
std::string const& lang,
const std::string& config)
{
@@ -2169,9 +2171,7 @@ void cmLocalGenerator::AddCMP0018Flags(std::string &flags,
return;
}
- cmGeneratorTarget* gtgt =
- this->GlobalGenerator->GetGeneratorTarget(target);
- if (gtgt->GetLinkInterfaceDependentBoolProperty(
+ if (target->GetLinkInterfaceDependentBoolProperty(
"POSITION_INDEPENDENT_CODE",
config))
{
@@ -3012,7 +3012,7 @@ bool cmLocalGenerator::CheckDefinition(std::string const& define) const
}
//----------------------------------------------------------------------------
-static void cmLGInfoProp(cmMakefile* mf, cmTarget* target,
+static void cmLGInfoProp(cmMakefile* mf, cmGeneratorTarget* target,
const std::string& prop)
{
if(const char* val = target->GetProperty(prop))
@@ -3022,7 +3022,7 @@ static void cmLGInfoProp(cmMakefile* mf, cmTarget* target,
}
//----------------------------------------------------------------------------
-void cmLocalGenerator::GenerateAppleInfoPList(cmTarget* target,
+void cmLocalGenerator::GenerateAppleInfoPList(cmGeneratorTarget* target,
const std::string& targetName,
const char* fname)
{
@@ -3066,7 +3066,7 @@ void cmLocalGenerator::GenerateAppleInfoPList(cmTarget* target,
}
//----------------------------------------------------------------------------
-void cmLocalGenerator::GenerateFrameworkInfoPList(cmTarget* target,
+void cmLocalGenerator::GenerateFrameworkInfoPList(cmGeneratorTarget* target,
const std::string& targetName,
const char* fname)
{
diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h
index ee0a618..2bc0e4a 100644
--- a/Source/cmLocalGenerator.h
+++ b/Source/cmLocalGenerator.h
@@ -20,7 +20,6 @@
class cmMakefile;
class cmGlobalGenerator;
class cmGeneratorTarget;
-class cmTarget;
class cmTargetManifest;
class cmSourceFile;
class cmCustomCommand;
@@ -91,13 +90,15 @@ public:
void AddLanguageFlags(std::string& flags, const std::string& lang,
const std::string& config);
- void AddCMP0018Flags(std::string &flags, cmTarget const* target,
+ void AddCMP0018Flags(std::string &flags, cmGeneratorTarget const* target,
std::string const& lang, const std::string& config);
- void AddVisibilityPresetFlags(std::string &flags, cmTarget const* target,
+ void AddVisibilityPresetFlags(std::string &flags,
+ cmGeneratorTarget const* target,
const std::string& lang);
void AddConfigVariableFlags(std::string& flags, const std::string& var,
const std::string& config);
- void AddCompilerRequirementFlag(std::string &flags, cmTarget const* target,
+ void AddCompilerRequirementFlag(std::string &flags,
+ cmGeneratorTarget const* target,
const std::string& lang);
///! Append flags to a string.
virtual void AppendFlags(std::string& flags, const std::string& newFlags);
@@ -188,10 +189,10 @@ public:
const std::string& lang = "C",
const std::string& config = "",
bool stripImplicitInclDirs = true) const;
- void AddCompileOptions(std::string& flags, cmTarget* target,
+ void AddCompileOptions(std::string& flags, cmGeneratorTarget* target,
const std::string& lang, const std::string& config);
void AddCompileDefinitions(std::set<std::string>& defines,
- cmTarget const* target,
+ cmGeneratorTarget const* target,
const std::string& config,
const std::string& lang);
@@ -212,7 +213,7 @@ public:
{
memset(this, 0, sizeof(*this));
}
- cmTarget* CMTarget;
+ cmGeneratorTarget* CMTarget;
const char* TargetPDB;
const char* TargetCompilePDB;
const char* TargetVersionMajor;
@@ -278,13 +279,14 @@ public:
/**
* Generate a Mac OS X application bundle Info.plist file.
*/
- void GenerateAppleInfoPList(cmTarget* target, const std::string& targetName,
+ void GenerateAppleInfoPList(cmGeneratorTarget* target,
+ const std::string& targetName,
const char* fname);
/**
* Generate a Mac OS X framework Info.plist file.
*/
- void GenerateFrameworkInfoPList(cmTarget* target,
+ void GenerateFrameworkInfoPList(cmGeneratorTarget* target,
const std::string& targetName,
const char* fname);
/** Construct a comment for a custom command. */
@@ -298,7 +300,7 @@ public:
/** Fill out the static linker flags for the given target. */
void GetStaticLibraryFlags(std::string& flags,
std::string const& config,
- cmTarget* target);
+ cmGeneratorTarget* target);
/** Fill out these strings for the given target. Libraries to link,
* flags, and linkflags. */
@@ -341,8 +343,9 @@ protected:
std::string ExpandRuleVariable(std::string const& variable,
const RuleVariables& replaceValues);
- const char* GetRuleLauncher(cmTarget* target, const std::string& prop);
- void InsertRuleLauncher(std::string& s, cmTarget* target,
+ const char* GetRuleLauncher(cmGeneratorTarget* target,
+ const std::string& prop);
+ void InsertRuleLauncher(std::string& s, cmGeneratorTarget* target,
const std::string& prop);
// Handle old-style install rules stored in the targets.
@@ -367,7 +370,7 @@ protected:
std::string::size_type ObjectPathMax;
std::set<std::string> ObjectMaxPathViolations;
- std::set<cmTarget const*> WarnCMP0063;
+ std::set<cmGeneratorTarget const*> WarnCMP0063;
cmGeneratorTargetsType GeneratorTargets;
bool EmitUniversalBinaryFlags;
diff --git a/Source/cmLocalGhsMultiGenerator.cxx b/Source/cmLocalGhsMultiGenerator.cxx
index 2535d2f..a408a23 100644
--- a/Source/cmLocalGhsMultiGenerator.cxx
+++ b/Source/cmLocalGhsMultiGenerator.cxx
@@ -32,7 +32,7 @@ void cmLocalGhsMultiGenerator::Generate()
++l)
{
if (l->second->GetType() == cmState::INTERFACE_LIBRARY
- || l->second->Target->IsImported())
+ || l->second->IsImported())
{
continue;
}
diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx
index f3ee2e3..add0aa9 100644
--- a/Source/cmLocalUnixMakefileGenerator3.cxx
+++ b/Source/cmLocalUnixMakefileGenerator3.cxx
@@ -1034,7 +1034,7 @@ void
cmLocalUnixMakefileGenerator3
::AppendCustomCommands(std::vector<std::string>& commands,
const std::vector<cmCustomCommand>& ccs,
- cmTarget* target,
+ cmGeneratorTarget* target,
cmLocalGenerator::RelativeRoot relative)
{
for(std::vector<cmCustomCommand>::const_iterator i = ccs.begin();
@@ -1050,7 +1050,7 @@ void
cmLocalUnixMakefileGenerator3
::AppendCustomCommand(std::vector<std::string>& commands,
cmCustomCommandGenerator const& ccg,
- cmTarget* target,
+ cmGeneratorTarget* target,
bool echo_comment,
cmLocalGenerator::RelativeRoot relative,
std::ostream* content)
@@ -1181,7 +1181,7 @@ cmLocalUnixMakefileGenerator3
std::string
cmLocalUnixMakefileGenerator3::MakeLauncher(
cmCustomCommandGenerator const& ccg,
- cmTarget* target, RelativeRoot relative)
+ cmGeneratorTarget* target, RelativeRoot relative)
{
// Short-circuit if there is no launcher.
const char* prop = "RULE_LAUNCH_CUSTOM";
@@ -1788,6 +1788,9 @@ void cmLocalUnixMakefileGenerator3
this->AppendEcho(commands, text,
cmLocalUnixMakefileGenerator3::EchoGlobal);
+ cmGeneratorTarget* gt = this->GlobalGenerator
+ ->GetGeneratorTarget(&glIt->second);
+
// Global targets store their rules in pre- and post-build commands.
this->AppendCustomDepends(depends,
glIt->second.GetPreBuildCommands());
@@ -1795,11 +1798,11 @@ void cmLocalUnixMakefileGenerator3
glIt->second.GetPostBuildCommands());
this->AppendCustomCommands(commands,
glIt->second.GetPreBuildCommands(),
- &glIt->second,
+ gt,
cmLocalGenerator::START_OUTPUT);
this->AppendCustomCommands(commands,
glIt->second.GetPostBuildCommands(),
- &glIt->second,
+ gt,
cmLocalGenerator::START_OUTPUT);
std::string targetName = glIt->second.GetName();
this->WriteMakeRule(ruleFileStream, targetString.c_str(),
@@ -1976,10 +1979,11 @@ void cmLocalUnixMakefileGenerator3::ClearDependencies(cmMakefile* mf,
void cmLocalUnixMakefileGenerator3
-::WriteDependLanguageInfo(std::ostream& cmakefileStream, cmTarget &target)
+::WriteDependLanguageInfo(std::ostream& cmakefileStream,
+ cmGeneratorTarget* target)
{
ImplicitDependLanguageMap const& implicitLangs =
- this->GetImplicitDepends(target);
+ this->GetImplicitDepends(*target->Target);
// list the languages
cmakefileStream
@@ -2030,7 +2034,7 @@ void cmLocalUnixMakefileGenerator3
// Build a list of preprocessor definitions for the target.
std::set<std::string> defines;
- this->AddCompileDefinitions(defines, &target,
+ this->AddCompileDefinitions(defines, target,
this->ConfigName, l->first);
if(!defines.empty())
{
@@ -2056,12 +2060,10 @@ void cmLocalUnixMakefileGenerator3
<< "set(CMAKE_" << l->first << "_TARGET_INCLUDE_PATH\n";
std::vector<std::string> includes;
- cmGeneratorTarget* gt = this->GetGlobalGenerator()
- ->GetGeneratorTarget(&target);
const std::string& config =
this->Makefile->GetSafeDefinition("CMAKE_BUILD_TYPE");
- this->GetIncludeDirectories(includes, gt,
+ this->GetIncludeDirectories(includes, target,
l->first, config);
for(std::vector<std::string>::iterator i = includes.begin();
i != includes.end(); ++i)
@@ -2084,7 +2086,7 @@ void cmLocalUnixMakefileGenerator3
cmSystemTools::ExpandListArgument(xform, transformRules);
}
if(const char* xform =
- target.GetProperty("IMPLICIT_DEPENDS_INCLUDE_TRANSFORM"))
+ target->GetProperty("IMPLICIT_DEPENDS_INCLUDE_TRANSFORM"))
{
cmSystemTools::ExpandListArgument(xform, transformRules);
}
diff --git a/Source/cmLocalUnixMakefileGenerator3.h b/Source/cmLocalUnixMakefileGenerator3.h
index 586dda0..beaddde 100644
--- a/Source/cmLocalUnixMakefileGenerator3.h
+++ b/Source/cmLocalUnixMakefileGenerator3.h
@@ -182,7 +182,8 @@ protected:
// write the depend info
- void WriteDependLanguageInfo(std::ostream& cmakefileStream, cmTarget &tgt);
+ void WriteDependLanguageInfo(std::ostream& cmakefileStream,
+ cmGeneratorTarget *tgt);
// write the local help rule
void WriteHelpRule(std::ostream& ruleFileStream);
@@ -215,12 +216,12 @@ protected:
cmCustomCommandGenerator const& cc);
void AppendCustomCommands(std::vector<std::string>& commands,
const std::vector<cmCustomCommand>& ccs,
- cmTarget* target,
+ cmGeneratorTarget* target,
cmLocalGenerator::RelativeRoot relative =
cmLocalGenerator::HOME_OUTPUT);
void AppendCustomCommand(std::vector<std::string>& commands,
cmCustomCommandGenerator const& ccg,
- cmTarget* target,
+ cmGeneratorTarget* target,
bool echo_comment=false,
cmLocalGenerator::RelativeRoot relative =
cmLocalGenerator::HOME_OUTPUT,
@@ -237,7 +238,7 @@ protected:
private:
std::string ConvertShellCommand(std::string const& cmd, RelativeRoot root);
std::string MakeLauncher(cmCustomCommandGenerator const& ccg,
- cmTarget* target, RelativeRoot relative);
+ cmGeneratorTarget* target, RelativeRoot relative);
virtual void ComputeObjectFilenames(
std::map<cmSourceFile const*, std::string>& mapping,
diff --git a/Source/cmLocalVisualStudio6Generator.cxx b/Source/cmLocalVisualStudio6Generator.cxx
index b6f5aed..f40e6dd 100644
--- a/Source/cmLocalVisualStudio6Generator.cxx
+++ b/Source/cmLocalVisualStudio6Generator.cxx
@@ -1319,7 +1319,7 @@ void cmLocalVisualStudio6Generator
{
int major;
int minor;
- target.GetTargetVersion(major, minor);
+ gt->GetTargetVersion(major, minor);
std::ostringstream targetVersionStream;
targetVersionStream << "/version:" << major << "." << minor;
targetVersionFlag = targetVersionStream.str();
@@ -1750,12 +1750,12 @@ void cmLocalVisualStudio6Generator
flagsRelWithDebInfo = this->Makefile->GetSafeDefinition(flagVar.c_str());
flagsRelWithDebInfo += " -DCMAKE_INTDIR=\\\"RelWithDebInfo\\\" ";
- this->AddCompileOptions(flags, &target, linkLanguage, "");
- this->AddCompileOptions(flagsDebug, &target, linkLanguage, "Debug");
- this->AddCompileOptions(flagsRelease, &target, linkLanguage, "Release");
- this->AddCompileOptions(flagsMinSizeRel, &target, linkLanguage,
+ this->AddCompileOptions(flags, gt, linkLanguage, "");
+ this->AddCompileOptions(flagsDebug, gt, linkLanguage, "Debug");
+ this->AddCompileOptions(flagsRelease, gt, linkLanguage, "Release");
+ this->AddCompileOptions(flagsMinSizeRel, gt, linkLanguage,
"MinSizeRel");
- this->AddCompileOptions(flagsRelWithDebInfo, &target, linkLanguage,
+ this->AddCompileOptions(flagsRelWithDebInfo, gt, linkLanguage,
"RelWithDebInfo");
// if _UNICODE and _SBCS are not found, then add -D_MBCS
@@ -1775,14 +1775,14 @@ void cmLocalVisualStudio6Generator
std::set<std::string> minsizeDefinesSet;
std::set<std::string> debugrelDefinesSet;
- this->AddCompileDefinitions(definesSet, &target, "", linkLanguage);
- this->AddCompileDefinitions(debugDefinesSet, &target,
+ this->AddCompileDefinitions(definesSet, gt, "", linkLanguage);
+ this->AddCompileDefinitions(debugDefinesSet, gt,
"DEBUG", linkLanguage);
- this->AddCompileDefinitions(releaseDefinesSet, &target,
+ this->AddCompileDefinitions(releaseDefinesSet, gt,
"RELEASE", linkLanguage);
- this->AddCompileDefinitions(minsizeDefinesSet, &target,
+ this->AddCompileDefinitions(minsizeDefinesSet, gt,
"MINSIZEREL", linkLanguage);
- this->AddCompileDefinitions(debugrelDefinesSet, &target,
+ this->AddCompileDefinitions(debugrelDefinesSet, gt,
"RELWITHDEBINFO", linkLanguage);
std::string defines = " ";
diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx
index 1122919..485ac31 100644
--- a/Source/cmLocalVisualStudio7Generator.cxx
+++ b/Source/cmLocalVisualStudio7Generator.cxx
@@ -733,7 +733,7 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout,
}
// Add the target-specific flags.
- this->AddCompileOptions(flags, &target, linkLanguage, configName);
+ this->AddCompileOptions(flags, gt, linkLanguage, configName);
}
if(this->FortranProject)
@@ -1152,7 +1152,7 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
}
}
std::string libflags;
- this->GetStaticLibraryFlags(libflags, configTypeUpper, &target);
+ this->GetStaticLibraryFlags(libflags, configTypeUpper, gt);
if(!libflags.empty())
{
fout << "\t\t\t\tAdditionalOptions=\"" << libflags << "\"\n";
@@ -1215,7 +1215,7 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
temp += targetNameFull;
fout << "\t\t\t\tOutputFile=\""
<< this->ConvertToXMLOutputPathSingle(temp.c_str()) << "\"\n";
- this->WriteTargetVersionAttribute(fout, target);
+ this->WriteTargetVersionAttribute(fout, gt);
linkOptions.OutputFlagMap(fout, "\t\t\t\t");
fout << "\t\t\t\tAdditionalLibraryDirectories=\"";
this->OutputLibraryDirectories(fout, cli.GetDirectories());
@@ -1314,7 +1314,7 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
temp += targetNameFull;
fout << "\t\t\t\tOutputFile=\""
<< this->ConvertToXMLOutputPathSingle(temp.c_str()) << "\"\n";
- this->WriteTargetVersionAttribute(fout, target);
+ this->WriteTargetVersionAttribute(fout, gt);
linkOptions.OutputFlagMap(fout, "\t\t\t\t");
fout << "\t\t\t\tAdditionalLibraryDirectories=\"";
this->OutputLibraryDirectories(fout, cli.GetDirectories());
@@ -1384,11 +1384,11 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
//----------------------------------------------------------------------------
void
cmLocalVisualStudio7Generator
-::WriteTargetVersionAttribute(std::ostream& fout, cmTarget& target)
+::WriteTargetVersionAttribute(std::ostream& fout, cmGeneratorTarget* gt)
{
int major;
int minor;
- target.GetTargetVersion(major, minor);
+ gt->GetTargetVersion(major, minor);
fout << "\t\t\t\tVersion=\"" << major << "." << minor << "\"\n";
}
diff --git a/Source/cmLocalVisualStudio7Generator.h b/Source/cmLocalVisualStudio7Generator.h
index ba6a72b..16cf004 100644
--- a/Source/cmLocalVisualStudio7Generator.h
+++ b/Source/cmLocalVisualStudio7Generator.h
@@ -106,7 +106,8 @@ private:
const char* source,
const cmCustomCommand& command,
FCInfo& fcinfo);
- void WriteTargetVersionAttribute(std::ostream& fout, cmTarget& target);
+ void WriteTargetVersionAttribute(std::ostream& fout,
+ cmGeneratorTarget* gt);
bool WriteGroup(const cmSourceGroup *sg,
cmTarget& target, std::ostream &fout,
diff --git a/Source/cmMakefileExecutableTargetGenerator.cxx b/Source/cmMakefileExecutableTargetGenerator.cxx
index 2d2de5f..31fb37b 100644
--- a/Source/cmMakefileExecutableTargetGenerator.cxx
+++ b/Source/cmMakefileExecutableTargetGenerator.cxx
@@ -100,7 +100,7 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
// Construct the full path version of the names.
std::string outpath = this->GeneratorTarget->GetDirectory(this->ConfigName);
- if(this->Target->IsAppBundleOnApple())
+ if(this->GeneratorTarget->IsAppBundleOnApple())
{
this->OSXBundleGenerator->CreateAppBundle(targetName, outpath);
}
@@ -168,7 +168,7 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
if(linkLanguage.empty())
{
cmSystemTools::Error("Cannot determine link language for target \"",
- this->Target->GetName().c_str(), "\".");
+ this->GeneratorTarget->GetName().c_str(), "\".");
return;
}
@@ -197,7 +197,7 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
this->ConfigName);
- if(this->Target->GetPropertyAsBool("WIN32_EXECUTABLE"))
+ if(this->GeneratorTarget->GetPropertyAsBool("WIN32_EXECUTABLE"))
{
this->LocalGenerator->AppendFlags
(linkFlags, this->Makefile->GetDefinition("CMAKE_CREATE_WIN32_EXE"));
@@ -226,11 +226,11 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
// Add target-specific linker flags.
this->LocalGenerator->AppendFlags
- (linkFlags, this->Target->GetProperty("LINK_FLAGS"));
+ (linkFlags, this->GeneratorTarget->GetProperty("LINK_FLAGS"));
std::string linkFlagsConfig = "LINK_FLAGS_";
linkFlagsConfig += cmSystemTools::UpperCase(this->ConfigName);
this->LocalGenerator->AppendFlags
- (linkFlags, this->Target->GetProperty(linkFlagsConfig));
+ (linkFlags, this->GeneratorTarget->GetProperty(linkFlagsConfig));
this->AddModuleDefinitionFlag(linkFlags);
@@ -280,10 +280,10 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
{
this->LocalGenerator
->AppendCustomCommands(commands, this->Target->GetPreBuildCommands(),
- this->Target);
+ this->GeneratorTarget);
this->LocalGenerator
->AppendCustomCommands(commands, this->Target->GetPreLinkCommands(),
- this->Target);
+ this->GeneratorTarget);
}
// Determine whether a link script will be used.
@@ -358,7 +358,7 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
cmLocalGenerator::RuleVariables vars;
vars.RuleLauncher = "RULE_LAUNCH_LINK";
- vars.CMTarget = this->Target;
+ vars.CMTarget = this->GeneratorTarget;
vars.Language = linkLanguage.c_str();
vars.Objects = buildObjs.c_str();
std::string objectDir = this->GeneratorTarget->GetSupportDirectory();
@@ -382,7 +382,7 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
std::ostringstream minorStream;
int major;
int minor;
- this->Target->GetTargetVersion(major, minor);
+ this->GeneratorTarget->GetTargetVersion(major, minor);
majorStream << major;
minorStream << minor;
targetVersionMajor = majorStream.str();
@@ -449,7 +449,7 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
{
this->LocalGenerator->
AppendCustomCommands(commands, this->Target->GetPostBuildCommands(),
- this->Target);
+ this->GeneratorTarget);
}
// Write the build rule.
diff --git a/Source/cmMakefileLibraryTargetGenerator.cxx b/Source/cmMakefileLibraryTargetGenerator.cxx
index a0aa10b..df2a8c9 100644
--- a/Source/cmMakefileLibraryTargetGenerator.cxx
+++ b/Source/cmMakefileLibraryTargetGenerator.cxx
@@ -115,18 +115,18 @@ void cmMakefileLibraryTargetGenerator::WriteObjectLibraryRules()
// Add post-build rules.
this->LocalGenerator->
AppendCustomCommands(commands, this->Target->GetPostBuildCommands(),
- this->Target);
+ this->GeneratorTarget);
// Depend on the object files.
this->AppendObjectDepends(depends);
// Write the rule.
this->LocalGenerator->WriteMakeRule(*this->BuildFileStream, 0,
- this->Target->GetName(),
+ this->GeneratorTarget->GetName(),
depends, commands, true);
// Write the main driver rule to build everything in this target.
- this->WriteTargetDriverRule(this->Target->GetName(), false);
+ this->WriteTargetDriverRule(this->GeneratorTarget->GetName(), false);
}
//----------------------------------------------------------------------------
@@ -146,14 +146,14 @@ void cmMakefileLibraryTargetGenerator::WriteStaticLibraryRules()
std::string extraFlags;
this->LocalGenerator->GetStaticLibraryFlags(extraFlags,
- cmSystemTools::UpperCase(this->ConfigName), this->Target);
+ cmSystemTools::UpperCase(this->ConfigName), this->GeneratorTarget);
this->WriteLibraryRules(linkRuleVar, extraFlags, false);
}
//----------------------------------------------------------------------------
void cmMakefileLibraryTargetGenerator::WriteSharedLibraryRules(bool relink)
{
- if(this->Target->IsFrameworkOnApple())
+ if(this->GeneratorTarget->IsFrameworkOnApple())
{
this->WriteFrameworkRules(relink);
return;
@@ -166,11 +166,11 @@ void cmMakefileLibraryTargetGenerator::WriteSharedLibraryRules(bool relink)
std::string extraFlags;
this->LocalGenerator->AppendFlags
- (extraFlags, this->Target->GetProperty("LINK_FLAGS"));
+ (extraFlags, this->GeneratorTarget->GetProperty("LINK_FLAGS"));
std::string linkFlagsConfig = "LINK_FLAGS_";
linkFlagsConfig += cmSystemTools::UpperCase(this->ConfigName);
this->LocalGenerator->AppendFlags
- (extraFlags, this->Target->GetProperty(linkFlagsConfig));
+ (extraFlags, this->GeneratorTarget->GetProperty(linkFlagsConfig));
this->LocalGenerator->AddConfigVariableFlags
(extraFlags, "CMAKE_SHARED_LINKER_FLAGS", this->ConfigName);
@@ -190,11 +190,11 @@ void cmMakefileLibraryTargetGenerator::WriteModuleLibraryRules(bool relink)
std::string extraFlags;
this->LocalGenerator->AppendFlags(extraFlags,
- this->Target->GetProperty("LINK_FLAGS"));
+ this->GeneratorTarget->GetProperty("LINK_FLAGS"));
std::string linkFlagsConfig = "LINK_FLAGS_";
linkFlagsConfig += cmSystemTools::UpperCase(this->ConfigName);
this->LocalGenerator->AppendFlags
- (extraFlags, this->Target->GetProperty(linkFlagsConfig));
+ (extraFlags, this->GeneratorTarget->GetProperty(linkFlagsConfig));
this->LocalGenerator->AddConfigVariableFlags
(extraFlags, "CMAKE_MODULE_LINKER_FLAGS", this->ConfigName);
this->AddModuleDefinitionFlag(extraFlags);
@@ -213,11 +213,11 @@ void cmMakefileLibraryTargetGenerator::WriteFrameworkRules(bool relink)
std::string extraFlags;
this->LocalGenerator->AppendFlags(extraFlags,
- this->Target->GetProperty("LINK_FLAGS"));
+ this->GeneratorTarget->GetProperty("LINK_FLAGS"));
std::string linkFlagsConfig = "LINK_FLAGS_";
linkFlagsConfig += cmSystemTools::UpperCase(this->ConfigName);
this->LocalGenerator->AppendFlags
- (extraFlags, this->Target->GetProperty(linkFlagsConfig));
+ (extraFlags, this->GeneratorTarget->GetProperty(linkFlagsConfig));
this->LocalGenerator->AddConfigVariableFlags
(extraFlags, "CMAKE_MACOSX_FRAMEWORK_LINKER_FLAGS", this->ConfigName);
@@ -244,7 +244,7 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
if(linkLanguage.empty())
{
cmSystemTools::Error("Cannot determine link language for target \"",
- this->Target->GetName().c_str(), "\".");
+ this->GeneratorTarget->GetName().c_str(), "\".");
return;
}
@@ -273,13 +273,13 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
// Construct the full path version of the names.
std::string outpath;
std::string outpathImp;
- if(this->Target->IsFrameworkOnApple())
+ if(this->GeneratorTarget->IsFrameworkOnApple())
{
outpath = this->GeneratorTarget->GetDirectory(this->ConfigName);
this->OSXBundleGenerator->CreateFramework(targetName, outpath);
outpath += "/";
}
- else if(this->Target->IsCFBundleOnApple())
+ else if(this->GeneratorTarget->IsCFBundleOnApple())
{
outpath = this->GeneratorTarget->GetDirectory(this->ConfigName);
this->OSXBundleGenerator->CreateCFBundle(targetName, outpath);
@@ -360,7 +360,7 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
buildEcho += " shared library ";
break;
case cmState::MODULE_LIBRARY:
- if (this->Target->IsCFBundleOnApple())
+ if (this->GeneratorTarget->IsCFBundleOnApple())
buildEcho += " CFBundle";
buildEcho += " shared module ";
break;
@@ -458,10 +458,10 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
{
this->LocalGenerator
->AppendCustomCommands(commands, this->Target->GetPreBuildCommands(),
- this->Target);
+ this->GeneratorTarget);
this->LocalGenerator
->AppendCustomCommands(commands, this->Target->GetPreLinkCommands(),
- this->Target);
+ this->GeneratorTarget);
}
// Determine whether a link script will be used.
@@ -569,12 +569,12 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
if (this->GeneratorTarget->GetType() == cmState::SHARED_LIBRARY &&
this->Makefile->IsOn("CMAKE_SUPPORT_WINDOWS_EXPORT_ALL_SYMBOLS"))
{
- if(this->Target->GetPropertyAsBool("WINDOWS_EXPORT_ALL_SYMBOLS"))
+ if(this->GeneratorTarget->GetPropertyAsBool("WINDOWS_EXPORT_ALL_SYMBOLS"))
{
std::string name_of_def_file =
this->GeneratorTarget->GetSupportDirectory();
name_of_def_file += std::string("/") +
- this->Target->GetName();
+ this->GeneratorTarget->GetName();
name_of_def_file += ".def";
std::string cmd = cmSystemTools::GetCMakeCommand();
cmd = this->Convert(cmd, cmLocalGenerator::NONE,
@@ -630,7 +630,7 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
std::ostringstream minorStream;
int major;
int minor;
- this->Target->GetTargetVersion(major, minor);
+ this->GeneratorTarget->GetTargetVersion(major, minor);
majorStream << major;
minorStream << minor;
targetVersionMajor = majorStream.str();
@@ -640,7 +640,7 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
vars.TargetVersionMinor = targetVersionMinor.c_str();
vars.RuleLauncher = "RULE_LAUNCH_LINK";
- vars.CMTarget = this->Target;
+ vars.CMTarget = this->GeneratorTarget;
vars.Language = linkLanguage.c_str();
vars.Objects = buildObjs.c_str();
std::string objectDir = this->GeneratorTarget->GetSupportDirectory();
@@ -791,7 +791,8 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
// Add a rule to create necessary symlinks for the library.
// Frameworks are handled by cmOSXBundleGenerator.
- if(targetOutPath != targetOutPathReal && !this->Target->IsFrameworkOnApple())
+ if(targetOutPath != targetOutPathReal
+ && !this->GeneratorTarget->IsFrameworkOnApple())
{
std::string symlink = "$(CMAKE_COMMAND) -E cmake_symlink_library ";
symlink += targetOutPathReal;
@@ -811,7 +812,7 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
{
this->LocalGenerator->
AppendCustomCommands(commands, this->Target->GetPostBuildCommands(),
- this->Target);
+ this->GeneratorTarget);
}
// Compute the list of outputs.
@@ -862,7 +863,7 @@ cmMakefileLibraryTargetGenerator
int major;
int minor;
int patch;
- this->Target->GetTargetVersion(so, major, minor, patch);
+ this->GeneratorTarget->GetTargetVersion(so, major, minor, patch);
if(major > 0 || minor > 0 || patch > 0)
{
// Append the flag since a non-zero version is specified.
diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx
index 48a29b3..b7970fd 100644
--- a/Source/cmMakefileTargetGenerator.cxx
+++ b/Source/cmMakefileTargetGenerator.cxx
@@ -248,7 +248,8 @@ void cmMakefileTargetGenerator::WriteCommonCodeRules()
// Write an empty dependency file.
cmGeneratedFileStream depFileStream(dependFileNameFull.c_str());
depFileStream
- << "# Empty dependencies file for " << this->Target->GetName() << ".\n"
+ << "# Empty dependencies file for "
+ << this->GeneratorTarget->GetName() << ".\n"
<< "# This may be replaced when dependencies are built." << std::endl;
}
@@ -394,7 +395,7 @@ void cmMakefileTargetGenerator
err << "Warning: Source file \""
<< source.GetFullPath()
<< "\" is listed multiple times for target \""
- << this->Target->GetName()
+ << this->GeneratorTarget->GetName()
<< "\".";
cmSystemTools::Message(err.str().c_str(), "Warning");
return;
@@ -588,7 +589,7 @@ cmMakefileTargetGenerator
}
cmLocalGenerator::RuleVariables vars;
vars.RuleLauncher = "RULE_LAUNCH_COMPILE";
- vars.CMTarget = this->Target;
+ vars.CMTarget = this->GeneratorTarget;
vars.Language = lang.c_str();
vars.Target = targetOutPathReal.c_str();
vars.TargetPDB = targetOutPathPDB.c_str();
@@ -666,7 +667,7 @@ cmMakefileTargetGenerator
if (!compileCommands.empty() && (lang == "C" || lang == "CXX"))
{
std::string const iwyu_prop = lang + "_INCLUDE_WHAT_YOU_USE";
- const char *iwyu = this->Target->GetProperty(iwyu_prop);
+ const char *iwyu = this->GeneratorTarget->GetProperty(iwyu_prop);
if (iwyu && *iwyu)
{
std::string run_iwyu = "$(CMAKE_COMMAND) -E __run_iwyu --iwyu=";
@@ -680,7 +681,7 @@ cmMakefileTargetGenerator
if (!compileCommands.empty() && (lang == "C" || lang == "CXX"))
{
std::string const clauncher_prop = lang + "_COMPILER_LAUNCHER";
- const char *clauncher = this->Target->GetProperty(clauncher_prop);
+ const char *clauncher = this->GeneratorTarget->GetProperty(clauncher_prop);
if (clauncher && *clauncher)
{
std::vector<std::string> launcher_cmd;
@@ -1039,7 +1040,7 @@ void cmMakefileTargetGenerator::WriteTargetDependRules()
return;
}
this->LocalGenerator->
- WriteDependLanguageInfo(*this->InfoFileStream,*this->Target);
+ WriteDependLanguageInfo(*this->InfoFileStream, this->GeneratorTarget);
// Store multiple output pairs in the depend info file.
if(!this->MultipleOutputPairs.empty())
@@ -1210,7 +1211,8 @@ void cmMakefileTargetGenerator
// Now append the actual user-specified commands.
std::ostringstream content;
- this->LocalGenerator->AppendCustomCommand(commands, ccg, this->Target, false,
+ this->LocalGenerator->AppendCustomCommand(commands, ccg,
+ this->GeneratorTarget, false,
cmLocalGenerator::HOME_OUTPUT,
&content);
@@ -1267,10 +1269,10 @@ cmMakefileTargetGenerator
// Write a make variable assignment that lists all objects for the
// target.
variableName =
- this->LocalGenerator->CreateMakeVariable(this->Target->GetName(),
+ this->LocalGenerator->CreateMakeVariable(this->GeneratorTarget->GetName(),
"_OBJECTS");
*this->BuildFileStream
- << "# Object files for target " << this->Target->GetName() << "\n"
+ << "# Object files for target " << this->GeneratorTarget->GetName() << "\n"
<< variableName << " =";
std::string object;
const char* lineContinue =
@@ -1292,12 +1294,12 @@ cmMakefileTargetGenerator
// Write a make variable assignment that lists all external objects
// for the target.
variableNameExternal =
- this->LocalGenerator->CreateMakeVariable(this->Target->GetName(),
+ this->LocalGenerator->CreateMakeVariable(this->GeneratorTarget->GetName(),
"_EXTERNAL_OBJECTS");
*this->BuildFileStream
<< "\n"
<< "# External object files for target "
- << this->Target->GetName() << "\n"
+ << this->GeneratorTarget->GetName() << "\n"
<< variableNameExternal << " =";
for(std::vector<std::string>::const_iterator i =
this->ExternalObjects.begin();
@@ -1512,7 +1514,7 @@ void cmMakefileTargetGenerator
// Add user-specified dependencies.
if(const char* linkDepends =
- this->Target->GetProperty("LINK_DEPENDS"))
+ this->GeneratorTarget->GetProperty("LINK_DEPENDS"))
{
cmSystemTools::ExpandListArgument(linkDepends, depends);
}
diff --git a/Source/cmMakefileUtilityTargetGenerator.cxx b/Source/cmMakefileUtilityTargetGenerator.cxx
index 303ca63..11601c5 100644
--- a/Source/cmMakefileUtilityTargetGenerator.cxx
+++ b/Source/cmMakefileUtilityTargetGenerator.cxx
@@ -42,7 +42,8 @@ void cmMakefileUtilityTargetGenerator::WriteRuleFiles()
this->CreateRuleFile();
*this->BuildFileStream
- << "# Utility rule file for " << this->Target->GetName() << ".\n\n";
+ << "# Utility rule file for "
+ << this->GeneratorTarget->GetName() << ".\n\n";
if(!this->NoRuleMessages)
{
@@ -73,13 +74,13 @@ void cmMakefileUtilityTargetGenerator::WriteRuleFiles()
(depends, this->Target->GetPostBuildCommands());
this->LocalGenerator->AppendCustomCommands
- (commands, this->Target->GetPreBuildCommands(), this->Target);
+ (commands, this->Target->GetPreBuildCommands(), this->GeneratorTarget);
// Depend on all custom command outputs for sources
this->DriveCustomCommands(depends);
this->LocalGenerator->AppendCustomCommands
- (commands, this->Target->GetPostBuildCommands(), this->Target);
+ (commands, this->Target->GetPostBuildCommands(), this->GeneratorTarget);
// Add dependencies on targets that must be built first.
this->AppendTargetDepends(depends);
@@ -101,11 +102,11 @@ void cmMakefileUtilityTargetGenerator::WriteRuleFiles()
// Write the rule.
this->LocalGenerator->WriteMakeRule(*this->BuildFileStream, 0,
- this->Target->GetName(),
+ this->GeneratorTarget->GetName(),
depends, commands, true);
// Write the main driver rule to build everything in this target.
- this->WriteTargetDriverRule(this->Target->GetName(), false);
+ this->WriteTargetDriverRule(this->GeneratorTarget->GetName(), false);
// Write clean target
this->WriteTargetCleanRules();
diff --git a/Source/cmNinjaNormalTargetGenerator.cxx b/Source/cmNinjaNormalTargetGenerator.cxx
index 066c64e..dafbda9 100644
--- a/Source/cmNinjaNormalTargetGenerator.cxx
+++ b/Source/cmNinjaNormalTargetGenerator.cxx
@@ -77,7 +77,7 @@ void cmNinjaNormalTargetGenerator::Generate()
if (this->TargetLinkLanguage.empty()) {
cmSystemTools::Error("CMake can not determine linker language for "
"target: ",
- this->GetTarget()->GetName().c_str());
+ this->GetGeneratorTarget()->GetName().c_str());
return;
}
@@ -139,7 +139,7 @@ const char *cmNinjaNormalTargetGenerator::GetVisibleTypeName() const
case cmState::SHARED_LIBRARY:
return "shared library";
case cmState::MODULE_LIBRARY:
- if (this->GetTarget()->IsCFBundleOnApple())
+ if (this->GetGeneratorTarget()->IsCFBundleOnApple())
return "CFBundle shared module";
else
return "shared module";
@@ -158,7 +158,8 @@ cmNinjaNormalTargetGenerator
+ "_"
+ cmState::GetTargetTypeName(this->GetGeneratorTarget()->GetType())
+ "_LINKER__"
- + cmGlobalNinjaGenerator::EncodeRuleName(this->GetTarget()->GetName())
+ + cmGlobalNinjaGenerator::EncodeRuleName(
+ this->GetGeneratorTarget()->GetName())
;
}
@@ -177,7 +178,7 @@ cmNinjaNormalTargetGenerator
if (!this->GetGlobalGenerator()->HasRule(ruleName)) {
cmLocalGenerator::RuleVariables vars;
vars.RuleLauncher = "RULE_LAUNCH_LINK";
- vars.CMTarget = this->GetTarget();
+ vars.CMTarget = this->GetGeneratorTarget();
vars.Language = this->TargetLinkLanguage.c_str();
std::string responseFlag;
@@ -227,7 +228,7 @@ cmNinjaNormalTargetGenerator
std::ostringstream minorStream;
int major;
int minor;
- this->GetTarget()->GetTargetVersion(major, minor);
+ this->GetGeneratorTarget()->GetTargetVersion(major, minor);
majorStream << major;
minorStream << minor;
targetVersionMajor = majorStream.str();
@@ -280,7 +281,7 @@ cmNinjaNormalTargetGenerator
}
if (this->TargetNameOut != this->TargetNameReal &&
- !this->GetTarget()->IsFrameworkOnApple()) {
+ !this->GetGeneratorTarget()->IsFrameworkOnApple()) {
std::string cmakeCommand =
this->GetLocalGenerator()->ConvertToOutputFormat(
cmSystemTools::GetCMakeCommand(), cmLocalGenerator::SHELL);
@@ -411,7 +412,7 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
gt.GetFullPath(cfgName,
/*implib=*/true));
- if (target.IsAppBundleOnApple())
+ if (gt.IsAppBundleOnApple())
{
// Create the app bundle
std::string outpath = gt.GetDirectory(cfgName);
@@ -427,13 +428,13 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
targetOutputReal += this->TargetNameReal;
targetOutputReal = this->ConvertToNinjaPath(targetOutputReal);
}
- else if (target.IsFrameworkOnApple())
+ else if (gt.IsFrameworkOnApple())
{
// Create the library framework.
this->OSXBundleGenerator->CreateFramework(this->TargetNameOut,
gt.GetDirectory(cfgName));
}
- else if(target.IsCFBundleOnApple())
+ else if(gt.IsCFBundleOnApple())
{
// Create the core foundation bundle.
this->OSXBundleGenerator->CreateCFBundle(this->TargetNameOut,
@@ -731,7 +732,7 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
&usedResponseFile);
this->WriteLinkRule(usedResponseFile);
- if (targetOutput != targetOutputReal && !target.IsFrameworkOnApple())
+ if (targetOutput != targetOutputReal && !gt.IsFrameworkOnApple())
{
if (targetType == cmState::EXECUTABLE)
{
diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx
index 0eba0b3..cb1122c 100644
--- a/Source/cmNinjaTargetGenerator.cxx
+++ b/Source/cmNinjaTargetGenerator.cxx
@@ -92,7 +92,7 @@ std::string cmNinjaTargetGenerator::LanguageCompilerRule(
const std::string& lang) const
{
return lang + "_COMPILER__" +
- cmGlobalNinjaGenerator::EncodeRuleName(this->Target->GetName());
+ cmGlobalNinjaGenerator::EncodeRuleName(this->GeneratorTarget->GetName());
}
std::string
@@ -218,7 +218,8 @@ cmNinjaDeps cmNinjaTargetGenerator::ComputeLinkDeps() const
}
// Add user-specified dependencies.
- if (const char* linkDepends = this->Target->GetProperty("LINK_DEPENDS"))
+ if (const char* linkDepends =
+ this->GeneratorTarget->GetProperty("LINK_DEPENDS"))
{
std::vector<std::string> linkDeps;
cmSystemTools::ExpandListArgument(linkDepends, linkDeps);
@@ -271,7 +272,7 @@ cmNinjaTargetGenerator
std::string cmNinjaTargetGenerator::GetTargetName() const
{
- return this->Target->GetName();
+ return this->GeneratorTarget->GetName();
}
@@ -334,7 +335,7 @@ cmNinjaTargetGenerator
{
cmLocalGenerator::RuleVariables vars;
vars.RuleLauncher = "RULE_LAUNCH_COMPILE";
- vars.CMTarget = this->GetTarget();
+ vars.CMTarget = this->GetGeneratorTarget();
vars.Language = lang.c_str();
vars.Source = "$in";
vars.Object = "$out";
@@ -410,7 +411,7 @@ cmNinjaTargetGenerator
if (!compileCmds.empty() && (lang == "C" || lang == "CXX"))
{
std::string const iwyu_prop = lang + "_INCLUDE_WHAT_YOU_USE";
- const char *iwyu = this->Target->GetProperty(iwyu_prop);
+ const char *iwyu = this->GeneratorTarget->GetProperty(iwyu_prop);
if (iwyu && *iwyu)
{
std::string run_iwyu =
@@ -427,7 +428,7 @@ cmNinjaTargetGenerator
if (!compileCmds.empty() && (lang == "C" || lang == "CXX"))
{
std::string const clauncher_prop = lang + "_COMPILER_LAUNCHER";
- const char *clauncher = this->Target->GetProperty(clauncher_prop);
+ const char *clauncher = this->GeneratorTarget->GetProperty(clauncher_prop);
if (clauncher && *clauncher)
{
std::vector<std::string> launcher_cmd;
diff --git a/Source/cmNinjaUtilityTargetGenerator.cxx b/Source/cmNinjaUtilityTargetGenerator.cxx
index 9feb7ac..5bbe268 100644
--- a/Source/cmNinjaUtilityTargetGenerator.cxx
+++ b/Source/cmNinjaUtilityTargetGenerator.cxx
@@ -90,7 +90,8 @@ void cmNinjaUtilityTargetGenerator::Generate()
} else {
std::string command =
this->GetLocalGenerator()->BuildCommandLine(commands);
- const char *echoStr = this->GetTarget()->GetProperty("EchoString");
+ const char *echoStr =
+ this->GetGeneratorTarget()->GetProperty("EchoString");
std::string desc;
if (echoStr)
desc = echoStr;
diff --git a/Source/cmOSXBundleGenerator.cxx b/Source/cmOSXBundleGenerator.cxx
index 4fe99e3..490759f 100644
--- a/Source/cmOSXBundleGenerator.cxx
+++ b/Source/cmOSXBundleGenerator.cxx
@@ -59,7 +59,7 @@ void cmOSXBundleGenerator::CreateAppBundle(const std::string& targetName,
plist += "/";
plist += this->GT->GetAppBundleDirectory(this->ConfigName, true);
plist += "/Info.plist";
- this->LocalGenerator->GenerateAppleInfoPList(this->GT->Target,
+ this->LocalGenerator->GenerateAppleInfoPList(this->GT,
targetName,
plist.c_str());
this->Makefile->AddCMakeOutputFile(plist);
@@ -90,7 +90,7 @@ void cmOSXBundleGenerator::CreateFramework(
std::string plist = newoutpath;
plist += "/Resources/Info.plist";
std::string name = cmSystemTools::GetFilenameName(targetName);
- this->LocalGenerator->GenerateFrameworkInfoPList(this->GT->Target,
+ this->LocalGenerator->GenerateFrameworkInfoPList(this->GT,
name,
plist.c_str());
@@ -182,7 +182,7 @@ void cmOSXBundleGenerator::CreateCFBundle(const std::string& targetName,
this->GT->GetCFBundleDirectory(this->ConfigName, true);
plist += "/Info.plist";
std::string name = cmSystemTools::GetFilenameName(targetName);
- this->LocalGenerator->GenerateAppleInfoPList(this->GT->Target,
+ this->LocalGenerator->GenerateAppleInfoPList(this->GT,
name,
plist.c_str());
this->Makefile->AddCMakeOutputFile(plist);
diff --git a/Source/cmQtAutoGeneratorInitializer.cxx b/Source/cmQtAutoGeneratorInitializer.cxx
index f9875b3..386d430 100644
--- a/Source/cmQtAutoGeneratorInitializer.cxx
+++ b/Source/cmQtAutoGeneratorInitializer.cxx
@@ -120,7 +120,7 @@ static void GetCompileDefinitionsAndDirectories(
incs = cmJoin(includeDirs, ";");
std::set<std::string> defines;
- localGen->AddCompileDefinitions(defines, target->Target, config, "CXX");
+ localGen->AddCompileDefinitions(defines, target, config, "CXX");
defs += cmJoin(defines, ";");
}
@@ -132,6 +132,7 @@ static void SetupAutoMocTarget(cmGeneratorTarget const* target,
std::map<std::string, std::string> &configIncludes,
std::map<std::string, std::string> &configDefines)
{
+ cmLocalGenerator* lg = target->GetLocalGenerator();
cmMakefile* makefile = target->Target->GetMakefile();
const char* tmp = target->GetProperty("AUTOMOC_MOC_OPTIONS");
@@ -188,7 +189,8 @@ static void SetupAutoMocTarget(cmGeneratorTarget const* target,
const char *qtVersion = makefile->GetDefinition("_target_qt_version");
if (strcmp(qtVersion, "5") == 0)
{
- cmTarget *qt5Moc = makefile->FindTargetToUse("Qt5::moc");
+ cmGeneratorTarget *qt5Moc =
+ lg->FindGeneratorTargetToUse("Qt5::moc");
if (!qt5Moc)
{
cmSystemTools::Error("Qt5::moc target not found ",
@@ -200,7 +202,8 @@ static void SetupAutoMocTarget(cmGeneratorTarget const* target,
}
else if (strcmp(qtVersion, "4") == 0)
{
- cmTarget *qt4Moc = makefile->FindTargetToUse("Qt4::moc");
+ cmGeneratorTarget *qt4Moc =
+ lg->FindGeneratorTargetToUse("Qt4::moc");
if (!qt4Moc)
{
cmSystemTools::Error("Qt4::moc target not found ",
@@ -230,6 +233,7 @@ static void SetupAutoUicTarget(cmGeneratorTarget const* target,
std::vector<std::string> const& skipUic,
std::map<std::string, std::string> &configUicOptions)
{
+ cmLocalGenerator* lg = target->GetLocalGenerator();
cmMakefile *makefile = target->Target->GetMakefile();
std::set<std::string> skipped;
@@ -303,7 +307,8 @@ static void SetupAutoUicTarget(cmGeneratorTarget const* target,
std::string targetName = target->GetName();
if (strcmp(qtVersion, "5") == 0)
{
- cmTarget *qt5Uic = makefile->FindTargetToUse("Qt5::uic");
+ cmGeneratorTarget *qt5Uic =
+ lg->FindGeneratorTargetToUse("Qt5::uic");
if (!qt5Uic)
{
// Project does not use Qt5Widgets, but has AUTOUIC ON anyway
@@ -316,7 +321,8 @@ static void SetupAutoUicTarget(cmGeneratorTarget const* target,
}
else if (strcmp(qtVersion, "4") == 0)
{
- cmTarget *qt4Uic = makefile->FindTargetToUse("Qt4::uic");
+ cmGeneratorTarget *qt4Uic =
+ lg->FindGeneratorTargetToUse("Qt4::uic");
if (!qt4Uic)
{
cmSystemTools::Error("Qt4::uic target not found ",
@@ -335,6 +341,7 @@ static void SetupAutoUicTarget(cmGeneratorTarget const* target,
static std::string GetRccExecutable(cmGeneratorTarget const* target)
{
+ cmLocalGenerator* lg = target->GetLocalGenerator();
cmMakefile *makefile = target->Target->GetMakefile();
const char *qtVersion = makefile->GetDefinition("_target_qt_version");
if (!qtVersion)
@@ -355,7 +362,8 @@ static std::string GetRccExecutable(cmGeneratorTarget const* target)
std::string targetName = target->GetName();
if (strcmp(qtVersion, "5") == 0)
{
- cmTarget *qt5Rcc = makefile->FindTargetToUse("Qt5::rcc");
+ cmGeneratorTarget *qt5Rcc =
+ lg->FindGeneratorTargetToUse("Qt5::rcc");
if (!qt5Rcc)
{
cmSystemTools::Error("Qt5::rcc target not found ",
@@ -366,7 +374,8 @@ static std::string GetRccExecutable(cmGeneratorTarget const* target)
}
else if (strcmp(qtVersion, "4") == 0)
{
- cmTarget *qt4Rcc = makefile->FindTargetToUse("Qt4::rcc");
+ cmGeneratorTarget *qt4Rcc =
+ lg->FindGeneratorTargetToUse("Qt4::rcc");
if (!qt4Rcc)
{
cmSystemTools::Error("Qt4::rcc target not found ",
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index fecdc45..f663678 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -345,17 +345,6 @@ bool cmTarget::IsExecutableWithExports() const
}
//----------------------------------------------------------------------------
-bool cmTarget::IsLinkable() const
-{
- return (this->GetType() == cmState::STATIC_LIBRARY ||
- this->GetType() == cmState::SHARED_LIBRARY ||
- this->GetType() == cmState::MODULE_LIBRARY ||
- this->GetType() == cmState::UNKNOWN_LIBRARY ||
- this->GetType() == cmState::INTERFACE_LIBRARY ||
- this->IsExecutableWithExports());
-}
-
-//----------------------------------------------------------------------------
bool cmTarget::HasImportLibrary() const
{
return (this->DLLPlatform &&
@@ -380,21 +369,6 @@ bool cmTarget::IsAppBundleOnApple() const
}
//----------------------------------------------------------------------------
-bool cmTarget::IsCFBundleOnApple() const
-{
- return (this->GetType() == cmState::MODULE_LIBRARY &&
- this->Makefile->IsOn("APPLE") &&
- this->GetPropertyAsBool("BUNDLE"));
-}
-
-//----------------------------------------------------------------------------
-bool cmTarget::IsXCTestOnApple() const
-{
- return (this->IsCFBundleOnApple() &&
- this->GetPropertyAsBool("XCTEST"));
-}
-
-//----------------------------------------------------------------------------
void cmTarget::AddTracedSources(std::vector<std::string> const& srcs)
{
if (!srcs.empty())
@@ -1316,7 +1290,6 @@ void cmTarget::SetProperty(const std::string& prop, const char* value)
else
{
this->Properties.SetProperty(prop, value);
- this->MaybeInvalidatePropertyCache(prop);
}
}
@@ -1409,31 +1382,10 @@ void cmTarget::AppendProperty(const std::string& prop, const char* value,
else
{
this->Properties.AppendProperty(prop, value, asString);
- this->MaybeInvalidatePropertyCache(prop);
}
}
//----------------------------------------------------------------------------
-std::string cmTarget::GetExportName() const
-{
- const char *exportName = this->GetProperty("EXPORT_NAME");
-
- if (exportName && *exportName)
- {
- if (!cmGeneratorExpression::IsValidTargetName(exportName))
- {
- std::ostringstream e;
- e << "EXPORT_NAME property \"" << exportName << "\" for \""
- << this->GetName() << "\": is not valid.";
- cmSystemTools::Error(e.str().c_str());
- return "";
- }
- return exportName;
- }
- return this->GetName();
-}
-
-//----------------------------------------------------------------------------
void cmTarget::AppendBuildInterfaceIncludes()
{
if(this->GetType() != cmState::SHARED_LIBRARY &&
@@ -1508,16 +1460,6 @@ void cmTarget::InsertCompileDefinition(std::string const& entry,
}
//----------------------------------------------------------------------------
-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(
const std::string& prop, const char* value, cmMakefile* context,
bool imported)
@@ -1628,53 +1570,6 @@ bool cmTarget::HaveWellDefinedOutputFiles() const
}
//----------------------------------------------------------------------------
-const char* cmTarget::ImportedGetLocation(const std::string& config) const
-{
- static std::string location;
- assert(this->IsImported());
- location = this->ImportedGetFullPath(config, false);
- return location.c_str();
-}
-
-//----------------------------------------------------------------------------
-void cmTarget::GetTargetVersion(int& major, int& minor) const
-{
- int patch;
- this->GetTargetVersion(false, major, minor, patch);
-}
-
-//----------------------------------------------------------------------------
-void cmTarget::GetTargetVersion(bool soversion,
- int& major, int& minor, int& patch) const
-{
- // Set the default values.
- major = 0;
- minor = 0;
- patch = 0;
-
- assert(this->GetType() != cmState::INTERFACE_LIBRARY);
-
- // Look for a VERSION or SOVERSION property.
- const char* prop = soversion? "SOVERSION" : "VERSION";
- if(const char* version = this->GetProperty(prop))
- {
- // Try to parse the version number and store the results that were
- // successfully parsed.
- int parsed_major;
- int parsed_minor;
- int parsed_patch;
- switch(sscanf(version, "%d.%d.%d",
- &parsed_major, &parsed_minor, &parsed_patch))
- {
- case 3: patch = parsed_patch; // no break!
- case 2: minor = parsed_minor; // no break!
- case 1: major = parsed_major; // no break!
- default: break;
- }
- }
-}
-
-//----------------------------------------------------------------------------
bool cmTarget::HandleLocationPropertyPolicy(cmMakefile* context) const
{
if (this->IsImported())
@@ -2100,21 +1995,75 @@ const char* cmTarget::GetPrefixVariableInternal(bool implib) const
//----------------------------------------------------------------------------
std::string
-cmTarget::GetFullNameImported(const std::string& config, bool implib) const
+cmTarget::ImportedGetFullPath(const std::string& config, bool pimplib) const
{
- return cmSystemTools::GetFilenameName(
- this->ImportedGetFullPath(config, implib));
-}
+ assert(this->IsImported());
+
+ // 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";
+ }
-//----------------------------------------------------------------------------
-std::string
-cmTarget::ImportedGetFullPath(const std::string& config, bool implib) const
-{
std::string result;
- if(cmTarget::ImportInfo const* info = this->GetImportInfo(config))
+
+ const char* loc = 0;
+ const char* imp = 0;
+ std::string suffix;
+
+ if(this->GetType() != cmState::INTERFACE_LIBRARY
+ && this->GetMappedConfig(config_upper, &loc, &imp, suffix))
{
- result = implib? info->ImportLibrary : info->Location;
+ if (!pimplib)
+ {
+ if(loc)
+ {
+ result = loc;
+ }
+ else
+ {
+ std::string impProp = "IMPORTED_LOCATION";
+ impProp += suffix;
+ if(const char* config_location = this->GetProperty(impProp))
+ {
+ result = config_location;
+ }
+ else if(const char* location =
+ this->GetProperty("IMPORTED_LOCATION"))
+ {
+ result = location;
+ }
+ }
+ }
+ else
+ {
+ if(imp)
+ {
+ result = 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))
+ {
+ result = config_implib;
+ }
+ else if(const char* implib = this->GetProperty("IMPORTED_IMPLIB"))
+ {
+ result = implib;
+ }
+ }
+ }
}
+
if(result.empty())
{
result = this->GetName();
@@ -2124,23 +2073,6 @@ cmTarget::ImportedGetFullPath(const std::string& config, bool implib) const
}
//----------------------------------------------------------------------------
-void cmTarget::ComputeVersionedName(std::string& vName,
- std::string const& prefix,
- std::string const& base,
- std::string const& suffix,
- std::string const& name,
- const char* version) const
-{
- vName = this->IsApple? (prefix+base) : name;
- if(version)
- {
- vName += ".";
- vName += version;
- }
- vName += this->IsApple? suffix : std::string();
-}
-
-//----------------------------------------------------------------------------
void cmTarget::SetPropertyDefault(const std::string& property,
const char* default_value)
{
@@ -2203,92 +2135,6 @@ const char* cmTarget::GetExportMacro() const
}
}
-//----------------------------------------------------------------------------
-void
-cmTarget::GetObjectLibrariesCMP0026(std::vector<cmTarget*>& objlibs) const
-{
- // At configure-time, this method can be called as part of getting the
- // LOCATION property or to export() a file to be include()d. However
- // there is no cmGeneratorTarget at configure-time, so search the SOURCES
- // for TARGET_OBJECTS instead for backwards compatibility with OLD
- // behavior of CMP0024 and CMP0026 only.
- for(std::vector<std::string>::const_iterator
- i = this->Internal->SourceEntries.begin();
- i != this->Internal->SourceEntries.end(); ++i)
- {
- std::string const& entry = *i;
-
- std::vector<std::string> files;
- cmSystemTools::ExpandListArgument(entry, files);
- for (std::vector<std::string>::const_iterator
- li = files.begin(); li != files.end(); ++li)
- {
- if(cmHasLiteralPrefix(*li, "$<TARGET_OBJECTS:") &&
- (*li)[li->size() - 1] == '>')
- {
- std::string objLibName = li->substr(17, li->size()-18);
-
- if (cmGeneratorExpression::Find(objLibName) != std::string::npos)
- {
- continue;
- }
- cmTarget *objLib = this->Makefile->FindTargetToUse(objLibName);
- if(objLib)
- {
- objlibs.push_back(objLib);
- }
- }
- }
- }
-}
-
-//----------------------------------------------------------------------------
-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,
const char** loc,
const char** imp,
@@ -2421,233 +2267,6 @@ bool cmTarget::GetMappedConfig(std::string const& desired_config,
}
//----------------------------------------------------------------------------
-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
-{
- // Strip whitespace off the library names because we used to do this
- // in case variables were expanded at generate time. We no longer
- // do the expansion but users link to libraries like " ${VAR} ".
- std::string lib = item;
- std::string::size_type pos = lib.find_first_not_of(" \t\r\n");
- if(pos != lib.npos)
- {
- lib = lib.substr(pos, lib.npos);
- }
- pos = lib.find_last_not_of(" \t\r\n");
- if(pos != lib.npos)
- {
- lib = lib.substr(0, pos+1);
- }
- if(lib != item)
- {
- cmake* cm = this->Makefile->GetCMakeInstance();
- switch(this->GetPolicyStatusCMP0004())
- {
- case cmPolicies::WARN:
- {
- std::ostringstream w;
- w << cmPolicies::GetPolicyWarning(cmPolicies::CMP0004) << "\n"
- << "Target \"" << this->GetName() << "\" links to item \""
- << item << "\" which has leading or trailing whitespace.";
- cm->IssueMessage(cmake::AUTHOR_WARNING, w.str(),
- this->GetBacktrace());
- }
- case cmPolicies::OLD:
- break;
- case cmPolicies::NEW:
- {
- std::ostringstream e;
- e << "Target \"" << this->GetName() << "\" links to item \""
- << item << "\" which has leading or trailing whitespace. "
- << "This is now an error according to policy CMP0004.";
- cm->IssueMessage(cmake::FATAL_ERROR, e.str(), this->GetBacktrace());
- }
- break;
- case cmPolicies::REQUIRED_IF_USED:
- case cmPolicies::REQUIRED_ALWAYS:
- {
- std::ostringstream e;
- e << cmPolicies::GetRequiredPolicyError(cmPolicies::CMP0004) << "\n"
- << "Target \"" << this->GetName() << "\" links to item \""
- << item << "\" which has leading or trailing whitespace.";
- cm->IssueMessage(cmake::FATAL_ERROR, e.str(), this->GetBacktrace());
- }
- break;
- }
- }
- return lib;
-}
-
-//----------------------------------------------------------------------------
cmTargetInternalPointer::cmTargetInternalPointer()
{
this->Pointer = new cmTargetInternals;
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index c0b9e09..0e966e9 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -96,7 +96,6 @@ public:
///! Set/Get the name of the target
const std::string& GetName() const {return this->Name;}
- std::string GetExportName() const;
///! Set the cmMakefile that owns this target
void SetMakefile(cmMakefile *mf);
@@ -213,25 +212,6 @@ public:
bool IsImported() const {return this->IsImportedTarget;}
- void GetObjectLibrariesCMP0026(std::vector<cmTarget*>& objlibs) const;
-
- /** Strip off leading and trailing whitespace from an item named in
- the link dependencies of this target. */
- std::string CheckCMP0004(std::string const& item) const;
-
- const char* ImportedGetLocation(const std::string& config) const;
-
- /** Get the target major and minor version numbers interpreted from
- the VERSION property. Version 0 is returned if the property is
- not set or cannot be parsed. */
- void GetTargetVersion(int& major, int& minor) const;
-
- /** Get the target major, minor, and patch version numbers
- interpreted from the VERSION or SOVERSION property. Version 0
- is returned if the property is not set or cannot be parsed. */
- void
- GetTargetVersion(bool soversion, int& major, int& minor, int& patch) const;
-
// Get the properties
cmPropertyMap &GetProperties() const { return this->Properties; }
@@ -248,9 +228,6 @@ public:
enabled. */
bool IsExecutableWithExports() const;
- /** Return whether this target may be used to link another target. */
- bool IsLinkable() const;
-
/** Return whether or not the target is for a DLL platform. */
bool IsDLLPlatform() const { return this->DLLPlatform; }
@@ -258,12 +235,6 @@ public:
Apple. */
bool IsFrameworkOnApple() const;
- /** Return whether this target is a CFBundle (plugin) on Apple. */
- bool IsCFBundleOnApple() const;
-
- /** Return whether this target is a XCTest on Apple. */
- bool IsXCTestOnApple() const;
-
/** Return whether this target is an executable Bundle on Apple. */
bool IsAppBundleOnApple() const;
@@ -385,9 +356,6 @@ private:
void SetPropertyDefault(const std::string& property,
const char* default_value);
- std::string GetFullNameImported(const std::string& config,
- bool implib) const;
-
std::string ImportedGetFullPath(const std::string& config,
bool implib) const;
@@ -426,32 +394,8 @@ private:
bool LinkLibrariesForVS6Analyzed;
#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);
- void MaybeInvalidatePropertyCache(const std::string& prop);
-
/** Return whether or not the target has a DLL import library. */
bool HasImportLibrary() const;
@@ -460,13 +404,6 @@ private:
friend class cmGeneratorTarget;
friend class cmTargetTraceDependencies;
- void ComputeVersionedName(std::string& vName,
- std::string const& prefix,
- std::string const& base,
- std::string const& suffix,
- std::string const& name,
- const char* version) const;
-
cmListFileBacktrace Backtrace;
};
diff --git a/Source/cmTargetExport.h b/Source/cmTargetExport.h
index 7665888..2781337 100644
--- a/Source/cmTargetExport.h
+++ b/Source/cmTargetExport.h
@@ -14,7 +14,7 @@
#include "cmStandardIncludes.h"
-class cmTarget;
+class cmGeneratorTarget;
class cmInstallTargetGenerator;
class cmInstallFilesGenerator;
@@ -25,7 +25,8 @@ class cmInstallFilesGenerator;
class cmTargetExport
{
public:
- cmTarget* Target; ///< The target
+ std::string TargetName;
+ cmGeneratorTarget* Target;
///@name Generators
///@{
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx
index 7968412..2cbd306 100644
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -178,7 +178,7 @@ cmVisualStudio10TargetGenerator(cmTarget* target,
this->LocalGenerator =
(cmLocalVisualStudio7Generator*)
this->GeneratorTarget->GetLocalGenerator();
- this->Name = this->Target->GetName();
+ this->Name = this->GeneratorTarget->GetName();
this->GUID = this->GlobalGenerator->GetGUID(this->Name.c_str());
this->Platform = gg->GetPlatformName();
this->NsightTegra = gg->IsNsightTegra();
@@ -270,7 +270,7 @@ void cmVisualStudio10TargetGenerator::Generate()
{
// do not generate external ms projects
if(this->GeneratorTarget->GetType() == cmState::INTERFACE_LIBRARY
- || this->Target->GetProperty("EXTERNAL_MSPROJECT"))
+ || this->GeneratorTarget->GetProperty("EXTERNAL_MSPROJECT"))
{
return;
}
@@ -368,7 +368,7 @@ void cmVisualStudio10TargetGenerator::Generate()
}
const char* vsProjectTypes =
- this->Target->GetProperty("VS_GLOBAL_PROJECT_TYPES");
+ this->GeneratorTarget->GetProperty("VS_GLOBAL_PROJECT_TYPES");
if(vsProjectTypes)
{
this->WriteString("<ProjectTypes>", 2);
@@ -376,9 +376,12 @@ void cmVisualStudio10TargetGenerator::Generate()
"</ProjectTypes>\n";
}
- const char* vsProjectName = this->Target->GetProperty("VS_SCC_PROJECTNAME");
- const char* vsLocalPath = this->Target->GetProperty("VS_SCC_LOCALPATH");
- const char* vsProvider = this->Target->GetProperty("VS_SCC_PROVIDER");
+ const char* vsProjectName =
+ this->GeneratorTarget->GetProperty("VS_SCC_PROJECTNAME");
+ const char* vsLocalPath =
+ this->GeneratorTarget->GetProperty("VS_SCC_LOCALPATH");
+ const char* vsProvider =
+ this->GeneratorTarget->GetProperty("VS_SCC_PROVIDER");
if( vsProjectName && vsLocalPath && vsProvider )
{
@@ -392,7 +395,8 @@ void cmVisualStudio10TargetGenerator::Generate()
(*this->BuildFileStream) << cmVS10EscapeXML(vsProvider) <<
"</SccProvider>\n";
- const char* vsAuxPath = this->Target->GetProperty("VS_SCC_AUXPATH");
+ const char* vsAuxPath =
+ this->GeneratorTarget->GetProperty("VS_SCC_AUXPATH");
if( vsAuxPath )
{
this->WriteString("<SccAuxPath>", 2);
@@ -401,13 +405,13 @@ void cmVisualStudio10TargetGenerator::Generate()
}
}
- if(this->Target->GetPropertyAsBool("VS_WINRT_COMPONENT"))
+ if(this->GeneratorTarget->GetPropertyAsBool("VS_WINRT_COMPONENT"))
{
this->WriteString("<WinMDAssembly>true</WinMDAssembly>\n", 2);
}
const char* vsGlobalKeyword =
- this->Target->GetProperty("VS_GLOBAL_KEYWORD");
+ this->GeneratorTarget->GetProperty("VS_GLOBAL_KEYWORD");
if(!vsGlobalKeyword)
{
this->WriteString("<Keyword>Win32Proj</Keyword>\n", 2);
@@ -420,7 +424,7 @@ void cmVisualStudio10TargetGenerator::Generate()
}
const char* vsGlobalRootNamespace =
- this->Target->GetProperty("VS_GLOBAL_ROOTNAMESPACE");
+ this->GeneratorTarget->GetProperty("VS_GLOBAL_ROOTNAMESPACE");
if(vsGlobalRootNamespace)
{
this->WriteString("<RootNamespace>", 2);
@@ -431,14 +435,14 @@ void cmVisualStudio10TargetGenerator::Generate()
this->WriteString("<Platform>", 2);
(*this->BuildFileStream) << cmVS10EscapeXML(this->Platform)
<< "</Platform>\n";
- const char* projLabel = this->Target->GetProperty("PROJECT_LABEL");
+ const char* projLabel = this->GeneratorTarget->GetProperty("PROJECT_LABEL");
if(!projLabel)
{
projLabel = this->Name.c_str();
}
this->WriteString("<ProjectName>", 2);
(*this->BuildFileStream) << cmVS10EscapeXML(projLabel) << "</ProjectName>\n";
- if(const char* targetFrameworkVersion = this->Target->GetProperty(
+ if(const char* targetFrameworkVersion = this->GeneratorTarget->GetProperty(
"VS_DOTNET_TARGET_FRAMEWORK_VERSION"))
{
this->WriteString("<TargetFrameworkVersion>", 2);
@@ -497,7 +501,7 @@ void cmVisualStudio10TargetGenerator::WriteDotNetReferences()
{
std::vector<std::string> references;
if(const char* vsDotNetReferences =
- this->Target->GetProperty("VS_DOTNET_REFERENCES"))
+ this->GeneratorTarget->GetProperty("VS_DOTNET_REFERENCES"))
{
cmSystemTools::ExpandListArgument(vsDotNetReferences, references);
}
@@ -543,7 +547,7 @@ void cmVisualStudio10TargetGenerator::WriteEmbeddedResourceGroup()
i != this->Configurations.end(); ++i)
{
this->WritePlatformConfigTag("LogicalName", i->c_str(), 3);
- if(this->Target->GetProperty("VS_GLOBAL_ROOTNAMESPACE"))
+ if(this->GeneratorTarget->GetProperty("VS_GLOBAL_ROOTNAMESPACE"))
{
(*this->BuildFileStream ) << "$(RootNamespace).";
}
@@ -610,7 +614,7 @@ void cmVisualStudio10TargetGenerator::WriteWinRTReferences()
{
std::vector<std::string> references;
if(const char* vsWinRTReferences =
- this->Target->GetProperty("VS_WINRT_REFERENCES"))
+ this->GeneratorTarget->GetProperty("VS_WINRT_REFERENCES"))
{
cmSystemTools::ExpandListArgument(vsWinRTReferences, references);
}
@@ -679,7 +683,7 @@ void cmVisualStudio10TargetGenerator::WriteProjectConfigurationValues()
break;
case cmState::EXECUTABLE:
if(this->NsightTegra &&
- !this->Target->GetPropertyAsBool("ANDROID_GUI"))
+ !this->GeneratorTarget->GetPropertyAsBool("ANDROID_GUI"))
{
// Android executables are .so too.
configType += "DynamicLibrary";
@@ -746,10 +750,10 @@ void cmVisualStudio10TargetGenerator
if((this->GeneratorTarget->GetType() <= cmState::OBJECT_LIBRARY &&
this->ClOptions[config]->UsingUnicode()) ||
- this->Target->GetPropertyAsBool("VS_WINRT_COMPONENT") ||
+ this->GeneratorTarget->GetPropertyAsBool("VS_WINRT_COMPONENT") ||
this->GlobalGenerator->TargetsWindowsPhone() ||
this->GlobalGenerator->TargetsWindowsStore() ||
- this->Target->GetPropertyAsBool("VS_WINRT_EXTENSIONS"))
+ this->GeneratorTarget->GetPropertyAsBool("VS_WINRT_EXTENSIONS"))
{
this->WriteString("<CharacterSet>Unicode</CharacterSet>\n", 2);
}
@@ -769,8 +773,8 @@ void cmVisualStudio10TargetGenerator
pts += "</PlatformToolset>\n";
this->WriteString(pts.c_str(), 2);
}
- if(this->Target->GetPropertyAsBool("VS_WINRT_COMPONENT") ||
- this->Target->GetPropertyAsBool("VS_WINRT_EXTENSIONS"))
+ if(this->GeneratorTarget->GetPropertyAsBool("VS_WINRT_COMPONENT") ||
+ this->GeneratorTarget->GetPropertyAsBool("VS_WINRT_EXTENSIONS"))
{
this->WriteString("<WindowsAppContainer>true"
"</WindowsAppContainer>\n", 2);
@@ -788,27 +792,29 @@ void cmVisualStudio10TargetGenerator
ntv += toolset? toolset : "Default";
ntv += "</NdkToolchainVersion>\n";
this->WriteString(ntv.c_str(), 2);
- if(const char* minApi = this->Target->GetProperty("ANDROID_API_MIN"))
+ if(const char* minApi =
+ this->GeneratorTarget->GetProperty("ANDROID_API_MIN"))
{
this->WriteString("<AndroidMinAPI>", 2);
(*this->BuildFileStream ) <<
"android-" << cmVS10EscapeXML(minApi) << "</AndroidMinAPI>\n";
}
- if(const char* api = this->Target->GetProperty("ANDROID_API"))
+ if(const char* api = this->GeneratorTarget->GetProperty("ANDROID_API"))
{
this->WriteString("<AndroidTargetAPI>", 2);
(*this->BuildFileStream ) <<
"android-" << cmVS10EscapeXML(api) << "</AndroidTargetAPI>\n";
}
- if(const char* cpuArch = this->Target->GetProperty("ANDROID_ARCH"))
+ if(const char* cpuArch = this->GeneratorTarget->GetProperty("ANDROID_ARCH"))
{
this->WriteString("<AndroidArch>", 2);
(*this->BuildFileStream) << cmVS10EscapeXML(cpuArch) <<
"</AndroidArch>\n";
}
- if(const char* stlType = this->Target->GetProperty("ANDROID_STL_TYPE"))
+ if(const char* stlType =
+ this->GeneratorTarget->GetProperty("ANDROID_STL_TYPE"))
{
this->WriteString("<AndroidStlType>", 2);
(*this->BuildFileStream) << cmVS10EscapeXML(stlType) <<
@@ -1775,7 +1781,7 @@ void cmVisualStudio10TargetGenerator::WritePathAndIncrementalLinkOptions()
if(ttype == cmState::OBJECT_LIBRARY)
{
outDir = intermediateDir;
- targetNameFull = this->Target->GetName();
+ targetNameFull = this->GeneratorTarget->GetName();
targetNameFull += ".lib";
}
else
@@ -1926,7 +1932,7 @@ bool cmVisualStudio10TargetGenerator::ComputeClOptions(
{
clOptions.AddFlag("CompileAs", "CompileAsCpp");
}
- this->LocalGenerator->AddCompileOptions(flags, this->Target,
+ this->LocalGenerator->AddCompileOptions(flags, this->GeneratorTarget,
linkLanguage, configName.c_str());
// Get preprocessor definitions for this directory.
@@ -1963,7 +1969,7 @@ bool cmVisualStudio10TargetGenerator::ComputeClOptions(
if (this->MSTools)
{
// If we have the VS_WINRT_COMPONENT set then force Compile as WinRT.
- if (this->Target->GetPropertyAsBool("VS_WINRT_COMPONENT"))
+ if (this->GeneratorTarget->GetPropertyAsBool("VS_WINRT_COMPONENT"))
{
clOptions.AddFlag("CompileAsWinRT", "true");
// For WinRT components, add the _WINRT_DLL define to produce a lib
@@ -2012,7 +2018,7 @@ void cmVisualStudio10TargetGenerator::WriteClOptions(
if(this->NsightTegra)
{
if(const char* processMax =
- this->Target->GetProperty("ANDROID_PROCESS_MAX"))
+ this->GeneratorTarget->GetProperty("ANDROID_PROCESS_MAX"))
{
this->WriteString("<ProcessMax>", 3);
*this->BuildFileStream << cmVS10EscapeXML(processMax) <<
@@ -2183,7 +2189,7 @@ cmVisualStudio10TargetGenerator::WriteLibOptions(std::string const& config)
}
std::string libflags;
this->LocalGenerator->GetStaticLibraryFlags(libflags,
- cmSystemTools::UpperCase(config), this->Target);
+ cmSystemTools::UpperCase(config), this->GeneratorTarget);
if(!libflags.empty())
{
this->WriteString("<Lib>\n", 2);
@@ -2270,18 +2276,18 @@ void cmVisualStudio10TargetGenerator::WriteAntBuildOptions(
cmVS10EscapeXML(antBuildPath) << "</AntBuildPath>\n";
}
- if (this->Target->GetPropertyAsBool("ANDROID_SKIP_ANT_STEP"))
+ if (this->GeneratorTarget->GetPropertyAsBool("ANDROID_SKIP_ANT_STEP"))
{
this->WriteString("<SkipAntStep>true</SkipAntStep>\n", 3);
}
- if (this->Target->GetPropertyAsBool("ANDROID_PROGUARD"))
+ if (this->GeneratorTarget->GetPropertyAsBool("ANDROID_PROGUARD"))
{
this->WriteString("<EnableProGuard>true</EnableProGuard>\n", 3);
}
if (const char* proGuardConfigLocation =
- this->Target->GetProperty("ANDROID_PROGUARD_CONFIG_PATH"))
+ this->GeneratorTarget->GetProperty("ANDROID_PROGUARD_CONFIG_PATH"))
{
this->WriteString("<ProGuardConfigLocation>", 3);
(*this->BuildFileStream) << cmVS10EscapeXML(proGuardConfigLocation) <<
@@ -2289,7 +2295,7 @@ void cmVisualStudio10TargetGenerator::WriteAntBuildOptions(
}
if (const char* securePropertiesLocation =
- this->Target->GetProperty("ANDROID_SECURE_PROPS_PATH"))
+ this->GeneratorTarget->GetProperty("ANDROID_SECURE_PROPS_PATH"))
{
this->WriteString("<SecurePropertiesLocation>", 3);
(*this->BuildFileStream) << cmVS10EscapeXML(securePropertiesLocation) <<
@@ -2297,7 +2303,7 @@ void cmVisualStudio10TargetGenerator::WriteAntBuildOptions(
}
if (const char* nativeLibDirectoriesExpression =
- this->Target->GetProperty("ANDROID_NATIVE_LIB_DIRECTORIES"))
+ this->GeneratorTarget->GetProperty("ANDROID_NATIVE_LIB_DIRECTORIES"))
{
cmGeneratorExpression ge;
cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
@@ -2310,7 +2316,7 @@ void cmVisualStudio10TargetGenerator::WriteAntBuildOptions(
}
if (const char* nativeLibDependenciesExpression =
- this->Target->GetProperty("ANDROID_NATIVE_LIB_DEPENDENCIES"))
+ this->GeneratorTarget->GetProperty("ANDROID_NATIVE_LIB_DEPENDENCIES"))
{
cmGeneratorExpression ge;
cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
@@ -2323,7 +2329,7 @@ void cmVisualStudio10TargetGenerator::WriteAntBuildOptions(
}
if (const char* javaSourceDir =
- this->Target->GetProperty("ANDROID_JAVA_SOURCE_DIR"))
+ this->GeneratorTarget->GetProperty("ANDROID_JAVA_SOURCE_DIR"))
{
this->WriteString("<JavaSourceDir>", 3);
(*this->BuildFileStream) << cmVS10EscapeXML(javaSourceDir) <<
@@ -2331,7 +2337,7 @@ void cmVisualStudio10TargetGenerator::WriteAntBuildOptions(
}
if (const char* jarDirectoriesExpression =
- this->Target->GetProperty("ANDROID_JAR_DIRECTORIES"))
+ this->GeneratorTarget->GetProperty("ANDROID_JAR_DIRECTORIES"))
{
cmGeneratorExpression ge;
cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
@@ -2344,7 +2350,7 @@ void cmVisualStudio10TargetGenerator::WriteAntBuildOptions(
}
if (const char* jarDeps =
- this->Target->GetProperty("ANDROID_JAR_DEPENDENCIES"))
+ this->GeneratorTarget->GetProperty("ANDROID_JAR_DEPENDENCIES"))
{
this->WriteString("<JarDependencies>", 3);
(*this->BuildFileStream) << cmVS10EscapeXML(jarDeps) <<
@@ -2352,7 +2358,7 @@ void cmVisualStudio10TargetGenerator::WriteAntBuildOptions(
}
if (const char* assetsDirectories =
- this->Target->GetProperty("ANDROID_ASSETS_DIRECTORIES"))
+ this->GeneratorTarget->GetProperty("ANDROID_ASSETS_DIRECTORIES"))
{
this->WriteString("<AssetsDirectories>", 3);
(*this->BuildFileStream) << cmVS10EscapeXML(assetsDirectories) <<
@@ -2368,7 +2374,7 @@ void cmVisualStudio10TargetGenerator::WriteAntBuildOptions(
}
if (const char* antAdditionalOptions =
- this->Target->GetProperty("ANDROID_ANT_ADDITIONAL_OPTIONS"))
+ this->GeneratorTarget->GetProperty("ANDROID_ANT_ADDITIONAL_OPTIONS"))
{
this->WriteString("<AdditionalOptions>", 3);
(*this->BuildFileStream) << cmVS10EscapeXML(antAdditionalOptions) <<
@@ -2439,7 +2445,8 @@ cmVisualStudio10TargetGenerator::ComputeLinkOptions(std::string const& config)
flags += " ";
flags += this->
Target->GetMakefile()->GetRequiredDefinition(linkFlagVar.c_str());
- const char* targetLinkFlags = this->Target->GetProperty("LINK_FLAGS");
+ const char* targetLinkFlags =
+ this->GeneratorTarget->GetProperty("LINK_FLAGS");
if(targetLinkFlags)
{
flags += " ";
@@ -2447,7 +2454,8 @@ cmVisualStudio10TargetGenerator::ComputeLinkOptions(std::string const& config)
}
std::string flagsProp = "LINK_FLAGS_";
flagsProp += CONFIG;
- if(const char* flagsConfig = this->Target->GetProperty(flagsProp.c_str()))
+ if(const char* flagsConfig =
+ this->GeneratorTarget->GetProperty(flagsProp.c_str()))
{
flags += " ";
flags += flagsConfig;
@@ -2525,7 +2533,7 @@ cmVisualStudio10TargetGenerator::ComputeLinkOptions(std::string const& config)
{
linkOptions.AddFlag("Version", "");
- if ( this->Target->GetPropertyAsBool("WIN32_EXECUTABLE") )
+ if ( this->GeneratorTarget->GetPropertyAsBool("WIN32_EXECUTABLE") )
{
if (this->GlobalGenerator->TargetsWindowsCE())
{
@@ -2597,7 +2605,7 @@ cmVisualStudio10TargetGenerator::ComputeLinkOptions(std::string const& config)
// A Windows Runtime component uses internal .NET metadata,
// so does not have an import library.
- if(this->Target->GetPropertyAsBool("VS_WINRT_COMPONENT") &&
+ if(this->GeneratorTarget->GetPropertyAsBool("VS_WINRT_COMPONENT") &&
this->GeneratorTarget->GetType() != cmState::EXECUTABLE)
{
linkOptions.AddFlag("GenerateWindowsMetadata", "true");
@@ -2639,7 +2647,7 @@ cmVisualStudio10TargetGenerator::ComputeLinkOptions(std::string const& config)
if (this->GeneratorTarget->GetType() == cmState::SHARED_LIBRARY &&
this->Makefile->IsOn("CMAKE_SUPPORT_WINDOWS_EXPORT_ALL_SYMBOLS"))
{
- if (this->Target->GetPropertyAsBool("WINDOWS_EXPORT_ALL_SYMBOLS"))
+ if (this->GeneratorTarget->GetPropertyAsBool("WINDOWS_EXPORT_ALL_SYMBOLS"))
{
linkOptions.AddFlag("ModuleDefinitionFile", "$(IntDir)exportall.def");
}
@@ -2783,7 +2791,7 @@ void cmVisualStudio10TargetGenerator::WriteItemDefinitionGroups()
this->WriteManifestOptions(*i);
if(this->NsightTegra &&
this->GeneratorTarget->GetType() == cmState::EXECUTABLE &&
- this->Target->GetPropertyAsBool("ANDROID_GUI"))
+ this->GeneratorTarget->GetPropertyAsBool("ANDROID_GUI"))
{
this->WriteAntBuildOptions(*i);
}
@@ -2798,7 +2806,7 @@ cmVisualStudio10TargetGenerator::WriteEvents(std::string const& configName)
if (this->GeneratorTarget->GetType() == cmState::SHARED_LIBRARY &&
this->Makefile->IsOn("CMAKE_SUPPORT_WINDOWS_EXPORT_ALL_SYMBOLS"))
{
- if (this->Target->GetPropertyAsBool("WINDOWS_EXPORT_ALL_SYMBOLS"))
+ if (this->GeneratorTarget->GetPropertyAsBool("WINDOWS_EXPORT_ALL_SYMBOLS"))
{
addedPrelink = true;
std::vector<cmCustomCommand> commands =
@@ -2911,14 +2919,14 @@ void cmVisualStudio10TargetGenerator::WritePlatformExtensions()
cmHasLiteralPrefix(this->GlobalGenerator->GetSystemVersion(), "10.0"))
{
const char* desktopExtensionsVersion =
- this->Target->GetProperty("VS_DESKTOP_EXTENSIONS_VERSION");
+ this->GeneratorTarget->GetProperty("VS_DESKTOP_EXTENSIONS_VERSION");
if (desktopExtensionsVersion)
{
this->WriteSinglePlatformExtension("WindowsDesktop",
desktopExtensionsVersion);
}
const char* mobileExtensionsVersion =
- this->Target->GetProperty("VS_MOBILE_EXTENSIONS_VERSION");
+ this->GeneratorTarget->GetProperty("VS_MOBILE_EXTENSIONS_VERSION");
if (mobileExtensionsVersion)
{
this->WriteSinglePlatformExtension("WindowsMobile",
@@ -2958,11 +2966,11 @@ void cmVisualStudio10TargetGenerator::WriteSDKReferences()
cmHasLiteralPrefix(this->GlobalGenerator->GetSystemVersion(), "10.0"))
{
const char* desktopExtensionsVersion =
- this->Target->GetProperty("VS_DESKTOP_EXTENSIONS_VERSION");
+ this->GeneratorTarget->GetProperty("VS_DESKTOP_EXTENSIONS_VERSION");
const char* mobileExtensionsVersion =
- this->Target->GetProperty("VS_MOBILE_EXTENSIONS_VERSION");
+ this->GeneratorTarget->GetProperty("VS_MOBILE_EXTENSIONS_VERSION");
const char* iotExtensionsVersion =
- this->Target->GetProperty("VS_IOT_EXTENSIONS_VERSION");
+ this->GeneratorTarget->GetProperty("VS_IOT_EXTENSIONS_VERSION");
if(desktopExtensionsVersion || mobileExtensionsVersion ||
iotExtensionsVersion)
@@ -3194,7 +3202,8 @@ void cmVisualStudio10TargetGenerator::WriteApplicationTypeSettings()
"</WindowsTargetPlatformVersion>\n";
}
const char* targetPlatformMinVersion =
- this->Target->GetProperty("VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION");
+ this->GeneratorTarget
+ ->GetProperty("VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION");
if(targetPlatformMinVersion)
{
this->WriteString("<WindowsTargetPlatformMinVersion>", 2);
@@ -3213,7 +3222,7 @@ void cmVisualStudio10TargetGenerator::WriteApplicationTypeSettings()
}
// Added IoT Startup Task support
- if(this->Target->GetPropertyAsBool("VS_IOT_STARTUP_TASK"))
+ if(this->GeneratorTarget->GetPropertyAsBool("VS_IOT_STARTUP_TASK"))
{
this->WriteString("<ContainsStartupTask>true</ContainsStartupTask>\n", 2);
}
@@ -3325,7 +3334,8 @@ void cmVisualStudio10TargetGenerator::WriteMissingFilesWP80()
this->LocalGenerator->GetTargetDirectory(this->GeneratorTarget);
this->ConvertToWindowsSlash(artifactDir);
std::string artifactDirXML = cmVS10EscapeXML(artifactDir);
- std::string targetNameXML = cmVS10EscapeXML(this->Target->GetName());
+ std::string targetNameXML =
+ cmVS10EscapeXML(this->GeneratorTarget->GetName());
cmGeneratedFileStream fout(manifestFile.c_str());
fout.SetCopyIfDifferent(true);
@@ -3408,7 +3418,8 @@ void cmVisualStudio10TargetGenerator::WriteMissingFilesWP81()
this->LocalGenerator->GetTargetDirectory(this->GeneratorTarget);
this->ConvertToWindowsSlash(artifactDir);
std::string artifactDirXML = cmVS10EscapeXML(artifactDir);
- std::string targetNameXML = cmVS10EscapeXML(this->Target->GetName());
+ std::string targetNameXML =
+ cmVS10EscapeXML(this->GeneratorTarget->GetName());
cmGeneratedFileStream fout(manifestFile.c_str());
fout.SetCopyIfDifferent(true);
@@ -3468,7 +3479,8 @@ void cmVisualStudio10TargetGenerator::WriteMissingFilesWS80()
this->LocalGenerator->GetTargetDirectory(this->GeneratorTarget);
this->ConvertToWindowsSlash(artifactDir);
std::string artifactDirXML = cmVS10EscapeXML(artifactDir);
- std::string targetNameXML = cmVS10EscapeXML(this->Target->GetName());
+ std::string targetNameXML =
+ cmVS10EscapeXML(this->GeneratorTarget->GetName());
cmGeneratedFileStream fout(manifestFile.c_str());
fout.SetCopyIfDifferent(true);
@@ -3520,7 +3532,8 @@ void cmVisualStudio10TargetGenerator::WriteMissingFilesWS81()
this->LocalGenerator->GetTargetDirectory(this->GeneratorTarget);
this->ConvertToWindowsSlash(artifactDir);
std::string artifactDirXML = cmVS10EscapeXML(artifactDir);
- std::string targetNameXML = cmVS10EscapeXML(this->Target->GetName());
+ std::string targetNameXML =
+ cmVS10EscapeXML(this->GeneratorTarget->GetName());
cmGeneratedFileStream fout(manifestFile.c_str());
fout.SetCopyIfDifferent(true);
@@ -3577,7 +3590,8 @@ void cmVisualStudio10TargetGenerator::WriteMissingFilesWS10_0()
this->LocalGenerator->GetTargetDirectory(this->GeneratorTarget);
this->ConvertToWindowsSlash(artifactDir);
std::string artifactDirXML = cmVS10EscapeXML(artifactDir);
- std::string targetNameXML = cmVS10EscapeXML(this->Target->GetName());
+ std::string targetNameXML =
+ cmVS10EscapeXML(this->GeneratorTarget->GetName());
cmGeneratedFileStream fout(manifestFile.c_str());
fout.SetCopyIfDifferent(true);