cmGeneratorTarget: Move GetObjectLibrariesCMP0026 from cmTarget.

This commit is contained in:
Stephen Kelly 2015-10-16 19:19:48 +02:00
parent 82a6eaf4d0
commit 60bd9f9c92
4 changed files with 48 additions and 47 deletions

View File

@ -5200,6 +5200,46 @@ bool cmGeneratorTarget::GetConfigCommonSourceFiles(
return true;
}
//----------------------------------------------------------------------------
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);
}
}
}
}
}
//----------------------------------------------------------------------------
void cmGeneratorTarget::GetLanguages(std::set<std::string>& languages,
const std::string& config) const
@ -5220,14 +5260,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

View File

@ -226,6 +226,9 @@ public:
void GetLanguages(std::set<std::string>& languages,
std::string const& config) const;
void
GetObjectLibrariesCMP0026(std::vector<cmGeneratorTarget*>& objlibs) const;
bool GetConfigCommonSourceFiles(std::vector<cmSourceFile*>& files) const;
bool HaveBuildTreeRPATH(const std::string& config) const;

View File

@ -2203,45 +2203,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

View File

@ -213,8 +213,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;