From 128359af41c8865e0c7b505230eb7f2b9286c4ba Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 25 May 2021 15:54:12 +0200 Subject: [PATCH] QtSupport: Collect environment changes instead of full environments Starting creating custom qmakeRunEnvironment() with systemEnvironment in derived classes without further context breaks down in cases of e.g. containerized builds. So instead create the base environment outside where the context is clear (still wrong after this patch) and let the derived class only apply the changes they need to an otherwise unspecified environment. Change-Id: Ibb23844f490ce86d8a89f6ce728faff65865c09b Reviewed-by: Christian Stenger --- src/plugins/android/androidqtversion.cpp | 4 +--- src/plugins/android/androidqtversion.h | 2 +- src/plugins/qnx/qnxqtversion.cpp | 5 +---- src/plugins/qnx/qnxqtversion.h | 2 +- src/plugins/qtsupport/baseqtversion.cpp | 14 ++++++++++++-- src/plugins/qtsupport/baseqtversion.h | 3 ++- 6 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/plugins/android/androidqtversion.cpp b/src/plugins/android/androidqtversion.cpp index 952580462d8..94872e34c81 100644 --- a/src/plugins/android/androidqtversion.cpp +++ b/src/plugins/android/androidqtversion.cpp @@ -145,12 +145,10 @@ void AndroidQtVersion::addToEnvironment(const Kit *k, Utils::Environment &env) c config.bestNdkPlatformMatch(qMax(minimumNDK(), AndroidManager::minimumSDK(k)), this)); } -Utils::Environment AndroidQtVersion::qmakeRunEnvironment() const +void AndroidQtVersion::setupQmakeRunEnvironment(Utils::Environment &env) const { - Utils::Environment env = Utils::Environment::systemEnvironment(); env.set(QLatin1String("ANDROID_NDK_ROOT"), AndroidConfigurations::currentConfig().ndkLocation(this).toUserOutput()); - return env; } QString AndroidQtVersion::description() const diff --git a/src/plugins/android/androidqtversion.h b/src/plugins/android/androidqtversion.h index bb5c5ff7a50..61ce4967532 100644 --- a/src/plugins/android/androidqtversion.h +++ b/src/plugins/android/androidqtversion.h @@ -47,7 +47,7 @@ public: ProjectExplorer::Abis detectQtAbis() const override; void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const override; - Utils::Environment qmakeRunEnvironment() const override; + void setupQmakeRunEnvironment(Utils::Environment &env) const override; QSet availableFeatures() const override; QSet targetDeviceTypes() const override; diff --git a/src/plugins/qnx/qnxqtversion.cpp b/src/plugins/qnx/qnxqtversion.cpp index 2265bd2f1a2..02dceac4a48 100644 --- a/src/plugins/qnx/qnxqtversion.cpp +++ b/src/plugins/qnx/qnxqtversion.cpp @@ -134,15 +134,12 @@ void QnxQtVersion::addToEnvironment(const Kit *k, Environment &env) const env.prependOrSetLibrarySearchPath(libraryPath().toString()); } -Environment QnxQtVersion::qmakeRunEnvironment() const +void QnxQtVersion::setupQmakeRunEnvironment(Utils::Environment &env) const { if (!sdpPath().isEmpty()) updateEnvironment(); - Environment env = Environment::systemEnvironment(); env.modify(m_qnxEnv); - - return env; } QtSupport::QtConfigWidget *QnxQtVersion::createConfigurationWidget() const diff --git a/src/plugins/qnx/qnxqtversion.h b/src/plugins/qnx/qnxqtversion.h index 55d5522cc53..bd8876def20 100644 --- a/src/plugins/qnx/qnxqtversion.h +++ b/src/plugins/qnx/qnxqtversion.h @@ -56,7 +56,7 @@ public: ProjectExplorer::Abis detectQtAbis() const override; void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const override; - Utils::Environment qmakeRunEnvironment() const override; + void setupQmakeRunEnvironment(Utils::Environment &env) const override; QtSupport::QtConfigWidget *createConfigurationWidget() const override; diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index 10a295578f8..41fddfce7fb 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -1182,7 +1182,9 @@ void BaseQtVersion::ensureMkSpecParsed() const QMakeVfs vfs; QMakeGlobals option; applyProperties(&option); - option.environment = qmakeRunEnvironment().toProcessEnvironment(); + Environment env = Environment::systemEnvironment(); // FIXME: Use build device + setupQmakeRunEnvironment(env); + option.environment = env.toProcessEnvironment(); ProMessageHandler msgHandler(true); ProFileCacheManager::instance()->incRefCount(); QMakeParser parser(ProFileCacheManager::instance()->cache(), &vfs, &msgHandler); @@ -1706,9 +1708,17 @@ void BaseQtVersion::addToEnvironment(const Kit *k, Environment &env) const // One such example is Blackberry which for some reason decided to always use the same // qmake and use environment variables embedded in their mkspecs to make that point to // the different Qt installations. + Environment BaseQtVersion::qmakeRunEnvironment() const { - return Environment::systemEnvironment(); + Environment env = Environment::systemEnvironment(); // FIXME: Use build environment + setupQmakeRunEnvironment(env); + return env; +} + +void BaseQtVersion::setupQmakeRunEnvironment(Environment &env) const +{ + Q_UNUSED(env); } bool BaseQtVersion::hasQmlDumpWithRelocatableFlag() const diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h index fde110da62b..65cf7669d69 100644 --- a/src/plugins/qtsupport/baseqtversion.h +++ b/src/plugins/qtsupport/baseqtversion.h @@ -122,7 +122,7 @@ public: void applyProperties(QMakeGlobals *qmakeGlobals) const; virtual void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const; - virtual Utils::Environment qmakeRunEnvironment() const; + Utils::Environment qmakeRunEnvironment() const; // source path defined by qmake property QT_INSTALL_PREFIX/src or by qmake.stash QT_SOURCE_TREE Utils::FilePath sourcePath() const; @@ -253,6 +253,7 @@ protected: void ensureMkSpecParsed() const; virtual void parseMkSpec(ProFileEvaluator *) const; + virtual void setupQmakeRunEnvironment(Utils::Environment &env) const; private: void updateDefaultDisplayName();