diff options
author | Ivan Donchevskii <ivan.donchevskii@qt.io> | 2019-01-10 11:41:26 +0100 |
---|---|---|
committer | Ivan Donchevskii <ivan.donchevskii@qt.io> | 2019-01-14 06:44:52 +0000 |
commit | 951aee8f3a79b0ae66255c9bd1712970ca857299 (patch) | |
tree | 6d069ef7cf56bf6e89b258fbc57432bfd4d98e3f | |
parent | 6798b004706c762974bea3e9363aed8f42876a11 (diff) |
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 <nikolai.kosjar@qt.io>
-rw-r--r-- | src/plugins/cpptools/compileroptionsbuilder.cpp | 45 | ||||
-rw-r--r-- | src/plugins/cpptools/compileroptionsbuilder.h | 2 |
2 files changed, 28 insertions, 19 deletions
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); + } } } diff --git a/src/plugins/cpptools/compileroptionsbuilder.h b/src/plugins/cpptools/compileroptionsbuilder.h index 66202e72d6..7c78f13c1c 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.h +++ b/src/plugins/cpptools/compileroptionsbuilder.h @@ -114,6 +114,8 @@ private: void addWrappedQtHeadersIncludePath(QStringList &list); + QByteArray msvcVersion() const; + QStringList m_options; QString m_clangVersion; |