ProjectExplorer: Use FilePath for sysroots

... and reduce to the relevant part when passing to cmake.

Task-number: QTCREATORBUG-27229
Change-Id: I7cde2ff04530caf439d6707c2c6d15a8e734ae0b
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2022-06-30 09:08:47 +02:00
parent c294df1d3a
commit 3be472c8d2
15 changed files with 34 additions and 32 deletions

View File

@@ -347,10 +347,10 @@ ToolChain::BuiltInHeaderPathsRunner IarToolChain::createBuiltInHeaderPathsRunner
HeaderPathsCache headerPaths = headerPathsCache();
return [env, compiler, headerPaths, languageId](const QStringList &flags,
const QString &fileName,
const FilePath &sysRoot,
const QString &) {
Q_UNUSED(flags)
Q_UNUSED(fileName)
Q_UNUSED(sysRoot)
const HeaderPaths paths = dumpHeaderPaths(compiler, languageId, env);
headerPaths->insert({}, paths);

View File

@@ -473,9 +473,9 @@ ToolChain::BuiltInHeaderPathsRunner KeilToolChain::createBuiltInHeaderPathsRunne
const HeaderPathsCache headerPaths = headerPathsCache();
return [compiler,
headerPaths](const QStringList &flags, const QString &fileName, const QString &) {
headerPaths](const QStringList &flags, const FilePath &sysRoot, const QString &) {
Q_UNUSED(flags)
Q_UNUSED(fileName)
Q_UNUSED(sysRoot)
const HeaderPaths paths = dumpHeaderPaths(compiler);
headerPaths->insert({}, paths);

View File

@@ -258,7 +258,7 @@ ToolChain::BuiltInHeaderPathsRunner SdccToolChain::createBuiltInHeaderPathsRunne
const FilePath compiler = compilerCommand();
const Abi abi = targetAbi();
return [env, compiler, abi](const QStringList &, const QString &, const QString &) {
return [env, compiler, abi](const QStringList &, const FilePath &, const QString &) {
return dumpHeaderPaths(compiler, env, abi);
};
}

View File

@@ -45,6 +45,7 @@
using namespace CppEditor;
using namespace ProjectExplorer;
using namespace Utils;
namespace CompilationDatabaseProjectManager {
namespace Internal {
@@ -124,7 +125,7 @@ public:
QStringList flags;
QString fileName;
QString workingDir;
QString sysRoot;
FilePath sysRoot;
};
}
@@ -183,7 +184,7 @@ void CompilationDatabaseTests::testFilterArguments()
{"RELATIVE_PLUGIN_PATH", "\"../lib/qtcreator/plugins\""},
{"QT_CREATOR", "1"}}));
QCOMPARE(testData.fileKind, CppEditor::ProjectFile::Kind::CXXSource);
QCOMPARE(testData.sysRoot, HostOsInfo::isWindowsHost() ? QString("C:\\sysroot\\embedded")
QCOMPARE(testData.sysRoot.toString(), HostOsInfo::isWindowsHost() ? QString("C:\\sysroot\\embedded")
: QString("/opt/sysroot/embedded"));
}

View File

