diff options
author | Jake Petroules <jake.petroules@qt.io> | 2018-01-22 21:47:38 -0800 |
---|---|---|
committer | Jake Petroules <jake.petroules@qt.io> | 2018-01-25 16:14:00 +0000 |
commit | 5423eed454e89b250ba69a5fb2f53ea29aed421f (patch) | |
tree | fd40891773e30af68338f5e6eeb7950489a75cb3 | |
parent | 7553fd75cf2b8d16134478157cffd3886b21e36d (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.qbs | 1 | ||||
-rw-r--r-- | share/qbs/imports/qbs/Probes/AndroidSdkProbe.qbs | 1 | ||||
-rw-r--r-- | share/qbs/modules/Android/ndk/ndk.qbs | 21 | ||||
-rw-r--r-- | share/qbs/modules/Android/sdk/sdk.qbs | 13 |
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 { |