Browse Source

Merge topic 'vs-map-external-warnings' into release-3.20

947f0c8b81 VS: Do not apply '/external:W*' flag table mapping on VS < 16.10
e59a208b69 cmGlobalVisualStudio10Generator: Adopt GetVSInstanceVersion method
d6d4af0ec3 cmGlobalVisualStudio10Generator: Move static functions to anonymous namespace

Acked-by: Kitware Robot <[email protected]>
Merge-request: !6233
Brad King 4 years ago
parent
commit
cd73f3736b

+ 19 - 7
Source/cmGlobalVisualStudio10Generator.cxx

@@ -1313,8 +1313,12 @@ static unsigned int cmLoadFlagTableSpecial(Json::Value entry,
   return value;
 }
 
-static cmIDEFlagTable const* cmLoadFlagTableJson(
-  std::string const& flagJsonPath)
+namespace {
+
+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);
@@ -1336,6 +1340,11 @@ static cmIDEFlagTable const* cmLoadFlagTableJson(
           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 };
@@ -1349,12 +1358,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,
@@ -1362,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);
     }
   }
 

+ 7 - 0
Source/cmGlobalVisualStudio10Generator.h

@@ -5,6 +5,8 @@
 #include <memory>
 #include <set>
 
+#include <cm/optional>
+
 #include "cmGlobalVisualStudio8Generator.h"
 #include "cmVisualStudio10ToolsetOptions.h"
 
@@ -119,6 +121,11 @@ public:
   std::string Encoding() override;
   const char* GetToolsVersion() const;
 
+  virtual cm::optional<unsigned long long> GetVSInstanceVersion() const
+  {
+    return {};
+  }
+
   bool GetSupportsUnityBuilds() const { return this->SupportsUnityBuilds; }
 
   bool FindMakeProgram(cmMakefile* mf) override;

+ 11 - 6
Source/cmGlobalVisualStudioVersionedGenerator.cxx

@@ -391,10 +391,15 @@ bool cmGlobalVisualStudioVersionedGenerator::GetVSInstance(
   return vsSetupAPIHelper.GetVSInstanceInfo(dir);
 }
 
-bool cmGlobalVisualStudioVersionedGenerator::GetVSInstanceVersion(
-  unsigned long long& vsInstanceVersion) const
+cm::optional<unsigned long long>
+cmGlobalVisualStudioVersionedGenerator::GetVSInstanceVersion() const
 {
-  return vsSetupAPIHelper.GetVSInstanceVersion(vsInstanceVersion);
+  cm::optional<unsigned long long> 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<unsigned long long> vsInstanceVersion =
+    this->GetVSInstanceVersion();
+  return (vsInstanceVersion && *vsInstanceVersion > vsInstanceVersion16_7_P2);
 }
 
 const char*

+ 1 - 1
Source/cmGlobalVisualStudioVersionedGenerator.h

@@ -28,7 +28,7 @@ public:
 
   bool GetVSInstance(std::string& dir) const;
 
-  bool GetVSInstanceVersion(unsigned long long& vsInstanceVersion) const;
+  cm::optional<unsigned long long> GetVSInstanceVersion() const override;
 
   AuxToolset FindAuxToolset(std::string& version,
                             std::string& props) const override;