diff options
author | Brad King <brad.king@kitware.com> | 2019-11-13 14:38:31 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2019-11-13 14:40:47 (GMT) |
commit | 786954c4893565d8da27329201fd235e347e051d (patch) | |
tree | fa9a9525951a42f24ded2f01762e99d0067a561f | |
parent | a0212382c98c9e76190892ba76441ed2668ec6ba (diff) | |
parent | 81566557d591bf375384ca3e697877ba67c2f77d (diff) | |
download | CMake-786954c4893565d8da27329201fd235e347e051d.zip CMake-786954c4893565d8da27329201fd235e347e051d.tar.gz CMake-786954c4893565d8da27329201fd235e347e051d.tar.bz2 |
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.cxx | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index b79eb1d..5f8b920 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; |