From 015204a7c3c9003585dd415e4e588559d18b7589 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 25 May 2021 16:44:20 +0200 Subject: [PATCH] ProjectExplorer: Split Kit::*environment into build and run They may differ in a containerized setup. Change-Id: Ib7e60fdd69f56e8e22bad3dfbc246e7de2fe9cd4 Reviewed-by: Christian Kandeler --- .../cmakekitinformation.cpp | 5 ++-- .../cmakeprojectmanager/cmakekitinformation.h | 2 +- src/plugins/cpptools/cppmodelmanager.cpp | 3 +-- src/plugins/debugger/debuggerdialogs.cpp | 8 +++---- .../debugger/debuggerkitinformation.cpp | 3 +-- .../projectexplorer/buildconfiguration.cpp | 2 +- src/plugins/projectexplorer/buildsystem.cpp | 5 +--- src/plugins/projectexplorer/kit.cpp | 24 +++++++++++++++++-- src/plugins/projectexplorer/kit.h | 7 +++++- .../projectexplorer/kitinformation.cpp | 9 +++++-- src/plugins/projectexplorer/kitinformation.h | 8 +++++-- src/plugins/projectexplorer/kitmanager.cpp | 8 ++++++- src/plugins/projectexplorer/kitmanager.h | 4 +++- .../localenvironmentaspect.cpp | 3 +-- .../designercore/instances/puppetcreator.cpp | 5 ++-- src/plugins/qtsupport/qtkitinformation.cpp | 2 +- src/plugins/qtsupport/qtkitinformation.h | 2 +- 17 files changed, 66 insertions(+), 34 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp b/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp index 3f18c084486..e8cc867ae92 100644 --- a/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp +++ b/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp @@ -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") { diff --git a/src/plugins/cmakeprojectmanager/cmakekitinformation.h b/src/plugins/cmakeprojectmanager/cmakekitinformation.h index 5d3456892d0..5745ae525ff 100644 --- a/src/plugins/cmakeprojectmanager/cmakekitinformation.h +++ b/src/plugins/cmakeprojectmanager/cmakekitinformation.h @@ -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; diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index cd53aeddbcb..cbddd8f764d 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -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) diff --git a/src/plugins/debugger/debuggerdialogs.cpp b/src/plugins/debugger/debuggerdialogs.cpp index b5707e9f2d5..7dc5bf67065 100644 --- a/src/plugins/debugger/debuggerdialogs.cpp +++ b/src/plugins/debugger/debuggerdialogs.cpp @@ -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); diff --git a/src/plugins/debugger/debuggerkitinformation.cpp b/src/plugins/debugger/debuggerkitinformation.cpp index b47e765b66e..90ea0ac89e4 100644 --- a/src/plugins/debugger/debuggerkitinformation.cpp +++ b/src/plugins/debugger/debuggerkitinformation.cpp @@ -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; diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index e75e2243684..c49550f01ea 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -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; } diff --git a/src/plugins/projectexplorer/buildsystem.cpp b/src/plugins/projectexplorer/buildsystem.cpp index d91558ea44e..3f4bb3b4bb8 100644 --- a/src/plugins/projectexplorer/buildsystem.cpp +++ b/src/plugins/projectexplorer/buildsystem.cpp @@ -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) diff --git a/src/plugins/projectexplorer/kit.cpp b/src/plugins/projectexplorer/kit.cpp index 2fad1bf4032..0791987c01d 100644 --- a/src/plugins/projectexplorer/kit.cpp +++ b/src/plugins/projectexplorer/kit.cpp @@ -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 Kit::createOutputParsers() const diff --git a/src/plugins/projectexplorer/kit.h b/src/plugins/projectexplorer/kit.h index f7c75c50296..59948ceabc3 100644 --- a/src/plugins/projectexplorer/kit.h +++ b/src/plugins/projectexplorer/kit.h @@ -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 createOutputParsers() const; QString toHtml(const Tasks &additional = Tasks(), const QString &extraText = QString()) const; diff --git a/src/plugins/projectexplorer/kitinformation.cpp b/src/plugins/projectexplorer/kitinformation.cpp index 9f2f70e87da..5b5f7ebade5 100644 --- a/src/plugins/projectexplorer/kitinformation.cpp +++ b/src/plugins/projectexplorer/kitinformation.cpp @@ -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); diff --git a/src/plugins/projectexplorer/kitinformation.h b/src/plugins/projectexplorer/kitinformation.h index 89e64c27644..6118bec9aed 100644 --- a/src/plugins/projectexplorer/kitinformation.h +++ b/src/plugins/projectexplorer/kitinformation.h @@ -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 createOutputParsers(const Kit *k) const override; QSet 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; diff --git a/src/plugins/projectexplorer/kitmanager.cpp b/src/plugins/projectexplorer/kitmanager.cpp index 3df453e0819..cfd4a56bda2 100644 --- a/src/plugins/projectexplorer/kitmanager.cpp +++ b/src/plugins/projectexplorer/kitmanager.cpp @@ -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) diff --git a/src/plugins/projectexplorer/kitmanager.h b/src/plugins/projectexplorer/kitmanager.h index 390d37cf23f..79747de8aa4 100644 --- a/src/plugins/projectexplorer/kitmanager.h +++ b/src/plugins/projectexplorer/kitmanager.h @@ -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 createOutputParsers(const Kit *k) const; virtual QString displayNamePostfix(const Kit *k) const; diff --git a/src/plugins/projectexplorer/localenvironmentaspect.cpp b/src/plugins/projectexplorer/localenvironmentaspect.cpp index 92a0319e1f8..f08efa7fd5d 100644 --- a/src/plugins/projectexplorer/localenvironmentaspect.cpp +++ b/src/plugins/projectexplorer/localenvironmentaspect.cpp @@ -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; }); diff --git a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp index 61f150b5990..7203a959ab3 100644 --- a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp +++ b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp @@ -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(); diff --git a/src/plugins/qtsupport/qtkitinformation.cpp b/src/plugins/qtsupport/qtkitinformation.cpp index d15e6d79ee6..d88f4df59b0 100644 --- a/src/plugins/qtsupport/qtkitinformation.cpp +++ b/src/plugins/qtsupport/qtkitinformation.cpp @@ -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) diff --git a/src/plugins/qtsupport/qtkitinformation.h b/src/plugins/qtsupport/qtkitinformation.h index 0080abb947e..0aa5a93c486 100644 --- a/src/plugins/qtsupport/qtkitinformation.h +++ b/src/plugins/qtsupport/qtkitinformation.h @@ -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 createOutputParsers(const ProjectExplorer::Kit *k) const override; void addToMacroExpander(ProjectExplorer::Kit *kit, Utils::MacroExpander *expander) const override;