aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Donchevskii <ivan.donchevskii@qt.io>2019-01-10 11:41:26 +0100
committerIvan Donchevskii <ivan.donchevskii@qt.io>2019-01-14 06:44:52 +0000
commit951aee8f3a79b0ae66255c9bd1712970ca857299 (patch)
tree6d069ef7cf56bf6e89b258fbc57432bfd4d98e3f
parent6798b004706c762974bea3e9363aed8f42876a11 (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.cpp45
-rw-r--r--src/plugins/cpptools/compileroptionsbuilder.h2
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 &macroName, 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 &macroName, 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;