ProjectExplorer: Split Kit::*environment into build and run

They may differ in a containerized setup.

Change-Id: Ib7e60fdd69f56e8e22bad3dfbc246e7de2fe9cd4
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2021-05-25 16:44:20 +02:00
parent 4786b03594
commit 015204a7c3
17 changed files with 66 additions and 34 deletions

View File

@@ -661,8 +661,7 @@ QVariant CMakeGeneratorKitAspect::defaultValue(const Kit *k) const
= Internal::CMakeProjectPlugin::projectTypeSpecificSettings(); = Internal::CMakeProjectPlugin::projectTypeSpecificSettings();
if (settings->ninjaPath.filePath().isEmpty()) { if (settings->ninjaPath.filePath().isEmpty()) {
Utils::Environment env = Utils::Environment::systemEnvironment(); Utils::Environment env = k->buildEnvironment();
k->addToEnvironment(env);
return !env.searchInPath("ninja").isEmpty(); return !env.searchInPath("ninja").isEmpty();
} }
return true; return true;
@@ -829,7 +828,7 @@ KitAspectWidget *CMakeGeneratorKitAspect::createConfigWidget(Kit *k) const
return new CMakeGeneratorKitAspectWidget(k, this); return new CMakeGeneratorKitAspectWidget(k, this);
} }
void CMakeGeneratorKitAspect::addToEnvironment(const Kit *k, Utils::Environment &env) const void CMakeGeneratorKitAspect::addToBuildEnvironment(const Kit *k, Utils::Environment &env) const
{ {
GeneratorInfo info = generatorInfo(k); GeneratorInfo info = generatorInfo(k);
if (info.generator == "NMake Makefiles JOM") { if (info.generator == "NMake Makefiles JOM") {

View File

@@ -86,7 +86,7 @@ public:
void upgrade(ProjectExplorer::Kit *k) final; void upgrade(ProjectExplorer::Kit *k) final;
ItemList toUserOutput(const ProjectExplorer::Kit *k) const final; ItemList toUserOutput(const ProjectExplorer::Kit *k) const final;
ProjectExplorer::KitAspectWidget *createConfigWidget(ProjectExplorer::Kit *k) const final; ProjectExplorer::KitAspectWidget *createConfigWidget(ProjectExplorer::Kit *k) const final;
void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const final; void addToBuildEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const final;
private: private:
QVariant defaultValue(const ProjectExplorer::Kit *k) const; QVariant defaultValue(const ProjectExplorer::Kit *k) const;

View File

@@ -1287,8 +1287,7 @@ ProjectPart::Ptr CppModelManager::fallbackProjectPart()
Utils::FilePath sysroot = SysRootKitAspect::sysRoot(defaultKit); Utils::FilePath sysroot = SysRootKitAspect::sysRoot(defaultKit);
if (sysroot.isEmpty()) if (sysroot.isEmpty())
sysroot = Utils::FilePath::fromString(defaultTc->sysRoot()); sysroot = Utils::FilePath::fromString(defaultTc->sysRoot());
Utils::Environment env = Utils::Environment::systemEnvironment(); Utils::Environment env = defaultKit->buildEnvironment();
defaultKit->addToEnvironment(env);
ToolChainInfo tcInfo(defaultTc, sysroot.toString(), env); ToolChainInfo tcInfo(defaultTc, sysroot.toString(), env);
part->setupToolchainProperties(tcInfo, {}); part->setupToolchainProperties(tcInfo, {});
if (part->language == Language::C) if (part->language == Language::C)

View File

@@ -474,11 +474,9 @@ void StartApplicationDialog::run(bool attachRemote)
debugger->setSysRoot(newParameters.sysRoot); debugger->setSysRoot(newParameters.sysRoot);
bool isLocal = !dev || (dev->type() == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE); bool isLocal = !dev || (dev->type() == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE);
if (isLocal) { if (isLocal) // FIXME: Restriction needed?
Environment inferiorEnvironment = Environment::systemEnvironment(); debugger->setInferiorEnvironment(k->runEnvironment());
k->addToEnvironment(inferiorEnvironment);
debugger->setInferiorEnvironment(inferiorEnvironment);
}
if (!attachRemote) if (!attachRemote)
debugger->setStartMode(isLocal ? StartExternal : StartRemoteProcess); debugger->setStartMode(isLocal ? StartExternal : StartRemoteProcess);

View File

@@ -344,8 +344,7 @@ Runnable DebuggerKitAspect::runnable(const Kit *kit)
if (const DebuggerItem *item = debugger(kit)) { if (const DebuggerItem *item = debugger(kit)) {
runnable.executable = item->command(); runnable.executable = item->command();
runnable.workingDirectory = item->workingDirectory().toString(); runnable.workingDirectory = item->workingDirectory().toString();
runnable.environment = Utils::Environment::systemEnvironment(); runnable.environment = kit->runEnvironment();
kit->addToEnvironment(runnable.environment);
runnable.environment.set("LC_NUMERIC", "C"); runnable.environment.set("LC_NUMERIC", "C");
} }
return runnable; return runnable;

View File

@@ -471,7 +471,7 @@ Environment BuildConfiguration::baseEnvironment() const
if (useSystemEnvironment()) if (useSystemEnvironment())
result = Environment::systemEnvironment(); result = Environment::systemEnvironment();
addToEnvironment(result); addToEnvironment(result);
kit()->addToEnvironment(result); kit()->addToBuildEnvironment(result);
result.modify(project()->additionalEnvironment()); result.modify(project()->additionalEnvironment());
return result; return result;
} }

View File

@@ -188,10 +188,7 @@ Environment BuildSystem::activeParseEnvironment() const
if (rc) if (rc)
return rc->runnable().environment; return rc->runnable().environment;
Environment result = Utils::Environment::systemEnvironment(); return d->m_target->kit()->buildEnvironment();
d->m_target->kit()->addToEnvironment(result);
return result;
} }
void BuildSystem::requestParseHelper(int delay) void BuildSystem::requestParseHelper(int delay)

