aboutsummaryrefslogtreecommitdiff
path: root/toolchain
diff options
context:
space:
mode:
Diffstat (limited to 'toolchain')
-rw-r--r--toolchain/Android.cmake30
-rw-r--r--toolchain/deployment-file.json.in2
-rw-r--r--toolchain/specifydependencies.cmake22
3 files changed, 27 insertions, 27 deletions
diff --git a/toolchain/Android.cmake b/toolchain/Android.cmake
index 9b104747..a60771bc 100644
--- a/toolchain/Android.cmake
+++ b/toolchain/Android.cmake
@@ -174,38 +174,16 @@ if(DEFINED QTANDROID_EXPORTED_TARGET AND NOT TARGET ${CREATEAPK_TARGET_NAME})
find_package(Qt5Core REQUIRED)
- function(EOFHook)
- if(CMAKE_PARENT_LIST_FILE STREQUAL "")
- generate_deployment_file()
- endif()
- endfunction()
-
- function(generate_deployment_file)
- get_property(_DEPENDENCIES TARGET ${QTANDROID_EXPORTED_TARGET} PROPERTY INTERFACE_LINK_LIBRARIES)
- set(_DEPS_LIST)
- foreach(_DEP IN LISTS _DEPENDENCIES)
- if(NOT _DEP MATCHES "Qt5::.*")
- get_property(_DEP_LOCATION TARGET ${_DEP} PROPERTY "LOCATION_${CMAKE_BUILD_TYPE}")
- list(APPEND _DEPS_LIST ${_DEP_LOCATION})
- endif()
- endforeach()
- string(REPLACE ";" "," _DEPS "${_DEPS_LIST}")
- configure_file("${_CMAKE_ANDROID_DIR}/deployment-file.json.in" "${QTANDROID_EXPORTED_TARGET}-deployment.json")
- endfunction()
- #we want to call the function after the project has been set up
- variable_watch(CMAKE_PARENT_LIST_FILE EOFHook)
-
-# Create the target that will eventually generate the apk
- get_filename_component(QTDIR "${Qt5Core_DIR}/../../../" ABSOLUTE)
- find_program(ANDROID_DEPLOY_QT androiddeployqt HINTS "${QTDIR}/bin")
set(EXPORT_DIR "${CMAKE_BINARY_DIR}/${QTANDROID_EXPORTED_TARGET}_build_apk/")
set(EXECUTABLE_DESTINATION_PATH "${EXPORT_DIR}/libs/${ANDROID_ABI}/lib${QTANDROID_EXPORTED_TARGET}.so")
+ configure_file("${_CMAKE_ANDROID_DIR}/deployment-file.json.in" "${QTANDROID_EXPORTED_TARGET}-deployment.json.in")
add_custom_target(${CREATEAPK_TARGET_NAME}
- COMMAND cmake -E echo "Generating $<TARGET_NAME:${QTANDROID_EXPORTED_TARGET}> with ${ANDROID_DEPLOY_QT}"
+ COMMAND cmake -E echo "Generating $<TARGET_NAME:${QTANDROID_EXPORTED_TARGET}> with $<TARGET_FILE_DIR:Qt5::qmake>/androiddeployqt"
COMMAND cmake -E copy_directory "${ANDROID_APK_DIR}" "${EXPORT_DIR}"
COMMAND cmake -E copy "$<TARGET_FILE:${QTANDROID_EXPORTED_TARGET}>" "${EXECUTABLE_DESTINATION_PATH}"
- COMMAND ${ANDROID_DEPLOY_QT} --input "${QTANDROID_EXPORTED_TARGET}-deployment.json" --output "${EXPORT_DIR}" --deployment bundled "\\$(ARGS)"
+ COMMAND cmake -DINPUT_FILE="${QTANDROID_EXPORTED_TARGET}-deployment.json.in" -DOUTPUT_FILE="${QTANDROID_EXPORTED_TARGET}-deployment.json" "-DTARGET_DIR=$<TARGET_FILE_DIR:${QTANDROID_EXPORTED_TARGET}>" "-DTARGET_NAME=${QTANDROID_EXPORTED_TARGET}" -P ${_CMAKE_ANDROID_DIR}/specifydependencies.cmake
+ COMMAND $<TARGET_FILE_DIR:Qt5::qmake>/androiddeployqt --input "${QTANDROID_EXPORTED_TARGET}-deployment.json" --output "${EXPORT_DIR}" --deployment bundled "\\$(ARGS)"
)
else()
message(STATUS "You can export a target by specifying -DQTANDROID_EXPORTED_TARGET=<targetname>")
diff --git a/toolchain/deployment-file.json.in b/toolchain/deployment-file.json.in
index 8534cd2f..9367bc1b 100644
--- a/toolchain/deployment-file.json.in
+++ b/toolchain/deployment-file.json.in
@@ -8,7 +8,7 @@
"ndk-host": "@_HOST@",
"target-architecture": "@ANDROID_ABI@",
"application-binary": "@EXECUTABLE_DESTINATION_PATH@",
- "android-extra-libs": "@_DEPS@",
+ "android-extra-libs": "##EXTRALIBS##",
"android-extra-plugins": "@CMAKE_INSTALL_PREFIX@/share,@CMAKE_INSTALL_PREFIX@/lib/qml",
"android-package-source-directory": "@ANDROID_APK_DIR@",
"sdkBuildToolsRevision": "@ANDROID_SDK_BUILD_TOOLS_REVISION@"
diff --git a/toolchain/specifydependencies.cmake b/toolchain/specifydependencies.cmake
new file mode 100644
index 00000000..21b169ae
--- /dev/null
+++ b/toolchain/specifydependencies.cmake
@@ -0,0 +1,22 @@
+file(READ "${TARGET_DIR}/CMakeFiles/${TARGET_NAME}.dir/link.txt" out)
+
+string(FIND "${out}" "-o ${TARGET_NAME}" POS) #we trim the initial arguments, we want the ones in the end. we find the target
+string(SUBSTRING "${out}" ${POS} -1 out) #we
+string(REGEX MATCHALL " /.+\\.so" outout "${out}")
+string(STRIP "${outout}" outout)
+string(REPLACE " /" ";/" outout "${outout}")
+
+set(extralibs)
+foreach(lib IN LISTS outout) #now we filter Qt5 libraries, because Qt wants to take care about these itself
+ if(NOT ${lib} MATCHES ".*/libQt5.*")
+ if(extralibs)
+ set(extralibs "${extralibs},${lib}")
+ else()
+ set(extralibs "${lib}")
+ endif()
+ endif()
+endforeach()
+
+file(READ "${INPUT_FILE}" CONTENTS)
+string(REPLACE "##EXTRALIBS##" "${extralibs}" NEWCONTENTS "${CONTENTS}")
+file(WRITE "${OUTPUT_FILE}" ${NEWCONTENTS})