diff options
author | Jake Petroules <jake.petroules@petroules.com> | 2015-01-28 19:18:53 -0800 |
---|---|---|
committer | Jake Petroules <jake.petroules@petroules.com> | 2015-01-29 16:51:00 +0000 |
commit | db80a65f5496d402cb56455fa6ca469e833f406e (patch) | |
tree | 0ae707d77f92d43b28fc5138910dd9d9367e63bf | |
parent | 48a425b103ad205f50c29481a10230f4537d8da2 (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.qdoc | 8 | ||||
-rw-r--r-- | share/qbs/imports/qbs/DarwinTools/darwin-tools.js | 26 | ||||
-rw-r--r-- | share/qbs/imports/qbs/ModUtils/utils.js | 16 | ||||
-rw-r--r-- | share/qbs/imports/qbs/base/AutotestRunner.qbs | 14 | ||||
-rw-r--r-- | share/qbs/modules/cpp/DarwinGCC.qbs | 22 | ||||
-rw-r--r-- | share/qbs/modules/qbs/common.qbs | 24 |
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; + } } |