View File

@@ -563,10 +563,30 @@ QVariantMap Kit::toMap() const
return data; return data;
} }
void Kit::addToEnvironment(Environment &env) const void Kit::addToBuildEnvironment(Environment &env) const
{ {
for (KitAspect *aspect : KitManager::kitAspects()) for (KitAspect *aspect : KitManager::kitAspects())
aspect->addToEnvironment(this, env); aspect->addToBuildEnvironment(this, env);
}
void Kit::addToRunEnvironment(Environment &env) const
{
for (KitAspect *aspect : KitManager::kitAspects())
aspect->addToRunEnvironment(this, env);
}
Environment Kit::buildEnvironment() const
{
Environment env = Environment::systemEnvironment(); // FIXME: Use build device
addToBuildEnvironment(env);
return env;
}
Environment Kit::runEnvironment() const
{
Environment env = Environment::systemEnvironment(); // FIXME: Use run device
addToRunEnvironment(env);
return env;
} }
QList<OutputLineParser *> Kit::createOutputParsers() const QList<OutputLineParser *> Kit::createOutputParsers() const

View File

@@ -115,7 +115,12 @@ public:
bool isDataEqual(const Kit *other) const; bool isDataEqual(const Kit *other) const;
bool isEqual(const Kit *other) const; bool isEqual(const Kit *other) const;
void addToEnvironment(Utils::Environment &env) const; void addToBuildEnvironment(Utils::Environment &env) const;
Utils::Environment buildEnvironment() const;
void addToRunEnvironment(Utils::Environment &env) const;
Utils::Environment runEnvironment() const;
QList<Utils::OutputLineParser *> createOutputParsers() const; QList<Utils::OutputLineParser *> createOutputParsers() const;
QString toHtml(const Tasks &additional = Tasks(), const QString &extraText = QString()) const; QString toHtml(const Tasks &additional = Tasks(), const QString &extraText = QString()) const;

View File

