diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2017-06-02 17:45:16 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2017-06-08 11:03:14 +0000 |
commit | 08b00f86891ec157e3fb354afc04ff33ebfdb44c (patch) | |
tree | 331bffbe8ce5636cfcb9f41d254f883da1cc19d5 /share | |
parent | 2fd4c0a8e8a4a4dda54e29fb59a9b82a86d58643 (diff) | |
download | qbs-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.js | 43 | ||||
-rw-r--r-- | share/qbs/modules/cpp/msvc.js | 2 |
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) { |