diff options
| author | Elias Toivola <[email protected]> | 2025-10-24 11:39:30 +0300 |
|---|---|---|
| committer | Elias Toivola <[email protected]> | 2025-11-13 06:36:12 +0000 |
| commit | f594f4735b76fde0d3e8fa201ee9ba5c720ac781 (patch) | |
| tree | f745ad55b60d0c3a38045793334ab41d55546b09 /cmake | |
| parent | 5a685653b8903dbfd722b0c299651b65e3632ac5 (diff) | |
Add qtbase Qt6Android.jar to class-path
This way qtdeclarative can detect class objects from qtbase when
generating Java docs.
Fixes: QTBUG-140073
Change-Id: I5294f56634db63dfd9c8526e206c00534da130cb
Reviewed-by: Nicholas Bennett <[email protected]>
Reviewed-by: Joerg Bornemann <[email protected]>
Reviewed-by: Alexandru Croitor <[email protected]>
Reviewed-by: Assam Boudjelthia <[email protected]>
Diffstat (limited to 'cmake')
| -rw-r--r-- | cmake/QtAndroidHelpers.cmake | 102 |
1 files changed, 92 insertions, 10 deletions
diff --git a/cmake/QtAndroidHelpers.cmake b/cmake/QtAndroidHelpers.cmake index 59a469b1683..5e7425d6b7a 100644 --- a/cmake/QtAndroidHelpers.cmake +++ b/cmake/QtAndroidHelpers.cmake @@ -88,11 +88,76 @@ macro(qt_internal_setup_android_target_properties) ) endmacro() +function(qt_internal_locate_qt_android_base_jar out_var) + + set(datadir "${INSTALL_DATADIR}") + if(NOT DEFINED datadir OR datadir STREQUAL "") + set(datadir ".") + endif() + + qt_path_join( + jar + "${QT_TOOLCHAIN_RELOCATABLE_INSTALL_PREFIX}" + "${datadir}" + "jar" + "Qt${PROJECT_VERSION_MAJOR}Android.jar" + ) + + # Optional override + if(DEFINED ENV{QT_ANDROID_JAR_PATH} AND EXISTS "$ENV{QT_ANDROID_JAR_PATH}") + set(jar "$ENV{QT_ANDROID_JAR_PATH}") + endif() + + set(${out_var} "${jar}" PARENT_SCOPE) +endfunction() + +function(qt_internal_compute_android_javadoc_classpath out_var) + + if(CMAKE_HOST_WIN32) + set(sep ";") + else() + set(sep ":") + endif() + + # qtbase: use build-tree jar and exit early + if(PROJECT_NAME STREQUAL "QtBase") + set(jar "${QT_BUILD_DIR}/jar/Qt${QtBase_VERSION_MAJOR}Android.jar") + set(${out_var} "${QT_ANDROID_JAR}${sep}${jar}" PARENT_SCOPE) + return() + endif() + + # Downstream: use installed jar from the shared locator + qt_internal_locate_qt_android_base_jar(qt_classes_jar) + if(NOT EXISTS "${qt_classes_jar}") + message(FATAL_ERROR + "Qt Android JAR not found at:\n ${qt_classes_jar}") + endif() + + set(${out_var} "${QT_ANDROID_JAR}${sep}${qt_classes_jar}" PARENT_SCOPE) +endfunction() + +function(qt_internal_write_android_javadoc_args + response_file + output_dir + source_paths + package_names_space_separated) + + qt_internal_compute_android_javadoc_classpath(class_path) + + file(CONFIGURE + OUTPUT "${response_file}" + CONTENT "${package_names_space_separated} +--class-path \"${class_path}\" +-d \"${output_dir}\" +--source-path \"${source_paths}\" +" + ) +endfunction() + function(qt_internal_add_android_permission target) _qt_internal_add_android_permission(${ARGV}) endfunction() - function(qt_internal_android_dependencies_content target file_content_out) get_target_property(arg_JAR_DEPENDENCIES ${target} QT_ANDROID_JAR_DEPENDENCIES) get_target_property(arg_BUNDLED_JAR_DEPENDENCIES ${target} QT_ANDROID_BUNDLED_JAR_DEPENDENCIES) @@ -382,21 +447,30 @@ function(qt_internal_add_javadoc_target) set(javadoc_output_dir "${arg_OUTPUT_DIR}/android") set(response_file "${CMAKE_CURRENT_BINARY_DIR}/doc/.javadocargs") string(REPLACE ";" " " package_names_space_separated "${package_names}") - file(CONFIGURE - OUTPUT "${response_file}" - CONTENT "${package_names_space_separated} ---class-path \"${QT_ANDROID_JAR}\" --d \"${javadoc_output_dir}\" ---source-path \"${source_dirs}\"" - ) set(module ${arg_MODULE}) set(javadoc_target android_html_docs_${module}) - add_custom_target(${javadoc_target} ${command_args} + + # Write the args file + qt_internal_write_android_javadoc_args( + "${response_file}" + "${javadoc_output_dir}" + "${source_dirs}" + "${package_names_space_separated}" + ) + + add_custom_target(${javadoc_target} COMMAND ${Java_JAVADOC_EXECUTABLE} "@${response_file}" COMMENT "Generating Java documentation" VERBATIM ) + + if(PROJECT_NAME STREQUAL "QtBase") + if(TARGET Qt${QtBase_VERSION_MAJOR}Android) + add_dependencies(${javadoc_target} Qt${QtBase_VERSION_MAJOR}Android) + endif() + endif() + add_dependencies(docs_android ${javadoc_target}) if (QT_WILL_INSTALL) @@ -432,10 +506,18 @@ function(qt_internal_create_source_jar) set(module ${arg_MODULE}) set(jar_target android_source_jar_${module}) set(jar_name ${CMAKE_INSTALL_NAMESPACE}AndroidSources${module}) + + qt_internal_locate_qt_android_base_jar(qt_classes_jar) + + set(include_jars "${QT_ANDROID_JAR}") + if(EXISTS "${qt_classes_jar}") + list(APPEND include_jars "${qt_classes_jar}") + endif() + add_jar(${jar_target} SOURCES ${arg_SOURCES} VERSION ${PROJECT_VERSION} - INCLUDE_JARS "${QT_ANDROID_JAR}" + INCLUDE_JARS ${include_jars} OUTPUT_NAME ${jar_name} ) set_target_properties(${jar_target} PROPERTIES EXCLUDE_FROM_ALL ON) |
