1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-16 14:08:35 +08:00

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
This commit is contained in:
Brad King
2021-06-16 10:56:15 -04:00
parent aabc3ca47d
commit e4ca525d84

View File

@@ -1361,7 +1361,10 @@ static unsigned int cmLoadFlagTableSpecial(Json::Value entry,
namespace { 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<unsigned long long> vsver)
{ {
cmIDEFlagTable* ret = nullptr; cmIDEFlagTable* ret = nullptr;
auto savedFlagIterator = loadedFlagJsonFiles.find(flagJsonPath); auto savedFlagIterator = loadedFlagJsonFiles.find(flagJsonPath);
@@ -1383,6 +1386,11 @@ cmIDEFlagTable const* cmLoadFlagTableJson(std::string const& flagJsonPath)
flagEntry.comment = cmLoadFlagTableString(flag, "comment"); flagEntry.comment = cmLoadFlagTableString(flag, "comment");
flagEntry.value = cmLoadFlagTableString(flag, "value"); flagEntry.value = cmLoadFlagTableString(flag, "value");
flagEntry.special = cmLoadFlagTableSpecial(flag, "flags"); 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); flagTable.push_back(flagEntry);
} }
cmIDEFlagTable endFlag{ "", "", "", "", 0 }; cmIDEFlagTable endFlag{ "", "", "", "", 0 };
@@ -1458,7 +1466,8 @@ cmIDEFlagTable const* cmGlobalVisualStudio10Generator::LoadFlagTable(
} }
} }
if (cmIDEFlagTable const* ret = cmLoadFlagTableJson(filename)) { cm::optional<unsigned long long> vsver = this->GetVSInstanceVersion();
if (cmIDEFlagTable const* ret = cmLoadFlagTableJson(filename, vsver)) {
return ret; return ret;
} }