@@ -526,7 +526,7 @@ KitAspect::ItemList ToolChainKitAspect::toUserOutput(const Kit *k) const
return {{tr("Compiler"), tc ? tc->displayName() : tr("None")}}; return {{tr("Compiler"), tc ? tc->displayName() : tr("None")}};
} }
void ToolChainKitAspect::addToEnvironment(const Kit *k, Utils::Environment &env) const void ToolChainKitAspect::addToBuildEnvironment(const Kit *k, Utils::Environment &env) const
{ {
ToolChain *tc = cxxToolChain(k); ToolChain *tc = cxxToolChain(k);
if (tc) if (tc)
@@ -1501,7 +1501,7 @@ void EnvironmentKitAspect::fix(Kit *k)
} }
} }
void EnvironmentKitAspect::addToEnvironment(const Kit *k, Utils::Environment &env) const void EnvironmentKitAspect::addToBuildEnvironment(const Kit *k, Environment &env) const
{ {
const QStringList values const QStringList values
= Utils::transform(Utils::EnvironmentItem::toStringList(environmentChanges(k)), = Utils::transform(Utils::EnvironmentItem::toStringList(environmentChanges(k)),
@@ -1509,6 +1509,11 @@ void EnvironmentKitAspect::addToEnvironment(const Kit *k, Utils::Environment &en
env.modify(Utils::EnvironmentItem::fromStringList(values)); env.modify(Utils::EnvironmentItem::fromStringList(values));
} }
void EnvironmentKitAspect::addToRunEnvironment(const Kit *k, Environment &env) const
{
addToBuildEnvironment(k, env);
}
KitAspectWidget *EnvironmentKitAspect::createConfigWidget(Kit *k) const KitAspectWidget *EnvironmentKitAspect::createConfigWidget(Kit *k) const
{ {
QTC_ASSERT(k, return nullptr); QTC_ASSERT(k, return nullptr);

View File

@@ -83,7 +83,9 @@ public:
ItemList toUserOutput(const Kit *k) const override; ItemList toUserOutput(const Kit *k) const override;
void addToEnvironment(const Kit *k, Utils::Environment &env) const override; void addToBuildEnvironment(const Kit *k, Utils::Environment &env) const override;
void addToRunEnvironment(const Kit *, Utils::Environment &) const override {}
void addToMacroExpander(Kit *kit, Utils::MacroExpander *expander) const override; void addToMacroExpander(Kit *kit, Utils::MacroExpander *expander) const override;
QList<Utils::OutputLineParser *> createOutputParsers(const Kit *k) const override; QList<Utils::OutputLineParser *> createOutputParsers(const Kit *k) const override;
QSet<Utils::Id> availableFeatures(const Kit *k) const override; QSet<Utils::Id> availableFeatures(const Kit *k) const override;
@@ -219,7 +221,9 @@ public:
Tasks validate(const Kit *k) const override; Tasks validate(const Kit *k) const override;
void fix(Kit *k) override; void fix(Kit *k) override;
void addToEnvironment(const Kit *k, Utils::Environment &env) const override; void addToBuildEnvironment(const Kit *k, Utils::Environment &env) const override;
void addToRunEnvironment(const Kit *, Utils::Environment &) const override;
KitAspectWidget *createConfigWidget(Kit *k) const override; KitAspectWidget *createConfigWidget(Kit *k) const override;
ItemList toUserOutput(const Kit *k) const override; ItemList toUserOutput(const Kit *k) const override;

View File

@@ -682,7 +682,13 @@ int KitAspect::weight(const Kit *k) const
return k->value(id()).isValid() ? 1 : 0; return k->value(id()).isValid() ? 1 : 0;
} }
void KitAspect::addToEnvironment(const Kit *k, Environment &env) const void KitAspect::addToBuildEnvironment(const Kit *k, Environment &env) const
{
Q_UNUSED(k)
Q_UNUSED(env)
}
void KitAspect::addToRunEnvironment(const Kit *k, Environment &env) const
{ {
Q_UNUSED(k) Q_UNUSED(k)
Q_UNUSED(env) Q_UNUSED(env)

View File

@@ -96,7 +96,9 @@ public:
virtual KitAspectWidget *createConfigWidget(Kit *) const = 0; virtual KitAspectWidget *createConfigWidget(Kit *) const = 0;
virtual void addToEnvironment(const Kit *k, Utils::Environment &env) const; virtual void addToBuildEnvironment(const Kit *k, Utils::Environment &env) const;
virtual void addToRunEnvironment(const Kit *k, Utils::Environment &env) const;
virtual QList<Utils::OutputLineParser *> createOutputParsers(const Kit *k) const; virtual QList<Utils::OutputLineParser *> createOutputParsers(const Kit *k) const;
virtual QString displayNamePostfix(const Kit *k) const; virtual QString displayNamePostfix(const Kit *k) const;

View File

@@ -49,8 +49,7 @@ LocalEnvironmentAspect::LocalEnvironmentAspect(Target *target, bool includeBuild
if (BuildConfiguration *bc = target->activeBuildConfiguration()) { if (BuildConfiguration *bc = target->activeBuildConfiguration()) {
env = bc->environment(); env = bc->environment();
} else { // Fallback for targets without buildconfigurations: } else { // Fallback for targets without buildconfigurations:
env = Environment::systemEnvironment(); env = target->kit()->buildEnvironment();
target->kit()->addToEnvironment(env);
} }
return env; return env;
}); });

View File

@@ -462,7 +462,7 @@ QProcessEnvironment PuppetCreator::processEnvironment() const
Utils::Environment environment = Utils::Environment::systemEnvironment(); Utils::Environment environment = Utils::Environment::systemEnvironment();
if (QTC_GUARD(m_target)) { if (QTC_GUARD(m_target)) {
if (!useOnlyFallbackPuppet()) if (!useOnlyFallbackPuppet())
m_target->kit()->addToEnvironment(environment); m_target->kit()->addToBuildEnvironment(environment);
const QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(m_target->kit()); const QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(m_target->kit());
if (QTC_GUARD(qt)) { // Kits without a Qt version should not have a puppet! if (QTC_GUARD(qt)) { // Kits without a Qt version should not have a puppet!
// Update PATH to include QT_HOST_BINS // Update PATH to include QT_HOST_BINS
@@ -561,8 +561,7 @@ QProcessEnvironment PuppetCreator::processEnvironment() const
QString PuppetCreator::buildCommand() const QString PuppetCreator::buildCommand() const
{ {
Utils::Environment environment = Utils::Environment::systemEnvironment(); const Utils::Environment environment = m_target->kit()->buildEnvironment();
m_target->kit()->addToEnvironment(environment);
if (ToolChain *toolChain = ToolChainKitAspect::cxxToolChain(m_target->kit())) if (ToolChain *toolChain = ToolChainKitAspect::cxxToolChain(m_target->kit()))
return toolChain->makeCommand(environment).toString(); return toolChain->makeCommand(environment).toString();

View File

@@ -277,7 +277,7 @@ KitAspect::ItemList QtKitAspect::toUserOutput(const Kit *k) const
return {{tr("Qt version"), version ? version->displayName() : tr("None")}}; return {{tr("Qt version"), version ? version->displayName() : tr("None")}};
} }
void QtKitAspect::addToEnvironment(const Kit *k, Environment &env) const void QtKitAspect::addToBuildEnvironment(const Kit *k, Environment &env) const
{ {
BaseQtVersion *version = qtVersion(k); BaseQtVersion *version = qtVersion(k);
if (version) if (version)

View File

@@ -53,7 +53,7 @@ public:
ItemList toUserOutput(const ProjectExplorer::Kit *k) const override; ItemList toUserOutput(const ProjectExplorer::Kit *k) const override;
void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const override; void addToBuildEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const override;
QList<Utils::OutputLineParser *> createOutputParsers(const ProjectExplorer::Kit *k) const override; QList<Utils::OutputLineParser *> createOutputParsers(const ProjectExplorer::Kit *k) const override;
void addToMacroExpander(ProjectExplorer::Kit *kit, Utils::MacroExpander *expander) const override; void addToMacroExpander(ProjectExplorer::Kit *kit, Utils::MacroExpander *expander) const override;