diff options
| author | Tobias Hunger <tobias.hunger@digia.com> | 2013-01-11 18:20:10 +0100 |
|---|---|---|
| committer | Joerg Bornemann <joerg.bornemann@digia.com> | 2013-01-15 13:30:06 +0100 |
| commit | e11051ac959e498d39ba344d8270677e81483c16 (patch) | |
| tree | 208d86192972dd9ca3da0d7234024930ebc3faa6 /src/lib/jsextensions | |
| parent | 6961e10e8679271d2b45bda8af0afa379d618cd0 (diff) | |
| download | qbs-e11051ac959e498d39ba344d8270677e81483c16.tar.gz | |
Allow for setting the environment to be used
In Creator we define an environment to run our builds in.
Allow to pass the initial environment used by qbs.
It will then modify this base environment and run JS and
Process commands using that environment.
Change-Id: If7c606da4fd754ee872b0256226ce90fe424fccf
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'src/lib/jsextensions')
| -rw-r--r-- | src/lib/jsextensions/process.cpp | 33 | ||||
| -rw-r--r-- | src/lib/jsextensions/process.h | 6 |
2 files changed, 12 insertions, 27 deletions
diff --git a/src/lib/jsextensions/process.cpp b/src/lib/jsextensions/process.cpp index 4aec31586..46eca6172 100644 --- a/src/lib/jsextensions/process.cpp +++ b/src/lib/jsextensions/process.cpp @@ -58,6 +58,12 @@ QScriptValue Process::ctor(QScriptContext *context, QScriptEngine *engine) } QScriptValue obj = engine->newQObject(t, QScriptEngine::ScriptOwnership); + + // Get environment + QVariant v = engine->property("_qbs_procenv"); + t->qenvironment + = QProcessEnvironment(*reinterpret_cast<QProcessEnvironment*>(v.value<void*>())); + return obj; } @@ -65,7 +71,6 @@ Process::~Process() { delete qstream; delete qprocess; - delete qenvironment; } Process::Process(QScriptContext *context) @@ -75,26 +80,19 @@ Process::Process(QScriptContext *context) Process *t = this; t->qprocess = new QProcess; - t->qenvironment = 0; t->qstream = new QTextStream(t->qprocess); } QString Process::getEnv(const QString &name) { Q_ASSERT(thisObject().engine() == engine()); - Process *t = qscriptvalue_cast<Process*>(thisObject()); - - QProcessEnvironment &environment = t->ensureEnvironment(); - return environment.value(name); + return qenvironment.value(name); } void Process::setEnv(const QString &name, const QString &value) { Q_ASSERT(thisObject().engine() == engine()); - Process *t = qscriptvalue_cast<Process*>(thisObject()); - - QProcessEnvironment &environment = t->ensureEnvironment(); - environment.insert(name, value); + qenvironment.insert(name, value); } bool Process::start(const QString &program, const QStringList &arguments) @@ -102,8 +100,7 @@ bool Process::start(const QString &program, const QStringList &arguments) Q_ASSERT(thisObject().engine() == engine()); Process *t = qscriptvalue_cast<Process*>(thisObject()); - if (t->qenvironment) - t->qprocess->setProcessEnvironment(*t->qenvironment); + t->qprocess->setProcessEnvironment(qenvironment); t->qprocess->start(program, arguments); return t->qprocess->waitForStarted(); } @@ -113,8 +110,7 @@ int Process::exec(const QString &program, const QStringList &arguments) Q_ASSERT(thisObject().engine() == engine()); Process *t = qscriptvalue_cast<Process*>(thisObject()); - if (t->qenvironment) - t->qprocess->setProcessEnvironment(*t->qenvironment); + t->qprocess->setProcessEnvironment(qenvironment); t->qprocess->start(program, arguments); if (!t->qprocess->waitForStarted()) return -1; @@ -129,8 +125,6 @@ void Process::close() Process *t = qscriptvalue_cast<Process*>(thisObject()); delete t->qprocess; t->qprocess = 0; - delete t->qenvironment; - t->qenvironment = 0; delete t->qstream; t->qstream = 0; } @@ -203,12 +197,5 @@ void Process::writeLine(const QString &str) (*t->qstream) << '\n'; } -QProcessEnvironment &Process::ensureEnvironment() -{ - if (!qenvironment) - qenvironment = new QProcessEnvironment(QProcessEnvironment::systemEnvironment()); - return *qenvironment; -} - } // namespace Internal } // namespace qbs diff --git a/src/lib/jsextensions/process.h b/src/lib/jsextensions/process.h index c57bc5fb4..dc4cdc432 100644 --- a/src/lib/jsextensions/process.h +++ b/src/lib/jsextensions/process.h @@ -31,12 +31,12 @@ #define QBS_PROCESS_H #include <QObject> +#include <QProcessEnvironment> #include <QScriptable> #include <QVariant> QT_BEGIN_NAMESPACE class QProcess; -class QProcessEnvironment; class QTextStream; QT_END_NAMESPACE @@ -67,10 +67,8 @@ public: Q_INVOKABLE void writeLine(const QString &str); private: - QProcessEnvironment &ensureEnvironment(); - QProcess *qprocess; - QProcessEnvironment *qenvironment; + QProcessEnvironment qenvironment; QTextStream *qstream; }; |
