aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/compilationdatabaseprojectmanager
diff options
context:
space:
mode:
authorIvan Donchevskii <ivan.donchevskii@qt.io>2019-04-25 16:06:39 +0200
committerIvan Donchevskii <yv.ivan@gmail.com>2019-04-30 18:00:17 +0000
commitcc9d246b028c518d1fc01fc8318f0945949040d3 (patch)
treee80a736e079808d48098c773e51befc505855b55 /src/plugins/compilationdatabaseprojectmanager
parenta5148b53638bdc9abe2006c7748936524f2d902c (diff)
CompilationDatabase: Asjust the sysroot and target handling
If the sysroot option is found - set it as a kit sysroot (only in CompilationDatabase project where we have a cloned kit which does not affect the other existing kits). In other cases use the backup for the sysroot from the toolchain (can exist for clang toolchains based on mingw). Provide target when searching builtin include paths for clang. Fixes: QTCREATORBUG-22339 Change-Id: Ibe07c2e490ba4f7e0d259e6df698d641dbfd0298 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins/compilationdatabaseprojectmanager')
-rw-r--r--src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp46
-rw-r--r--src/plugins/compilationdatabaseprojectmanager/compilationdatabaseutils.cpp9
-rw-r--r--src/plugins/compilationdatabaseprojectmanager/compilationdatabaseutils.h3
3 files changed, 36 insertions, 22 deletions
diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp
index 32a7151397e..a4750070504 100644
--- a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp
+++ b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp
@@ -92,6 +92,11 @@ bool isGccCompiler(const QString &compilerName)
|| (compilerName.contains("g++") && !compilerName.contains("clang"));
}
+bool isClCompatibleCompiler(const QString &compilerName)
+{
+ return compilerName.endsWith("cl");
+}
+
Core::Id getCompilerId(QString compilerName)
{
if (Utils::HostOsInfo::isWindowsHost()) {
@@ -99,9 +104,9 @@ Core::Id getCompilerId(QString compilerName)
compilerName.chop(4);
if (isGccCompiler(compilerName))
return ProjectExplorer::Constants::MINGW_TOOLCHAIN_TYPEID;
-
- // Default is clang-cl
- return ProjectExplorer::Constants::CLANG_CL_TOOLCHAIN_TYPEID;
+ if (isClCompatibleCompiler(compilerName))
+ return ProjectExplorer::Constants::CLANG_CL_TOOLCHAIN_TYPEID;
+ return ProjectExplorer::Constants::CLANG_TOOLCHAIN_TYPEID;
}
if (isGccCompiler(compilerName))
return ProjectExplorer::Constants::GCC_TOOLCHAIN_TYPEID;
@@ -196,8 +201,7 @@ void addDriverModeFlagIfNeeded(const ToolChain *toolchain,
CppTools::RawProjectPart makeRawProjectPart(const Utils::FileName &projectFile,
Kit *kit,
- ToolChain *&cToolchain,
- ToolChain *&cxxToolchain,
+ CppTools::KitInfo &kitInfo,
const QString &workingDir,
const Utils::FileName &fileName,
QStringList flags)
@@ -212,7 +216,8 @@ CppTools::RawProjectPart makeRawProjectPart(const Utils::FileName &projectFile,
flags,
headerPaths,
macros,
- fileKind);
+ fileKind,
+ kitInfo.sysRootPath);
CppTools::RawProjectPart rpp;
rpp.setProjectFileLocation(projectFile.toString());
@@ -224,21 +229,23 @@ CppTools::RawProjectPart makeRawProjectPart(const Utils::FileName &projectFile,
if (fileKind == CppTools::ProjectFile::Kind::CHeader
|| fileKind == CppTools::ProjectFile::Kind::CSource) {
- if (!cToolchain) {
- cToolchain = toolchainFromFlags(kit, originalFlags,
- ProjectExplorer::Constants::C_LANGUAGE_ID);
- ToolChainKitAspect::setToolChain(kit, cToolchain);
+ if (!kitInfo.cToolChain) {
+ kitInfo.cToolChain = toolchainFromFlags(kit,
+ originalFlags,
+ ProjectExplorer::Constants::C_LANGUAGE_ID);
+ ToolChainKitAspect::setToolChain(kit, kitInfo.cToolChain);
}
- addDriverModeFlagIfNeeded(cToolchain, flags, originalFlags);
- rpp.setFlagsForC({cToolchain, flags});
+ addDriverModeFlagIfNeeded(kitInfo.cToolChain, flags, originalFlags);
+ rpp.setFlagsForC({kitInfo.cToolChain, flags});
} else {
- if (!cxxToolchain) {
- cxxToolchain = toolchainFromFlags(kit, originalFlags,
- ProjectExplorer::Constants::CXX_LANGUAGE_ID);
- ToolChainKitAspect::setToolChain(kit, cxxToolchain);
+ if (!kitInfo.cxxToolChain) {
+ kitInfo.cxxToolChain = toolchainFromFlags(kit,
+ originalFlags,
+ ProjectExplorer::Constants::CXX_LANGUAGE_ID);
+ ToolChainKitAspect::setToolChain(kit, kitInfo.cxxToolChain);
}
- addDriverModeFlagIfNeeded(cxxToolchain, flags, originalFlags);
- rpp.setFlagsForCxx({cxxToolchain, flags});
+ addDriverModeFlagIfNeeded(kitInfo.cxxToolChain, flags, originalFlags);
+ rpp.setFlagsForCxx({kitInfo.cxxToolChain, flags});
}
return rpp;
@@ -433,8 +440,7 @@ void CompilationDatabaseProject::buildTreeAndProjectParts(const Utils::FileName
CppTools::RawProjectPart rpp = makeRawProjectPart(projectFile,
m_kit.get(),
- kitInfo.cToolChain,
- kitInfo.cxxToolChain,
+ kitInfo,
entry.workingDir,
entry.fileName,
entry.flags);
diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseutils.cpp b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseutils.cpp
index 31dbcadf944..ff931cc3879 100644
--- a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseutils.cpp
+++ b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseutils.cpp
@@ -98,7 +98,8 @@ void filteredFlags(const QString &fileName,
QStringList &flags,
HeaderPaths &headerPaths,
Macros &macros,
- CppTools::ProjectFile::Kind &fileKind)
+ CppTools::ProjectFile::Kind &fileKind,
+ QString &sysRoot)
{
if (flags.empty())
return;
@@ -182,6 +183,12 @@ void filteredFlags(const QString &fileName,
continue;
}
+ if (flag.startsWith("--sysroot=")) {
+ if (sysRoot.isEmpty())
+ sysRoot = flag.mid(10);
+ continue;
+ }
+
if ((flag.startsWith("-std=") || flag.startsWith("/std:"))
&& fileKind == CppTools::ProjectFile::Unclassified) {
const bool cpp = (flag.contains("c++") || flag.contains("gnu++"));
diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseutils.h b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseutils.h
index 52b251723a9..be3c7939201 100644
--- a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseutils.h
+++ b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseutils.h
@@ -45,7 +45,8 @@ void filteredFlags(const QString &fileName,
QStringList &flags,
QVector<ProjectExplorer::HeaderPath> &headerPaths,
QVector<ProjectExplorer::Macro> &macros,
- CppTools::ProjectFile::Kind &fileKind);
+ CppTools::ProjectFile::Kind &fileKind,
+ QString &sysRoot);
QStringList splitCommandLine(QString commandLine, QSet<QString> &flagsCache);