@@ -38,6 +38,7 @@
#include <QSet>
using namespace ProjectExplorer;
using namespace Utils;
namespace CompilationDatabaseProjectManager {
namespace Internal {
@@ -102,7 +103,7 @@ void filteredFlags(const QString &fileName,
HeaderPaths &headerPaths,
Macros &macros,
CppEditor::ProjectFile::Kind &fileKind,
QString &sysRoot)
Utils::FilePath &sysRoot)
{
if (flags.empty())
return;
@@ -192,7 +193,7 @@ void filteredFlags(const QString &fileName,
if (flag.startsWith("--sysroot=")) {
if (sysRoot.isEmpty())
sysRoot = updatedPathFlag(flag.mid(10), workingDir);
sysRoot = FilePath::fromString(updatedPathFlag(flag.mid(10), workingDir));
continue;
}

View File

@@ -25,10 +25,8 @@
#pragma once
#include "compilationdatabaseconstants.h"
#include <cppeditor/cppprojectfile.h>
#include <utils/fileutils.h>
#include <utils/filepath.h>
#include <QHash>
#include <QStringList>
@@ -65,7 +63,7 @@ void filteredFlags(const QString &fileName,
QVector<ProjectExplorer::HeaderPath> &headerPaths,
QVector<ProjectExplorer::Macro> &macros,
CppEditor::ProjectFile::Kind &fileKind,
QString &sysRoot);
Utils::FilePath &sysRoot);
QStringList splitCommandLine(QString commandLine, QSet<QString> &flagsCache);

View File

@@ -25,6 +25,8 @@
#include "compilationdbparser.h"
#include "compilationdatabaseconstants.h"
#include <coreplugin/progressmanager/progressmanager.h>
#include <projectexplorer/task.h>
#include <projectexplorer/treescanner.h>

View File

@@ -1533,7 +1533,7 @@ void CppModelManager::setupFallbackProjectPart()
if (sysroot.isEmpty())
sysroot = Utils::FilePath::fromString(defaultTc->sysRoot());
Utils::Environment env = defaultKit->buildEnvironment();
tcInfo = ToolChainInfo(defaultTc, sysroot.toString(), env);
tcInfo = ToolChainInfo(defaultTc, sysroot, env);
const auto macroInspectionWrapper = [runner = tcInfo.macroInspectionRunner](
const QStringList &flags) {
ToolChain::MacroInspectionReport report = runner(flags);

View File

@@ -139,7 +139,8 @@ ToolChain::BuiltInHeaderPathsRunner CustomToolChain::createBuiltInHeaderPathsRun
const HeaderPaths builtInHeaderPaths = m_builtInHeaderPaths;
// This runner must be thread-safe!
return [builtInHeaderPaths](const QStringList &cxxFlags, const QString &, const QString &) {
return [builtInHeaderPaths](const QStringList &cxxFlags, const FilePath &sysRoot, const QString &) {
Q_UNUSED(sysRoot)
HeaderPaths flagHeaderPaths;
for (const QString &cxxFlag : cxxFlags) {
if (cxxFlag.startsWith(QLatin1String("-I")))

View File

@@ -596,15 +596,15 @@ QStringList GccToolChain::includedFiles(const QStringList &flags, const QString
}
QStringList GccToolChain::gccPrepareArguments(const QStringList &flags,
const QString &sysRoot,
const FilePath &sysRoot,
const QStringList &platformCodeGenFlags,
Utils::Id languageId,
Id languageId,
OptionsReinterpreter reinterpretOptions)
{
QStringList arguments;
const bool hasKitSysroot = !sysRoot.isEmpty();
if (hasKitSysroot)
arguments.append(QString::fromLatin1("--sysroot=%1").arg(sysRoot));
arguments.append(QString("--sysroot=%1").arg(sysRoot.nativePath()));
QStringList allFlags;
allFlags << platformCodeGenFlags << flags;
@@ -629,7 +629,7 @@ HeaderPaths GccToolChain::builtInHeaderPaths(const Utils::Environment &env,
Utils::Id languageId,
ExtraHeaderPathsFunction extraHeaderPathsFunction,
const QStringList &flags,
const QString &sysRoot,
const Utils::FilePath &sysRoot,
const QString &originalTargetTriple)
{
QStringList arguments = gccPrepareArguments(flags,
@@ -677,7 +677,7 @@ ToolChain::BuiltInHeaderPathsRunner GccToolChain::createBuiltInHeaderPathsRunner
headerCache = headerPathsCache(),
languageId = language(),
extraHeaderPathsFunction = m_extraHeaderPathsFunction](const QStringList &flags,
const QString &sysRoot,
const FilePath &sysRoot,
const QString &) {
return builtInHeaderPaths(fullEnv,
compilerCommand,
@@ -1712,7 +1712,7 @@ ToolChain::BuiltInHeaderPathsRunner ClangToolChain::createBuiltInHeaderPathsRunn
headerCache = headerPathsCache(),
languageId = language(),
extraHeaderPathsFunction = m_extraHeaderPathsFunction](const QStringList &flags,
const QString &sysRoot,
const FilePath &sysRoot,
const QString &target) {
return builtInHeaderPaths(fullEnv,
compilerCommand,

View File

@@ -151,7 +151,7 @@ protected:
Utils::Id languageId,
ExtraHeaderPathsFunction extraHeaderPathsFunction,
const QStringList &flags,
const QString &sysRoot,
const Utils::FilePath &sysRoot,
const QString &originalTargetTriple);
static HeaderPaths gccHeaderPaths(const Utils::FilePath &gcc,
@@ -175,7 +175,7 @@ protected:
private:
void updateSupportedAbis() const;
static QStringList gccPrepareArguments(const QStringList &flags,
const QString &sysRoot,
const Utils::FilePath &sysRoot,
const QStringList &platformCodeGenFlags,
Utils::Id languageId,
OptionsReinterpreter reinterpretOptions);

View File

@@ -1142,7 +1142,7 @@ ToolChain::BuiltInHeaderPathsRunner MsvcToolChain::createBuiltInHeaderPathsRunne
Utils::Environment fullEnv = env;
addToEnvironment(fullEnv);
return [this, fullEnv](const QStringList &, const QString &, const QString &) {
return [this, fullEnv](const QStringList &, const FilePath &, const QString &) {
QMutexLocker locker(&m_headerPathsMutex);
const auto envList = fullEnv.toStringList();
const auto it = m_headerPathsPerEnv.constFind(envList);

View File

@@ -29,7 +29,6 @@
#include "buildconfiguration.h"
#include "kitinformation.h"
#include "project.h"
#include "projectexplorerconstants.h"
#include "target.h"
#include <utils/algorithm.h>
@@ -165,7 +164,7 @@ KitInfo::KitInfo(Kit *kit)
}
// Sysroot
sysRootPath = SysRootKitAspect::sysRoot(kit).toString();
sysRootPath = SysRootKitAspect::sysRoot(kit);
}
bool KitInfo::isValid() const
@@ -174,7 +173,7 @@ bool KitInfo::isValid() const
}
ToolChainInfo::ToolChainInfo(const ToolChain *toolChain,
const QString &sysRootPath,
const Utils::FilePath &sysRootPath,
const Utils::Environment &env)
{
if (toolChain) {

View File

@@ -138,7 +138,7 @@ public:
Utils::QtMajorVersion projectPartQtVersion = Utils::QtMajorVersion::None;
QString sysRootPath;
Utils::FilePath sysRootPath;
};
class PROJECTEXPLORER_EXPORT ToolChainInfo
@@ -146,7 +146,7 @@ class PROJECTEXPLORER_EXPORT ToolChainInfo
public:
ToolChainInfo() = default;
ToolChainInfo(const ProjectExplorer::ToolChain *toolChain,
const QString &sysRootPath,
const Utils::FilePath &sysRootPath,
const Utils::Environment &env);
bool isValid() const { return type.isValid(); }
@@ -161,7 +161,7 @@ public:
Utils::FilePath installDir;
QStringList extraCodeModelFlags;
QString sysRootPath; // For headerPathsRunner.
Utils::FilePath sysRootPath; // For headerPathsRunner.
ProjectExplorer::ToolChain::BuiltInHeaderPathsRunner headerPathsRunner;
ProjectExplorer::ToolChain::MacroInspectionRunner macroInspectionRunner;
};

View File

@@ -147,7 +147,7 @@ public:
// A BuiltInHeaderPathsRunner is created in the ui thread and runs in another thread.
using BuiltInHeaderPathsRunner = std::function<HeaderPaths(
const QStringList &cxxflags, const QString &sysRoot, const QString &originalTargetTriple)>;
const QStringList &cxxflags, const Utils::FilePath &sysRoot, const QString &originalTargetTriple)>;
virtual BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(const Utils::Environment &env) const = 0;
virtual void addToEnvironment(Utils::Environment &env) const = 0;
virtual Utils::FilePath makeCommand(const Utils::Environment &env) const = 0;