summaryrefslogtreecommitdiff
path: root/share
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2017-06-02 17:45:16 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2017-06-08 11:03:14 +0000
commit08b00f86891ec157e3fb354afc04ff33ebfdb44c (patch)
tree331bffbe8ce5636cfcb9f41d254f883da1cc19d5 /share
parent2fd4c0a8e8a4a4dda54e29fb59a9b82a86d58643 (diff)
downloadqbs-08b00f86891ec157e3fb354afc04ff33ebfdb44c.tar.gz
Re-run process commands if a relevant environment variable has changed
Process commands can now declare that they are sensitive to certain environment variables. If such a variable changes its value, we invalidate the respective transformer. [ChangeLog] Added new property "relevantEnvironmentVariables" to the Command class Change-Id: Id866dc676b3b483a5d843e6125c91829f5094eba Reviewed-by: Jake Petroules <jake.petroules@qt.io>
Diffstat (limited to 'share')
-rw-r--r--share/qbs/modules/cpp/gcc.js43
-rw-r--r--share/qbs/modules/cpp/msvc.js2
2 files changed, 45 insertions, 0 deletions
diff --git a/share/qbs/modules/cpp/gcc.js b/share/qbs/modules/cpp/gcc.js
index 3beb90ef5..15c57b30c 100644
--- a/share/qbs/modules/cpp/gcc.js
+++ b/share/qbs/modules/cpp/gcc.js
@@ -772,6 +772,47 @@ function nativeConfigString(product) {
return props.length > 0 ? (" (" + props.join(", ") + ")") : "";
}
+function compilerEnvVars(config, compilerInfo)
+{
+ if (config.qbs.toolchain.contains("qcc"))
+ return ["QCC_CONF_PATH"];
+
+ var list = ["CPATH", "TMPDIR"];
+ if (compilerInfo.tag === "c")
+ list.push("C_INCLUDE_PATH");
+ else if (compilerInfo.tag === "cpp")
+ list.push("CPLUS_INCLUDE_PATH");
+ else if (compilerInfo.tag === "objc")
+ list.push("OBJC_INCLUDE_PATH");
+ else if (compilerInfo.tag === "objccpp")
+ list.push("OBJCPLUS_INCLUDE_PATH");
+ if (config.qbs.targetOS.contains("macos"))
+ list.push("MACOSX_DEPLOYMENT_TARGET");
+ else if (config.qbs.targetOS.contains("ios"))
+ list.push("IPHONEOS_DEPLOYMENT_TARGET");
+ else if (config.qbs.targetOS.contains("tvos"))
+ list.push("TVOS_DEPLOYMENT_TARGET");
+ else if (config.qbs.targetOS.contains("watchos"))
+ list.push("WATCHOS_DEPLOYMENT_TARGET");
+ if (config.qbs.toolchain.contains("clang")) {
+ list.push("TEMP", "TMP");
+ } else {
+ list.push("LANG", "LC_CTYPE", "LC_MESSAGES", "LC_ALL", "GCC_COMPARE_DEBUG",
+ "GCC_EXEC_PREFIX", "COMPILER_PATH", "SOURCE_DATE_EPOCH");
+ }
+ return list;
+}
+
+function linkerEnvVars(config, inputs)
+{
+ if (config.qbs.toolchain.contains("clang") || config.qbs.toolchain.contains("qcc"))
+ return [];
+ var list = ["GNUTARGET", "LDEMULATION", "COLLECT_NO_DEMANGLE"];
+ if (useCompilerDriverLinker(config, inputs))
+ list.push("LIBRARY_PATH");
+ return list;
+}
+
function prepareCompiler(project, product, inputs, outputs, input, output) {
var compilerInfo = effectiveCompilerInfo(product.qbs.toolchain,
input, output);
@@ -794,6 +835,7 @@ function prepareCompiler(project, product, inputs, outputs, input, output) {
cmd.description += ' (' + compilerInfo.tag + ')';
cmd.description += nativeConfigString(product);
cmd.highlight = "compiler";
+ cmd.relevantEnvironmentVariables = compilerEnvVars(input, compilerInfo);
cmd.responseFileArgumentIndex = wrapperArgsLength;
cmd.responseFileUsagePrefix = '@';
return cmd;
@@ -998,6 +1040,7 @@ function prepareLinker(project, product, inputs, outputs, input, output) {
cmd = new Command(linkerPath, args);
cmd.description = 'linking ' + primaryOutput.fileName + nativeConfigString(product);
cmd.highlight = 'linker';
+ cmd.relevantEnvironmentVariables = linkerEnvVars(product, inputs);
cmd.responseFileArgumentIndex = wrapperArgsLength;
cmd.responseFileUsagePrefix = '@';
commands.push(cmd);
diff --git a/share/qbs/modules/cpp/msvc.js b/share/qbs/modules/cpp/msvc.js
index 25f9978cd..c2c85aa92 100644
--- a/share/qbs/modules/cpp/msvc.js
+++ b/share/qbs/modules/cpp/msvc.js
@@ -204,6 +204,7 @@ function prepareCompiler(project, product, inputs, outputs, input, output) {
cmd.responseFileUsagePrefix = '@';
// cl.exe outputs the cpp file name. We filter that out.
cmd.inputFileName = input.fileName;
+ cmd.relevantEnvironmentVariables = ["CL", "_CL_", "INCLUDE"];
cmd.stdoutFilterFunction = function(output) {
return output.split(inputFileName + "\r\n").join("");
};
@@ -402,6 +403,7 @@ function prepareLinker(project, product, inputs, outputs, input, output) {
var cmd = new Command(linkerPath, args)
cmd.description = 'linking ' + primaryOutput.fileName;
cmd.highlight = 'linker';
+ cmd.relevantEnvironmentVariables = ["LINK", "_LINK_", "LIB", "TMP"];
cmd.workingDirectory = FileInfo.path(primaryOutput.filePath)
cmd.responseFileUsagePrefix = '@';
cmd.stdoutFilterFunction = function(output) {