From e4ca525d845e2b154ec7bc809071539618e2f7a2 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 16 Jun 2021 10:56:15 -0400 Subject: VS: Do not apply '/external:W*' flag table mapping on VS < 16.10 Since commit 9054cd05e6 (VS: Add flag table entries for '/external:W*' flags in VS 16.10, 2021-05-28, v3.20.4~10^2) we map flags to the `ExternalWarningLevel` element. VS 16.9 does not support that element, but its `cl` compiler does support the `/external:W*` flags. Filter out the flag table entry on older VS versions. Fixes: #22308 --- Source/cmGlobalVisualStudio10Generator.cxx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx index 1ebe405..fa51092 100644 --- a/Source/cmGlobalVisualStudio10Generator.cxx +++ b/Source/cmGlobalVisualStudio10Generator.cxx @@ -1361,7 +1361,10 @@ static unsigned int cmLoadFlagTableSpecial(Json::Value entry, namespace { -cmIDEFlagTable const* cmLoadFlagTableJson(std::string const& flagJsonPath) +unsigned long long const vsVer16_10_0 = 4503644629696790; + +cmIDEFlagTable const* cmLoadFlagTableJson( + std::string const& flagJsonPath, cm::optional vsver) { cmIDEFlagTable* ret = nullptr; auto savedFlagIterator = loadedFlagJsonFiles.find(flagJsonPath); @@ -1383,6 +1386,11 @@ cmIDEFlagTable const* cmLoadFlagTableJson(std::string const& flagJsonPath) flagEntry.comment = cmLoadFlagTableString(flag, "comment"); flagEntry.value = cmLoadFlagTableString(flag, "value"); flagEntry.special = cmLoadFlagTableSpecial(flag, "flags"); + // FIXME: Port this version check to a Json field. + if (vsver && *vsver < vsVer16_10_0 && + flagEntry.IDEName == "ExternalWarningLevel") { + continue; + } flagTable.push_back(flagEntry); } cmIDEFlagTable endFlag{ "", "", "", "", 0 }; @@ -1458,7 +1466,8 @@ cmIDEFlagTable const* cmGlobalVisualStudio10Generator::LoadFlagTable( } } - if (cmIDEFlagTable const* ret = cmLoadFlagTableJson(filename)) { + cm::optional vsver = this->GetVSInstanceVersion(); + if (cmIDEFlagTable const* ret = cmLoadFlagTableJson(filename, vsver)) { return ret; } -- cgit v0.12