From 6a818b693192e96f57c866caf2541669342a700b Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Thu, 14 Nov 2019 12:35:37 +0100 Subject: 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. --- Source/cmLocalGenerator.cxx | 43 +++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index 5f8b920..923d2a5 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -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->GetProperty(cmStrCat(lang.first, property))) { - target->Target->SetProperty( - cmStrCat(lang.first, property), - target->GetProperty(cmStrCat(lang.second, property))); + 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"); + } } - }; - for (auto const& lang : objcEnabledLanguages) { - copyPropertyToObjLang(lang, "_STANDARD"); - copyPropertyToObjLang(lang, "_STANDARD_REQUIRED"); - copyPropertyToObjLang(lang, "_EXTENSIONS"); } } -- cgit v0.12