summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2019-11-13 14:38:31 +0000
committerKitware Robot <kwrobot@kitware.com>2019-11-13 09:40:47 -0500
commit786954c4893565d8da27329201fd235e347e051d (patch)
treefa9a9525951a42f24ded2f01762e99d0067a561f
parenta0212382c98c9e76190892ba76441ed2668ec6ba (diff)
parent81566557d591bf375384ca3e697877ba67c2f77d (diff)
downloadcmake-786954c4893565d8da27329201fd235e347e051d.tar.gz
Merge topic 'objc-standard' into release-3.16
81566557d5 ObjC: Initialize ObjC/XX standard properties from C/C++ counterparts Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !4022
-rw-r--r--Source/cmLocalGenerator.cxx29
1 files changed, 29 insertions, 0 deletions
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index b79eb1d1c4..5f8b92089a 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -693,6 +693,16 @@ bool cmLocalGenerator::ComputeTargetCompileFeatures()
configNames.emplace_back();
}
+ using LanguagePair = std::pair<std::string, std::string>;
+ std::vector<LanguagePair> pairedLanguages{ { "OBJC", "C" },
+ { "OBJCXX", "CXX" } };
+ std::set<LanguagePair> objcEnabledLanguages;
+ for (auto const& lang : pairedLanguages) {
+ if (this->Makefile->GetState()->GetLanguageEnabled(lang.first)) {
+ objcEnabledLanguages.insert(lang);
+ }
+ }
+
// Process compile features of all targets.
const std::vector<cmGeneratorTarget*>& targets = this->GetGeneratorTargets();
for (cmGeneratorTarget* target : targets) {
@@ -701,6 +711,25 @@ bool cmLocalGenerator::ComputeTargetCompileFeatures()
return false;
}
}
+
+ // 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)));
+ }
+ };
+ for (auto const& lang : objcEnabledLanguages) {
+ copyPropertyToObjLang(lang, "_STANDARD");
+ copyPropertyToObjLang(lang, "_STANDARD_REQUIRED");
+ copyPropertyToObjLang(lang, "_EXTENSIONS");
+ }
}
return true;