summaryrefslogtreecommitdiff
path: root/src/lib/jsextensions
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@digia.com>2013-01-11 18:20:10 +0100
committerJoerg Bornemann <joerg.bornemann@digia.com>2013-01-15 13:30:06 +0100
commite11051ac959e498d39ba344d8270677e81483c16 (patch)
tree208d86192972dd9ca3da0d7234024930ebc3faa6 /src/lib/jsextensions
parent6961e10e8679271d2b45bda8af0afa379d618cd0 (diff)
downloadqbs-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.cpp33
-rw-r--r--src/lib/jsextensions/process.h6
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;
};