Makefile: Use modern link information for framework search paths

Use cmComputeLinkInformation::GetFrameworkPaths to get the list of
framework paths needed by the linker.  Drop the now unused framework
information from the old-style cmTarget link dependency analysis.
This commit is contained in:
Brad King 2012-12-07 13:27:52 -05:00
parent 2bc22bdaac
commit f0d938549e
3 changed files with 15 additions and 37 deletions

View File

@ -1550,10 +1550,10 @@ std::string cmMakefileTargetGenerator::GetFrameworkFlags()
this->LocalGenerator->GetIncludeDirectories(includes, this->LocalGenerator->GetIncludeDirectories(includes,
this->GeneratorTarget, this->GeneratorTarget,
"C", config); "C", config);
std::vector<std::string>::iterator i;
// check all include directories for frameworks as this // check all include directories for frameworks as this
// will already have added a -F for the framework // will already have added a -F for the framework
for(i = includes.begin(); i != includes.end(); ++i) for(std::vector<std::string>::iterator i = includes.begin();
i != includes.end(); ++i)
{ {
if(this->Target->NameResolvesToFramework(i->c_str())) if(this->Target->NameResolvesToFramework(i->c_str()))
{ {
@ -1565,17 +1565,21 @@ std::string cmMakefileTargetGenerator::GetFrameworkFlags()
} }
std::string flags; std::string flags;
std::vector<std::string>& frameworks = this->Target->GetFrameworks(); const char* cfg = this->LocalGenerator->ConfigurationName.c_str();
for(i = frameworks.begin(); if(cmComputeLinkInformation* cli = this->Target->GetLinkInformation(cfg))
i != frameworks.end(); ++i)
{ {
if(emitted.insert(*i).second) std::vector<std::string> const& frameworks = cli->GetFrameworkPaths();
for(std::vector<std::string>::const_iterator i = frameworks.begin();
i != frameworks.end(); ++i)
{ {
flags += "-F"; if(emitted.insert(*i).second)
flags += this->Convert(i->c_str(), {
cmLocalGenerator::START_OUTPUT, flags += "-F";
cmLocalGenerator::SHELL, true); flags += this->Convert(i->c_str(),
flags += " "; cmLocalGenerator::START_OUTPUT,
cmLocalGenerator::SHELL, true);
flags += " ";
}
} }
} }
return flags; return flags;

View File

@ -2092,26 +2092,6 @@ bool cmTarget::NameResolvesToFramework(const std::string& libname)
NameResolvesToFramework(libname); NameResolvesToFramework(libname);
} }
//----------------------------------------------------------------------------
bool cmTarget::AddFramework(const std::string& libname, LinkLibraryType)
{
if(this->NameResolvesToFramework(libname.c_str()))
{
std::string frameworkDir = libname;
frameworkDir += "/../";
frameworkDir = cmSystemTools::CollapseFullPath(frameworkDir.c_str());
std::vector<std::string>::iterator i =
std::find(this->Frameworks.begin(),
this->Frameworks.end(), frameworkDir);
if(i == this->Frameworks.end())
{
this->Frameworks.push_back(frameworkDir);
}
return true;
}
return false;
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmTarget::AddLinkLibrary(cmMakefile& mf, void cmTarget::AddLinkLibrary(cmMakefile& mf,
const char *target, const char* lib, const char *target, const char* lib,
@ -2122,7 +2102,6 @@ void cmTarget::AddLinkLibrary(cmMakefile& mf,
{ {
return; return;
} }
this->AddFramework(lib, llt);
cmTarget::LibraryID tmp; cmTarget::LibraryID tmp;
tmp.first = lib; tmp.first = lib;
tmp.second = llt; tmp.second = llt;

View File

@ -109,9 +109,6 @@ public:
std::vector<cmCustomCommand> &GetPostBuildCommands() std::vector<cmCustomCommand> &GetPostBuildCommands()
{return this->PostBuildCommands;} {return this->PostBuildCommands;}
///! Return the list of frameworks being linked to this target
std::vector<std::string> &GetFrameworks() {return this->Frameworks;}
/** /**
* Get the list of the source files used by this target * Get the list of the source files used by this target
*/ */
@ -179,7 +176,6 @@ public:
// Check to see if a library is a framework and treat it different on Mac // Check to see if a library is a framework and treat it different on Mac
bool NameResolvesToFramework(const std::string& libname); bool NameResolvesToFramework(const std::string& libname);
bool AddFramework(const std::string& lib, LinkLibraryType llt);
void AddLinkLibrary(cmMakefile& mf, void AddLinkLibrary(cmMakefile& mf,
const char *target, const char* lib, const char *target, const char* lib,
LinkLibraryType llt); LinkLibraryType llt);
@ -569,7 +565,6 @@ private:
LinkLibraryVectorType LinkLibraries; LinkLibraryVectorType LinkLibraries;
LinkLibraryVectorType PrevLinkedLibraries; LinkLibraryVectorType PrevLinkedLibraries;
bool LinkLibrariesAnalyzed; bool LinkLibrariesAnalyzed;
std::vector<std::string> Frameworks;
std::vector<std::string> LinkDirectories; std::vector<std::string> LinkDirectories;
std::set<cmStdString> LinkDirectoriesEmmitted; std::set<cmStdString> LinkDirectoriesEmmitted;
bool HaveInstallRule; bool HaveInstallRule;