aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleix Pol <aleixpol@kde.org>2018-04-11 20:20:19 +0200
committerAleix Pol <aleixpol@kde.org>2018-04-12 11:47:02 +0200
commit8e2ce83987d26077d28bd26342100683ea35d2f1 (patch)
tree5a76ffd9e9f1aa2544aa4738241ba58aa99534f1
parent4baac2ecae1f23723d4fde4f346bdaa54112d9a2 (diff)
downloadextra-cmake-modules-8e2ce83987d26077d28bd26342100683ea35d2f1.tar.gz
extra-cmake-modules-8e2ce83987d26077d28bd26342100683ea35d2f1.tar.bz2
Check if the application androiddeployqt package has a main() symbol
Summary: Back in the KDE Edu sprint, we decided we need such a check, otherwise you get rather frustrated when the application isn't started. A patch to androiddeployqt was submitted but rejected by the maintainer. https://codereview.qt-project.org/#/c/207941/ Test Plan: kate doesn't build if we don't pass Q_DECL_EXPORT, builds if we do. Reviewers: #frameworks, #build_system, vkrause Reviewed By: vkrause Subscribers: vkrause, vatra, aacid Tags: #frameworks, #build_system Differential Revision: https://phabricator.kde.org/D12120
-rw-r--r--toolchain/Android.cmake1
-rw-r--r--toolchain/hasMainSymbol.cmake10
2 files changed, 11 insertions, 0 deletions
diff --git a/toolchain/Android.cmake b/toolchain/Android.cmake
index afe9b917..9eddcb22 100644
--- a/toolchain/Android.cmake
+++ b/toolchain/Android.cmake
@@ -235,6 +235,7 @@ if(DEFINED QTANDROID_EXPORTED_TARGET AND NOT TARGET ${CREATEAPK_TARGET_NAME})
COMMAND cmake -E remove_directory "${EXPORT_DIR}"
COMMAND cmake -E copy_directory "${ANDROID_APK_DIR}" "${EXPORT_DIR}"
COMMAND cmake -E copy "$<TARGET_FILE:${QTANDROID_EXPORTED_TARGET}>" "${EXECUTABLE_DESTINATION_PATH}"
+ COMMAND LANG=C cmake "-DTARGET=$<TARGET_FILE:${QTANDROID_EXPORTED_TARGET}>" -P ${_CMAKE_ANDROID_DIR}/hasMainSymbol.cmake
COMMAND LANG=C cmake -DINPUT_FILE="${QTANDROID_EXPORTED_TARGET}-deployment.json.in" -DOUTPUT_FILE="${QTANDROID_EXPORTED_TARGET}-deployment.json" "-DTARGET=$<TARGET_FILE:${QTANDROID_EXPORTED_TARGET}>" "-DOUTPUT_DIR=$<TARGET_FILE_DIR:${QTANDROID_EXPORTED_TARGET}>" "-DEXPORT_DIR=${CMAKE_INSTALL_PREFIX}" "-DECM_ADDITIONAL_FIND_ROOT_PATH=\"${ECM_ADDITIONAL_FIND_ROOT_PATH}\"" -P ${_CMAKE_ANDROID_DIR}/specifydependencies.cmake
COMMAND $<TARGET_FILE_DIR:Qt5::qmake>/androiddeployqt --gradle --input "${QTANDROID_EXPORTED_TARGET}-deployment.json" --output "${EXPORT_DIR}" --deployment bundled ${arguments}
)
diff --git a/toolchain/hasMainSymbol.cmake b/toolchain/hasMainSymbol.cmake
new file mode 100644
index 00000000..9a041e73
--- /dev/null
+++ b/toolchain/hasMainSymbol.cmake
@@ -0,0 +1,10 @@
+execute_process(COMMAND nm --dynamic ${TARGET} ERROR_VARIABLE nm_errors OUTPUT_VARIABLE out RESULT_VARIABLE result)
+
+if (NOT result EQUAL 0)
+ message(FATAL_ERROR "nm failed on ${TARGET} exit(${result}): ${nm_errors}")
+endif()
+
+string(FIND ${out} " T main\n" found)
+if(found LESS 0)
+ message(FATAL_ERROR "Could not find a main() symbol on ${TARGET}")
+endif()