diff options
author | Zsolt Parragi <zsolt.parragi@cancellar.hu> | 2019-02-26 13:36:11 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2019-02-26 19:35:55 (GMT) |
commit | c7213ca87064ba47984b4dd07192389366d5856a (patch) | |
tree | 12469f6a8290de8aae94775e208657a15789bb0b /Source/cmMakefile.cxx | |
parent | 7c292b37cfb28407f7716c63561c8ff7f0dc5540 (diff) | |
download | CMake-c7213ca87064ba47984b4dd07192389366d5856a.zip CMake-c7213ca87064ba47984b4dd07192389366d5856a.tar.gz CMake-c7213ca87064ba47984b4dd07192389366d5856a.tar.bz2 |
Features: Do not use a lower-than-default standard for requested features
`AddRequiredTargetC(xx)` feature didn't take the default compiler
standard into account, which possibly resulted in the use of an older
standard when some features requested it.
Fixes: #18686
Diffstat (limited to 'Source/cmMakefile.cxx')
-rw-r--r-- | Source/cmMakefile.cxx | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index a0b09da..ab37774 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -4725,6 +4725,13 @@ bool cmMakefile::AddRequiredTargetCxxFeature(cmTarget* target, needCxx17, needCxx20); const char* existingCxxStandard = target->GetProperty("CXX_STANDARD"); + if (existingCxxStandard == nullptr) { + const char* defaultCxxStandard = + this->GetDefinition("CMAKE_CXX_STANDARD_DEFAULT"); + if (defaultCxxStandard && *defaultCxxStandard) { + existingCxxStandard = defaultCxxStandard; + } + } const char* const* existingCxxLevel = nullptr; if (existingCxxStandard) { existingCxxLevel = @@ -4827,6 +4834,13 @@ bool cmMakefile::AddRequiredTargetCFeature(cmTarget* target, this->CheckNeededCLanguage(feature, needC90, needC99, needC11); const char* existingCStandard = target->GetProperty("C_STANDARD"); + if (existingCStandard == nullptr) { + const char* defaultCStandard = + this->GetDefinition("CMAKE_C_STANDARD_DEFAULT"); + if (defaultCStandard && *defaultCStandard) { + existingCStandard = defaultCStandard; + } + } if (existingCStandard) { if (std::find_if(cm::cbegin(C_STANDARDS), cm::cend(C_STANDARDS), cmStrCmp(existingCStandard)) == cm::cend(C_STANDARDS)) { |