diff options
author | Leander Beernaert <leander.beernaert@qt.io> | 2019-10-18 14:28:08 +0200 |
---|---|---|
committer | Leander Beernaert <leander.beernaert@qt.io> | 2019-10-18 13:20:46 +0000 |
commit | 373be4200b162ae9b2244d7019770911bc73317a (patch) | |
tree | bdefc6a7e22402d7e08d3b3d2150870a129fc565 | |
parent | 7e7f41e40c39361059ce4693c5e3a5e1ccd6f7e5 (diff) |
Add conversion code for Java code
Add support to pro2cmake to convert java code for android.
Add support to override API_LEVEL for the Android sdk jar file. If the
sdk is not found, we'll default to the one located by QT_ANDROID_JAR.
Change-Id: If0b746dc7f9148ac43e6592a4a4dd23d46bbd4cd
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
-rw-r--r-- | cmake/QtPlatformAndroid.cmake | 12 | ||||
-rw-r--r-- | src/android/jar/.prev_CMakeLists.txt | 30 | ||||
-rw-r--r-- | src/android/jar/CMakeLists.txt | 46 | ||||
-rw-r--r-- | src/plugins/bearer/android/jar/.prev_CMakeLists.txt | 24 | ||||
-rw-r--r-- | src/plugins/bearer/android/jar/CMakeLists.txt | 15 | ||||
-rwxr-xr-x | util/cmake/pro2cmake.py | 43 |
6 files changed, 126 insertions, 44 deletions
diff --git a/cmake/QtPlatformAndroid.cmake b/cmake/QtPlatformAndroid.cmake index cb335da831..3532217722 100644 --- a/cmake/QtPlatformAndroid.cmake +++ b/cmake/QtPlatformAndroid.cmake @@ -27,6 +27,18 @@ if (NOT IS_DIRECTORY "${ANDROID_SDK_ROOT}") message(FATAL_ERROR "Could not find ANDROID_SDK_ROOT or path is not a directory: ${ANDROID_SDK_ROOT}") endif() +# Get the Android SDK jar for an API version other than the one specified with +# QT_ANDROID_API_VERSION. +function(qt_get_android_sdk_jar_for_api api out_jar_location) + set(jar_location "${ANDROID_SDK_ROOT}/platforms/${api}/android.jar") + if (NOT EXISTS "${jar_location}") + message(WARNING "Could not locate Android SDK jar for api '${api}', defaulting to ${QT_ANDROID_API_VERSION}") + set(${out_jar_location} ${QT_ANDROID_JAR} PARENT_SCOPE) + else() + set(${out_jar_location} ${jar_location} PARENT_SCOPE) + endif() +endfunction() + # Minimum recommend android SDK api version set(QT_ANDROID_API_VERSION "android-21") diff --git a/src/android/jar/.prev_CMakeLists.txt b/src/android/jar/.prev_CMakeLists.txt new file mode 100644 index 0000000000..f4c807c33a --- /dev/null +++ b/src/android/jar/.prev_CMakeLists.txt @@ -0,0 +1,30 @@ +# Generated from jar.pro. + +set(java_sources + src/org/qtproject/qt5/android//accessibility/QtAccessibilityDelegate.java + src/org/qtproject/qt5/android//accessibility/QtNativeAccessibility.java + src/org/qtproject/qt5/android//CursorHandle.java + src/org/qtproject/qt5/android//EditContextView.java + src/org/qtproject/qt5/android//EditPopupMenu.java + src/org/qtproject/qt5/android//ExtractStyle.java + src/org/qtproject/qt5/android//QtActivityDelegate.java + src/org/qtproject/qt5/android//QtEditText.java + src/org/qtproject/qt5/android//QtInputConnection.java + src/org/qtproject/qt5/android//QtLayout.java + src/org/qtproject/qt5/android//QtMessageDialogHelper.java + src/org/qtproject/qt5/android//QtNative.java + src/org/qtproject/qt5/android//QtNativeLibrariesDir.java + src/org/qtproject/qt5/android//QtSurface.java + src/org/qtproject/qt5/android//QtThread.java +) + +add_jar(QtAndroid + INCLUDE_JARS ${QT_ANDROID_JAR} + SOURCES ${java_sources} +) + +install_jar(QtAndroid + DESTINATION jar + COMPONENT Devel +) + diff --git a/src/android/jar/CMakeLists.txt b/src/android/jar/CMakeLists.txt index edd8b54352..61af168a67 100644 --- a/src/android/jar/CMakeLists.txt +++ b/src/android/jar/CMakeLists.txt @@ -1,33 +1,31 @@ -# QtAndroid Jar - -# special case skip regeneration -# special case begin -set(path_prefix ${CMAKE_CURRENT_SOURCE_DIR}/src/org/qtproject/qt5/android/) +# Generated from jar.pro. set(java_sources - ${path_prefix}/accessibility/QtAccessibilityDelegate.java - ${path_prefix}/accessibility/QtNativeAccessibility.java - ${path_prefix}/CursorHandle.java - ${path_prefix}/EditContextView.java - ${path_prefix}/EditPopupMenu.java - ${path_prefix}/ExtractStyle.java - ${path_prefix}/QtActivityDelegate.java - ${path_prefix}/QtEditText.java - ${path_prefix}/QtInputConnection.java - ${path_prefix}/QtLayout.java - ${path_prefix}/QtMessageDialogHelper.java - ${path_prefix}/QtNative.java - ${path_prefix}/QtNativeLibrariesDir.java - ${path_prefix}/QtServiceDelegate.java - ${path_prefix}/QtSurface.java - ${path_prefix}/QtThread.java) + src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java + src/org/qtproject/qt5/android/accessibility/QtNativeAccessibility.java + src/org/qtproject/qt5/android/CursorHandle.java + src/org/qtproject/qt5/android/EditContextView.java + src/org/qtproject/qt5/android/EditPopupMenu.java + src/org/qtproject/qt5/android/ExtractStyle.java + src/org/qtproject/qt5/android/QtActivityDelegate.java + src/org/qtproject/qt5/android/QtEditText.java + src/org/qtproject/qt5/android/QtInputConnection.java + src/org/qtproject/qt5/android/QtLayout.java + src/org/qtproject/qt5/android/QtMessageDialogHelper.java + src/org/qtproject/qt5/android/QtNative.java + src/org/qtproject/qt5/android/QtNativeLibrariesDir.java + src/org/qtproject/qt5/android/QtSurface.java + src/org/qtproject/qt5/android/QtThread.java + src/org/qtproject/qt5/android/QtServiceDelegate.java # special case +) add_jar(QtAndroid INCLUDE_JARS ${QT_ANDROID_JAR} SOURCES ${java_sources} - ) +) install_jar(QtAndroid DESTINATION jar - COMPONENT Devel) -# special case end + COMPONENT Devel +) + diff --git a/src/plugins/bearer/android/jar/.prev_CMakeLists.txt b/src/plugins/bearer/android/jar/.prev_CMakeLists.txt index d7f5c86488..f5f25c4f8b 100644 --- a/src/plugins/bearer/android/jar/.prev_CMakeLists.txt +++ b/src/plugins/bearer/android/jar/.prev_CMakeLists.txt @@ -1,18 +1,16 @@ # Generated from jar.pro. -##################################################################### -## QtAndroidBearer Binary: -##################################################################### +set(java_sources + src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java +) + +add_jar(QtAndroidBearer + INCLUDE_JARS ${QT_ANDROID_JAR} + SOURCES ${java_sources} +) -add_qt_executable(QtAndroidBearer - GUI - INSTALL_DIRECTORY "${INSTALL_DIRECTORY}/jar" - OUTPUT_DIRECTORY "$$MODULE_BASE_OUTDIR/jar" - PUBLIC_LIBRARIES - Qt::Gui +install_jar(QtAndroidBearer + DESTINATION jar + COMPONENT Devel ) -#### Keys ignored in scope 1:.:.:jar.pro:<TRUE>: -# JAVACLASSPATH = "$$PWD/src" -# JAVASOURCES = "$$PWD/src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java" -# _LOADED = "qt_build_paths" diff --git a/src/plugins/bearer/android/jar/CMakeLists.txt b/src/plugins/bearer/android/jar/CMakeLists.txt index 804e1d0cca..16641d42b7 100644 --- a/src/plugins/bearer/android/jar/CMakeLists.txt +++ b/src/plugins/bearer/android/jar/CMakeLists.txt @@ -1,10 +1,9 @@ -# special case begin -# This is a manually edited file - -set(path_prefix ${CMAKE_CURRENT_SOURCE_DIR}/src/org/qtproject/qt5/android/bearer) +##################################################################### +## QtAndroidBearer Binary: +##################################################################### set(java_sources - ${path_prefix}/QtNetworkReceiver.java + src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java ) add_jar(QtAndroidBearer @@ -16,4 +15,8 @@ install_jar(QtAndroidBearer DESTINATION jar COMPONENT Devel) -# special case end +#### Keys ignored in scope 1:.:.:jar.pro:<TRUE>: +# JAVACLASSPATH = "$$PWD/src" +# JAVASOURCES = "$$PWD/src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java" +# _LOADED = "qt_build_paths" + diff --git a/util/cmake/pro2cmake.py b/util/cmake/pro2cmake.py index 5041519348..24c77cb2b1 100755 --- a/util/cmake/pro2cmake.py +++ b/util/cmake/pro2cmake.py @@ -2692,6 +2692,44 @@ def write_find_package_section( cm_fh.write("\n") +def write_jar(cm_fh: IO[str], scope: Scope, *, indent: int = 0) -> str: + + target = scope.TARGET + + install_dir = scope.expandString("target.path") + if not install_dir: + raise RuntimeError("Could not locate jar install path") + install_dir = install_dir.replace("$$[QT_INSTALL_PREFIX]/", "") + + android_sdk_jar = "${QT_ANDROID_JAR}" + android_api_level = scope.get_string("API_VERSION") + if android_api_level: + cm_fh.write(f'{spaces(indent)}qt_get_android_sdk_jar_for_api("{android_api_level}" android_sdk)\n\n') + android_sdk_jar ="${android_sdk}" + + write_source_file_list( + cm_fh, + scope, + "", + ["JAVASOURCES"], + indent=indent, + header=f"set(java_sources\n", + footer=")\n", + ) + + cm_fh.write(f"{spaces(indent)}add_jar({target}\n") + cm_fh.write(f"{spaces(indent+1)}INCLUDE_JARS {android_sdk_jar}\n") + cm_fh.write(f"{spaces(indent+1)}SOURCES ${{java_sources}}\n") + cm_fh.write(f"{spaces(indent)})\n\n") + + cm_fh.write(f"{spaces(indent)}install_jar({target}\n") + cm_fh.write(f"{spaces(indent+1)}DESTINATION {install_dir}\n") + cm_fh.write(f"{spaces(indent+1)}COMPONENT Devel\n") + cm_fh.write(f"{spaces(indent)})\n\n") + + return target + + def write_example( cm_fh: IO[str], scope: Scope, gui: bool = False, *, indent: int = 0, is_plugin: bool = False ) -> str: @@ -3030,6 +3068,7 @@ def handle_app_or_lib( assert scope.TEMPLATE in ("app", "lib") config = scope.get("CONFIG") + is_jar = "java" in config is_lib = scope.TEMPLATE == "lib" is_qml_plugin = any("qml_plugin" == s for s in scope.get("_LOADED")) is_plugin = ( @@ -3040,7 +3079,9 @@ def handle_app_or_lib( val not in config for val in ["console", "cmdline"] ) and "testlib" not in scope.expand("QT") - if is_example: + if is_jar: + tar = write_jar(cm_fh, scope, indent=indent) + elif is_example: target = write_example(cm_fh, scope, gui, indent=indent, is_plugin=is_plugin) elif is_plugin: assert not is_example |