mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 10:50:16 -06:00
Xcode: Restore Swift framework search directories
Previously we selected a single "language for preprocessor" with which
to compute both target-wide `GCC_PREPROCESSOR_DEFINITIONS` and
`{HEADER,FRAMEWORK}_SEARCH_PATHS`. Since commit c0dd3dd2c1 (Xcode:
Evaluate Swift compile definitions separately, 2022-10-25,
v3.25.0-rc3~16^2) we never compute `GCC_PREPROCESSOR_DEFINITIONS` for
Swift. Therefore we need to select the language for target-wide include
and framework directories separately.
Fixes: #24116
This commit is contained in:
@@ -2390,13 +2390,13 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmGeneratorTarget* gtgt,
|
||||
|
||||
// Choose a language to use for target-wide preprocessor definitions.
|
||||
static const char* ppLangs[] = { "CXX", "C", "OBJCXX", "OBJC" };
|
||||
std::string langForPreprocessor;
|
||||
std::string langForPreprocessorDefinitions;
|
||||
if (cm::contains(ppLangs, llang)) {
|
||||
langForPreprocessor = llang;
|
||||
langForPreprocessorDefinitions = llang;
|
||||
} else {
|
||||
for (const char* l : ppLangs) {
|
||||
if (languages.count(l)) {
|
||||
langForPreprocessor = l;
|
||||
langForPreprocessorDefinitions = l;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -2424,9 +2424,9 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmGeneratorTarget* gtgt,
|
||||
this->AppendDefines(ppDefs, exportMacro->c_str());
|
||||
}
|
||||
std::vector<std::string> targetDefines;
|
||||
if (!langForPreprocessor.empty()) {
|
||||
if (!langForPreprocessorDefinitions.empty()) {
|
||||
gtgt->GetCompileDefinitions(targetDefines, configName,
|
||||
langForPreprocessor);
|
||||
langForPreprocessorDefinitions);
|
||||
}
|
||||
this->AppendDefines(ppDefs, targetDefines);
|
||||
buildSettings->AddAttribute("GCC_PREPROCESSOR_DEFINITIONS",
|
||||
@@ -2725,10 +2725,12 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmGeneratorTarget* gtgt,
|
||||
BuildObjectListOrString sysfdirs(this, true);
|
||||
const bool emitSystemIncludes = this->XcodeVersion >= 83;
|
||||
|
||||
// Choose a language to use for target-wide include directories.
|
||||
std::string const& langForIncludes = llang;
|
||||
std::vector<std::string> includes;
|
||||
if (!langForPreprocessor.empty()) {
|
||||
if (!langForIncludes.empty()) {
|
||||
this->CurrentLocalGenerator->GetIncludeDirectories(
|
||||
includes, gtgt, langForPreprocessor, configName);
|
||||
includes, gtgt, langForIncludes, configName);
|
||||
}
|
||||
std::set<std::string> emitted;
|
||||
emitted.insert("/System/Library/Frameworks");
|
||||
@@ -2741,7 +2743,7 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmGeneratorTarget* gtgt,
|
||||
std::string incpath = this->XCodeEscapePath(frameworkDir);
|
||||
if (emitSystemIncludes &&
|
||||
gtgt->IsSystemIncludeDirectory(include, configName,
|
||||
langForPreprocessor)) {
|
||||
langForIncludes)) {
|
||||
sysfdirs.Add(incpath);
|
||||
} else {
|
||||
fdirs.Add(incpath);
|
||||
@@ -2751,7 +2753,7 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmGeneratorTarget* gtgt,
|
||||
std::string incpath = this->XCodeEscapePath(include);
|
||||
if (emitSystemIncludes &&
|
||||
gtgt->IsSystemIncludeDirectory(include, configName,
|
||||
langForPreprocessor)) {
|
||||
langForIncludes)) {
|
||||
sysdirs.Add(incpath);
|
||||
} else {
|
||||
dirs.Add(incpath);
|
||||
@@ -2765,7 +2767,7 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmGeneratorTarget* gtgt,
|
||||
std::string incpath = this->XCodeEscapePath(fwDir);
|
||||
if (emitSystemIncludes &&
|
||||
gtgt->IsSystemIncludeDirectory(fwDir, configName,
|
||||
langForPreprocessor)) {
|
||||
langForIncludes)) {
|
||||
sysfdirs.Add(incpath);
|
||||
} else {
|
||||
fdirs.Add(incpath);
|
||||
|
||||
Reference in New Issue
Block a user