From 227e6b2690543b581316f8b10dbcfdb4b12fed89 Mon Sep 17 00:00:00 2001 From: saberoueslati Date: Fri, 1 May 2026 22:23:52 +0100 Subject: [PATCH 1/3] Fix AppImage packaging when linuxdeploy-plugin-qt picks a Qt 5 qmake --- cmake/PackagingLinux.cmake | 56 +++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/cmake/PackagingLinux.cmake b/cmake/PackagingLinux.cmake index 721f872fd..9f6393a99 100644 --- a/cmake/PackagingLinux.cmake +++ b/cmake/PackagingLinux.cmake @@ -6,6 +6,60 @@ set(APPDIR_USR ${APPDIR}/usr) set(LINUXDEPLOY ${CMAKE_BINARY_DIR}/linuxdeploy-x86_64.AppImage) set(LINUXDEPLOY_QT ${CMAKE_BINARY_DIR}/linuxdeploy-plugin-qt-x86_64.AppImage) +function(resolve_qt6_qmake out_var) + set(qt6_qmake_candidates "") + + find_package(Qt6CoreTools QUIET) + if(TARGET Qt6::qmake) + get_target_property(qt6_qmake_target Qt6::qmake IMPORTED_LOCATION) + if(qt6_qmake_target) + list(APPEND qt6_qmake_candidates "${qt6_qmake_target}") + endif() + endif() + + find_program(qmake6_executable + NAMES qmake6 qmake-qt6 qmake + HINTS + /usr/lib/qt6/bin + /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/qt6/bin + ) + if(qmake6_executable) + list(APPEND qt6_qmake_candidates "${qmake6_executable}") + endif() + + list(REMOVE_DUPLICATES qt6_qmake_candidates) + + foreach(qmake_candidate IN LISTS qt6_qmake_candidates) + execute_process( + COMMAND "${qmake_candidate}" -query QT_VERSION + OUTPUT_VARIABLE qmake_qt_version + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + RESULT_VARIABLE qmake_result + ) + if(qmake_result EQUAL 0 AND qmake_qt_version MATCHES "^6\\.") + set(${out_var} "${qmake_candidate}" PARENT_SCOPE) + return() + endif() + endforeach() + + set(${out_var} "" PARENT_SCOPE) +endfunction() + +resolve_qt6_qmake(QT6_QMAKE) +if(QT6_QMAKE) + message(STATUS "Using Qt qmake for AppImage packaging: ${QT6_QMAKE}") + set(APPIMAGE_ENV_VARS + LDAI_OUTPUT=NotepadNext-v${PROJECT_VERSION}-x86_64.AppImage + QMAKE=${QT6_QMAKE} + ) +else() + message(WARNING "Could not locate a Qt 6 qmake binary for AppImage packaging") + set(APPIMAGE_ENV_VARS + LDAI_OUTPUT=NotepadNext-v${PROJECT_VERSION}-x86_64.AppImage + ) +endif() + install(TARGETS NotepadNext RUNTIME DESTINATION bin ) @@ -40,7 +94,7 @@ add_custom_target(download_linuxdeploy add_custom_target(appimage COMMAND ${CMAKE_COMMAND} -E env - LDAI_OUTPUT=NotepadNext-v${PROJECT_VERSION}-x86_64.AppImage + ${APPIMAGE_ENV_VARS} ${LINUXDEPLOY} --appdir ${APPDIR} --executable ${APPDIR_USR}/bin/NotepadNext From ef1cf40451146275ee43feee98fbc6ef3dbf83f4 Mon Sep 17 00:00:00 2001 From: saberoueslati Date: Sat, 2 May 2026 21:46:16 +0100 Subject: [PATCH 2/3] simplified qmake check --- cmake/PackagingLinux.cmake | 78 ++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 46 deletions(-) diff --git a/cmake/PackagingLinux.cmake b/cmake/PackagingLinux.cmake index 9f6393a99..0b29d2856 100644 --- a/cmake/PackagingLinux.cmake +++ b/cmake/PackagingLinux.cmake @@ -6,60 +6,46 @@ set(APPDIR_USR ${APPDIR}/usr) set(LINUXDEPLOY ${CMAKE_BINARY_DIR}/linuxdeploy-x86_64.AppImage) set(LINUXDEPLOY_QT ${CMAKE_BINARY_DIR}/linuxdeploy-plugin-qt-x86_64.AppImage) -function(resolve_qt6_qmake out_var) - set(qt6_qmake_candidates "") +set(APPIMAGE_ENV_VARS + LDAI_OUTPUT=NotepadNext-v${PROJECT_VERSION}-x86_64.AppImage +) - find_package(Qt6CoreTools QUIET) - if(TARGET Qt6::qmake) - get_target_property(qt6_qmake_target Qt6::qmake IMPORTED_LOCATION) - if(qt6_qmake_target) - list(APPEND qt6_qmake_candidates "${qt6_qmake_target}") - endif() - endif() +if(DEFINED ENV{QMAKE} AND NOT "$ENV{QMAKE}" STREQUAL "") + set(APPIMAGE_QMAKE "$ENV{QMAKE}") +else() + find_program(APPIMAGE_QMAKE NAMES qmake) +endif() - find_program(qmake6_executable - NAMES qmake6 qmake-qt6 qmake - HINTS - /usr/lib/qt6/bin - /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/qt6/bin +if(NOT APPIMAGE_QMAKE) + message(FATAL_ERROR + "Could not find qmake for AppImage packaging.\n" + "Please configure with a Qt 6 qmake, for example:\n" + " QMAKE=$(which qmake6) cmake -S . -B build -DAPP_DISTRIBUTION=AppImage" ) - if(qmake6_executable) - list(APPEND qt6_qmake_candidates "${qmake6_executable}") - endif() - - list(REMOVE_DUPLICATES qt6_qmake_candidates) - - foreach(qmake_candidate IN LISTS qt6_qmake_candidates) - execute_process( - COMMAND "${qmake_candidate}" -query QT_VERSION - OUTPUT_VARIABLE qmake_qt_version - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_QUIET - RESULT_VARIABLE qmake_result - ) - if(qmake_result EQUAL 0 AND qmake_qt_version MATCHES "^6\\.") - set(${out_var} "${qmake_candidate}" PARENT_SCOPE) - return() - endif() - endforeach() +endif() - set(${out_var} "" PARENT_SCOPE) -endfunction() +execute_process( + COMMAND "${APPIMAGE_QMAKE}" -query QT_VERSION + OUTPUT_VARIABLE APPIMAGE_QT_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + RESULT_VARIABLE APPIMAGE_QMAKE_RESULT +) -resolve_qt6_qmake(QT6_QMAKE) -if(QT6_QMAKE) - message(STATUS "Using Qt qmake for AppImage packaging: ${QT6_QMAKE}") - set(APPIMAGE_ENV_VARS - LDAI_OUTPUT=NotepadNext-v${PROJECT_VERSION}-x86_64.AppImage - QMAKE=${QT6_QMAKE} - ) -else() - message(WARNING "Could not locate a Qt 6 qmake binary for AppImage packaging") - set(APPIMAGE_ENV_VARS - LDAI_OUTPUT=NotepadNext-v${PROJECT_VERSION}-x86_64.AppImage +if(NOT APPIMAGE_QMAKE_RESULT EQUAL 0 OR NOT APPIMAGE_QT_VERSION MATCHES "^6\\.") + message(FATAL_ERROR + "AppImage packaging requires a Qt 6 qmake, but CMake found:\n" + " ${APPIMAGE_QMAKE}\n" + "Reported Qt version:\n" + " ${APPIMAGE_QT_VERSION}\n" + "Please re-run CMake with a Qt 6 qmake, for example:\n" + " QMAKE=$(which qmake6) cmake -S . -B build -DAPP_DISTRIBUTION=AppImage" ) endif() +message(STATUS "Using qmake for AppImage packaging: ${APPIMAGE_QMAKE}") +list(APPEND APPIMAGE_ENV_VARS QMAKE=${APPIMAGE_QMAKE}) + install(TARGETS NotepadNext RUNTIME DESTINATION bin ) From 0231ee3d5436f471cf4d6387c6d90c230bd09a17 Mon Sep 17 00:00:00 2001 From: saberoueslati Date: Sat, 2 May 2026 22:00:46 +0100 Subject: [PATCH 3/3] Clarified error messages --- cmake/PackagingLinux.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/PackagingLinux.cmake b/cmake/PackagingLinux.cmake index 0b29d2856..de9babc5a 100644 --- a/cmake/PackagingLinux.cmake +++ b/cmake/PackagingLinux.cmake @@ -19,7 +19,7 @@ endif() if(NOT APPIMAGE_QMAKE) message(FATAL_ERROR "Could not find qmake for AppImage packaging.\n" - "Please configure with a Qt 6 qmake, for example:\n" + "Please install the QT 6 qmake or set the QMAKE variable to a Qt 6 qmake and re-run CMake, for example:\n" " QMAKE=$(which qmake6) cmake -S . -B build -DAPP_DISTRIBUTION=AppImage" ) endif() @@ -38,7 +38,7 @@ if(NOT APPIMAGE_QMAKE_RESULT EQUAL 0 OR NOT APPIMAGE_QT_VERSION MATCHES "^6\\.") " ${APPIMAGE_QMAKE}\n" "Reported Qt version:\n" " ${APPIMAGE_QT_VERSION}\n" - "Please re-run CMake with a Qt 6 qmake, for example:\n" + "Please set the QMAKE variable to a Qt 6 qmake and re-run CMake, for example:\n" " QMAKE=$(which qmake6) cmake -S . -B build -DAPP_DISTRIBUTION=AppImage" ) endif()