mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-04 21:00:17 -06:00
ObjC: Proper initialization of ObjC/XX standard properties
Fix logic added by commit 81566557d5 (ObjC: Initialize ObjC/XX standard
properties from C/C++ counterparts, 2019-11-09) to account for cases
when the CXX standard is not explicitly set. Also, do not copy the
`*_STANDARD_REQUIRED` and `*_EXTENSIONS` properties unless we copied the
`*_STANDARD` property.
This commit is contained in:
@@ -714,21 +714,36 @@ bool cmLocalGenerator::ComputeTargetCompileFeatures()
|
||||
|
||||
// Now that C/C++ _STANDARD values have been computed
|
||||
// set the values to ObjC/ObjCXX _STANDARD variables
|
||||
auto copyPropertyToObjLang = [&](LanguagePair const& lang,
|
||||
const char* property) {
|
||||
if (target->GetType() == cmStateEnums::INTERFACE_LIBRARY) {
|
||||
return;
|
||||
if (target->GetType() != cmStateEnums::INTERFACE_LIBRARY) {
|
||||
auto copyStandardToObjLang = [&](LanguagePair const& lang) -> bool {
|
||||
if (!target->GetProperty(cmStrCat(lang.first, "_STANDARD"))) {
|
||||
auto* standard =
|
||||
target->GetProperty(cmStrCat(lang.second, "_STANDARD"));
|
||||
if (!standard) {
|
||||
standard = this->Makefile->GetDefinition(
|
||||
cmStrCat("CMAKE_", lang.second, "_STANDARD_DEFAULT"));
|
||||
}
|
||||
target->Target->SetProperty(cmStrCat(lang.first, "_STANDARD"),
|
||||
standard);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
auto copyPropertyToObjLang = [&](LanguagePair const& lang,
|
||||
const char* property) {
|
||||
if (!target->GetProperty(cmStrCat(lang.first, property)) &&
|
||||
target->GetProperty(cmStrCat(lang.second, property))) {
|
||||
target->Target->SetProperty(
|
||||
cmStrCat(lang.first, property),
|
||||
target->GetProperty(cmStrCat(lang.second, property)));
|
||||
}
|
||||
};
|
||||
for (auto const& lang : objcEnabledLanguages) {
|
||||
if (copyStandardToObjLang(lang)) {
|
||||
copyPropertyToObjLang(lang, "_STANDARD_REQUIRED");
|
||||
copyPropertyToObjLang(lang, "_EXTENSIONS");
|
||||
}
|
||||
}
|
||||
if (!target->GetProperty(cmStrCat(lang.first, property))) {
|
||||
target->Target->SetProperty(
|
||||
cmStrCat(lang.first, property),
|
||||
target->GetProperty(cmStrCat(lang.second, property)));
|
||||
}
|
||||
};
|
||||
for (auto const& lang : objcEnabledLanguages) {
|
||||
copyPropertyToObjLang(lang, "_STANDARD");
|
||||
copyPropertyToObjLang(lang, "_STANDARD_REQUIRED");
|
||||
copyPropertyToObjLang(lang, "_EXTENSIONS");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user