aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJake Petroules <jake.petroules@petroules.com>2015-01-28 19:18:53 -0800
committerJake Petroules <jake.petroules@petroules.com>2015-01-29 16:51:00 +0000
commitdb80a65f5496d402cb56455fa6ca469e833f406e (patch)
tree0ae707d77f92d43b28fc5138910dd9d9367e63bf
parent48a425b103ad205f50c29481a10230f4537d8da2 (diff)
Set cpp run environment variables when running autotests.
Additionally, allow users to augment or override the environment for any given autotest runner target. Change-Id: Ifea5dd943c688e7339abf3f989b7d5744d938f73 Reviewed-by: Leena Miettinen <riitta-leena.miettinen@theqtcompany.com> Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
-rw-r--r--doc/reference/items/autotestrunner.qdoc8
-rw-r--r--share/qbs/imports/qbs/DarwinTools/darwin-tools.js26
-rw-r--r--share/qbs/imports/qbs/ModUtils/utils.js16
-rw-r--r--share/qbs/imports/qbs/base/AutotestRunner.qbs14
-rw-r--r--share/qbs/modules/cpp/DarwinGCC.qbs22
-rw-r--r--share/qbs/modules/qbs/common.qbs24
6 files changed, 59 insertions, 51 deletions
diff --git a/doc/reference/items/autotestrunner.qdoc b/doc/reference/items/autotestrunner.qdoc
index d2ac630b8..f92ad6f5a 100644
--- a/doc/reference/items/autotestrunner.qdoc
+++ b/doc/reference/items/autotestrunner.qdoc
@@ -77,6 +77,14 @@
\li Default
\li Description
\row
+ \li environment
+ \li stringList
+ \li set internally
+ \li A list of environment variables that are added to the run environment.
+ They are provided as a list of strings in the form "varName=value".
+ By default, DYLD_LIBRARY_PATH, DYLD_FRAMEWORK_PATH, and DYLD_ROOT_PATH
+ are set on OS X and iOS, or an empty list for other platforms.
+ \row
\li limitToSubProject
\li bool
\li \c true
diff --git a/share/qbs/imports/qbs/DarwinTools/darwin-tools.js b/share/qbs/imports/qbs/DarwinTools/darwin-tools.js
index 6bbd7ff0d..3712d1814 100644
--- a/share/qbs/imports/qbs/DarwinTools/darwin-tools.js
+++ b/share/qbs/imports/qbs/DarwinTools/darwin-tools.js
@@ -1,31 +1,5 @@
var FileInfo = loadExtension("qbs.FileInfo");
-function standardDyldEnvironment(config) {
- var installRoot = config.moduleProperty("qbs", "installRoot");
- var installPrefix = config.moduleProperty("qbs", "installPrefix");
- var pathListSeparator = config.moduleProperty("qbs", "pathListSeparator");
- var sysroot = config.moduleProperty("qbs", "sysroot");
-
- var env = {
- "DYLD_FRAMEWORK_PATH": [
- FileInfo.joinPaths(installRoot, installPrefix, "Library", "Frameworks"),
- FileInfo.joinPaths(installRoot, installPrefix, "lib"),
- FileInfo.joinPaths(installRoot, installPrefix)
- ].join(pathListSeparator),
- "DYLD_LIBRARY_PATH": [
- FileInfo.joinPaths(installRoot, installPrefix, "lib"),
- FileInfo.joinPaths(installRoot, installPrefix, "Library", "Frameworks"),
- FileInfo.joinPaths(installRoot, installPrefix)
- ].join(pathListSeparator)
- };
-
- if (sysroot) {
- env["DYLD_ROOT_PATH"] = [sysroot];
- }
-
- return env;
-}
-
/**
* Returns the most appropriate Apple platform name given a targetOS list.
* Possible platform names include macosx, iphoneos, and iphonesimulator.
diff --git a/share/qbs/imports/qbs/ModUtils/utils.js b/share/qbs/imports/qbs/ModUtils/utils.js
index f737e9df7..fd0c0f7bc 100644
--- a/share/qbs/imports/qbs/ModUtils/utils.js
+++ b/share/qbs/imports/qbs/ModUtils/utils.js
@@ -138,6 +138,22 @@ function concatAll() {
return result;
}
+/**
+ * Flattens an environment dictionary (string keys to arrays or strings)
+ * into a string list containing items like \c key=value1:value2:value3
+ */
+function flattenEnvironmentDictionary(dict, pathListSeparator) {
+ var list = [];
+ for (var i in dict) {
+ var value = dict[i];
+ if (typeof value === Array) {
+ value = value.join(pathListSeparator);
+ }
+ list.push(i + "=" + value);
+ }
+ return list;
+}
+
var EnvironmentVariable = (function () {
function EnvironmentVariable(name, separator, convertPathSeparators) {
if (!name)
diff --git a/share/qbs/imports/qbs/base/AutotestRunner.qbs b/share/qbs/imports/qbs/base/AutotestRunner.qbs
index 229f14e3b..dd47f0c39 100644
--- a/share/qbs/imports/qbs/base/AutotestRunner.qbs
+++ b/share/qbs/imports/qbs/base/AutotestRunner.qbs
@@ -1,10 +1,13 @@
import qbs
-import qbs.DarwinTools
+import qbs.ModUtils
Product {
name: "autotest-runner"
type: ["autotest-result"]
builtByDefault: false
+ property stringList environment: ModUtils.flattenEnvironmentDictionary(
+ qbs.commonRunEnvironment,
+ qbs.pathListSeparator)
property bool limitToSubProject: true
Depends {
productTypes: "autotest"
@@ -20,14 +23,7 @@ Product {
prepare: {
var cmd = new Command(input.filePath);
cmd.description = "Running test " + input.fileName;
- if (product.moduleProperty("qbs", "hostOS").contains("darwin") &&
- product.moduleProperty("qbs", "targetOS").contains("darwin")) {
- cmd.environment = [];
- var env = DarwinTools.standardDyldEnvironment(product);
- for (var i in env) {
- cmd.environment.push(i + "=" + env[i]);
- }
- }
+ cmd.environment = product.environment;
return cmd;
}
}
diff --git a/share/qbs/modules/cpp/DarwinGCC.qbs b/share/qbs/modules/cpp/DarwinGCC.qbs
index 9fc4ead08..eb63b3c07 100644
--- a/share/qbs/modules/cpp/DarwinGCC.qbs
+++ b/share/qbs/modules/cpp/DarwinGCC.qbs
@@ -36,24 +36,14 @@ UnixGCC {
}
setupRunEnvironment: {
+ var env = qbs.commonRunEnvironment;
+ env["DYLD_ROOT_PATH"] = sysroot;
var env;
- env = new ModUtils.EnvironmentVariable("DYLD_FRAMEWORK_PATH", qbs.pathListSeparator);
- env.append(FileInfo.joinPaths(qbs.installRoot, qbs.installPrefix, "Library", "Frameworks"));
- env.append(FileInfo.joinPaths(qbs.installRoot, qbs.installPrefix, "lib"));
- env.append(FileInfo.joinPaths(qbs.installRoot, qbs.installPrefix));
- env.set();
-
- env = new ModUtils.EnvironmentVariable("DYLD_LIBRARY_PATH", qbs.pathListSeparator);
- env.append(FileInfo.joinPaths(qbs.installRoot, qbs.installPrefix, "lib"));
- env.append(FileInfo.joinPaths(qbs.installRoot, qbs.installPrefix, "Library", "Frameworks"));
- env.append(FileInfo.joinPaths(qbs.installRoot, qbs.installPrefix));
- env.set();
-
- if (qbs.sysroot) {
- env = new ModUtils.EnvironmentVariable("DYLD_ROOT_PATH", qbs.pathListSeparator);
- env.append(qbs.sysroot);
- env.set();
+ for (var i in env) {
+ var v = new ModUtils.EnvironmentVariable(i, qbs.pathListSeparator);
+ v.value = env[i];
+ v.set();
}
}
diff --git a/share/qbs/modules/qbs/common.qbs b/share/qbs/modules/qbs/common.qbs
index 3be9e7e5f..443b32dbf 100644
--- a/share/qbs/modules/qbs/common.qbs
+++ b/share/qbs/modules/qbs/common.qbs
@@ -101,4 +101,28 @@ Module {
validator.validate();
}
+
+ // private properties
+ property var commonRunEnvironment: {
+ var env = {};
+ if (hostOS.contains("darwin") && targetOS.contains("darwin")) {
+ env["DYLD_FRAMEWORK_PATH"] = [
+ FileInfo.joinPaths(installRoot, installPrefix, "Library", "Frameworks"),
+ FileInfo.joinPaths(installRoot, installPrefix, "lib"),
+ FileInfo.joinPaths(installRoot, installPrefix)
+ ].join(pathListSeparator);
+
+ env["DYLD_LIBRARY_PATH"] = [
+ FileInfo.joinPaths(installRoot, installPrefix, "lib"),
+ FileInfo.joinPaths(installRoot, installPrefix, "Library", "Frameworks"),
+ FileInfo.joinPaths(installRoot, installPrefix)
+ ].join(pathListSeparator);
+
+ if (sysroot) {
+ env["DYLD_ROOT_PATH"] = [sysroot];
+ }
+ }
+
+ return env;
+ }
}