Forráskód Böngészése

Merge topic 'objc-standard-fix' into release-3.16

6a818b6931 ObjC: Proper initialization of ObjC/XX standard properties

Acked-by: Kitware Robot <[email protected]>
Acked-by: Robert Maynard <[email protected]>
Merge-request: !4050
Brad King 6 éve
szülő
commit
f8a1b07953
1 módosított fájl, 29 hozzáadás és 14 törlés
  1. 29 14
      Source/cmLocalGenerator.cxx

+ 29 - 14
Source/cmLocalGenerator.cxx

@@ -714,21 +714,36 @@ bool cmLocalGenerator::ComputeTargetCompileFeatures()
 
 
     // Now that C/C++ _STANDARD values have been computed
     // Now that C/C++ _STANDARD values have been computed
     // set the values to ObjC/ObjCXX _STANDARD variables
     // 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");
     }
     }
   }
   }