summaryrefslogtreecommitdiffstats
path: root/Source/cmLocalGenerator.cxx
diff options
context:
space:
mode:
authorMarc Chevrier <marc.chevrier@gmail.com>2023-05-10 09:40:37 (GMT)
committerMarc Chevrier <marc.chevrier@gmail.com>2023-05-11 08:24:18 (GMT)
commitad9020a89922eff4b817ba6278d31a412cc17601 (patch)
tree5bc482a6739d3c48a0c2bfc38bf29ebcff51601a /Source/cmLocalGenerator.cxx
parent65430031a61105f9c8bae57e3731fe133e931b11 (diff)
downloadCMake-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.cxx40
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);