aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJake Petroules <jake.petroules@qt.io>2018-01-22 21:47:38 -0800
committerJake Petroules <jake.petroules@qt.io>2018-01-25 16:14:00 +0000
commit5423eed454e89b250ba69a5fb2f53ea29aed421f (patch)
treefd40891773e30af68338f5e6eeb7950489a75cb3
parent7553fd75cf2b8d16134478157cffd3886b21e36d (diff)
Add better module validation for Android SDK and NDK
Users now get more friendly error messages when the SDK and/or NDK are not installed. Change-Id: Icfc438ed16b88aea190bf766ddc58b26b0512121 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--share/qbs/imports/qbs/Probes/AndroidNdkProbe.qbs1
-rw-r--r--share/qbs/imports/qbs/Probes/AndroidSdkProbe.qbs1
-rw-r--r--share/qbs/modules/Android/ndk/ndk.qbs21
-rw-r--r--share/qbs/modules/Android/sdk/sdk.qbs13
4 files changed, 29 insertions, 7 deletions
diff --git a/share/qbs/imports/qbs/Probes/AndroidNdkProbe.qbs b/share/qbs/imports/qbs/Probes/AndroidNdkProbe.qbs
index 505675354..e6c4256bf 100644
--- a/share/qbs/imports/qbs/Probes/AndroidNdkProbe.qbs
+++ b/share/qbs/imports/qbs/Probes/AndroidNdkProbe.qbs
@@ -79,6 +79,7 @@ PathProbe {
}
var i, j, allPaths = (environmentPaths || []).concat(platformPaths || []);
+ candidatePaths = allPaths;
for (i in allPaths) {
var platforms = [];
if (hostOS.contains("windows"))
diff --git a/share/qbs/imports/qbs/Probes/AndroidSdkProbe.qbs b/share/qbs/imports/qbs/Probes/AndroidSdkProbe.qbs
index acd5c0003..b3f96ca3b 100644
--- a/share/qbs/imports/qbs/Probes/AndroidSdkProbe.qbs
+++ b/share/qbs/imports/qbs/Probes/AndroidSdkProbe.qbs
@@ -53,6 +53,7 @@ PathProbe {
configure: {
var i, allPaths = (environmentPaths || []).concat(platformPaths || []);
+ candidatePaths = allPaths;
for (i in allPaths) {
if (File.exists(FileInfo.joinPaths(allPaths[i], "tools", "android"))) {
path = allPaths[i];
diff --git a/share/qbs/modules/Android/ndk/ndk.qbs b/share/qbs/modules/Android/ndk/ndk.qbs
index 6141ebda9..88468b3de 100644
--- a/share/qbs/modules/Android/ndk/ndk.qbs
+++ b/share/qbs/modules/Android/ndk/ndk.qbs
@@ -52,7 +52,9 @@ Module {
allowedValues: ["arm64-v8a", "armeabi", "armeabi-v7a", "mips", "mips64", "x86", "x86_64"]
}
- property string appStl: Utilities.versionCompare(version, "17") >= 0 ? "c++_shared" : "system"
+ property string appStl: version
+ ? (Utilities.versionCompare(version, "17") >= 0
+ ? "c++_shared" : "system") : undefined
PropertyOptions {
name: "appStl"
description: "Corresponds to the 'APP_STL' variable in an Android.mk file."
@@ -71,11 +73,11 @@ Module {
property string hostArch: ndkProbe.hostArch
property string ndkDir: ndkProbe.path
property string ndkSamplesDir: ndkProbe.samplesDir
- property string platform: Utilities.versionCompare(version, "15") >= 0
- ? "android-14"
- : "android-9"
+ property string platform: version
+ ? (Utilities.versionCompare(version, "15") >= 0
+ ? "android-14" : "android-9") : undefined
- property bool useUnifiedHeaders: Utilities.versionCompare(version, "15") >= 0
+ property bool useUnifiedHeaders: version ? Utilities.versionCompare(version, "15") >= 0 : false
// Internal properties.
property stringList availableToolchains: ndkProbe.toolchains
@@ -159,12 +161,19 @@ Module {
property bool haveUnifiedStl: version && Utilities.versionCompare(version, "12") >= 0
validate: {
+ if (!ndkDir) {
+ throw ModUtils.ModuleError("Could not find an Android NDK in any of the following "
+ + "locations:\n\t" + ndkProbe.candidatePaths.join("\n\t")
+ + "\nInstall the Android NDK to one of the above locations, "
+ + "or set the Android.ndk.ndkDir property to a valid "
+ + "Android NDK location.");
+ }
+
var validator = new ModUtils.PropertyValidator("Android.ndk");
validator.setRequiredProperty("abi", abi);
validator.setRequiredProperty("appStl", appStl);
validator.setRequiredProperty("toolchainVersion", toolchainVersion);
validator.setRequiredProperty("hostArch", hostArch);
- validator.setRequiredProperty("ndkDir", ndkDir);
validator.setRequiredProperty("platform", platform);
validator.setRequiredProperty("toolchainVersionNumber", toolchainVersionNumber);
return validator.validate();
diff --git a/share/qbs/modules/Android/sdk/sdk.qbs b/share/qbs/modules/Android/sdk/sdk.qbs
index 9afc423a0..904aaa7fe 100644
--- a/share/qbs/modules/Android/sdk/sdk.qbs
+++ b/share/qbs/modules/Android/sdk/sdk.qbs
@@ -92,7 +92,8 @@ Module {
Environment.getEnv(qbs.hostOS.contains("windows")
? "USERPROFILE" : "HOME"),
".android", "debug.keystore")
- property bool useApksigner: Utilities.versionCompare(buildToolsVersion, "24.0.3") >= 0
+ property bool useApksigner: buildToolsVersion
+ ? Utilities.versionCompare(buildToolsVersion, "24.0.3") >= 0 : false
Depends { name: "java" }
java.languageVersion: platformJavaVersion
@@ -143,6 +144,16 @@ Module {
property bool embedJar: true
}
+ validate: {
+ if (!sdkDir) {
+ throw ModUtils.ModuleError("Could not find an Android SDK in any of the following "
+ + "locations:\n\t" + sdkProbe.candidatePaths.join("\n\t")
+ + "\nInstall the Android SDK to one of the above locations, "
+ + "or set the Android.sdk.sdkDir property to a valid "
+ + "Android SDK location.");
+ }
+ }
+
Rule {
inputs: ["android.aidl"]
Artifact {