diff options
author | Marc Chevrier <marc.chevrier@gmail.com> | 2023-05-10 09:40:37 (GMT) |
---|---|---|
committer | Marc Chevrier <marc.chevrier@gmail.com> | 2023-05-11 08:24:18 (GMT) |
commit | ad9020a89922eff4b817ba6278d31a412cc17601 (patch) | |
tree | 5bc482a6739d3c48a0c2bfc38bf29ebcff51601a /Source/cmLocalGenerator.cxx | |
parent | 65430031a61105f9c8bae57e3731fe133e931b11 (diff) | |
download | CMake-ad9020a89922eff4b817ba6278d31a412cc17601.zip CMake-ad9020a89922eff4b817ba6278d31a412cc17601.tar.gz CMake-ad9020a89922eff4b817ba6278d31a412cc17601.tar.bz2 |
Apple Frameworks: honor SYSTEM target property
Fixes: #24109
Diffstat (limited to 'Source/cmLocalGenerator.cxx')
-rw-r--r-- | Source/cmLocalGenerator.cxx | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index 4089fd4..63b2043 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -914,7 +914,7 @@ std::string cmLocalGenerator::GetIncludeFlags( cmSystemTools::CollapseFullPath(cmStrCat(i, "/../")); if (emitted.insert(frameworkDir).second) { if (sysFwSearchFlag && target && - target->IsSystemIncludeDirectory(i, config, lang)) { + target->IsSystemIncludeDirectory(frameworkDir, config, lang)) { includeFlags << *sysFwSearchFlag; } else { includeFlags << *fwSearchFlag; @@ -1645,9 +1645,9 @@ std::vector<BT<std::string>> cmLocalGenerator::GetTargetCompileFlags( return flags; } -static std::string GetFrameworkFlags(const std::string& lang, - const std::string& config, - cmGeneratorTarget* target) +std::string cmLocalGenerator::GetFrameworkFlags(std::string const& lang, + std::string const& config, + cmGeneratorTarget* target) { cmLocalGenerator* lg = target->GetLocalGenerator(); cmMakefile* mf = lg->GetMakefile(); @@ -1656,10 +1656,13 @@ static std::string GetFrameworkFlags(const std::string& lang, return std::string(); } - std::string fwSearchFlagVar = "CMAKE_" + lang + "_FRAMEWORK_SEARCH_FLAG"; - cmValue fwSearchFlag = mf->GetDefinition(fwSearchFlagVar); - if (!cmNonempty(fwSearchFlag)) { - return std::string(); + cmValue fwSearchFlag = + mf->GetDefinition(cmStrCat("CMAKE_", lang, "_FRAMEWORK_SEARCH_FLAG")); + cmValue sysFwSearchFlag = mf->GetDefinition( + cmStrCat("CMAKE_", lang, "_SYSTEM_FRAMEWORK_SEARCH_FLAG")); + + if (!fwSearchFlag && !sysFwSearchFlag) { + return std::string{}; } std::set<std::string> emitted; @@ -1684,7 +1687,12 @@ static std::string GetFrameworkFlags(const std::string& lang, std::vector<std::string> const& frameworks = cli->GetFrameworkPaths(); for (std::string const& framework : frameworks) { if (emitted.insert(framework).second) { - flags += *fwSearchFlag; + if (sysFwSearchFlag && + target->IsSystemIncludeDirectory(framework, config, lang)) { + flags += *sysFwSearchFlag; + } else { + flags += *fwSearchFlag; + } flags += lg->ConvertToOutputFormat(framework, cmOutputConverter::SHELL); flags += " "; @@ -1694,13 +1702,6 @@ static std::string GetFrameworkFlags(const std::string& lang, return flags; } -std::string cmLocalGenerator::GetFrameworkFlags(std::string const& l, - std::string const& config, - cmGeneratorTarget* target) -{ - return ::GetFrameworkFlags(l, config, target); -} - void cmLocalGenerator::GetTargetDefines(cmGeneratorTarget const* target, std::string const& config, std::string const& lang, @@ -1788,10 +1789,13 @@ void cmLocalGenerator::OutputLinkLibraries( cmStrCat("CMAKE_", cli.GetLinkLanguage(), "_STANDARD_LIBRARIES")); // Append the framework search path flags. - std::string fwSearchFlag = this->Makefile->GetSafeDefinition( + cmValue fwSearchFlag = this->Makefile->GetDefinition( cmStrCat("CMAKE_", linkLanguage, "_FRAMEWORK_SEARCH_FLAG")); + cmValue sysFwSearchFlag = this->Makefile->GetDefinition( + cmStrCat("CMAKE_", linkLanguage, "_SYSTEM_FRAMEWORK_SEARCH_FLAG")); - frameworkPath = linkLineComputer->ComputeFrameworkPath(cli, fwSearchFlag); + frameworkPath = + linkLineComputer->ComputeFrameworkPath(cli, fwSearchFlag, sysFwSearchFlag); linkLineComputer->ComputeLinkPath(cli, libPathFlag, libPathTerminator, linkPath); linkLineComputer->ComputeLinkLibraries(cli, stdLibString, linkLibraries); |