From 951aee8f3a79b0ae66255c9bd1712970ca857299 Mon Sep 17 00:00:00 2001 From: Ivan Donchevskii Date: Thu, 10 Jan 2019 11:41:26 +0100 Subject: Clang: Fix parsing boost headers The fix for MSVC2013 undefined clang macros to fix some internal Qt stuff failing in Qt 5.7. Now we know exactly which MSVC version is used and can ignore this fix for newer versions. Fixes: QTCREATORBUG-16439 Fixes: QTCREATORBUG-21685 Change-Id: Ie2844428c39d72d212198ee2dd6841420a464974 Reviewed-by: Nikolai Kosjar --- src/plugins/cpptools/compileroptionsbuilder.cpp | 45 ++++++++++++++----------- 1 file changed, 26 insertions(+), 19 deletions(-) (limited to 'src/plugins/cpptools/compileroptionsbuilder.cpp') diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index bc1b8639a1..b8475eb3ed 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -469,19 +469,21 @@ static QByteArray msCompatibilityVersionFromDefines(const ProjectExplorer::Macro return QByteArray(); } +QByteArray CompilerOptionsBuilder::msvcVersion() const +{ + const QByteArray version = msCompatibilityVersionFromDefines(m_projectPart.toolChainMacros); + return !version.isEmpty() ? version + : msCompatibilityVersionFromDefines(m_projectPart.projectMacros); +} + void CompilerOptionsBuilder::addMsvcCompatibilityVersion() { if (m_projectPart.toolchainType == ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID || m_projectPart.toolchainType == ProjectExplorer::Constants::CLANG_CL_TOOLCHAIN_TYPEID) { - const ProjectExplorer::Macros macros = m_projectPart.toolChainMacros - + m_projectPart.projectMacros; - const QByteArray msvcVersion = msCompatibilityVersionFromDefines(macros); - - if (!msvcVersion.isEmpty()) { - const QString option = QLatin1String("-fms-compatibility-version=") - + QLatin1String(msvcVersion); - m_options.append(option); - } + const QByteArray msvcVer = msvcVersion(); + + if (!msvcVer.isEmpty()) + add(QLatin1String("-fms-compatibility-version=") + msvcVer); } } @@ -707,16 +709,21 @@ void CompilerOptionsBuilder::addProjectConfigFileInclude() void CompilerOptionsBuilder::undefineClangVersionMacrosForMsvc() { if (m_projectPart.toolchainType == ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID) { - static QStringList macroNames { - "__clang__", - "__clang_major__", - "__clang_minor__", - "__clang_patchlevel__", - "__clang_version__" - }; - - foreach (const QString ¯oName, macroNames) - add(undefineOption() + macroName); + const QByteArray msvcVer = msvcVersion(); + if (msvcVer.toFloat() < 14.f) { + // Original fix was only for msvc 2013 (version 12.0) + // Undefying them for newer versions is not necessary and breaks boost. + static QStringList macroNames { + "__clang__", + "__clang_major__", + "__clang_minor__", + "__clang_patchlevel__", + "__clang_version__" + }; + + foreach (const QString ¯oName, macroNames) + add(undefineOption() + macroName); + } } } -- cgit v1.2.1