aboutsummaryrefslogtreecommitdiff
path: root/find-modules
diff options
context:
space:
mode:
authorVolker Krause <vkrause@kde.org>2020-09-10 15:36:06 +0200
committerAleix Pol Gonzalez <aleixpol@kde.org>2020-10-12 11:56:20 +0000
commit64cb8ccc9511a641e108838526405230e527e4f2 (patch)
tree6e92261b942b2878bf8e04fe324422ae90f91066 /find-modules
parentea843d0852d7319a5a1ab3bf7a8c3cd9f823bdd6 (diff)
downloadextra-cmake-modules-64cb8ccc9511a641e108838526405230e527e4f2.tar.gz
extra-cmake-modules-64cb8ccc9511a641e108838526405230e527e4f2.tar.bz2
Add FindGradle from KNotification
Besides finding Gradle from QtAndroidExtras and thus avoiding the usual way of the Android world of distributing that (a copy in your source code), it provides macros to generate and install Android AARs. Those are needed for libraries that have a non-trivial Java component on Android, e.g. needing a manifest fragment or having a dependency on other Java libs. This file has been copied to a few places meanwhile, so centralizing this in ECM makes sense.
Diffstat (limited to 'find-modules')
-rw-r--r--find-modules/FindGradle.cmake86
-rw-r--r--find-modules/local.properties.cmake1
-rw-r--r--find-modules/settings.gradle.cmake1
3 files changed, 88 insertions, 0 deletions
diff --git a/find-modules/FindGradle.cmake b/find-modules/FindGradle.cmake
new file mode 100644
index 00000000..02ccf38a
--- /dev/null
+++ b/find-modules/FindGradle.cmake
@@ -0,0 +1,86 @@
+#.rst:
+# FindGradle
+# ----------
+#
+# Provides the ability to build Android AAR libraries using Gradle.
+#
+# This relies on the Qt provided Gradle, so a Qt for Android installation
+# is required.
+#
+# gradle_add_aar(<target>
+# BUIDLFILE build.gradle
+# NAME <aar-name>)
+#
+# This builds an Android AAR library using the given ``build.gradle`` file.
+#
+# gradle_install_aar(<target>
+# DESTINATION <dest>)
+#
+# Installs a Android AAR library that has been created with ``gradle_add_aar``.
+
+#=============================================================================
+# SPDX-FileCopyrightText: 2019 Volker Krause <vkrause@kde.org>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#=============================================================================
+
+include(CMakeParseArguments)
+include(FindPackageHandleStandardArgs)
+
+find_package(Qt5Core REQUIRED)
+
+if (NOT WIN32)
+ set(Gradle_EXECUTABLE ${CMAKE_BINARY_DIR}/gradle/gradlew)
+else()
+ set(Gradle_EXECUTABLE ${CMAKE_BINARY_DIR}/gradle/gradlew.bat)
+endif()
+
+get_target_property(_qt_core_location Qt5::Core LOCATION)
+get_filename_component(_qt_install_root ${_qt_core_location} DIRECTORY)
+get_filename_component(_qt_install_root ${_qt_install_root}/../ ABSOLUTE)
+
+set(_gradle_template_dir ${CMAKE_CURRENT_LIST_DIR})
+
+add_custom_command(OUTPUT ${Gradle_EXECUTABLE}
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/gradle
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${_qt_install_root}/src/3rdparty/gradle ${CMAKE_BINARY_DIR}/gradle
+)
+add_custom_target(gradle DEPENDS ${Gradle_EXECUTABLE})
+
+find_package_handle_standard_args(Gradle DEFAULT_MSG Gradle_EXECUTABLE)
+
+function(gradle_add_aar target)
+ cmake_parse_arguments(ARG "" "BUILDFILE;NAME" "" ${ARGN})
+
+ set(_build_root ${CMAKE_CURRENT_BINARY_DIR}/gradle_build/${ARG_NAME})
+ configure_file(${_gradle_template_dir}/local.properties.cmake ${_build_root}/local.properties)
+ configure_file(${_gradle_template_dir}/settings.gradle.cmake ${_build_root}/settings.gradle)
+ configure_file(${ARG_BUILDFILE} ${_build_root}/build.gradle)
+
+ if (CMAKE_BUILD_TYPE MATCHES "[Dd][Ee][Bb][Uu][Gg]")
+ set(_aar_suffix "-debug")
+ set(_aar_gradleCmd "assembleDebug")
+ else()
+ set(_aar_suffix "-release")
+ set(_aar_gradleCmd "assembleRelease")
+ endif()
+
+ file(GLOB_RECURSE _src_files CONFIGURE_DEPENDS "*")
+ add_custom_command(
+ OUTPUT ${_build_root}/build/outputs/aar/${ARG_NAME}${_aar_suffix}.aar
+ COMMAND ${Gradle_EXECUTABLE} ${_aar_gradleCmd}
+ DEPENDS ${Gradle_EXECUTABLE} ${_src_files}
+ DEPENDS gradle
+ WORKING_DIRECTORY ${_build_root}
+ )
+ add_custom_target(${target} ALL DEPENDS ${_build_root}/build/outputs/aar/${ARG_NAME}${_aar_suffix}.aar)
+ set_target_properties(${target} PROPERTIES LOCATION ${_build_root}/build/outputs/aar/${ARG_NAME}${_aar_suffix}.aar)
+ set_target_properties(${target} PROPERTIES OUTPUT_NAME ${ARG_NAME})
+endfunction()
+
+function(gradle_install_aar target)
+ cmake_parse_arguments(ARG "" "DESTINATION" "" ${ARGN})
+ get_target_property(_loc ${target} LOCATION)
+ get_target_property(_name ${target} OUTPUT_NAME)
+ install(FILES ${_loc} DESTINATION ${ARG_DESTINATION} RENAME ${_name}.aar)
+endfunction()
diff --git a/find-modules/local.properties.cmake b/find-modules/local.properties.cmake
new file mode 100644
index 00000000..4f14cc3f
--- /dev/null
+++ b/find-modules/local.properties.cmake
@@ -0,0 +1 @@
+sdk.dir=@ANDROID_SDK_ROOT@
diff --git a/find-modules/settings.gradle.cmake b/find-modules/settings.gradle.cmake
new file mode 100644
index 00000000..6628d9e7
--- /dev/null
+++ b/find-modules/settings.gradle.cmake
@@ -0,0 +1 @@
+rootProject.name = '@ARG_NAME@'