From d6d4af0ec3b52170c2691478a4d43c505a846799 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 16 Jun 2021 10:54:50 -0400 Subject: cmGlobalVisualStudio10Generator: Move static functions to anonymous namespace --- Source/cmGlobalVisualStudio10Generator.cxx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx index badce2e..596c731 100644 --- a/Source/cmGlobalVisualStudio10Generator.cxx +++ b/Source/cmGlobalVisualStudio10Generator.cxx @@ -1313,8 +1313,9 @@ static unsigned int cmLoadFlagTableSpecial(Json::Value entry, return value; } -static cmIDEFlagTable const* cmLoadFlagTableJson( - std::string const& flagJsonPath) +namespace { + +cmIDEFlagTable const* cmLoadFlagTableJson(std::string const& flagJsonPath) { cmIDEFlagTable* ret = nullptr; auto savedFlagIterator = loadedFlagJsonFiles.find(flagJsonPath); @@ -1349,12 +1350,13 @@ static cmIDEFlagTable const* cmLoadFlagTableJson( return ret; } -static std::string cmGetFlagTableName(std::string const& toolsetName, - std::string const& table) +std::string cmGetFlagTableName(std::string const& toolsetName, + std::string const& table) { return cmSystemTools::GetCMakeRoot() + "/Templates/MSBuild/FlagTables/" + toolsetName + "_" + table + ".json"; } +} cmIDEFlagTable const* cmGlobalVisualStudio10Generator::LoadFlagTable( std::string const& optionsName, std::string const& toolsetName, -- cgit v0.12 From e59a208b69e701593ca7ba60f3a4c2215f3e44c4 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 16 Jun 2021 10:53:22 -0400 Subject: cmGlobalVisualStudio10Generator: Adopt GetVSInstanceVersion method Port from `cmGlobalVisualStudioVersionedGenerator`. --- Source/cmGlobalVisualStudio10Generator.h | 7 +++++++ Source/cmGlobalVisualStudioVersionedGenerator.cxx | 17 +++++++++++------ Source/cmGlobalVisualStudioVersionedGenerator.h | 2 +- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/Source/cmGlobalVisualStudio10Generator.h b/Source/cmGlobalVisualStudio10Generator.h index 8d30ef8..5022a0f 100644 --- a/Source/cmGlobalVisualStudio10Generator.h +++ b/Source/cmGlobalVisualStudio10Generator.h @@ -5,6 +5,8 @@ #include #include +#include + #include "cmGlobalVisualStudio8Generator.h" #include "cmVisualStudio10ToolsetOptions.h" @@ -119,6 +121,11 @@ public: std::string Encoding() override; const char* GetToolsVersion() const; + virtual cm::optional GetVSInstanceVersion() const + { + return {}; + } + bool GetSupportsUnityBuilds() const { return this->SupportsUnityBuilds; } bool FindMakeProgram(cmMakefile* mf) override; diff --git a/Source/cmGlobalVisualStudioVersionedGenerator.cxx b/Source/cmGlobalVisualStudioVersionedGenerator.cxx index c11ab1b..50dc30b 100644 --- a/Source/cmGlobalVisualStudioVersionedGenerator.cxx +++ b/Source/cmGlobalVisualStudioVersionedGenerator.cxx @@ -391,10 +391,15 @@ bool cmGlobalVisualStudioVersionedGenerator::GetVSInstance( return vsSetupAPIHelper.GetVSInstanceInfo(dir); } -bool cmGlobalVisualStudioVersionedGenerator::GetVSInstanceVersion( - unsigned long long& vsInstanceVersion) const +cm::optional +cmGlobalVisualStudioVersionedGenerator::GetVSInstanceVersion() const { - return vsSetupAPIHelper.GetVSInstanceVersion(vsInstanceVersion); + cm::optional result; + unsigned long long vsInstanceVersion; + if (vsSetupAPIHelper.GetVSInstanceVersion(vsInstanceVersion)) { + result = vsInstanceVersion; + } + return result; } bool cmGlobalVisualStudioVersionedGenerator::IsStdOutEncodingSupported() const @@ -407,9 +412,9 @@ bool cmGlobalVisualStudioVersionedGenerator::IsStdOutEncodingSupported() const return false; } unsigned long long const vsInstanceVersion16_7_P2 = 4503631666610212; - unsigned long long vsInstanceVersion; - return (this->GetVSInstanceVersion(vsInstanceVersion) && - vsInstanceVersion > vsInstanceVersion16_7_P2); + cm::optional vsInstanceVersion = + this->GetVSInstanceVersion(); + return (vsInstanceVersion && *vsInstanceVersion > vsInstanceVersion16_7_P2); } const char* diff --git a/Source/cmGlobalVisualStudioVersionedGenerator.h b/Source/cmGlobalVisualStudioVersionedGenerator.h index cee129e..105e495 100644 --- a/Source/cmGlobalVisualStudioVersionedGenerator.h +++ b/Source/cmGlobalVisualStudioVersionedGenerator.h @@ -28,7 +28,7 @@ public: bool GetVSInstance(std::string& dir) const; - bool GetVSInstanceVersion(unsigned long long& vsInstanceVersion) const; + cm::optional GetVSInstanceVersion() const override; AuxToolset FindAuxToolset(std::string& version, std::string& props) const override; -- cgit v0.12 From 947f0c8b811a2f5b0681590b449125e07a74ae0f 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 | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx index 596c731..b911eef 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 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 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); } } -- cgit v0.12