From 850f1ce66cbb36c5aba57aea37740ea6d184ad30 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Thu, 15 Jun 2023 18:04:55 +0200 Subject: Android: Don't pass duplicate ANDROID_PLATFORM to CMake This makes sure that one unique argument "-DANDROID_PLATFORM:STRING=..." is passed to CMake. An entry in a kit's CMake configuration has the precedence over the ANDROID_PLATFORM defined by Qt's build system. Fixes: QTCREATORBUG-29112 Change-Id: I1c4d80be9ddfc7a00a5a7eff476497f08d87b741 Reviewed-by: Assam Boudjelthia Reviewed-by: Alexey Edelev Reviewed-by: --- src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 1ae95c1807..eaefce8a0e 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -1468,10 +1468,18 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id) // Android magic: if (DeviceTypeKitAspect::deviceTypeId(k) == Android::Constants::ANDROID_DEVICE_TYPE) { + auto addUniqueKeyToCmd = [&cmd] (const QString &prefix, const QString &value) -> bool { + const bool isUnique = + !Utils::contains(cmd.splitArguments(), [&prefix] (const QString &arg) { + return arg.startsWith(prefix); }); + if (isUnique) + cmd.addArg(prefix + value); + return isUnique; + }; buildSteps()->appendStep(Android::Constants::ANDROID_BUILD_APK_ID); const auto bs = buildSteps()->steps().constLast(); - cmd.addArg("-DANDROID_PLATFORM:STRING=" - + bs->data(Android::Constants::AndroidNdkPlatform).toString()); + addUniqueKeyToCmd("-DANDROID_PLATFORM:STRING=", + bs->data(Android::Constants::AndroidNdkPlatform).toString()); auto ndkLocation = bs->data(Android::Constants::NdkLocation).value(); cmd.addArg("-DANDROID_NDK:PATH=" + ndkLocation.path()); -- cgit v1.2.3