From cead4f39747d97e96fb937029cb67955cc65f169 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 30 Nov 2010 18:09:45 +0100 Subject: [PATCH] Maemo: Set Qemu environment once instead of at every start. Reviewed-by: kh1 --- .../qt-maemo/maemoqemumanager.cpp | 16 +------- .../qt-maemo/maemoqemuruntime.h | 4 +- .../qt-maemo/maemoqemuruntimeparser.cpp | 38 ++++++++++++------- .../qt-maemo/maemoqemuruntimeparser.h | 8 ++-- 4 files changed, 30 insertions(+), 36 deletions(-) diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp index 785e8dca7e..935ad3e1d2 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp @@ -353,22 +353,8 @@ void MaemoQemuManager::startRuntime() m_runningQtId = version->uniqueId(); const MaemoQemuRuntime rt = m_runtimes.value(version->uniqueId()); - QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); -#ifdef Q_OS_WIN - const QString root - = QDir::toNativeSeparators(MaemoGlobal::maddeRoot(version->qmakeCommand()) - + QLatin1Char('/')); - const QLatin1Char colon(';'); - const QLatin1String key("PATH"); - env.insert(key, root % QLatin1String("bin") % colon % env.value(key)); - env.insert(key, root % QLatin1String("madlib") % colon % env.value(key)); -#endif - for (QHash::ConstIterator it = rt.m_environment.constBegin(); - it != rt.m_environment.constEnd(); ++it) - env.insert(it.key(), it.value()); - m_qemuProcess->setProcessEnvironment(env); + m_qemuProcess->setProcessEnvironment(rt.m_environment); m_qemuProcess->setWorkingDirectory(rt.m_root); - m_qemuProcess->start(rt.m_bin % QLatin1Char(' ') % rt.m_args); if (!m_qemuProcess->waitForStarted()) return; diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoqemuruntime.h b/src/plugins/qt4projectmanager/qt-maemo/maemoqemuruntime.h index 0e784816a9..504ed6f85a 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoqemuruntime.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoqemuruntime.h @@ -31,7 +31,7 @@ #include "maemodeviceconfigurations.h" -#include +#include #include namespace Qt4ProjectManager { @@ -59,7 +59,7 @@ struct MaemoQemuRuntime QString m_args; QString m_sshPort; QString m_watchPath; - QHash m_environment; + QProcessEnvironment m_environment; MaemoPortList m_freePorts; }; diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoqemuruntimeparser.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoqemuruntimeparser.cpp index ac0f5a3186..b9d962a4e3 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoqemuruntimeparser.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoqemuruntimeparser.cpp @@ -50,29 +50,29 @@ public: private: void fillRuntimeInformation(MaemoQemuRuntime *runtime) const; void setEnvironment(MaemoQemuRuntime *runTime, const QString &envSpec) const; - - const QString m_maddeRoot; }; class MaemoQemuRuntimeParserV2 : public MaemoQemuRuntimeParser { public: MaemoQemuRuntimeParserV2(const QString &madInfoOutput, - const QString &targetName); + const QString &targetName, const QString &maddeRoot); MaemoQemuRuntime parseRuntime(); private: void handleTargetTag(QString &runtimeName); MaemoQemuRuntime handleRuntimeTag(); - QHash handleEnvironmentTag(); + QProcessEnvironment handleEnvironmentTag(); QPair handleVariableTag(); MaemoPortList handleTcpPortListTag(); int handlePortTag(); }; MaemoQemuRuntimeParser::MaemoQemuRuntimeParser(const QString &madInfoOutput, - const QString &targetName) - : m_madInfoReader(madInfoOutput), m_targetName(targetName) + const QString &targetName, const QString &maddeRoot) + : m_targetName(targetName), + m_maddeRoot(maddeRoot), + m_madInfoReader(madInfoOutput) { } @@ -92,7 +92,8 @@ MaemoQemuRuntime MaemoQemuRuntimeParser::parseRuntime(const QtVersion *qtVersion const QByteArray &madInfoOutput = madProc.readAllStandardOutput(); const QString &targetName = MaemoGlobal::targetName(qtVersion->qmakeCommand()); - runtime = MaemoQemuRuntimeParserV2(madInfoOutput, targetName).parseRuntime(); + runtime = MaemoQemuRuntimeParserV2(madInfoOutput, targetName, maddeRootPath) + .parseRuntime(); if (!runtime.m_name.isEmpty()) { runtime.m_root = maddeRootPath + QLatin1String("/runtimes/") + runtime.m_name; @@ -111,7 +112,7 @@ MaemoQemuRuntime MaemoQemuRuntimeParser::parseRuntime(const QtVersion *qtVersion MaemoQemuRuntimeParserV1::MaemoQemuRuntimeParserV1(const QString &madInfoOutput, const QString &targetName, const QString &maddeRoot) - : MaemoQemuRuntimeParser(madInfoOutput, targetName), m_maddeRoot(maddeRoot) + : MaemoQemuRuntimeParser(madInfoOutput, targetName, maddeRoot) { } @@ -124,7 +125,7 @@ MaemoQemuRuntime MaemoQemuRuntimeParserV1::parseRuntime() if (targetRuntime.isEmpty() && m_madInfoReader.name() == QLatin1String("target")) { const QXmlStreamAttributes &attrs = m_madInfoReader.attributes(); - if (attrs.value(QLatin1String("target_id")) == targetName()) + if (attrs.value(QLatin1String("target_id")) == m_targetName) targetRuntime = attrs.value("runtime_id").toString(); } else if (m_madInfoReader.name() == QLatin1String("runtime")) { const QXmlStreamAttributes attrs = m_madInfoReader.attributes(); @@ -216,6 +217,7 @@ void MaemoQemuRuntimeParserV1::setEnvironment(MaemoQemuRuntime *runTime, { QString remainingEnvSpec = envSpec; QString currentKey; + runTime->m_environment = QProcessEnvironment::systemEnvironment(); while (true) { const int nextEqualsSignPos = remainingEnvSpec.indexOf(QLatin1Char('=')); @@ -242,8 +244,8 @@ void MaemoQemuRuntimeParserV1::setEnvironment(MaemoQemuRuntime *runTime, MaemoQemuRuntimeParserV2::MaemoQemuRuntimeParserV2(const QString &madInfoOutput, - const QString &targetName) - : MaemoQemuRuntimeParser(madInfoOutput, targetName) + const QString &targetName, const QString &maddeRoot) + : MaemoQemuRuntimeParser(madInfoOutput, targetName, maddeRoot) { } @@ -282,7 +284,7 @@ void MaemoQemuRuntimeParserV2::handleTargetTag(QString &runtimeName) { const QXmlStreamAttributes &attrs = m_madInfoReader.attributes(); if (m_madInfoReader.name() == QLatin1String("target") && runtimeName.isEmpty() - && attrs.value(QLatin1String("name")) == targetName() + && attrs.value(QLatin1String("name")) == m_targetName && attrs.value(QLatin1String("installed")) == QLatin1String("true")) { while (m_madInfoReader.readNextStartElement()) { if (m_madInfoReader.name() == QLatin1String("runtime")) @@ -321,14 +323,22 @@ MaemoQemuRuntime MaemoQemuRuntimeParserV2::handleRuntimeTag() return runtime; } -QHash MaemoQemuRuntimeParserV2::handleEnvironmentTag() +QProcessEnvironment MaemoQemuRuntimeParserV2::handleEnvironmentTag() { - QHash env; + QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); while (m_madInfoReader.readNextStartElement()) { const QPair &var = handleVariableTag(); if (!var.first.isEmpty()) env.insert(var.first, var.second); } +#ifdef Q_OS_WIN + const QString root = QDir::toNativeSeparators(m_maddeRoot) + + QLatin1Char('/'); + const QLatin1Char colon(';'); + const QLatin1String key("PATH"); + env.insert(key, root + QLatin1String("bin") + colon + env.value(key)); + env.insert(key, root + QLatin1String("madlib") + colon + env.value(key)); +#endif return env; } diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoqemuruntimeparser.h b/src/plugins/qt4projectmanager/qt-maemo/maemoqemuruntimeparser.h index 4592093807..2936735536 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoqemuruntimeparser.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoqemuruntimeparser.h @@ -45,13 +45,11 @@ public: protected: MaemoQemuRuntimeParser(const QString &madInfoOutput, - const QString &targetName); - const QString &targetName() const { return m_targetName; } + const QString &targetName, const QString &maddeRoot); - QXmlStreamReader m_madInfoReader; - -private: const QString m_targetName; + const QString m_maddeRoot; + QXmlStreamReader m_madInfoReader; }; } // namespace Internal -- GitLab