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();
if (settings->ninjaPath.filePath().isEmpty()) {
Utils::Environment env = Utils::Environment::systemEnvironment();
k->addToEnvironment(env);
Utils::Environment env = k->buildEnvironment();
return !env.searchInPath("ninja").isEmpty();
}
return true;
@@ -829,7 +828,7 @@ KitAspectWidget *CMakeGeneratorKitAspect::createConfigWidget(Kit *k) const
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);
if (info.generator == "NMake Makefiles JOM") {

View File

@@ -86,7 +86,7 @@ public:
void upgrade(ProjectExplorer::Kit *k) final;
ItemList toUserOutput(const 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:
QVariant defaultValue(const ProjectExplorer::Kit *k) const;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -563,10 +563,30 @@ QVariantMap Kit::toMap() const
return data;
}
void Kit::addToEnvironment(Environment &env) const
void Kit::addToBuildEnvironment(Environment &env) const
{
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

View File

@@ -115,7 +115,12 @@ public:
bool isDataEqual(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;
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")}};
}
void ToolChainKitAspect::addToEnvironment(const Kit *k, Utils::Environment &env) const
void ToolChainKitAspect::addToBuildEnvironment(const Kit *k, Utils::Environment &env) const
{
ToolChain *tc = cxxToolChain(k);
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
= 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));
}
void EnvironmentKitAspect::addToRunEnvironment(const Kit *k, Environment &env) const
{
addToBuildEnvironment(k, env);
}
KitAspectWidget *EnvironmentKitAspect::createConfigWidget(Kit *k) const
{
QTC_ASSERT(k, return nullptr);

View File

@@ -83,7 +83,9 @@ public:
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;
QList<Utils::OutputLineParser *> createOutputParsers(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;
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;
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;
}
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(env)

View File

@@ -96,7 +96,9 @@ public:
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 QString displayNamePostfix(const Kit *k) const;

View File

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

View File

@@ -462,7 +462,7 @@ QProcessEnvironment PuppetCreator::processEnvironment() const
Utils::Environment environment = Utils::Environment::systemEnvironment();
if (QTC_GUARD(m_target)) {
if (!useOnlyFallbackPuppet())
m_target->kit()->addToEnvironment(environment);
m_target->kit()->addToBuildEnvironment(environment);
const QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(m_target->kit());
if (QTC_GUARD(qt)) { // Kits without a Qt version should not have a puppet!
// Update PATH to include QT_HOST_BINS
@@ -561,8 +561,7 @@ QProcessEnvironment PuppetCreator::processEnvironment() const
QString PuppetCreator::buildCommand() const
{
Utils::Environment environment = Utils::Environment::systemEnvironment();
m_target->kit()->addToEnvironment(environment);
const Utils::Environment environment = m_target->kit()->buildEnvironment();
if (ToolChain *toolChain = ToolChainKitAspect::cxxToolChain(m_target->kit()))
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")}};
}
void QtKitAspect::addToEnvironment(const Kit *k, Environment &env) const
void QtKitAspect::addToBuildEnvironment(const Kit *k, Environment &env) const
{
BaseQtVersion *version = qtVersion(k);
if (version)

View File

@@ -53,7 +53,7 @@ public:
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;
void addToMacroExpander(ProjectExplorer::Kit *kit, Utils::MacroExpander *expander) const override;