From 626c51f47be79c5438cc349f51ba1b4973194bfc Mon Sep 17 00:00:00 2001
From: Brad King <brad.king@kitware.com>
Date: Thu, 24 Jan 2019 11:19:18 -0500
Subject: VS: Update for Visual Studio 2019 Preview 2

The toolset is now called `v142`.  Use matching flag tables.

Fixes: #18834
---
 Help/release/dev/vs2019.rst                       |  2 +-
 Source/cmGlobalVisualStudioVersionedGenerator.cxx |  3 +--
 Source/cmVSSetupHelper.cxx                        | 10 +++++++++-
 Source/cmVisualStudio10ToolsetOptions.cxx         | 22 ++++++++++++++++------
 4 files changed, 27 insertions(+), 10 deletions(-)

diff --git a/Help/release/dev/vs2019.rst b/Help/release/dev/vs2019.rst
index 1ffdeec..2072147 100644
--- a/Help/release/dev/vs2019.rst
+++ b/Help/release/dev/vs2019.rst
@@ -2,7 +2,7 @@ vs2019
 ------
 
 * The :generator:`Visual Studio 16 2019` generator was added.  This is
-  experimental and based on "Visual Studio 2019 Preview 1.1" because this
+  experimental and based on "Visual Studio 2019 Preview 2" because this
   version of VS has not been released.
 
   The VS 2019 generator differs from generators for earlier versions
diff --git a/Source/cmGlobalVisualStudioVersionedGenerator.cxx b/Source/cmGlobalVisualStudioVersionedGenerator.cxx
index 31f585c..a83cc78 100644
--- a/Source/cmGlobalVisualStudioVersionedGenerator.cxx
+++ b/Source/cmGlobalVisualStudioVersionedGenerator.cxx
@@ -72,8 +72,7 @@ static const char* VSVersionToToolset(
     case cmGlobalVisualStudioGenerator::VS15:
       return "v141";
     case cmGlobalVisualStudioGenerator::VS16:
-      // FIXME: VS 2019 Preview 1.1 uses v141 but preview 2 will use v142.
-      return "v141";
+      return "v142";
   }
   return "";
 }
diff --git a/Source/cmVSSetupHelper.cxx b/Source/cmVSSetupHelper.cxx
index 9187c29..91a0e15 100644
--- a/Source/cmVSSetupHelper.cxx
+++ b/Source/cmVSSetupHelper.cxx
@@ -188,8 +188,16 @@ bool cmVSSetupAPIHelper::GetVSInstanceInfo(
   // Check if a compiler is installed with this instance.
   {
     std::string const vcRoot = vsInstanceInfo.GetInstallLocation();
-    std::string const vcToolsVersionFile =
+    std::string vcToolsVersionFile =
       vcRoot + "/VC/Auxiliary/Build/Microsoft.VCToolsVersion.default.txt";
+    if (!cmSystemTools::PathExists(vcToolsVersionFile)) {
+      // FIXME: VS 2019 Preview 2 installs the v142 toolset and does not
+      // provide the plain `Microsoft.VCToolsVersion.default.txt` that v141
+      // does.  This should be fixed in preview 3 and this workaround can
+      // be dropped.  Otherwise, we may need to switch to globbing.
+      vcToolsVersionFile = vcRoot +
+        "/VC/Auxiliary/Build/Microsoft.VCToolsVersion.v142.default.txt";
+    }
     std::string vcToolsVersion;
     cmsys::ifstream fin(vcToolsVersionFile.c_str());
     if (!fin || !cmSystemTools::GetLineFromStream(fin, vcToolsVersion)) {
diff --git a/Source/cmVisualStudio10ToolsetOptions.cxx b/Source/cmVisualStudio10ToolsetOptions.cxx
index 39063ed..a490e03 100644
--- a/Source/cmVisualStudio10ToolsetOptions.cxx
+++ b/Source/cmVisualStudio10ToolsetOptions.cxx
@@ -11,7 +11,9 @@ std::string cmVisualStudio10ToolsetOptions::GetClFlagTableName(
 {
   std::string const useToolset = this->GetToolsetName(name, toolset);
 
-  if (toolset == "v141") {
+  if (toolset == "v142") {
+    return "v142";
+  } else if (toolset == "v141") {
     return "v141";
   } else if (useToolset == "v140") {
     return "v140";
@@ -31,7 +33,10 @@ std::string cmVisualStudio10ToolsetOptions::GetCSharpFlagTableName(
 {
   std::string const useToolset = this->GetToolsetName(name, toolset);
 
-  if ((useToolset == "v141")) {
+  if (useToolset == "v142") {
+    // FIXME: Add CSharp flag table for v142.
+    return "v141";
+  } else if (useToolset == "v141") {
     return "v141";
   } else if (useToolset == "v140") {
     return "v140";
@@ -51,7 +56,8 @@ std::string cmVisualStudio10ToolsetOptions::GetRcFlagTableName(
 {
   std::string const useToolset = this->GetToolsetName(name, toolset);
 
-  if ((useToolset == "v140") || (useToolset == "v141")) {
+  if ((useToolset == "v140") || (useToolset == "v141") ||
+      (useToolset == "v142")) {
     return "v14";
   } else if (useToolset == "v120") {
     return "v12";
@@ -69,7 +75,8 @@ std::string cmVisualStudio10ToolsetOptions::GetLibFlagTableName(
 {
   std::string const useToolset = this->GetToolsetName(name, toolset);
 
-  if ((useToolset == "v140") || (useToolset == "v141")) {
+  if ((useToolset == "v140") || (useToolset == "v141") ||
+      (useToolset == "v142")) {
     return "v14";
   } else if (useToolset == "v120") {
     return "v12";
@@ -87,7 +94,9 @@ std::string cmVisualStudio10ToolsetOptions::GetLinkFlagTableName(
 {
   std::string const useToolset = this->GetToolsetName(name, toolset);
 
-  if (useToolset == "v141") {
+  if (useToolset == "v142") {
+    return "v142";
+  } else if (useToolset == "v141") {
     return "v141";
   } else if (useToolset == "v140") {
     return "v140";
@@ -107,7 +116,8 @@ std::string cmVisualStudio10ToolsetOptions::GetMasmFlagTableName(
 {
   std::string const useToolset = this->GetToolsetName(name, toolset);
 
-  if ((useToolset == "v140") || (useToolset == "v141")) {
+  if ((useToolset == "v140") || (useToolset == "v141") ||
+      (useToolset == "v142")) {
     return "v14";
   } else if (useToolset == "v120") {
     return "v12";
-- 
cgit v0.12