Commit b8120f29 authored by Tobias Hunger's avatar Tobias Hunger
Browse files

Fix support for MSVC2012.



Change-Id: I0ecf6f2d93f1911c8a243f8159e64f7d014bd036
Reviewed-by: default avatarFriedemann Kleint <Friedemann.Kleint@nokia.com>
parent 3f74332f
...@@ -413,7 +413,8 @@ void CMakeRunPage::initializePage() ...@@ -413,7 +413,8 @@ void CMakeRunPage::initializePage()
if (targetAbi.os() == ProjectExplorer::Abi::WindowsOS) { if (targetAbi.os() == ProjectExplorer::Abi::WindowsOS) {
if (targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMsvc2005Flavor if (targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMsvc2005Flavor
|| targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMsvc2008Flavor || targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMsvc2008Flavor
|| targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMsvc2010Flavor) { || targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMsvc2010Flavor
|| targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMsvc2012Flavor) {
if (hasCodeBlocksGenerator && (cachedGenerator.isEmpty() || cachedGenerator == "NMake Makefiles")) if (hasCodeBlocksGenerator && (cachedGenerator.isEmpty() || cachedGenerator == "NMake Makefiles"))
m_generatorComboBox->addItem(tr("NMake Generator (%1)").arg(p->displayName()), profileVariant); m_generatorComboBox->addItem(tr("NMake Generator (%1)").arg(p->displayName()), profileVariant);
} else if (targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMSysFlavor) { } else if (targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMSysFlavor) {
......
...@@ -363,7 +363,8 @@ static inline bool isMsvcFlavor(Abi::OSFlavor osf) ...@@ -363,7 +363,8 @@ static inline bool isMsvcFlavor(Abi::OSFlavor osf)
{ {
return osf == Abi::WindowsMsvc2005Flavor return osf == Abi::WindowsMsvc2005Flavor
|| osf == Abi::WindowsMsvc2008Flavor || osf == Abi::WindowsMsvc2008Flavor
|| osf == Abi::WindowsMsvc2010Flavor; || osf == Abi::WindowsMsvc2010Flavor
|| osf == Abi::WindowsMsvc2012Flavor;
} }
bool checkCdbConfiguration(const DebuggerStartParameters &sp, ConfigurationCheck *check) bool checkCdbConfiguration(const DebuggerStartParameters &sp, ConfigurationCheck *check)
......
...@@ -1604,11 +1604,15 @@ struct RemoteCdbMatcher : ProfileMatcher ...@@ -1604,11 +1604,15 @@ struct RemoteCdbMatcher : ProfileMatcher
ToolChain *tc = ToolChainProfileInformation::toolChain(profile); ToolChain *tc = ToolChainProfileInformation::toolChain(profile);
QTC_ASSERT(tc, return false); QTC_ASSERT(tc, return false);
Abi abi = tc->targetAbi(); Abi abi = tc->targetAbi();
return abi.architecture() == m_hostAbi.architecture() if (abi.architecture() != m_hostAbi.architecture()
&& abi.os() == Abi::WindowsOS || abi.os() != Abi::WindowsOS
&& abi.osFlavor() == Abi::WindowsMsvc2010Flavor || abi.binaryFormat() != Abi::PEFormat
&& abi.binaryFormat() == Abi::PEFormat || abi.wordWidth() != m_hostAbi.wordWidth())
&& abi.wordWidth() == m_hostAbi.wordWidth(); return false;
if (abi.osFlavor() == Abi::WindowsMSysFlavor
|| abi.osFlavor() == Abi::WindowsCEFlavor)
return false;
return true;
} }
Abi m_hostAbi; Abi m_hostAbi;
......
...@@ -151,8 +151,11 @@ static QList<Abi> parseCoffHeader(const QByteArray &data) ...@@ -151,8 +151,11 @@ static QList<Abi> parseCoffHeader(const QByteArray &data)
case 10: case 10:
flavor = Abi::WindowsMsvc2010Flavor; flavor = Abi::WindowsMsvc2010Flavor;
break; break;
default: case 11:
// Keep unknown flavor flavor = Abi::WindowsMsvc2012Flavor;
break;
default: // Keep unknown flavor
qWarning("%s: Unknown MSVC flavour encountered.", Q_FUNC_INFO);
break; break;
} }
} }
...@@ -403,6 +406,8 @@ Abi::Abi(const QString &abiString) : ...@@ -403,6 +406,8 @@ Abi::Abi(const QString &abiString) :
m_osFlavor = WindowsMsvc2008Flavor; m_osFlavor = WindowsMsvc2008Flavor;
else if (abiParts.at(2) == QLatin1String("msvc2010") && m_os == WindowsOS) else if (abiParts.at(2) == QLatin1String("msvc2010") && m_os == WindowsOS)
m_osFlavor = WindowsMsvc2010Flavor; m_osFlavor = WindowsMsvc2010Flavor;
else if (abiParts.at(2) == QLatin1String("msvc2012") && m_os == WindowsOS)
m_osFlavor = WindowsMsvc2012Flavor;
else if (abiParts.at(2) == QLatin1String("msys") && m_os == WindowsOS) else if (abiParts.at(2) == QLatin1String("msys") && m_os == WindowsOS)
m_osFlavor = WindowsMSysFlavor; m_osFlavor = WindowsMSysFlavor;
else if (abiParts.at(2) == QLatin1String("ce") && m_os == WindowsOS) else if (abiParts.at(2) == QLatin1String("ce") && m_os == WindowsOS)
...@@ -585,6 +590,8 @@ QString Abi::toString(const OSFlavor &of) ...@@ -585,6 +590,8 @@ QString Abi::toString(const OSFlavor &of)
return QLatin1String("msvc2008"); return QLatin1String("msvc2008");
case ProjectExplorer::Abi::WindowsMsvc2010Flavor: case ProjectExplorer::Abi::WindowsMsvc2010Flavor:
return QLatin1String("msvc2010"); return QLatin1String("msvc2010");
case ProjectExplorer::Abi::WindowsMsvc2012Flavor:
return QLatin1String("msvc2012");
case ProjectExplorer::Abi::WindowsMSysFlavor: case ProjectExplorer::Abi::WindowsMSysFlavor:
return QLatin1String("msys"); return QLatin1String("msys");
case ProjectExplorer::Abi::WindowsCEFlavor: case ProjectExplorer::Abi::WindowsCEFlavor:
...@@ -626,7 +633,8 @@ QList<Abi::OSFlavor> Abi::flavorsForOs(const Abi::OS &o) ...@@ -626,7 +633,8 @@ QList<Abi::OSFlavor> Abi::flavorsForOs(const Abi::OS &o)
case BsdOS: case BsdOS:
return result << FreeBsdFlavor << OpenBsdFlavor << NetBsdFlavor; return result << FreeBsdFlavor << OpenBsdFlavor << NetBsdFlavor;
case LinuxOS: case LinuxOS:
return result << GenericLinuxFlavor << HarmattanLinuxFlavor << MaemoLinuxFlavor << MeegoLinuxFlavor; return result << GenericLinuxFlavor << HarmattanLinuxFlavor << MaemoLinuxFlavor << MeegoLinuxFlavor
<< AndroidLinuxFlavor;
case MacOS: case MacOS:
return result << GenericMacFlavor; return result << GenericMacFlavor;
case SymbianOS: case SymbianOS:
...@@ -635,7 +643,7 @@ QList<Abi::OSFlavor> Abi::flavorsForOs(const Abi::OS &o) ...@@ -635,7 +643,7 @@ QList<Abi::OSFlavor> Abi::flavorsForOs(const Abi::OS &o)
return result << GenericUnixFlavor << SolarisUnixFlavor; return result << GenericUnixFlavor << SolarisUnixFlavor;
case WindowsOS: case WindowsOS:
return result << WindowsMsvc2005Flavor << WindowsMsvc2008Flavor << WindowsMsvc2010Flavor return result << WindowsMsvc2005Flavor << WindowsMsvc2008Flavor << WindowsMsvc2010Flavor
<< WindowsMSysFlavor << WindowsCEFlavor; << WindowsMsvc2012Flavor << WindowsMSysFlavor << WindowsCEFlavor;
case UnknownOS: case UnknownOS:
return result << UnknownFlavor; return result << UnknownFlavor;
default: default:
...@@ -653,7 +661,9 @@ Abi Abi::hostAbi() ...@@ -653,7 +661,9 @@ Abi Abi::hostAbi()
#if defined (Q_OS_WIN) #if defined (Q_OS_WIN)
os = WindowsOS; os = WindowsOS;
#if _MSC_VER == 1600 #if _MSC_VER == 1700
subos = WindowsMsvc2012Flavor;
#elif _MSC_VER == 1600
subos = WindowsMsvc2010Flavor; subos = WindowsMsvc2010Flavor;
#elif _MSC_VER == 1500 #elif _MSC_VER == 1500
subos = WindowsMsvc2008Flavor; subos = WindowsMsvc2008Flavor;
...@@ -673,7 +683,11 @@ Abi Abi::hostAbi() ...@@ -673,7 +683,11 @@ Abi Abi::hostAbi()
format = MachOFormat; format = MachOFormat;
#endif #endif
return Abi(arch, os, subos, format, QSysInfo::WordSize); const Abi result(arch, os, subos, format, QSysInfo::WordSize);
if (!result.isValid())
qWarning("Unable to completely determine the host ABI (%s).",
qPrintable(result.toString()));
return result;
} }
QList<Abi> Abi::abisOfBinary(const Utils::FileName &path) QList<Abi> Abi::abisOfBinary(const Utils::FileName &path)
...@@ -806,6 +820,9 @@ void ProjectExplorer::ProjectExplorerPlugin::testAbiOfBinary_data() ...@@ -806,6 +820,9 @@ void ProjectExplorer::ProjectExplorerPlugin::testAbiOfBinary_data()
QTest::newRow("dynamic QtCore: symbian") QTest::newRow("dynamic QtCore: symbian")
<< QString::fromLatin1("%1/dynamic/symbian.dll").arg(prefix) << QString::fromLatin1("%1/dynamic/symbian.dll").arg(prefix)
<< (QStringList() << QString::fromLatin1("arm-symbian-device-elf-32bit")); << (QStringList() << QString::fromLatin1("arm-symbian-device-elf-32bit"));
QTest::newRow("dynamic QtCore: win msvc2012 64bit")
<< QString::fromLatin1("/tmp/win-msvc2012-64bit.dll").arg(prefix)
<< (QStringList() << QString::fromLatin1("x86-windows-msvc2012-pe-64bit"));
QTest::newRow("dynamic QtCore: win msvc2010 64bit") QTest::newRow("dynamic QtCore: win msvc2010 64bit")
<< QString::fromLatin1("%1/dynamic/win-msvc2010-64bit.dll").arg(prefix) << QString::fromLatin1("%1/dynamic/win-msvc2010-64bit.dll").arg(prefix)
<< (QStringList() << QString::fromLatin1("x86-windows-msvc2010-pe-64bit")); << (QStringList() << QString::fromLatin1("x86-windows-msvc2010-pe-64bit"));
......
...@@ -94,6 +94,7 @@ public: ...@@ -94,6 +94,7 @@ public:
WindowsMsvc2005Flavor, WindowsMsvc2005Flavor,
WindowsMsvc2008Flavor, WindowsMsvc2008Flavor,
WindowsMsvc2010Flavor, WindowsMsvc2010Flavor,
WindowsMsvc2012Flavor,
WindowsMSysFlavor, WindowsMSysFlavor,
WindowsCEFlavor, WindowsCEFlavor,
......
...@@ -109,14 +109,19 @@ static Abi findAbiOfMsvc(MsvcToolChain::Type type, MsvcToolChain::Platform platf ...@@ -109,14 +109,19 @@ static Abi findAbiOfMsvc(MsvcToolChain::Type type, MsvcToolChain::Platform platf
else else
msvcVersionString = QLatin1String("8.0"); msvcVersionString = QLatin1String("8.0");
} }
if (msvcVersionString.startsWith(QLatin1String("10."))) if (msvcVersionString.startsWith(QLatin1String("11.")))
flavor = Abi::WindowsMsvc2012Flavor;
else if (msvcVersionString.startsWith(QLatin1String("10.")))
flavor = Abi::WindowsMsvc2010Flavor; flavor = Abi::WindowsMsvc2010Flavor;
else if (msvcVersionString.startsWith(QLatin1String("9."))) else if (msvcVersionString.startsWith(QLatin1String("9.")))
flavor = Abi::WindowsMsvc2008Flavor; flavor = Abi::WindowsMsvc2008Flavor;
else else
flavor = Abi::WindowsMsvc2005Flavor; flavor = Abi::WindowsMsvc2005Flavor;
const Abi result = Abi(arch, Abi::WindowsOS, flavor, Abi::PEFormat, wordWidth);
return Abi(arch, Abi::WindowsOS, flavor, Abi::PEFormat, wordWidth); if (!result.isValid())
qWarning("Unable to completely determine the ABI of MSVC version %s (%s).",
qPrintable(version), qPrintable(result.toString()));
return result;
} }
static QString generateDisplayName(const QString &name, static QString generateDisplayName(const QString &name,
...@@ -341,12 +346,21 @@ QString MsvcToolChain::typeDisplayName() const ...@@ -341,12 +346,21 @@ QString MsvcToolChain::typeDisplayName() const
QList<Utils::FileName> MsvcToolChain::suggestedMkspecList() const QList<Utils::FileName> MsvcToolChain::suggestedMkspecList() const
{ {
if (m_abi.osFlavor() == Abi::WindowsMsvc2005Flavor) switch (m_abi.osFlavor()) {
case ProjectExplorer::Abi::WindowsMsvc2005Flavor:
return QList<Utils::FileName>() << Utils::FileName::fromString(QLatin1String("win32-msvc2005")); return QList<Utils::FileName>() << Utils::FileName::fromString(QLatin1String("win32-msvc2005"));
if (m_abi.osFlavor() == Abi::WindowsMsvc2008Flavor) case ProjectExplorer::Abi::WindowsMsvc2008Flavor:
return QList<Utils::FileName>() << Utils::FileName::fromString(QLatin1String("win32-msvc2008")); return QList<Utils::FileName>() << Utils::FileName::fromString(QLatin1String("win32-msvc2008"));
if (m_abi.osFlavor() == Abi::WindowsMsvc2010Flavor) case ProjectExplorer::Abi::WindowsMsvc2010Flavor:
return QList<Utils::FileName>() << Utils::FileName::fromString(QLatin1String("win32-msvc2010")); return QList<Utils::FileName>() << Utils::FileName::fromString(QLatin1String("win32-msvc2010"));
case ProjectExplorer::Abi::WindowsMsvc2012Flavor:
QList<Utils::FileName>()
<< Utils::FileName::fromString(QLatin1String("win32-msvc2012"))
<< Utils::FileName::fromString(QLatin1String("win32-msvc2010"));
break;
default:
break;
}
return QList<Utils::FileName>(); return QList<Utils::FileName>();
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment