diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2016-06-08 09:29:35 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2016-06-09 14:39:57 (GMT) |
commit | 70d3bf85808d17dba8ec90e2975f2741383ef260 (patch) | |
tree | a4b4ad0543a85543016956eb290468855feeb784 /Source/cmLocalGenerator.cxx | |
parent | de4ee088e7ab60213b551ecf98bc9e1b512ee393 (diff) | |
download | CMake-70d3bf85808d17dba8ec90e2975f2741383ef260.zip CMake-70d3bf85808d17dba8ec90e2975f2741383ef260.tar.gz CMake-70d3bf85808d17dba8ec90e2975f2741383ef260.tar.bz2 |
cmLocalGenerator: Adopt GetFrameworkFlags method
Move it from cmCommonTargetGenerator.
Diffstat (limited to 'Source/cmLocalGenerator.cxx')
-rw-r--r-- | Source/cmLocalGenerator.cxx | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index b369420..9c503c2 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -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) { |