Warning, /frameworks/extra-cmake-modules/find-modules/FindGradle.cmake is written in an unsupported language. File is not indexed.

0001 # SPDX-FileCopyrightText: 2019 Volker Krause <vkrause@kde.org>
0002 #
0003 # SPDX-License-Identifier: BSD-3-Clause
0004 
0005 #[=======================================================================[.rst:
0006 FindGradle
0007 ----------
0008 
0009 Provides the ability to build Android AAR libraries using Gradle.
0010 
0011 This relies on the Qt provided Gradle, so a Qt for Android installation
0012 is required.
0013 ::
0014 
0015   gradle_add_aar(<target>
0016                  BUIDLFILE build.gradle
0017                  NAME <aar-name>)
0018 
0019 This builds an Android AAR library using the given ``build.gradle`` file.
0020 ::
0021 
0022   gradle_install_aar(<target>
0023                      DESTINATION <dest>)
0024 
0025 Installs a Android AAR library that has been created with ``gradle_add_aar``.
0026 
0027 Since 5.76.0.
0028 #]=======================================================================]
0029 
0030 include(${CMAKE_CURRENT_LIST_DIR}/../modules/QtVersionOption.cmake)
0031 include(FindPackageHandleStandardArgs)
0032 
0033 find_package(Qt${QT_MAJOR_VERSION}Core REQUIRED)
0034 
0035 set (Gradle_PRECOMMAND "")
0036 if (NOT WIN32)
0037     set(Gradle_EXECUTABLE ${CMAKE_BINARY_DIR}/gradle/gradlew)
0038     # the gradlew script installed by Qt6 is not executable, so running it directly fails
0039     if (QT_MAJOR_VERSION EQUAL "6")
0040         set(Gradle_PRECOMMAND "sh")
0041     endif()
0042 else()
0043     set(Gradle_EXECUTABLE ${CMAKE_BINARY_DIR}/gradle/gradlew.bat)
0044 endif()
0045 
0046 get_target_property(_qt_core_location Qt${QT_MAJOR_VERSION}::Core LOCATION)
0047 get_filename_component(_qt_install_root ${_qt_core_location} DIRECTORY)
0048 get_filename_component(_qt_install_root ${_qt_install_root}/../ ABSOLUTE)
0049 
0050 set(_gradle_template_dir ${CMAKE_CURRENT_LIST_DIR})
0051 
0052 add_custom_command(OUTPUT ${Gradle_EXECUTABLE}
0053     COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/gradle
0054     COMMAND ${CMAKE_COMMAND} -E copy_directory ${_qt_install_root}/src/3rdparty/gradle ${CMAKE_BINARY_DIR}/gradle
0055 )
0056 add_custom_target(gradle DEPENDS ${Gradle_EXECUTABLE})
0057 
0058 # Android Gradle plugin version (not the Gradle version!) used by Qt, for use in our own build.gradle files
0059 file(READ ${_qt_install_root}/src/android/templates/build.gradle _build_grade_template)
0060 string(REGEX MATCH "[0-9]+\.[0-9]+\.[0-9]+" Gradle_ANDROID_GRADLE_PLUGIN_VERSION ${_build_grade_template})
0061 
0062 find_package_handle_standard_args(Gradle DEFAULT_MSG Gradle_EXECUTABLE)
0063 
0064 function(gradle_add_aar target)
0065     cmake_parse_arguments(ARG "" "BUILDFILE;NAME" "" ${ARGN})
0066 
0067     set(_build_root ${CMAKE_CURRENT_BINARY_DIR}/gradle_build/${ARG_NAME})
0068     configure_file(${_gradle_template_dir}/local.properties.cmake ${_build_root}/local.properties)
0069     configure_file(${_gradle_template_dir}/settings.gradle.cmake ${_build_root}/settings.gradle)
0070     configure_file(${ARG_BUILDFILE} ${_build_root}/build.gradle)
0071 
0072     if (CMAKE_BUILD_TYPE MATCHES "[Dd][Ee][Bb][Uu][Gg]")
0073         set(_aar_suffix "-debug")
0074         set(_aar_gradleCmd "assembleDebug")
0075     else()
0076         set(_aar_suffix "-release")
0077         set(_aar_gradleCmd "assembleRelease")
0078     endif()
0079 
0080     file(GLOB_RECURSE _src_files CONFIGURE_DEPENDS "*")
0081     add_custom_command(
0082         OUTPUT ${_build_root}/build/outputs/aar/${ARG_NAME}${_aar_suffix}.aar
0083         COMMAND ${Gradle_PRECOMMAND} ${Gradle_EXECUTABLE} ${_aar_gradleCmd}
0084         # this allows make create-apk to work without installations for apps with AAR libs in the same repository
0085         COMMAND ${CMAKE_COMMAND} -E copy ${_build_root}/build/outputs/aar/${ARG_NAME}${_aar_suffix}.aar ${CMAKE_BINARY_DIR}/jar/${ARG_NAME}.aar
0086         DEPENDS ${Gradle_EXECUTABLE} ${_src_files}
0087         DEPENDS gradle
0088         WORKING_DIRECTORY ${_build_root}
0089     )
0090     add_custom_target(${target} ALL DEPENDS ${_build_root}/build/outputs/aar/${ARG_NAME}${_aar_suffix}.aar)
0091     set_target_properties(${target} PROPERTIES LOCATION ${_build_root}/build/outputs/aar/${ARG_NAME}${_aar_suffix}.aar)
0092     set_target_properties(${target} PROPERTIES OUTPUT_NAME ${ARG_NAME})
0093 endfunction()
0094 
0095 function(gradle_install_aar target)
0096     cmake_parse_arguments(ARG "" "DESTINATION" "" ${ARGN})
0097     get_target_property(_loc ${target} LOCATION)
0098     get_target_property(_name ${target} OUTPUT_NAME)
0099     install(FILES ${_loc} DESTINATION ${ARG_DESTINATION} RENAME ${_name}.aar)
0100 endfunction()