summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2021-06-16 10:56:15 -0400
committerBrad King <brad.king@kitware.com>2021-06-16 11:08:15 -0400
commit947f0c8b811a2f5b0681590b449125e07a74ae0f (patch)
tree40fbb52a569133b92f36b9a6d67e47ab7223a291
parente59a208b69e701593ca7ba60f3a4c2215f3e44c4 (diff)
downloadcmake-947f0c8b811a2f5b0681590b449125e07a74ae0f.tar.gz
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
-rw-r--r--Source/cmGlobalVisualStudio10Generator.cxx18
1 files changed, 14 insertions, 4 deletions
diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx
index 596c73120f..b911eef40b 100644
--- a/Source/cmGlobalVisualStudio10Generator.cxx
+++ b/Source/cmGlobalVisualStudio10Generator.cxx
@@ -1315,7 +1315,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<unsigned long long> vsver)
{
cmIDEFlagTable* ret = nullptr;
auto savedFlagIterator = loadedFlagJsonFiles.find(flagJsonPath);
@@ -1337,6 +1340,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 };
@@ -1364,17 +1372,19 @@ cmIDEFlagTable const* cmGlobalVisualStudio10Generator::LoadFlagTable(
{
cmIDEFlagTable const* ret = nullptr;
+ cm::optional<unsigned long long> vsver = this->GetVSInstanceVersion();
+
std::string filename;
if (!optionsName.empty()) {
filename = cmGetFlagTableName(optionsName, table);
- ret = cmLoadFlagTableJson(filename);
+ ret = cmLoadFlagTableJson(filename, vsver);
} else {
filename = cmGetFlagTableName(toolsetName, table);
if (cmSystemTools::FileExists(filename)) {
- ret = cmLoadFlagTableJson(filename);
+ ret = cmLoadFlagTableJson(filename, vsver);
} else {
filename = cmGetFlagTableName(defaultName, table);
- ret = cmLoadFlagTableJson(filename);
+ ret = cmLoadFlagTableJson(filename, vsver);
}
}