diff options
author | Jake Petroules <jake.petroules@qt.io> | 2016-05-25 10:10:51 -0700 |
---|---|---|
committer | Jake Petroules <jake.petroules@qt.io> | 2016-05-30 20:30:38 +0000 |
commit | 9d28325c404a87757c61b7dba10f54b43c28cd11 (patch) | |
tree | e8a7316525799e33d90eaa2cad0bf2033fa990ec | |
parent | c885c061f0a062e5a15f08654cb1e6e8c76f5711 (diff) |
Print more descriptive "unknown Windows version" warning messages.
Incidentally, this also fixes a bug causing Windows 10 to be treated as
Windows 1.0 in the subsystem version.
Task-number: QBS-978
Change-Id: I5aa1763ce9d0a9b12aa50e864086cc2ae4ceb3c1
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
-rw-r--r-- | share/qbs/imports/qbs/WindowsUtils/windows-utils.js | 39 | ||||
-rw-r--r-- | share/qbs/modules/cpp/CppModule.qbs | 18 | ||||
-rw-r--r-- | share/qbs/modules/cpp/GenericGCC.qbs | 7 | ||||
-rw-r--r-- | share/qbs/modules/cpp/gcc.js | 4 | ||||
-rw-r--r-- | share/qbs/modules/cpp/msvc.js | 4 | ||||
-rw-r--r-- | share/qbs/modules/cpp/windows-msvc.qbs | 7 |
6 files changed, 47 insertions, 32 deletions
diff --git a/share/qbs/imports/qbs/WindowsUtils/windows-utils.js b/share/qbs/imports/qbs/WindowsUtils/windows-utils.js index 5d90ff7b4..70d8d1b36 100644 --- a/share/qbs/imports/qbs/WindowsUtils/windows-utils.js +++ b/share/qbs/imports/qbs/WindowsUtils/windows-utils.js @@ -37,9 +37,26 @@ function characterSetDefines(charset) { return defines; } -function isValidWindowsVersion(systemVersion) { +function canonicalizeVersion(version) { + switch (version) { + case "7": + return "6.1"; + case "8": + return "6.2"; + case "8.1": + return "6.3"; + default: + return version; + } +} + +function knownWindowsVersions() { // Add new Windows versions to this list when they are released - var realVersions = [ '10.0', '6.3', '6.2', '6.1', '6.0', '5.2', '5.1', '5.0', '4.0' ]; + return ['10.0', '6.3', '6.2', '6.1', '6.0', '5.2', '5.1', '5.0', '4.0']; +} + +function isValidWindowsVersion(systemVersion) { + var realVersions = knownWindowsVersions(); for (i in realVersions) if (systemVersion === realVersions[i]) return true; @@ -48,18 +65,20 @@ function isValidWindowsVersion(systemVersion) { } function getWindowsVersionInFormat(systemVersion, format) { - if (!isValidWindowsVersion(systemVersion)) + if (!systemVersion) return undefined; - var major = parseInt(systemVersion.split('.')[0]); - var minor = parseInt(systemVersion.split('.')[1]); + var major = parseInt(systemVersion.split('.')[0], 10); + var minor = parseInt(systemVersion.split('.')[1], 10); - if (format === 'hex') { - return '0x' + major + (minor < 10 ? '0' : '') + minor; - } else if (format === 'subsystem') { - // http://msdn.microsoft.com/en-us/library/fcc1zstk.aspx + switch (format) { + case "hex": + // https://msdn.microsoft.com/en-us/library/6sehtctf.aspx + return "0x" + ("0000" + ((major << 8) | minor).toString(16)).slice(-4); + case "subsystem": + // https://msdn.microsoft.com/en-us/library/fcc1zstk.aspx return major + '.' + (minor < 10 ? '0' : '') + minor; - } else { + default: throw ("Unrecognized Windows version format " + format + ". Must be in {hex, subsystem}."); } } diff --git a/share/qbs/modules/cpp/CppModule.qbs b/share/qbs/modules/cpp/CppModule.qbs index ed13d9f37..45ca8bc26 100644 --- a/share/qbs/modules/cpp/CppModule.qbs +++ b/share/qbs/modules/cpp/CppModule.qbs @@ -31,6 +31,7 @@ // base for Cpp modules import qbs.ModUtils import qbs.Utilities +import qbs.WindowsUtils Module { condition: false @@ -338,11 +339,28 @@ Module { validate: { var validator = new ModUtils.PropertyValidator("cpp"); + validator.setRequiredProperty("architecture", architecture, + "you might want to re-run 'qbs-setup-toolchains'"); validator.addCustomValidator("architecture", architecture, function (value) { return !architecture || architecture === Utilities.canonicalArchitecture(architecture); }, "'" + architecture + "' is invalid. You must use the canonical name '" + Utilities.canonicalArchitecture(architecture) + "'"); + if (minimumWindowsVersion) { + validator.addVersionValidator("minimumWindowsVersion", minimumWindowsVersion, 2, 2); + validator.addCustomValidator("minimumWindowsVersion", minimumWindowsVersion, function (v) { + return !v || v === WindowsUtils.canonicalizeVersion(v); + }, "'" + minimumWindowsVersion + "' is invalid. Did you mean '" + + WindowsUtils.canonicalizeVersion(minimumWindowsVersion) + "'?"); + } validator.validate(); + + if (!WindowsUtils.isValidWindowsVersion(minimumWindowsVersion)) { + console.warn("Unknown Windows version '" + minimumWindowsVersion + + "'; expected one of: " + + WindowsUtils.knownWindowsVersions().map(function (a) { + return '"' + a + '"'; }).join(", ") + + ". See https://msdn.microsoft.com/en-us/library/windows/desktop/ms724832.aspx"); + } } setupRunEnvironment: { diff --git a/share/qbs/modules/cpp/GenericGCC.qbs b/share/qbs/modules/cpp/GenericGCC.qbs index f94ebd60c..9d2571fbf 100644 --- a/share/qbs/modules/cpp/GenericGCC.qbs +++ b/share/qbs/modules/cpp/GenericGCC.qbs @@ -162,13 +162,6 @@ CppModule { return base; } - validate: { - var validator = new ModUtils.PropertyValidator("cpp"); - validator.setRequiredProperty("architecture", architecture, - "you might want to re-run 'qbs-setup-toolchains'"); - validator.validate(); - } - Rule { id: dynamicLibraryLinker multiplex: true diff --git a/share/qbs/modules/cpp/gcc.js b/share/qbs/modules/cpp/gcc.js index d7842c4e0..b38c1986c 100644 --- a/share/qbs/modules/cpp/gcc.js +++ b/share/qbs/modules/cpp/gcc.js @@ -169,8 +169,6 @@ function linkerFlags(product, inputs, output) { args = args.concat(escapeLinkerFlags(product, ["--minor-subsystem-version", minor])); args = args.concat(escapeLinkerFlags(product, ["--major-os-version", major])); args = args.concat(escapeLinkerFlags(product, ["--minor-os-version", minor])); - } else { - console.warn('Unknown Windows version "' + minimumWindowsVersion + '"'); } } } @@ -512,8 +510,6 @@ function compilerFlags(product, input, output) { var versionDefs = [ 'WINVER', '_WIN32_WINNT', '_WIN32_WINDOWS' ]; for (i in versionDefs) args.push('-D' + versionDefs[i] + '=' + hexVersion); - } else { - console.warn('Unknown Windows version "' + minimumWindowsVersion + '"'); } } diff --git a/share/qbs/modules/cpp/msvc.js b/share/qbs/modules/cpp/msvc.js index f862999a9..b9f914aed 100644 --- a/share/qbs/modules/cpp/msvc.js +++ b/share/qbs/modules/cpp/msvc.js @@ -133,8 +133,6 @@ function prepareCompiler(project, product, inputs, outputs, input, output) { for (i in versionDefs) { args.push('/D' + versionDefs[i] + '=' + hexVersion); } - } else { - console.warn('Unknown Windows version "' + minimumWindowsVersion + '"'); } } @@ -278,8 +276,6 @@ function prepareLinker(project, product, inputs, outputs, input, output) { if (subsystemVersion) { subsystemSwitch += ',' + subsystemVersion; args.push('/OSVERSION:' + subsystemVersion); - } else { - console.warn('Unknown Windows version "' + minimumWindowsVersion + '"'); } } diff --git a/share/qbs/modules/cpp/windows-msvc.qbs b/share/qbs/modules/cpp/windows-msvc.qbs index 27982811a..55a630405 100644 --- a/share/qbs/modules/cpp/windows-msvc.qbs +++ b/share/qbs/modules/cpp/windows-msvc.qbs @@ -85,13 +85,6 @@ CppModule { debugInfoSuffix: ".pdb" property string dynamicLibraryImportSuffix: ".lib" - validate: { - var validator = new ModUtils.PropertyValidator("cpp"); - validator.setRequiredProperty("architecture", architecture, - "you might want to re-run 'qbs-setup-toolchains'"); - validator.validate(); - } - Rule { condition: useCPrecompiledHeader inputs: ["c_pch_src"] |