From 67a7eba6faf7fdd4f1007dba5ad7cceb0785ae51 Mon Sep 17 00:00:00 2001
From: Yuchen Deng <loaden@gmail.com>
Date: Sun, 20 Oct 2013 23:44:52 +0800
Subject: [PATCH] Add MSVC2013 support

Change-Id: I956b5796a67792f826ddc72e7681609372a9c029
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
---
 src/plugins/projectexplorer/abi.cpp                | 14 ++++++++++++--
 src/plugins/projectexplorer/abi.h                  |  1 +
 .../projectexplorer/abstractmsvctoolchain.cpp      |  3 ++-
 src/plugins/projectexplorer/msvctoolchain.cpp      | 10 +++++++++-
 4 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/src/plugins/projectexplorer/abi.cpp b/src/plugins/projectexplorer/abi.cpp
index 83705825ccd..2ce26a195dd 100644
--- a/src/plugins/projectexplorer/abi.cpp
+++ b/src/plugins/projectexplorer/abi.cpp
@@ -162,6 +162,9 @@ static QList<Abi> parseCoffHeader(const QByteArray &data)
         case 11:
             flavor = Abi::WindowsMsvc2012Flavor;
             break;
+        case 12:
+            flavor = Abi::WindowsMsvc2013Flavor;
+            break;
         default: // Keep unknown flavor
             if (minorLinker != 0)
                 flavor = Abi::WindowsMSysFlavor; // MSVC seems to avoid using minor numbers
@@ -402,6 +405,8 @@ Abi::Abi(const QString &abiString) :
             m_osFlavor = WindowsMsvc2010Flavor;
         else if (abiParts.at(2) == QLatin1String("msvc2012") && m_os == WindowsOS)
             m_osFlavor = WindowsMsvc2012Flavor;
+        else if (abiParts.at(2) == QLatin1String("msvc2013") && m_os == WindowsOS)
+            m_osFlavor = WindowsMsvc2013Flavor;
         else if (abiParts.at(2) == QLatin1String("msys") && m_os == WindowsOS)
             m_osFlavor = WindowsMSysFlavor;
         else if (abiParts.at(2) == QLatin1String("ce") && m_os == WindowsOS)
@@ -650,6 +655,8 @@ QString Abi::toString(const OSFlavor &of)
         return QLatin1String("msvc2010");
     case ProjectExplorer::Abi::WindowsMsvc2012Flavor:
         return QLatin1String("msvc2012");
+    case ProjectExplorer::Abi::WindowsMsvc2013Flavor:
+        return QLatin1String("msvc2013");
     case ProjectExplorer::Abi::WindowsMSysFlavor:
         return QLatin1String("msys");
     case ProjectExplorer::Abi::WindowsCEFlavor:
@@ -699,7 +706,8 @@ QList<Abi::OSFlavor> Abi::flavorsForOs(const Abi::OS &o)
         return result << GenericUnixFlavor << SolarisUnixFlavor << UnknownFlavor;
     case WindowsOS:
         return result << WindowsMsvc2005Flavor << WindowsMsvc2008Flavor << WindowsMsvc2010Flavor
-                      << WindowsMsvc2012Flavor << WindowsMSysFlavor << WindowsCEFlavor << UnknownFlavor;
+                      << WindowsMsvc2012Flavor << WindowsMsvc2013Flavor << WindowsMSysFlavor
+                      << WindowsCEFlavor << UnknownFlavor;
     case UnknownOS:
         return result << UnknownFlavor;
     default:
@@ -717,7 +725,9 @@ Abi Abi::hostAbi()
 
 #if defined (Q_OS_WIN)
     os = WindowsOS;
-#if _MSC_VER == 1700
+#if _MSC_VER == 1800
+    subos = WindowsMsvc2013Flavor;
+#elif _MSC_VER == 1700
     subos = WindowsMsvc2012Flavor;
 #elif _MSC_VER == 1600
     subos = WindowsMsvc2010Flavor;
diff --git a/src/plugins/projectexplorer/abi.h b/src/plugins/projectexplorer/abi.h
index a805a1be04f..473918b9185 100644
--- a/src/plugins/projectexplorer/abi.h
+++ b/src/plugins/projectexplorer/abi.h
@@ -88,6 +88,7 @@ public:
         WindowsMsvc2008Flavor,
         WindowsMsvc2010Flavor,
         WindowsMsvc2012Flavor,
+        WindowsMsvc2013Flavor,
         WindowsMSysFlavor,
         WindowsCEFlavor,
 
diff --git a/src/plugins/projectexplorer/abstractmsvctoolchain.cpp b/src/plugins/projectexplorer/abstractmsvctoolchain.cpp
index cf20d23f1b7..15ad0638960 100644
--- a/src/plugins/projectexplorer/abstractmsvctoolchain.cpp
+++ b/src/plugins/projectexplorer/abstractmsvctoolchain.cpp
@@ -99,7 +99,8 @@ ToolChain::CompilerFlags AbstractMsvcToolChain::compilerFlags(const QStringList
         flags &= ~MicrosoftExtensions;
 
     if (m_abi.osFlavor() == Abi::WindowsMsvc2010Flavor
-            || m_abi.osFlavor() == Abi::WindowsMsvc2012Flavor)
+            || m_abi.osFlavor() == Abi::WindowsMsvc2012Flavor
+            || m_abi.osFlavor() == Abi::WindowsMsvc2013Flavor)
         flags |= StandardCxx11;
 
     return flags;
diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp
index e3544f7949c..cb0f7f66868 100644
--- a/src/plugins/projectexplorer/msvctoolchain.cpp
+++ b/src/plugins/projectexplorer/msvctoolchain.cpp
@@ -103,7 +103,9 @@ static Abi findAbiOfMsvc(MsvcToolChain::Type type, MsvcToolChain::Platform platf
         else if (version == QLatin1String("v7.0A") || version == QLatin1String("v7.1"))
             msvcVersionString = QLatin1String("10.0");
     }
-    if (msvcVersionString.startsWith(QLatin1String("11.")))
+    if (msvcVersionString.startsWith(QLatin1String("12.")))
+        flavor = Abi::WindowsMsvc2013Flavor;
+    else if (msvcVersionString.startsWith(QLatin1String("11.")))
         flavor = Abi::WindowsMsvc2012Flavor;
     else if (msvcVersionString.startsWith(QLatin1String("10.")))
         flavor = Abi::WindowsMsvc2010Flavor;
@@ -359,6 +361,12 @@ QList<Utils::FileName> MsvcToolChain::suggestedMkspecList() const
             << Utils::FileName::fromString(QLatin1String("win32-msvc2012"))
             << Utils::FileName::fromString(QLatin1String("win32-msvc2010"));
         break;
+    case ProjectExplorer::Abi::WindowsMsvc2013Flavor:
+        QList<Utils::FileName>()
+            << Utils::FileName::fromString(QLatin1String("win32-msvc2013"))
+            << Utils::FileName::fromString(QLatin1String("win32-msvc2012"))
+            << Utils::FileName::fromString(QLatin1String("win32-msvc2010"));
+        break;
     default:
         break;
     }
-- 
GitLab