aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJake Petroules <jake.petroules@qt.io>2016-05-25 10:10:51 -0700
committerJake Petroules <jake.petroules@qt.io>2016-05-30 20:30:38 +0000
commit9d28325c404a87757c61b7dba10f54b43c28cd11 (patch)
treee8a7316525799e33d90eaa2cad0bf2033fa990ec
parentc885c061f0a062e5a15f08654cb1e6e8c76f5711 (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.js39
-rw-r--r--share/qbs/modules/cpp/CppModule.qbs18
-rw-r--r--share/qbs/modules/cpp/GenericGCC.qbs7
-rw-r--r--share/qbs/modules/cpp/gcc.js4
-rw-r--r--share/qbs/modules/cpp/msvc.js4
-rw-r--r--share/qbs/modules/cpp/windows-msvc.qbs7
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"]