cmLocalGenerator: Adopt GetFrameworkFlags method
Move it from cmCommonTargetGenerator.
This commit is contained in:
parent
de4ee088e7
commit
70d3bf8580
|
@ -199,56 +199,6 @@ void cmCommonTargetGenerator::AppendFortranFormatFlags(
|
|||
}
|
||||
}
|
||||
|
||||
std::string cmCommonTargetGenerator::GetFrameworkFlags(std::string const& l)
|
||||
{
|
||||
std::string const& config = this->ConfigName;
|
||||
if (!this->Makefile->IsOn("APPLE")) {
|
||||
return std::string();
|
||||
}
|
||||
|
||||
std::string fwSearchFlagVar = "CMAKE_" + l + "_FRAMEWORK_SEARCH_FLAG";
|
||||
const char* fwSearchFlag = this->Makefile->GetDefinition(fwSearchFlagVar);
|
||||
if (!(fwSearchFlag && *fwSearchFlag)) {
|
||||
return std::string();
|
||||
}
|
||||
|
||||
std::set<std::string> emitted;
|
||||
#ifdef __APPLE__ /* don't insert this when crosscompiling e.g. to iphone */
|
||||
emitted.insert("/System/Library/Frameworks");
|
||||
#endif
|
||||
std::vector<std::string> includes;
|
||||
|
||||
this->LocalGenerator->GetIncludeDirectories(includes, this->GeneratorTarget,
|
||||
"C", config);
|
||||
// check all include directories for frameworks as this
|
||||
// will already have added a -F for the framework
|
||||
for (std::vector<std::string>::iterator i = includes.begin();
|
||||
i != includes.end(); ++i) {
|
||||
if (this->GlobalGenerator->NameResolvesToFramework(*i)) {
|
||||
std::string frameworkDir = *i;
|
||||
frameworkDir += "/../";
|
||||
frameworkDir = cmSystemTools::CollapseFullPath(frameworkDir);
|
||||
emitted.insert(frameworkDir);
|
||||
}
|
||||
}
|
||||
|
||||
std::string flags;
|
||||
if (cmComputeLinkInformation* cli =
|
||||
this->GeneratorTarget->GetLinkInformation(config)) {
|
||||
std::vector<std::string> const& frameworks = cli->GetFrameworkPaths();
|
||||
for (std::vector<std::string>::const_iterator i = frameworks.begin();
|
||||
i != frameworks.end(); ++i) {
|
||||
if (emitted.insert(*i).second) {
|
||||
flags += fwSearchFlag;
|
||||
flags += this->LocalGenerator->ConvertToOutputFormat(
|
||||
*i, cmOutputConverter::SHELL);
|
||||
flags += " ";
|
||||
}
|
||||
}
|
||||
}
|
||||
return flags;
|
||||
}
|
||||
|
||||
std::string cmCommonTargetGenerator::GetFlags(const std::string& l)
|
||||
{
|
||||
ByLanguageMap::iterator i = this->FlagsByLanguage.find(l);
|
||||
|
@ -277,7 +227,9 @@ std::string cmCommonTargetGenerator::GetFlags(const std::string& l)
|
|||
this->LocalGenerator->AppendFlags(flags, this->Makefile->GetDefineFlags());
|
||||
|
||||
// Add framework directory flags.
|
||||
this->LocalGenerator->AppendFlags(flags, this->GetFrameworkFlags(l));
|
||||
this->LocalGenerator->AppendFlags(
|
||||
flags, this->LocalGenerator->GetFrameworkFlags(l, this->ConfigName,
|
||||
this->GeneratorTarget));
|
||||
|
||||
// Add target-specific flags.
|
||||
this->LocalGenerator->AddCompileOptions(flags, this->GeneratorTarget, lang,
|
||||
|
|
|
@ -71,9 +71,6 @@ protected:
|
|||
void AppendFortranFormatFlags(std::string& flags,
|
||||
cmSourceFile const& source);
|
||||
|
||||
// Return the a string with -F flags on apple
|
||||
std::string GetFrameworkFlags(std::string const& l);
|
||||
|
||||
virtual void AddIncludeFlags(std::string& flags,
|
||||
std::string const& lang) = 0;
|
||||
|
||||
|
|
|
@ -1271,6 +1271,54 @@ void cmLocalGenerator::GetTargetFlags(
|
|||
}
|
||||
}
|
||||
|
||||
std::string cmLocalGenerator::GetFrameworkFlags(std::string const& l,
|
||||
std::string const& config,
|
||||
cmGeneratorTarget* target)
|
||||
{
|
||||
if (!this->Makefile->IsOn("APPLE")) {
|
||||
return std::string();
|
||||
}
|
||||
|
||||
std::string fwSearchFlagVar = "CMAKE_" + l + "_FRAMEWORK_SEARCH_FLAG";
|
||||
const char* fwSearchFlag = this->Makefile->GetDefinition(fwSearchFlagVar);
|
||||
if (!(fwSearchFlag && *fwSearchFlag)) {
|
||||
return std::string();
|
||||
}
|
||||
|
||||
std::set<std::string> emitted;
|
||||
#ifdef __APPLE__ /* don't insert this when crosscompiling e.g. to iphone */
|
||||
emitted.insert("/System/Library/Frameworks");
|
||||
#endif
|
||||
std::vector<std::string> includes;
|
||||
|
||||
this->GetIncludeDirectories(includes, target, "C", config);
|
||||
// check all include directories for frameworks as this
|
||||
// will already have added a -F for the framework
|
||||
for (std::vector<std::string>::iterator i = includes.begin();
|
||||
i != includes.end(); ++i) {
|
||||
if (this->GlobalGenerator->NameResolvesToFramework(*i)) {
|
||||
std::string frameworkDir = *i;
|
||||
frameworkDir += "/../";
|
||||
frameworkDir = cmSystemTools::CollapseFullPath(frameworkDir);
|
||||
emitted.insert(frameworkDir);
|
||||
}
|
||||
}
|
||||
|
||||
std::string flags;
|
||||
if (cmComputeLinkInformation* cli = target->GetLinkInformation(config)) {
|
||||
std::vector<std::string> const& frameworks = cli->GetFrameworkPaths();
|
||||
for (std::vector<std::string>::const_iterator i = frameworks.begin();
|
||||
i != frameworks.end(); ++i) {
|
||||
if (emitted.insert(*i).second) {
|
||||
flags += fwSearchFlag;
|
||||
flags += this->ConvertToOutputFormat(*i, cmOutputConverter::SHELL);
|
||||
flags += " ";
|
||||
}
|
||||
}
|
||||
}
|
||||
return flags;
|
||||
}
|
||||
|
||||
std::string cmLocalGenerator::ConvertToLinkReference(std::string const& lib,
|
||||
OutputFormat format)
|
||||
{
|
||||
|
|
|
@ -313,6 +313,10 @@ public:
|
|||
std::string& frameworkPath, std::string& linkPath,
|
||||
cmGeneratorTarget* target, bool useWatcomQuote);
|
||||
|
||||
std::string GetFrameworkFlags(std::string const& l,
|
||||
std::string const& config,
|
||||
cmGeneratorTarget* target);
|
||||
|
||||
virtual void ComputeObjectFilenames(
|
||||
std::map<cmSourceFile const*, std::string>& mapping,
|
||||
cmGeneratorTarget const* gt = 0);
|
||||
|
|
Loading…
Reference in New Issue