forked from qt-creator/qt-creator
Make the project managers tell the code model about include paths
... from the environment. Fixes: QTCREATORBUG-17985 Change-Id: I9b54e550121cfcc0684a6e173337d59d235c6107 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
@@ -275,9 +275,14 @@ FilePath Environment::searchInPath(const QString &executable,
|
|||||||
|
|
||||||
FilePathList Environment::path() const
|
FilePathList Environment::path() const
|
||||||
{
|
{
|
||||||
const QStringList pathComponents = value("PATH")
|
return pathListValue("PATH");
|
||||||
|
}
|
||||||
|
|
||||||
|
FilePathList Environment::pathListValue(const QString &varName) const
|
||||||
|
{
|
||||||
|
const QStringList pathComponents = value(varName)
|
||||||
.split(OsSpecificAspects::pathListSeparator(m_osType), QString::SkipEmptyParts);
|
.split(OsSpecificAspects::pathListSeparator(m_osType), QString::SkipEmptyParts);
|
||||||
return Utils::transform(pathComponents, &FilePath::fromUserInput);
|
return transform(pathComponents, &FilePath::fromUserInput);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Environment::modifySystemEnvironment(const EnvironmentItems &list)
|
void Environment::modifySystemEnvironment(const EnvironmentItems &list)
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ public:
|
|||||||
const PathFilter &func = PathFilter()) const;
|
const PathFilter &func = PathFilter()) const;
|
||||||
|
|
||||||
FilePathList path() const;
|
FilePathList path() const;
|
||||||
|
FilePathList pathListValue(const QString &varName) const;
|
||||||
QStringList appendExeExtensions(const QString &executable) const;
|
QStringList appendExeExtensions(const QString &executable) const;
|
||||||
|
|
||||||
bool isSameExecutable(const QString &exe1, const QString &exe2) const;
|
bool isSameExecutable(const QString &exe1, const QString &exe2) const;
|
||||||
|
|||||||
@@ -275,5 +275,5 @@ void AutotoolsProject::updateCppCodeModel()
|
|||||||
rpp.setMacros(m_makefileParserThread->macros());
|
rpp.setMacros(m_makefileParserThread->macros());
|
||||||
rpp.setFiles(m_files);
|
rpp.setFiles(m_files);
|
||||||
|
|
||||||
m_cppCodeModelUpdater->update({this, kitInfo, {rpp}});
|
m_cppCodeModelUpdater->update({this, kitInfo, activeBuildEnvironment(), {rpp}});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -288,7 +288,8 @@ WarningFlags IarToolChain::warningFlags(const QStringList &cxxflags) const
|
|||||||
return WarningFlags::Default;
|
return WarningFlags::Default;
|
||||||
}
|
}
|
||||||
|
|
||||||
ToolChain::BuiltInHeaderPathsRunner IarToolChain::createBuiltInHeaderPathsRunner() const
|
ToolChain::BuiltInHeaderPathsRunner IarToolChain::createBuiltInHeaderPathsRunner(
|
||||||
|
const Environment &) const
|
||||||
{
|
{
|
||||||
Environment env = Environment::systemEnvironment();
|
Environment env = Environment::systemEnvironment();
|
||||||
addToEnvironment(env);
|
addToEnvironment(env);
|
||||||
@@ -312,9 +313,10 @@ ToolChain::BuiltInHeaderPathsRunner IarToolChain::createBuiltInHeaderPathsRunner
|
|||||||
}
|
}
|
||||||
|
|
||||||
HeaderPaths IarToolChain::builtInHeaderPaths(const QStringList &cxxFlags,
|
HeaderPaths IarToolChain::builtInHeaderPaths(const QStringList &cxxFlags,
|
||||||
const FilePath &fileName) const
|
const FilePath &fileName,
|
||||||
|
const Environment &env) const
|
||||||
{
|
{
|
||||||
return createBuiltInHeaderPathsRunner()(cxxFlags, fileName.toString(), "");
|
return createBuiltInHeaderPathsRunner(env)(cxxFlags, fileName.toString(), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
void IarToolChain::addToEnvironment(Environment &env) const
|
void IarToolChain::addToEnvironment(Environment &env) const
|
||||||
|
|||||||
@@ -63,9 +63,10 @@ public:
|
|||||||
Utils::LanguageExtensions languageExtensions(const QStringList &cxxflags) const final;
|
Utils::LanguageExtensions languageExtensions(const QStringList &cxxflags) const final;
|
||||||
ProjectExplorer::WarningFlags warningFlags(const QStringList &cxxflags) const final;
|
ProjectExplorer::WarningFlags warningFlags(const QStringList &cxxflags) const final;
|
||||||
|
|
||||||
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner() const final;
|
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(const Utils::Environment &) const final;
|
||||||
ProjectExplorer::HeaderPaths builtInHeaderPaths(const QStringList &cxxFlags,
|
ProjectExplorer::HeaderPaths builtInHeaderPaths(const QStringList &cxxFlags,
|
||||||
const Utils::FilePath &) const final;
|
const Utils::FilePath &,
|
||||||
|
const Utils::Environment &env) const final;
|
||||||
void addToEnvironment(Utils::Environment &env) const final;
|
void addToEnvironment(Utils::Environment &env) const final;
|
||||||
ProjectExplorer::IOutputParser *outputParser() const final;
|
ProjectExplorer::IOutputParser *outputParser() const final;
|
||||||
|
|
||||||
|
|||||||
@@ -298,7 +298,8 @@ WarningFlags KeilToolchain::warningFlags(const QStringList &cxxflags) const
|
|||||||
return WarningFlags::Default;
|
return WarningFlags::Default;
|
||||||
}
|
}
|
||||||
|
|
||||||
ToolChain::BuiltInHeaderPathsRunner KeilToolchain::createBuiltInHeaderPathsRunner() const
|
ToolChain::BuiltInHeaderPathsRunner KeilToolchain::createBuiltInHeaderPathsRunner(
|
||||||
|
const Environment &) const
|
||||||
{
|
{
|
||||||
const Utils::FilePath compilerCommand = m_compilerCommand;
|
const Utils::FilePath compilerCommand = m_compilerCommand;
|
||||||
|
|
||||||
@@ -317,9 +318,10 @@ ToolChain::BuiltInHeaderPathsRunner KeilToolchain::createBuiltInHeaderPathsRunne
|
|||||||
}
|
}
|
||||||
|
|
||||||
HeaderPaths KeilToolchain::builtInHeaderPaths(const QStringList &cxxFlags,
|
HeaderPaths KeilToolchain::builtInHeaderPaths(const QStringList &cxxFlags,
|
||||||
const FilePath &fileName) const
|
const FilePath &fileName,
|
||||||
|
const Environment &env) const
|
||||||
{
|
{
|
||||||
return createBuiltInHeaderPathsRunner()(cxxFlags, fileName.toString(), "");
|
return createBuiltInHeaderPathsRunner(env)(cxxFlags, fileName.toString(), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
void KeilToolchain::addToEnvironment(Environment &env) const
|
void KeilToolchain::addToEnvironment(Environment &env) const
|
||||||
|
|||||||
@@ -63,9 +63,11 @@ public:
|
|||||||
Utils::LanguageExtensions languageExtensions(const QStringList &cxxflags) const final;
|
Utils::LanguageExtensions languageExtensions(const QStringList &cxxflags) const final;
|
||||||
ProjectExplorer::WarningFlags warningFlags(const QStringList &cxxflags) const final;
|
ProjectExplorer::WarningFlags warningFlags(const QStringList &cxxflags) const final;
|
||||||
|
|
||||||
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner() const final;
|
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(
|
||||||
|
const Utils::Environment &) const final;
|
||||||
ProjectExplorer::HeaderPaths builtInHeaderPaths(const QStringList &cxxFlags,
|
ProjectExplorer::HeaderPaths builtInHeaderPaths(const QStringList &cxxFlags,
|
||||||
const Utils::FilePath &) const final;
|
const Utils::FilePath &,
|
||||||
|
const Utils::Environment &env) const final;
|
||||||
void addToEnvironment(Utils::Environment &env) const final;
|
void addToEnvironment(Utils::Environment &env) const final;
|
||||||
ProjectExplorer::IOutputParser *outputParser() const final;
|
ProjectExplorer::IOutputParser *outputParser() const final;
|
||||||
|
|
||||||
|
|||||||
@@ -274,34 +274,25 @@ WarningFlags SdccToolChain::warningFlags(const QStringList &cxxflags) const
|
|||||||
return WarningFlags::Default;
|
return WarningFlags::Default;
|
||||||
}
|
}
|
||||||
|
|
||||||
ToolChain::BuiltInHeaderPathsRunner SdccToolChain::createBuiltInHeaderPathsRunner() const
|
ToolChain::BuiltInHeaderPathsRunner SdccToolChain::createBuiltInHeaderPathsRunner(
|
||||||
|
const Environment &) const
|
||||||
{
|
{
|
||||||
Environment env = Environment::systemEnvironment();
|
Environment env = Environment::systemEnvironment();
|
||||||
addToEnvironment(env);
|
addToEnvironment(env);
|
||||||
|
|
||||||
const Utils::FilePath compilerCommand = m_compilerCommand;
|
const Utils::FilePath compilerCommand = m_compilerCommand;
|
||||||
const Core::Id languageId = language();
|
|
||||||
const Abi abi = m_targetAbi;
|
const Abi abi = m_targetAbi;
|
||||||
|
|
||||||
HeaderPathsCache headerPaths = headerPathsCache();
|
return [env, compilerCommand, abi](const QStringList &, const QString &, const QString &) {
|
||||||
|
return dumpHeaderPaths(compilerCommand, env.toStringList(), abi);
|
||||||
return [env, compilerCommand, headerPaths, languageId, abi](const QStringList &flags,
|
|
||||||
const QString &fileName,
|
|
||||||
const QString &) {
|
|
||||||
Q_UNUSED(flags)
|
|
||||||
Q_UNUSED(fileName)
|
|
||||||
|
|
||||||
const HeaderPaths paths = dumpHeaderPaths(compilerCommand, env.toStringList(), abi);
|
|
||||||
headerPaths->insert({}, paths);
|
|
||||||
|
|
||||||
return paths;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
HeaderPaths SdccToolChain::builtInHeaderPaths(const QStringList &cxxFlags,
|
HeaderPaths SdccToolChain::builtInHeaderPaths(const QStringList &cxxFlags,
|
||||||
const FilePath &fileName) const
|
const FilePath &fileName,
|
||||||
|
const Environment &env) const
|
||||||
{
|
{
|
||||||
return createBuiltInHeaderPathsRunner()(cxxFlags, fileName.toString(), "");
|
return createBuiltInHeaderPathsRunner(env)(cxxFlags, fileName.toString(), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
void SdccToolChain::addToEnvironment(Environment &env) const
|
void SdccToolChain::addToEnvironment(Environment &env) const
|
||||||
|
|||||||
@@ -63,9 +63,11 @@ public:
|
|||||||
Utils::LanguageExtensions languageExtensions(const QStringList &cxxflags) const final;
|
Utils::LanguageExtensions languageExtensions(const QStringList &cxxflags) const final;
|
||||||
ProjectExplorer::WarningFlags warningFlags(const QStringList &cxxflags) const final;
|
ProjectExplorer::WarningFlags warningFlags(const QStringList &cxxflags) const final;
|
||||||
|
|
||||||
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner() const final;
|
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(
|
||||||
|
const Utils::Environment &) const final;
|
||||||
ProjectExplorer::HeaderPaths builtInHeaderPaths(const QStringList &cxxFlags,
|
ProjectExplorer::HeaderPaths builtInHeaderPaths(const QStringList &cxxFlags,
|
||||||
const Utils::FilePath &) const final;
|
const Utils::FilePath &,
|
||||||
|
const Utils::Environment &env) const final;
|
||||||
void addToEnvironment(Utils::Environment &env) const final;
|
void addToEnvironment(Utils::Environment &env) const final;
|
||||||
ProjectExplorer::IOutputParser *outputParser() const final;
|
ProjectExplorer::IOutputParser *outputParser() const final;
|
||||||
|
|
||||||
|
|||||||
@@ -405,7 +405,7 @@ void CMakeProject::updateProjectData(CMakeBuildConfiguration *bc)
|
|||||||
rpp.setFlagsForC({kitInfo.cToolChain, rpp.flagsForC.commandLineFlags});
|
rpp.setFlagsForC({kitInfo.cToolChain, rpp.flagsForC.commandLineFlags});
|
||||||
}
|
}
|
||||||
|
|
||||||
m_cppCodeModelUpdater->update({this, kitInfo, rpps});
|
m_cppCodeModelUpdater->update({this, kitInfo, activeBuildEnvironment(), rpps});
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
TraceTimer qmlCodemodelTimer(" qml codemodel");
|
TraceTimer qmlCodemodelTimer(" qml codemodel");
|
||||||
|
|||||||
@@ -311,8 +311,10 @@ static void processCMakeIncludes(const CMakeBuildTarget &cbt, const ToolChain *t
|
|||||||
if (!tc)
|
if (!tc)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
foreach (const HeaderPath &hp, tc->builtInHeaderPaths(flags, sysroot))
|
foreach (const HeaderPath &hp, tc->builtInHeaderPaths(flags, sysroot,
|
||||||
|
Environment::systemEnvironment())) {
|
||||||
tcIncludes.insert(FilePath::fromString(hp.path));
|
tcIncludes.insert(FilePath::fromString(hp.path));
|
||||||
|
}
|
||||||
foreach (const FilePath &i, cbt.includeFiles) {
|
foreach (const FilePath &i, cbt.includeFiles) {
|
||||||
if (!tcIncludes.contains(i))
|
if (!tcIncludes.contains(i))
|
||||||
includePaths.append(i.toString());
|
includePaths.append(i.toString());
|
||||||
|
|||||||
@@ -390,7 +390,7 @@ void CompilationDatabaseProject::buildTreeAndProjectParts()
|
|||||||
|
|
||||||
setRootProjectNode(std::move(root));
|
setRootProjectNode(std::move(root));
|
||||||
|
|
||||||
m_cppCodeModelUpdater->update({this, kitInfo, rpps});
|
m_cppCodeModelUpdater->update({this, kitInfo, activeBuildEnvironment(), rpps});
|
||||||
}
|
}
|
||||||
|
|
||||||
CompilationDatabaseProject::CompilationDatabaseProject(const Utils::FilePath &projectFile)
|
CompilationDatabaseProject::CompilationDatabaseProject(const Utils::FilePath &projectFile)
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
namespace CppTools {
|
namespace CppTools {
|
||||||
|
|
||||||
ToolChainInfo::ToolChainInfo(const ProjectExplorer::ToolChain *toolChain,
|
ToolChainInfo::ToolChainInfo(const ProjectExplorer::ToolChain *toolChain,
|
||||||
const QString &sysRootPath)
|
const QString &sysRootPath, const Utils::Environment &env)
|
||||||
{
|
{
|
||||||
if (toolChain) {
|
if (toolChain) {
|
||||||
// Keep the following cheap/non-blocking for the ui thread...
|
// Keep the following cheap/non-blocking for the ui thread...
|
||||||
@@ -49,20 +49,21 @@ ToolChainInfo::ToolChainInfo(const ProjectExplorer::ToolChain *toolChain,
|
|||||||
// ...and save the potentially expensive operations for later so that
|
// ...and save the potentially expensive operations for later so that
|
||||||
// they can be run from a worker thread.
|
// they can be run from a worker thread.
|
||||||
this->sysRootPath = sysRootPath;
|
this->sysRootPath = sysRootPath;
|
||||||
headerPathsRunner = toolChain->createBuiltInHeaderPathsRunner();
|
headerPathsRunner = toolChain->createBuiltInHeaderPathsRunner(env);
|
||||||
macroInspectionRunner = toolChain->createMacroInspectionRunner();
|
macroInspectionRunner = toolChain->createMacroInspectionRunner();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ProjectUpdateInfo::ProjectUpdateInfo(ProjectExplorer::Project *project,
|
ProjectUpdateInfo::ProjectUpdateInfo(ProjectExplorer::Project *project,
|
||||||
const KitInfo &kitInfo,
|
const KitInfo &kitInfo,
|
||||||
|
const Utils::Environment &env,
|
||||||
const RawProjectParts &rawProjectParts)
|
const RawProjectParts &rawProjectParts)
|
||||||
: project(project)
|
: project(project)
|
||||||
, rawProjectParts(rawProjectParts)
|
, rawProjectParts(rawProjectParts)
|
||||||
, cToolChain(kitInfo.cToolChain)
|
, cToolChain(kitInfo.cToolChain)
|
||||||
, cxxToolChain(kitInfo.cxxToolChain)
|
, cxxToolChain(kitInfo.cxxToolChain)
|
||||||
, cToolChainInfo(ToolChainInfo(cToolChain, kitInfo.sysRootPath))
|
, cToolChainInfo(ToolChainInfo(cToolChain, kitInfo.sysRootPath, env))
|
||||||
, cxxToolChainInfo(ToolChainInfo(cxxToolChain, kitInfo.sysRootPath))
|
, cxxToolChainInfo(ToolChainInfo(cxxToolChain, kitInfo.sysRootPath, env))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ class ToolChainInfo
|
|||||||
public:
|
public:
|
||||||
ToolChainInfo() = default;
|
ToolChainInfo() = default;
|
||||||
ToolChainInfo(const ProjectExplorer::ToolChain *toolChain,
|
ToolChainInfo(const ProjectExplorer::ToolChain *toolChain,
|
||||||
const QString &sysRootPath);
|
const QString &sysRootPath, const Utils::Environment &env);
|
||||||
|
|
||||||
bool isValid() const { return type.isValid(); }
|
bool isValid() const { return type.isValid(); }
|
||||||
|
|
||||||
@@ -69,6 +69,7 @@ public:
|
|||||||
ProjectUpdateInfo() = default;
|
ProjectUpdateInfo() = default;
|
||||||
ProjectUpdateInfo(ProjectExplorer::Project *project,
|
ProjectUpdateInfo(ProjectExplorer::Project *project,
|
||||||
const KitInfo &kitInfo,
|
const KitInfo &kitInfo,
|
||||||
|
const Utils::Environment &env,
|
||||||
const RawProjectParts &rawProjectParts);
|
const RawProjectParts &rawProjectParts);
|
||||||
bool isValid() const { return project && !rawProjectParts.isEmpty(); }
|
bool isValid() const { return project && !rawProjectParts.isEmpty(); }
|
||||||
|
|
||||||
|
|||||||
@@ -502,7 +502,7 @@ void GenericProject::refreshCppCodeModel()
|
|||||||
rpp.setFlagsForC({nullptr, m_cflags});
|
rpp.setFlagsForC({nullptr, m_cflags});
|
||||||
rpp.setFiles(m_files);
|
rpp.setFiles(m_files);
|
||||||
|
|
||||||
m_cppCodeModelUpdater->update({this, kitInfo, {rpp}});
|
m_cppCodeModelUpdater->update({this, kitInfo, activeBuildEnvironment(), {rpp}});
|
||||||
}
|
}
|
||||||
|
|
||||||
void GenericProject::updateDeploymentData()
|
void GenericProject::updateDeploymentData()
|
||||||
|
|||||||
@@ -85,12 +85,14 @@ WarningFlags NimToolChain::warningFlags(const QStringList &) const
|
|||||||
return WarningFlags::NoWarnings;
|
return WarningFlags::NoWarnings;
|
||||||
}
|
}
|
||||||
|
|
||||||
ToolChain::BuiltInHeaderPathsRunner NimToolChain::createBuiltInHeaderPathsRunner() const
|
ToolChain::BuiltInHeaderPathsRunner NimToolChain::createBuiltInHeaderPathsRunner(
|
||||||
|
const Environment &) const
|
||||||
{
|
{
|
||||||
return ToolChain::BuiltInHeaderPathsRunner();
|
return ToolChain::BuiltInHeaderPathsRunner();
|
||||||
}
|
}
|
||||||
|
|
||||||
HeaderPaths NimToolChain::builtInHeaderPaths(const QStringList &, const FilePath &) const
|
HeaderPaths NimToolChain::builtInHeaderPaths(const QStringList &, const FilePath &,
|
||||||
|
const Environment &) const
|
||||||
{
|
{
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,9 +44,11 @@ public:
|
|||||||
Utils::LanguageExtensions languageExtensions(const QStringList &flags) const final;
|
Utils::LanguageExtensions languageExtensions(const QStringList &flags) const final;
|
||||||
ProjectExplorer::WarningFlags warningFlags(const QStringList &flags) const final;
|
ProjectExplorer::WarningFlags warningFlags(const QStringList &flags) const final;
|
||||||
|
|
||||||
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner() const override;
|
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(
|
||||||
|
const Utils::Environment &) const override;
|
||||||
ProjectExplorer::HeaderPaths builtInHeaderPaths(const QStringList &flags,
|
ProjectExplorer::HeaderPaths builtInHeaderPaths(const QStringList &flags,
|
||||||
const Utils::FilePath &sysRoot) const final;
|
const Utils::FilePath &sysRoot,
|
||||||
|
const Utils::Environment &) const final;
|
||||||
void addToEnvironment(Utils::Environment &env) const final;
|
void addToEnvironment(Utils::Environment &env) const final;
|
||||||
Utils::FilePath makeCommand(const Utils::Environment &env) const final;
|
Utils::FilePath makeCommand(const Utils::Environment &env) const final;
|
||||||
Utils::FilePath compilerCommand() const final;
|
Utils::FilePath compilerCommand() const final;
|
||||||
|
|||||||
@@ -155,7 +155,8 @@ void CustomToolChain::setPredefinedMacros(const Macros ¯os)
|
|||||||
toolChainUpdated();
|
toolChainUpdated();
|
||||||
}
|
}
|
||||||
|
|
||||||
ToolChain::BuiltInHeaderPathsRunner CustomToolChain::createBuiltInHeaderPathsRunner() const
|
ToolChain::BuiltInHeaderPathsRunner CustomToolChain::createBuiltInHeaderPathsRunner(
|
||||||
|
const Environment &) const
|
||||||
{
|
{
|
||||||
const HeaderPaths builtInHeaderPaths = m_builtInHeaderPaths;
|
const HeaderPaths builtInHeaderPaths = m_builtInHeaderPaths;
|
||||||
|
|
||||||
@@ -173,9 +174,10 @@ ToolChain::BuiltInHeaderPathsRunner CustomToolChain::createBuiltInHeaderPathsRun
|
|||||||
}
|
}
|
||||||
|
|
||||||
HeaderPaths CustomToolChain::builtInHeaderPaths(const QStringList &cxxFlags,
|
HeaderPaths CustomToolChain::builtInHeaderPaths(const QStringList &cxxFlags,
|
||||||
const FilePath &fileName) const
|
const FilePath &fileName,
|
||||||
|
const Environment &env) const
|
||||||
{
|
{
|
||||||
return createBuiltInHeaderPathsRunner()(cxxFlags, fileName.toString(), "");
|
return createBuiltInHeaderPathsRunner(env)(cxxFlags, fileName.toString(), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
void CustomToolChain::addToEnvironment(Environment &env) const
|
void CustomToolChain::addToEnvironment(Environment &env) const
|
||||||
|
|||||||
@@ -77,9 +77,11 @@ public:
|
|||||||
const Macros &rawPredefinedMacros() const;
|
const Macros &rawPredefinedMacros() const;
|
||||||
void setPredefinedMacros(const Macros ¯os);
|
void setPredefinedMacros(const Macros ¯os);
|
||||||
|
|
||||||
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner() const override;
|
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(
|
||||||
|
const Utils::Environment &) const override;
|
||||||
HeaderPaths builtInHeaderPaths(const QStringList &cxxFlags,
|
HeaderPaths builtInHeaderPaths(const QStringList &cxxFlags,
|
||||||
const Utils::FilePath &) const override;
|
const Utils::FilePath &,
|
||||||
|
const Utils::Environment &env) const override;
|
||||||
void addToEnvironment(Utils::Environment &env) const override;
|
void addToEnvironment(Utils::Environment &env) const override;
|
||||||
QStringList suggestedMkspecList() const override;
|
QStringList suggestedMkspecList() const override;
|
||||||
IOutputParser *outputParser() const override;
|
IOutputParser *outputParser() const override;
|
||||||
|
|||||||
@@ -574,7 +574,7 @@ HeaderPaths GccToolChain::builtInHeaderPaths(const Utils::Environment &env,
|
|||||||
if (!originalTargetTriple.isEmpty())
|
if (!originalTargetTriple.isEmpty())
|
||||||
arguments << "-target" << originalTargetTriple;
|
arguments << "-target" << originalTargetTriple;
|
||||||
|
|
||||||
const Utils::optional<HeaderPaths> cachedPaths = headerCache->check(arguments);
|
const Utils::optional<HeaderPaths> cachedPaths = headerCache->check(qMakePair(env, arguments));
|
||||||
if (cachedPaths)
|
if (cachedPaths)
|
||||||
return cachedPaths.value();
|
return cachedPaths.value();
|
||||||
|
|
||||||
@@ -582,7 +582,7 @@ HeaderPaths GccToolChain::builtInHeaderPaths(const Utils::Environment &env,
|
|||||||
arguments,
|
arguments,
|
||||||
env.toStringList());
|
env.toStringList());
|
||||||
extraHeaderPathsFunction(paths);
|
extraHeaderPathsFunction(paths);
|
||||||
headerCache->insert(arguments, paths);
|
headerCache->insert(qMakePair(env, arguments), paths);
|
||||||
|
|
||||||
qCDebug(gccLog) << "Reporting header paths to code model:";
|
qCDebug(gccLog) << "Reporting header paths to code model:";
|
||||||
for (const HeaderPath &hp : paths) {
|
for (const HeaderPath &hp : paths) {
|
||||||
@@ -594,14 +594,15 @@ HeaderPaths GccToolChain::builtInHeaderPaths(const Utils::Environment &env,
|
|||||||
return paths;
|
return paths;
|
||||||
}
|
}
|
||||||
|
|
||||||
ToolChain::BuiltInHeaderPathsRunner GccToolChain::createBuiltInHeaderPathsRunner() const
|
ToolChain::BuiltInHeaderPathsRunner GccToolChain::createBuiltInHeaderPathsRunner(
|
||||||
|
const Environment &env) const
|
||||||
{
|
{
|
||||||
// Using a clean environment breaks ccache/distcc/etc.
|
// Using a clean environment breaks ccache/distcc/etc.
|
||||||
Environment env = Environment::systemEnvironment();
|
Environment fullEnv = env;
|
||||||
addToEnvironment(env);
|
addToEnvironment(fullEnv);
|
||||||
|
|
||||||
// This runner must be thread-safe!
|
// This runner must be thread-safe!
|
||||||
return [env,
|
return [fullEnv,
|
||||||
compilerCommand = m_compilerCommand,
|
compilerCommand = m_compilerCommand,
|
||||||
platformCodeGenFlags = m_platformCodeGenFlags,
|
platformCodeGenFlags = m_platformCodeGenFlags,
|
||||||
reinterpretOptions = m_optionsReinterpreter,
|
reinterpretOptions = m_optionsReinterpreter,
|
||||||
@@ -610,7 +611,7 @@ ToolChain::BuiltInHeaderPathsRunner GccToolChain::createBuiltInHeaderPathsRunner
|
|||||||
extraHeaderPathsFunction = m_extraHeaderPathsFunction](const QStringList &flags,
|
extraHeaderPathsFunction = m_extraHeaderPathsFunction](const QStringList &flags,
|
||||||
const QString &sysRoot,
|
const QString &sysRoot,
|
||||||
const QString &) {
|
const QString &) {
|
||||||
return builtInHeaderPaths(env,
|
return builtInHeaderPaths(fullEnv,
|
||||||
compilerCommand,
|
compilerCommand,
|
||||||
platformCodeGenFlags,
|
platformCodeGenFlags,
|
||||||
reinterpretOptions,
|
reinterpretOptions,
|
||||||
@@ -624,12 +625,13 @@ ToolChain::BuiltInHeaderPathsRunner GccToolChain::createBuiltInHeaderPathsRunner
|
|||||||
}
|
}
|
||||||
|
|
||||||
HeaderPaths GccToolChain::builtInHeaderPaths(const QStringList &flags,
|
HeaderPaths GccToolChain::builtInHeaderPaths(const QStringList &flags,
|
||||||
const FilePath &sysRootPath) const
|
const FilePath &sysRootPath,
|
||||||
|
const Environment &env) const
|
||||||
{
|
{
|
||||||
return createBuiltInHeaderPathsRunner()(flags,
|
return createBuiltInHeaderPathsRunner(env)(flags,
|
||||||
sysRootPath.isEmpty() ? sysRoot()
|
sysRootPath.isEmpty() ? sysRoot()
|
||||||
: sysRootPath.toString(),
|
: sysRootPath.toString(),
|
||||||
originalTargetTriple());
|
originalTargetTriple());
|
||||||
}
|
}
|
||||||
|
|
||||||
void GccToolChain::addCommandPathToEnvironment(const FilePath &command, Environment &env)
|
void GccToolChain::addCommandPathToEnvironment(const FilePath &command, Environment &env)
|
||||||
@@ -1391,14 +1393,15 @@ QString ClangToolChain::sysRoot() const
|
|||||||
return mingwCompiler.parentDir().parentDir().toString();
|
return mingwCompiler.parentDir().parentDir().toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
ToolChain::BuiltInHeaderPathsRunner ClangToolChain::createBuiltInHeaderPathsRunner() const
|
ToolChain::BuiltInHeaderPathsRunner ClangToolChain::createBuiltInHeaderPathsRunner(
|
||||||
|
const Environment &env) const
|
||||||
{
|
{
|
||||||
// Using a clean environment breaks ccache/distcc/etc.
|
// Using a clean environment breaks ccache/distcc/etc.
|
||||||
Environment env = Environment::systemEnvironment();
|
Environment fullEnv = env;
|
||||||
addToEnvironment(env);
|
addToEnvironment(fullEnv);
|
||||||
|
|
||||||
// This runner must be thread-safe!
|
// This runner must be thread-safe!
|
||||||
return [env,
|
return [fullEnv,
|
||||||
compilerCommand = m_compilerCommand,
|
compilerCommand = m_compilerCommand,
|
||||||
platformCodeGenFlags = m_platformCodeGenFlags,
|
platformCodeGenFlags = m_platformCodeGenFlags,
|
||||||
reinterpretOptions = m_optionsReinterpreter,
|
reinterpretOptions = m_optionsReinterpreter,
|
||||||
@@ -1407,7 +1410,7 @@ ToolChain::BuiltInHeaderPathsRunner ClangToolChain::createBuiltInHeaderPathsRunn
|
|||||||
extraHeaderPathsFunction = m_extraHeaderPathsFunction](const QStringList &flags,
|
extraHeaderPathsFunction = m_extraHeaderPathsFunction](const QStringList &flags,
|
||||||
const QString &sysRoot,
|
const QString &sysRoot,
|
||||||
const QString &target) {
|
const QString &target) {
|
||||||
return builtInHeaderPaths(env,
|
return builtInHeaderPaths(fullEnv,
|
||||||
compilerCommand,
|
compilerCommand,
|
||||||
platformCodeGenFlags,
|
platformCodeGenFlags,
|
||||||
reinterpretOptions,
|
reinterpretOptions,
|
||||||
|
|||||||
@@ -83,9 +83,10 @@ public:
|
|||||||
MacroInspectionRunner createMacroInspectionRunner() const override;
|
MacroInspectionRunner createMacroInspectionRunner() const override;
|
||||||
Macros predefinedMacros(const QStringList &cxxflags) const override;
|
Macros predefinedMacros(const QStringList &cxxflags) const override;
|
||||||
|
|
||||||
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner() const override;
|
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(const Utils::Environment &env) const override;
|
||||||
HeaderPaths builtInHeaderPaths(const QStringList &flags,
|
HeaderPaths builtInHeaderPaths(const QStringList &flags,
|
||||||
const Utils::FilePath &sysRootPath) const override;
|
const Utils::FilePath &sysRootPath,
|
||||||
|
const Utils::Environment &env) const override;
|
||||||
|
|
||||||
void addToEnvironment(Utils::Environment &env) const override;
|
void addToEnvironment(Utils::Environment &env) const override;
|
||||||
Utils::FilePath makeCommand(const Utils::Environment &environment) const override;
|
Utils::FilePath makeCommand(const Utils::Environment &environment) const override;
|
||||||
@@ -225,7 +226,8 @@ public:
|
|||||||
QString originalTargetTriple() const override;
|
QString originalTargetTriple() const override;
|
||||||
QString sysRoot() const override;
|
QString sysRoot() const override;
|
||||||
|
|
||||||
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner() const override;
|
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(
|
||||||
|
const Utils::Environment &env) const override;
|
||||||
|
|
||||||
std::unique_ptr<ToolChainConfigWidget> createConfigurationWidget() override;
|
std::unique_ptr<ToolChainConfigWidget> createConfigurationWidget() override;
|
||||||
|
|
||||||
|
|||||||
@@ -1119,27 +1119,29 @@ WarningFlags MsvcToolChain::warningFlags(const QStringList &cflags) const
|
|||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
ToolChain::BuiltInHeaderPathsRunner MsvcToolChain::createBuiltInHeaderPathsRunner() const
|
ToolChain::BuiltInHeaderPathsRunner MsvcToolChain::createBuiltInHeaderPathsRunner(
|
||||||
|
const Environment &env) const
|
||||||
{
|
{
|
||||||
Utils::Environment env(m_lastEnvironment);
|
Utils::Environment fullEnv = env;
|
||||||
addToEnvironment(env);
|
addToEnvironment(fullEnv);
|
||||||
|
|
||||||
return [this, env](const QStringList &, const QString &, const QString &) {
|
return [this, fullEnv](const QStringList &, const QString &, const QString &) {
|
||||||
QMutexLocker locker(&m_headerPathsMutex);
|
QMutexLocker locker(&m_headerPathsMutex);
|
||||||
if (m_headerPaths.isEmpty()) {
|
if (m_headerPaths.isEmpty()) {
|
||||||
foreach (const QString &path,
|
m_headerPaths = transform<QVector>(fullEnv.pathListValue("INCLUDE"),
|
||||||
env.value(QLatin1String("INCLUDE")).split(QLatin1Char(';'))) {
|
[](const FilePath &p) {
|
||||||
m_headerPaths.append({path, HeaderPathType::BuiltIn});
|
return HeaderPath(p.toString(), HeaderPathType::BuiltIn);
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
return m_headerPaths;
|
return m_headerPaths;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
HeaderPaths MsvcToolChain::builtInHeaderPaths(const QStringList &cxxflags,
|
HeaderPaths MsvcToolChain::builtInHeaderPaths(const QStringList &cxxflags,
|
||||||
const Utils::FilePath &sysRoot) const
|
const Utils::FilePath &sysRoot,
|
||||||
|
const Environment &env) const
|
||||||
{
|
{
|
||||||
return createBuiltInHeaderPathsRunner()(cxxflags, sysRoot.toString(), "");
|
return createBuiltInHeaderPathsRunner(env)(cxxflags, sysRoot.toString(), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
void MsvcToolChain::addToEnvironment(Utils::Environment &env) const
|
void MsvcToolChain::addToEnvironment(Utils::Environment &env) const
|
||||||
@@ -1750,14 +1752,15 @@ Utils::LanguageVersion ClangClToolChain::msvcLanguageVersion(const QStringList &
|
|||||||
return MsvcToolChain::msvcLanguageVersion(cxxflags, language, macros);
|
return MsvcToolChain::msvcLanguageVersion(cxxflags, language, macros);
|
||||||
}
|
}
|
||||||
|
|
||||||
ClangClToolChain::BuiltInHeaderPathsRunner ClangClToolChain::createBuiltInHeaderPathsRunner() const
|
ClangClToolChain::BuiltInHeaderPathsRunner ClangClToolChain::createBuiltInHeaderPathsRunner(
|
||||||
|
const Environment &env) const
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
QMutexLocker locker(&m_headerPathsMutex);
|
QMutexLocker locker(&m_headerPathsMutex);
|
||||||
m_headerPaths.clear();
|
m_headerPaths.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
return MsvcToolChain::createBuiltInHeaderPathsRunner();
|
return MsvcToolChain::createBuiltInHeaderPathsRunner(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -79,9 +79,11 @@ public:
|
|||||||
Macros predefinedMacros(const QStringList &cxxflags) const override;
|
Macros predefinedMacros(const QStringList &cxxflags) const override;
|
||||||
Utils::LanguageExtensions languageExtensions(const QStringList &cxxflags) const override;
|
Utils::LanguageExtensions languageExtensions(const QStringList &cxxflags) const override;
|
||||||
WarningFlags warningFlags(const QStringList &cflags) const override;
|
WarningFlags warningFlags(const QStringList &cflags) const override;
|
||||||
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner() const override;
|
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(
|
||||||
|
const Utils::Environment &env) const override;
|
||||||
HeaderPaths builtInHeaderPaths(const QStringList &cxxflags,
|
HeaderPaths builtInHeaderPaths(const QStringList &cxxflags,
|
||||||
const Utils::FilePath &sysRoot) const override;
|
const Utils::FilePath &sysRoot,
|
||||||
|
const Utils::Environment &env) const override;
|
||||||
void addToEnvironment(Utils::Environment &env) const override;
|
void addToEnvironment(Utils::Environment &env) const override;
|
||||||
|
|
||||||
Utils::FilePath makeCommand(const Utils::Environment &environment) const override;
|
Utils::FilePath makeCommand(const Utils::Environment &environment) const override;
|
||||||
@@ -175,7 +177,8 @@ public:
|
|||||||
QVariantMap toMap() const override;
|
QVariantMap toMap() const override;
|
||||||
bool fromMap(const QVariantMap &data) override;
|
bool fromMap(const QVariantMap &data) override;
|
||||||
std::unique_ptr<ToolChainConfigWidget> createConfigurationWidget() override;
|
std::unique_ptr<ToolChainConfigWidget> createConfigurationWidget() override;
|
||||||
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner() const override;
|
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(
|
||||||
|
const Utils::Environment &env) const override;
|
||||||
|
|
||||||
const QList<MsvcToolChain *> &msvcToolchains() const;
|
const QList<MsvcToolChain *> &msvcToolchains() const;
|
||||||
QString clangPath() const { return m_clangPath; }
|
QString clangPath() const { return m_clangPath; }
|
||||||
|
|||||||
@@ -48,8 +48,9 @@
|
|||||||
#include <projectexplorer/kitmanager.h>
|
#include <projectexplorer/kitmanager.h>
|
||||||
#include <projectexplorer/projecttree.h>
|
#include <projectexplorer/projecttree.h>
|
||||||
|
|
||||||
#include <utils/pointeralgorithm.h>
|
#include <utils/environment.h>
|
||||||
#include <utils/macroexpander.h>
|
#include <utils/macroexpander.h>
|
||||||
|
#include <utils/pointeralgorithm.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
@@ -811,6 +812,14 @@ Task Project::createProjectTask(Task::TaskType type, const QString &description)
|
|||||||
return Task(type, description, Utils::FilePath(), -1, Core::Id());
|
return Task(type, description, Utils::FilePath(), -1, Core::Id());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Utils::Environment Project::activeBuildEnvironment() const
|
||||||
|
{
|
||||||
|
const BuildConfiguration * const buildConfiguration = activeTarget()
|
||||||
|
? activeTarget()->activeBuildConfiguration() : nullptr;
|
||||||
|
return buildConfiguration ? buildConfiguration->environment()
|
||||||
|
: Utils::Environment::systemEnvironment();
|
||||||
|
}
|
||||||
|
|
||||||
Core::Context Project::projectContext() const
|
Core::Context Project::projectContext() const
|
||||||
{
|
{
|
||||||
return Core::Context(d->m_id);
|
return Core::Context(d->m_id);
|
||||||
|
|||||||
@@ -42,7 +42,10 @@
|
|||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
namespace Core { class Context; }
|
namespace Core { class Context; }
|
||||||
namespace Utils { class MacroExpander; }
|
namespace Utils {
|
||||||
|
class Environment;
|
||||||
|
class MacroExpander;
|
||||||
|
}
|
||||||
|
|
||||||
namespace ProjectExplorer {
|
namespace ProjectExplorer {
|
||||||
|
|
||||||
@@ -263,6 +266,8 @@ protected:
|
|||||||
static ProjectExplorer::Task createProjectTask(ProjectExplorer::Task::TaskType type,
|
static ProjectExplorer::Task createProjectTask(ProjectExplorer::Task::TaskType type,
|
||||||
const QString &description);
|
const QString &description);
|
||||||
|
|
||||||
|
Utils::Environment activeBuildEnvironment() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void handleSubTreeChanged(FolderNode *node);
|
void handleSubTreeChanged(FolderNode *node);
|
||||||
void setActiveTarget(Target *target);
|
void setActiveTarget(Target *target);
|
||||||
|
|||||||
@@ -37,17 +37,16 @@
|
|||||||
#include <coreplugin/id.h>
|
#include <coreplugin/id.h>
|
||||||
|
|
||||||
#include <utils/cpplanguage_details.h>
|
#include <utils/cpplanguage_details.h>
|
||||||
|
#include <utils/environment.h>
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QSet>
|
#include <QSet>
|
||||||
#include <QString>
|
#include <QStringList>
|
||||||
#include <QVariantMap>
|
#include <QVariantMap>
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
namespace Utils { class Environment; }
|
|
||||||
|
|
||||||
namespace ProjectExplorer {
|
namespace ProjectExplorer {
|
||||||
|
|
||||||
namespace Internal { class ToolChainPrivate; }
|
namespace Internal { class ToolChainPrivate; }
|
||||||
@@ -129,8 +128,8 @@ public:
|
|||||||
Utils::LanguageVersion languageVersion;
|
Utils::LanguageVersion languageVersion;
|
||||||
};
|
};
|
||||||
|
|
||||||
using MacrosCache = std::shared_ptr<Cache<ToolChain::MacroInspectionReport, 64>>;
|
using MacrosCache = std::shared_ptr<Cache<QStringList, ToolChain::MacroInspectionReport, 64>>;
|
||||||
using HeaderPathsCache = std::shared_ptr<Cache<HeaderPaths>>;
|
using HeaderPathsCache = std::shared_ptr<Cache<QPair<Utils::Environment, QStringList>, HeaderPaths>>;
|
||||||
|
|
||||||
// A MacroInspectionRunner is created in the ui thread and runs in another thread.
|
// A MacroInspectionRunner is created in the ui thread and runs in another thread.
|
||||||
using MacroInspectionRunner = std::function<MacroInspectionReport(const QStringList &cxxflags)>;
|
using MacroInspectionRunner = std::function<MacroInspectionReport(const QStringList &cxxflags)>;
|
||||||
@@ -140,9 +139,10 @@ public:
|
|||||||
// A BuiltInHeaderPathsRunner is created in the ui thread and runs in another thread.
|
// A BuiltInHeaderPathsRunner is created in the ui thread and runs in another thread.
|
||||||
using BuiltInHeaderPathsRunner = std::function<HeaderPaths(
|
using BuiltInHeaderPathsRunner = std::function<HeaderPaths(
|
||||||
const QStringList &cxxflags, const QString &sysRoot, const QString &originalTargetTriple)>;
|
const QStringList &cxxflags, const QString &sysRoot, const QString &originalTargetTriple)>;
|
||||||
virtual BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner() const = 0;
|
virtual BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(const Utils::Environment &env) const = 0;
|
||||||
virtual HeaderPaths builtInHeaderPaths(const QStringList &cxxflags,
|
virtual HeaderPaths builtInHeaderPaths(const QStringList &cxxflags,
|
||||||
const Utils::FilePath &sysRoot) const = 0;
|
const Utils::FilePath &sysRoot,
|
||||||
|
const Utils::Environment &env) const = 0;
|
||||||
virtual void addToEnvironment(Utils::Environment &env) const = 0;
|
virtual void addToEnvironment(Utils::Environment &env) const = 0;
|
||||||
virtual Utils::FilePath makeCommand(const Utils::Environment &env) const = 0;
|
virtual Utils::FilePath makeCommand(const Utils::Environment &env) const = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -27,14 +27,14 @@
|
|||||||
|
|
||||||
#include <QMutex>
|
#include <QMutex>
|
||||||
#include <QMutexLocker>
|
#include <QMutexLocker>
|
||||||
#include <QStringList>
|
#include <QPair>
|
||||||
#include <QVector>
|
#include <QVector>
|
||||||
|
|
||||||
#include <utils/optional.h>
|
#include <utils/optional.h>
|
||||||
|
|
||||||
namespace ProjectExplorer {
|
namespace ProjectExplorer {
|
||||||
|
|
||||||
template<class T, int Size = 16>
|
template<class K, class T, int Size = 16>
|
||||||
class Cache
|
class Cache
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -61,14 +61,14 @@ public:
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
void insert(const QStringList &compilerArguments, const T &values)
|
void insert(const K &key, const T &values)
|
||||||
{
|
{
|
||||||
CacheItem runResults;
|
CacheItem runResults;
|
||||||
runResults.first = compilerArguments;
|
runResults.first = key;
|
||||||
runResults.second = values;
|
runResults.second = values;
|
||||||
|
|
||||||
QMutexLocker locker(&m_mutex);
|
QMutexLocker locker(&m_mutex);
|
||||||
if (!checkImpl(compilerArguments)) {
|
if (!checkImpl(key)) {
|
||||||
if (m_cache.size() < Size) {
|
if (m_cache.size() < Size) {
|
||||||
m_cache.push_back(runResults);
|
m_cache.push_back(runResults);
|
||||||
} else {
|
} else {
|
||||||
@@ -78,10 +78,10 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Utils::optional<T> check(const QStringList &compilerArguments)
|
Utils::optional<T> check(const K &key)
|
||||||
{
|
{
|
||||||
QMutexLocker locker(&m_mutex);
|
QMutexLocker locker(&m_mutex);
|
||||||
return checkImpl(compilerArguments);
|
return checkImpl(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
void invalidate()
|
void invalidate()
|
||||||
@@ -91,17 +91,17 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Utils::optional<T> checkImpl(const QStringList &compilerArguments)
|
Utils::optional<T> checkImpl(const K &key)
|
||||||
{
|
{
|
||||||
auto it = std::stable_partition(m_cache.begin(), m_cache.end(), [&](const CacheItem &ci) {
|
auto it = std::stable_partition(m_cache.begin(), m_cache.end(), [&](const CacheItem &ci) {
|
||||||
return ci.first != compilerArguments;
|
return ci.first != key;
|
||||||
});
|
});
|
||||||
if (it != m_cache.end())
|
if (it != m_cache.end())
|
||||||
return m_cache.back().second;
|
return m_cache.back().second;
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
using CacheItem = QPair<QStringList, T>;
|
using CacheItem = QPair<K, T>;
|
||||||
|
|
||||||
QMutex m_mutex;
|
QMutex m_mutex;
|
||||||
QVector<CacheItem> m_cache;
|
QVector<CacheItem> m_cache;
|
||||||
|
|||||||
@@ -318,8 +318,8 @@ public:
|
|||||||
Macros predefinedMacros(const QStringList &cxxflags) const override { Q_UNUSED(cxxflags); return Macros(); }
|
Macros predefinedMacros(const QStringList &cxxflags) const override { Q_UNUSED(cxxflags); return Macros(); }
|
||||||
LanguageExtensions languageExtensions(const QStringList &cxxflags) const override { Q_UNUSED(cxxflags); return LanguageExtension::None; }
|
LanguageExtensions languageExtensions(const QStringList &cxxflags) const override { Q_UNUSED(cxxflags); return LanguageExtension::None; }
|
||||||
WarningFlags warningFlags(const QStringList &cflags) const override { Q_UNUSED(cflags); return WarningFlags::NoWarnings; }
|
WarningFlags warningFlags(const QStringList &cflags) const override { Q_UNUSED(cflags); return WarningFlags::NoWarnings; }
|
||||||
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner() const override { return BuiltInHeaderPathsRunner(); }
|
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(const Utils::Environment &) const override { return BuiltInHeaderPathsRunner(); }
|
||||||
HeaderPaths builtInHeaderPaths(const QStringList &cxxflags, const FilePath &sysRoot) const override
|
HeaderPaths builtInHeaderPaths(const QStringList &cxxflags, const FilePath &sysRoot, const Utils::Environment &) const override
|
||||||
{ Q_UNUSED(cxxflags); Q_UNUSED(sysRoot); return {}; }
|
{ Q_UNUSED(cxxflags); Q_UNUSED(sysRoot); return {}; }
|
||||||
void addToEnvironment(Environment &env) const override { Q_UNUSED(env); }
|
void addToEnvironment(Environment &env) const override { Q_UNUSED(env); }
|
||||||
FilePath makeCommand(const Environment &) const override { return FilePath::fromString("make"); }
|
FilePath makeCommand(const Environment &) const override { return FilePath::fromString("make"); }
|
||||||
|
|||||||
@@ -533,6 +533,8 @@ void QbsProject::handleQbsParsingDone(bool success)
|
|||||||
m_qbsProject = m_qbsProjectParser->qbsProject();
|
m_qbsProject = m_qbsProjectParser->qbsProject();
|
||||||
m_qbsProjects.insert(activeTarget(), m_qbsProject);
|
m_qbsProjects.insert(activeTarget(), m_qbsProject);
|
||||||
bool dataChanged = false;
|
bool dataChanged = false;
|
||||||
|
bool envChanged = m_lastParseEnv != m_qbsProjectParser->environment();
|
||||||
|
m_lastParseEnv = m_qbsProjectParser->environment();
|
||||||
if (success) {
|
if (success) {
|
||||||
QTC_ASSERT(m_qbsProject.isValid(), return);
|
QTC_ASSERT(m_qbsProject.isValid(), return);
|
||||||
const qbs::ProjectData &projectData = m_qbsProject.projectData();
|
const qbs::ProjectData &projectData = m_qbsProject.projectData();
|
||||||
@@ -552,6 +554,8 @@ void QbsProject::handleQbsParsingDone(bool success)
|
|||||||
|
|
||||||
if (dataChanged)
|
if (dataChanged)
|
||||||
updateAfterParse();
|
updateAfterParse();
|
||||||
|
else if (envChanged)
|
||||||
|
updateCppCodeModel();
|
||||||
emitParsingFinished(success);
|
emitParsingFinished(success);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1085,7 +1089,7 @@ void QbsProject::updateCppCodeModel()
|
|||||||
}
|
}
|
||||||
|
|
||||||
CppTools::GeneratedCodeModelSupport::update(m_extraCompilers);
|
CppTools::GeneratedCodeModelSupport::update(m_extraCompilers);
|
||||||
m_cppCodeModelUpdater->update({this, kitInfo, rpps});
|
m_cppCodeModelUpdater->update({this, kitInfo, activeBuildEnvironment(), rpps});
|
||||||
}
|
}
|
||||||
|
|
||||||
void QbsProject::updateQmlJsCodeModel()
|
void QbsProject::updateQmlJsCodeModel()
|
||||||
|
|||||||
@@ -144,6 +144,7 @@ private:
|
|||||||
QHash<ProjectExplorer::Target *, qbs::Project> m_qbsProjects;
|
QHash<ProjectExplorer::Target *, qbs::Project> m_qbsProjects;
|
||||||
qbs::Project m_qbsProject; // for activeTarget()
|
qbs::Project m_qbsProject; // for activeTarget()
|
||||||
qbs::ProjectData m_projectData; // Cached m_qbsProject.projectData()
|
qbs::ProjectData m_projectData; // Cached m_qbsProject.projectData()
|
||||||
|
Utils::Environment m_lastParseEnv;
|
||||||
QSet<Core::IDocument *> m_qbsDocuments;
|
QSet<Core::IDocument *> m_qbsDocuments;
|
||||||
|
|
||||||
QbsProjectParser *m_qbsProjectParser = nullptr;
|
QbsProjectParser *m_qbsProjectParser = nullptr;
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ void QbsProjectParser::parse(const QVariantMap &config, const Environment &env,
|
|||||||
QTC_ASSERT(!dir.isEmpty(), return);
|
QTC_ASSERT(!dir.isEmpty(), return);
|
||||||
|
|
||||||
m_currentProgressBase = 0;
|
m_currentProgressBase = 0;
|
||||||
|
m_environment = env;
|
||||||
|
|
||||||
qbs::SetupProjectParameters params;
|
qbs::SetupProjectParameters params;
|
||||||
QVariantMap userConfig = config;
|
QVariantMap userConfig = config;
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ public:
|
|||||||
const QString &configName);
|
const QString &configName);
|
||||||
void startRuleExecution();
|
void startRuleExecution();
|
||||||
void cancel();
|
void cancel();
|
||||||
|
Utils::Environment environment() const { return m_environment; }
|
||||||
|
|
||||||
qbs::Project qbsProject() const;
|
qbs::Project qbsProject() const;
|
||||||
qbs::ErrorInfo error();
|
qbs::ErrorInfo error();
|
||||||
@@ -69,6 +70,7 @@ private:
|
|||||||
|
|
||||||
void handleRuleExecutionDone();
|
void handleRuleExecutionDone();
|
||||||
|
|
||||||
|
Utils::Environment m_environment;
|
||||||
QString m_projectFilePath;
|
QString m_projectFilePath;
|
||||||
qbs::SetupProjectJob *m_qbsSetupProjectJob = nullptr;
|
qbs::SetupProjectJob *m_qbsSetupProjectJob = nullptr;
|
||||||
qbs::BuildJob *m_ruleExecutionJob = nullptr;
|
qbs::BuildJob *m_ruleExecutionJob = nullptr;
|
||||||
|
|||||||
@@ -287,7 +287,7 @@ void QmakeProject::updateCppCodeModel()
|
|||||||
}
|
}
|
||||||
|
|
||||||
CppTools::GeneratedCodeModelSupport::update(generators);
|
CppTools::GeneratedCodeModelSupport::update(generators);
|
||||||
m_cppCodeModelUpdater->update({this, kitInfo, rpps});
|
m_cppCodeModelUpdater->update({this, kitInfo, activeBuildEnvironment(), rpps});
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmakeProject::updateQmlJSCodeModel()
|
void QmakeProject::updateQmlJSCodeModel()
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ void tst_ToolChainCache::insertOne()
|
|||||||
{
|
{
|
||||||
const QStringList key1 = {"one"};
|
const QStringList key1 = {"one"};
|
||||||
const QString value1 = "value1";
|
const QString value1 = "value1";
|
||||||
ProjectExplorer::Cache<QString, 2> cache;
|
ProjectExplorer::Cache<QStringList, QString, 2> cache;
|
||||||
|
|
||||||
cache.insert(key1, value1);
|
cache.insert(key1, value1);
|
||||||
|
|
||||||
@@ -59,7 +59,7 @@ void tst_ToolChainCache::insertOneOne()
|
|||||||
{
|
{
|
||||||
const QStringList key1 = {"one"};
|
const QStringList key1 = {"one"};
|
||||||
const QString value1 = "value1";
|
const QString value1 = "value1";
|
||||||
ProjectExplorer::Cache<QString, 2> cache;
|
ProjectExplorer::Cache<QStringList, QString, 2> cache;
|
||||||
|
|
||||||
cache.insert(key1, value1);
|
cache.insert(key1, value1);
|
||||||
cache.insert(key1, value1);
|
cache.insert(key1, value1);
|
||||||
@@ -75,7 +75,7 @@ void tst_ToolChainCache::insertOneTwo()
|
|||||||
const QString value1 = "value1";
|
const QString value1 = "value1";
|
||||||
const QStringList key2 = {"two"};
|
const QStringList key2 = {"two"};
|
||||||
const QString value2 = "value2";
|
const QString value2 = "value2";
|
||||||
ProjectExplorer::Cache<QString, 2> cache;
|
ProjectExplorer::Cache<QStringList, QString, 2> cache;
|
||||||
|
|
||||||
cache.insert(key1, value1);
|
cache.insert(key1, value1);
|
||||||
cache.insert(key2, value2);
|
cache.insert(key2, value2);
|
||||||
@@ -95,7 +95,7 @@ void tst_ToolChainCache::insertOneTwoThree()
|
|||||||
const QString value2 = "value2";
|
const QString value2 = "value2";
|
||||||
const QStringList key3 = {"three"};
|
const QStringList key3 = {"three"};
|
||||||
const QString value3 = "value3";
|
const QString value3 = "value3";
|
||||||
ProjectExplorer::Cache<QString, 2> cache;
|
ProjectExplorer::Cache<QStringList, QString, 2> cache;
|
||||||
|
|
||||||
cache.insert(key1, value1);
|
cache.insert(key1, value1);
|
||||||
cache.insert(key2, value2);
|
cache.insert(key2, value2);
|
||||||
@@ -117,7 +117,7 @@ void tst_ToolChainCache::insertOneTwoOneThree()
|
|||||||
const QString value2 = "value2";
|
const QString value2 = "value2";
|
||||||
const QStringList key3 = {"three"};
|
const QStringList key3 = {"three"};
|
||||||
const QString value3 = "value3";
|
const QString value3 = "value3";
|
||||||
ProjectExplorer::Cache<QString, 2> cache;
|
ProjectExplorer::Cache<QStringList, QString, 2> cache;
|
||||||
|
|
||||||
cache.insert(key1, value1);
|
cache.insert(key1, value1);
|
||||||
cache.insert(key2, value2);
|
cache.insert(key2, value2);
|
||||||
|
|||||||
@@ -33,6 +33,8 @@
|
|||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
|
namespace Utils { class Environment; }
|
||||||
|
|
||||||
namespace ProjectExplorer {
|
namespace ProjectExplorer {
|
||||||
|
|
||||||
class ToolChain
|
class ToolChain
|
||||||
@@ -45,7 +47,9 @@ public:
|
|||||||
|
|
||||||
using BuiltInHeaderPathsRunner = std::function<HeaderPaths(
|
using BuiltInHeaderPathsRunner = std::function<HeaderPaths(
|
||||||
const QStringList &cxxflags, const QString &sysRoot, const QString &originalTargetTriple)>;
|
const QStringList &cxxflags, const QString &sysRoot, const QString &originalTargetTriple)>;
|
||||||
virtual BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner() const { return BuiltInHeaderPathsRunner(); }
|
virtual BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(const Utils::Environment &env) const {
|
||||||
|
return BuiltInHeaderPathsRunner();
|
||||||
|
}
|
||||||
|
|
||||||
class MacroInspectionReport
|
class MacroInspectionReport
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user