summaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
authorElias Toivola <[email protected]>2025-10-24 11:39:30 +0300
committerElias Toivola <[email protected]>2025-11-13 06:36:12 +0000
commitf594f4735b76fde0d3e8fa201ee9ba5c720ac781 (patch)
treef745ad55b60d0c3a38045793334ab41d55546b09 /cmake
parent5a685653b8903dbfd722b0c299651b65e3632ac5 (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.cmake102
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)