瀏覽代碼

fix Linux build (#2494)

Fix Linux build

TODO: fix application dir path locations with AppImage. Translations and vnote_extra.rcc does not work now.
Le Tan 1 年之前
父節點
當前提交
918aa15e74

+ 50 - 43
.github/workflows/ci-linux.yml

@@ -8,14 +8,21 @@ on:
 
 
   # Allows you to run this workflow manually from the Actions tab.
   # Allows you to run this workflow manually from the Actions tab.
   workflow_dispatch:
   workflow_dispatch:
+    inputs:
+      debug_enabled:
+        type: boolean
+        description: 'Run the build with tmate debugging enabled'
+        required: false
+        default: false
 
 
 env:
 env:
     VNOTE_VER: 3.17.0
     VNOTE_VER: 3.17.0
+    CMAKE_VER: 3.24.3
 
 
 jobs:
 jobs:
   build-linux:
   build-linux:
     name: Build On Ubuntu
     name: Build On Ubuntu
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-latest
     timeout-minutes: 120
     timeout-minutes: 120
 
 
     steps:
     steps:
@@ -30,15 +37,27 @@ jobs:
           git submodule sync --recursive
           git submodule sync --recursive
           git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1
           git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1
 
 
+      - name: Install a Fresh CMake
+        run: |
+          wget --no-verbose https://github.com/Kitware/CMake/releases/download/v${CMAKE_VER}/cmake-${CMAKE_VER}-Linux-x86_64.sh
+          chmod +x cmake-${CMAKE_VER}-Linux-x86_64.sh
+          mkdir ${{runner.workspace}}/cmake
+          sudo ./cmake-${CMAKE_VER}-Linux-x86_64.sh --skip-license --prefix=${{runner.workspace}}/cmake
+          sudo rm -f /usr/local/bin/cmake /usr/local/bin/cpack
+          sudo ln -s ${{runner.workspace}}/cmake/bin/cmake /usr/local/bin/cmake
+          sudo ln -s ${{runner.workspace}}/cmake/bin/cpack /usr/local/bin/cpack
+
       - name: Install linuxdeploy
       - name: Install linuxdeploy
         uses: miurahr/install-linuxdeploy-action@v1
         uses: miurahr/install-linuxdeploy-action@v1
         with:
         with:
           plugins: qt appimage
           plugins: qt appimage
 
 
-      - name: Install dependencies
+      - name: Install Dependencies
         run: |
         run: |
           sudo DEBIAN_FRONTEND=noninteractive apt-get update
           sudo DEBIAN_FRONTEND=noninteractive apt-get update
-          sudo DEBIAN_FRONTEND=noninteractive apt-get install -y libfcitx5-qt-dev tree
+          sudo DEBIAN_FRONTEND=noninteractive apt-get install -y libfcitx5-qt-dev fcitx-libs-dev extra-cmake-modules libxkbcommon-dev
+          sudo DEBIAN_FRONTEND=noninteractive apt-get install -y tree
+          sudo DEBIAN_FRONTEND=noninteractive apt-get install -y fuse libxcb-cursor-dev
 
 
       - name: Cache Qt
       - name: Cache Qt
         id: cache-qt
         id: cache-qt
@@ -50,15 +69,33 @@ jobs:
       - name: Install Qt
       - name: Install Qt
         uses: jurplel/install-qt-action@v3
         uses: jurplel/install-qt-action@v3
         with:
         with:
-          version: 6.5.2
+          version: 6.5.3
           target: desktop
           target: desktop
-          modules: 'qtwebengine qtwebchannel qtpositioning qtpdf qtimageformats qt5compat'
+          modules: 'qtwebengine qtwebchannel qtpositioning qtpdf qtimageformats qt5compat qtserialport'
+          tools: 'tools_opensslv3_src'
           cache: 'true'
           cache: 'true'
 
 
+      - name: Compile OpenSSLV3
+        run: |
+          cd ${Qt6_DIR}/../../Tools/OpenSSLv3/src
+          ./Configure
+          make -j2
+          sudo make install
+
       - name: Create Build Dir
       - name: Create Build Dir
         run: mkdir build
         run: mkdir build
         working-directory: ${{runner.workspace}}
         working-directory: ${{runner.workspace}}
 
 
+      - name: Compile fcitxqt5
+        run: |
+          git clone https://github.com/fcitx/fcitx-qt5
+          cd fcitx-qt5
+          mkdir build && cd build
+          cmake -DENABLE_QT5=OFF -DENABLE_QT6=ON ..
+          make -j2
+          sudo make install
+        working-directory: ${{runner.workspace}}/build
+
       - name: Compile qt6ct
       - name: Compile qt6ct
         run: |
         run: |
           git clone https://github.com/trialuser02/qt6ct qt6ct.git
           git clone https://github.com/trialuser02/qt6ct qt6ct.git
@@ -70,42 +107,13 @@ jobs:
       - name: Configure Project
       - name: Configure Project
         run: |
         run: |
           qmake -v
           qmake -v
-          # TODO: libfcitx5
-          qmake CONFIG+=release -spec linux-g++-64 ${GITHUB_WORKSPACE}/vnote.pro
+          cmake --version
+          cmake ${GITHUB_WORKSPACE}
         working-directory: ${{runner.workspace}}/build
         working-directory: ${{runner.workspace}}/build
 
 
       - name: Build Project
       - name: Build Project
-        run: make -j$(nproc)
-        working-directory: ${{runner.workspace}}/build
-
-      - name: Install Project
-        run: |
-          mkdir AppDir
-          make install INSTALL_ROOT=${{runner.workspace}}/build/AppDir
-          tree AppDir
-        working-directory: ${{runner.workspace}}/build
-
-      - name: Package Project
         run: |
         run: |
-          # Move the lib out to avoid duplication
-          mv AppDir/usr/lib ./
-          LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH
-          Qt6_Dir=$QT_HOST_BINS/..
-          tree $Qt6_Dir
-          tree $Qt6_Dir/../..
-          # Copy translations
-          mkdir -p AppDir/usr/translations
-          cp $Qt6_Dir/translations/qt_zh_CN.qm AppDir/usr/translations
-          # Package qt5ct (EXTRA_QT_PLUGINS seems not work)
-          # EXTRA_QT_PLUGINS="platformthemes/libqt5ct.so;styles/libqt5ct-style.so"
-          mkdir -p AppDir/usr/plugins/platformthemes
-          mkdir -p AppDir/usr/plugins/styles
-          cp $Qt6_Dir/plugins/platformthemes/* AppDir/usr/plugins/platformthemes/
-          cp $Qt6_Dir/plugins/styles/* AppDir/usr/plugins/styles/
-          # Package libssl.so and libcrypto.so
-          Qt_Tools=$Qt6_Dir/../../Tools
-          linuxdeploy-x86_64.AppImage --appdir ./AppDir --plugin qt --output appimage -l $Qt_Tools/OpenSSL/binary/lib/libcrypto.so.* -l $Qt_Tools/OpenSSL/binary/lib/
-          tree AppDir
+          cmake --build . --target pack
         working-directory: ${{runner.workspace}}/build
         working-directory: ${{runner.workspace}}/build
 
 
       - name: Fix Package
       - name: Fix Package
@@ -122,15 +130,14 @@ jobs:
           linuxdeploy-plugin-appimage-x86_64.AppImage --appdir=./squashfs-root
           linuxdeploy-plugin-appimage-x86_64.AppImage --appdir=./squashfs-root
           mv VNote*.AppImage ../
           mv VNote*.AppImage ../
           popd
           popd
-          mv VNote*.AppImage vnote-linux-x64_v${{env.VNOTE_VER}}.AppImage
-          cp vnote-linux-x64_v${{env.VNOTE_VER}}.AppImage vnote-linux-x64.AppImage
+          mv VNote*.AppImage VNote-${{env.VNOTE_VER}}-linux-x64.AppImage
         working-directory: ${{runner.workspace}}/build
         working-directory: ${{runner.workspace}}/build
 
 
       - name: Archive Artifacts
       - name: Archive Artifacts
         uses: actions/upload-artifact@v2
         uses: actions/upload-artifact@v2
         with:
         with:
-          name: vnote-linux-x64_v${{env.VNOTE_VER}}
-          path: ${{runner.workspace}}/build/vnote-linux-x64_v${{env.VNOTE_VER}}.AppImage
+          name: VNote-${{env.VNOTE_VER}}-linux-x64
+          path: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-linux-x64.AppImage
 
 
       - name: Update Tag
       - name: Update Tag
         if: github.ref == 'refs/heads/master'
         if: github.ref == 'refs/heads/master'
@@ -143,7 +150,7 @@ jobs:
         uses: johnwbyrd/[email protected]
         uses: johnwbyrd/[email protected]
         with:
         with:
           token: ${{ secrets.GITHUB_TOKEN }}
           token: ${{ secrets.GITHUB_TOKEN }}
-          files: ${{runner.workspace}}/build/vnote-linux-x64.AppImage
+          files: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-linux-x64
           release: Continuous Build
           release: Continuous Build
           tag: continuous-build
           tag: continuous-build
 
 
@@ -152,7 +159,7 @@ jobs:
         uses: ncipollo/[email protected]
         uses: ncipollo/[email protected]
         with:
         with:
           token: ${{ secrets.GITHUB_TOKEN }}
           token: ${{ secrets.GITHUB_TOKEN }}
-          artifacts: ${{runner.workspace}}/build/vnote-linux-x64_v${{env.VNOTE_VER}}.AppImage
+          artifacts: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-linux-x64
           commit: master
           commit: master
           tag: v${{env.VNOTE_VER}}
           tag: v${{env.VNOTE_VER}}
           allowUpdates: true
           allowUpdates: true

+ 12 - 18
.github/workflows/ci-win.yml

@@ -28,24 +28,20 @@ jobs:
       fail-fast: false
       fail-fast: false
       matrix:
       matrix:
         config:
         config:
-          - {
-            name: "Build On Win64 Qt 5.15",
-            arch: win64_msvc2019_64,
-            qt: 5.15.2,
-            qt_modules: qtwebengine,
-            qt_tools: tools_opensslv3_x64,
-            qt_major: 5,
+          - name: "Build On Win64 Qt 5.15"
+            arch: win64_msvc2019_64
+            qt: 5.15.2
+            qt_modules: qtwebengine
+            qt_tools: tools_opensslv3_x64
+            qt_major: 5
             suffix: "-windows7"
             suffix: "-windows7"
-          }
-          - {
-            name: "Build On Win64 Qt 6.5",
-            arch: win64_msvc2019_64,
-            qt: 6.5.2,
-            qt_modules: "qtwebengine qtwebchannel qtpositioning qtpdf qtimageformats qt5compat",
-            qt_tools: tools_opensslv3_x64,
-            qt_major: 6,
+          - name: "Build On Win64 Qt 6.5"
+            arch: win64_msvc2019_64
+            qt: 6.5.3
+            qt_modules: "qtwebengine qtwebchannel qtpositioning qtpdf qtimageformats qt5compat"
+            qt_tools: tools_opensslv3_x64
+            qt_major: 6
             suffix: ""
             suffix: ""
-          }
 
 
     steps:
     steps:
       # Checks-out your repository under $GITHUB_WORKSPACE.
       # Checks-out your repository under $GITHUB_WORKSPACE.
@@ -101,9 +97,7 @@ jobs:
           call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
           call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
           cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DQT_DEFAULT_MAJOR_VERSION=${{matrix.config.qt_major}} -DOPENSSL_EXTRA_LIB_DIR=${{runner.workspace}}\build\openssl-utils.git\1.1.1j\Win_x64 %GITHUB_WORKSPACE%
           cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DQT_DEFAULT_MAJOR_VERSION=${{matrix.config.qt_major}} -DOPENSSL_EXTRA_LIB_DIR=${{runner.workspace}}\build\openssl-utils.git\1.1.1j\Win_x64 %GITHUB_WORKSPACE%
           cmake --build .
           cmake --build .
-          cmake --build . --target=deploy
           cmake --build . --target=pack
           cmake --build . --target=pack
-          cmake --build . --target=install
           7z x VNote*.zip -o*
           7z x VNote*.zip -o*
           dir
           dir
         working-directory: ${{runner.workspace}}/build
         working-directory: ${{runner.workspace}}/build

+ 1 - 1
CMakeLists.txt

@@ -1,4 +1,4 @@
-cmake_minimum_required (VERSION 3.12)
+cmake_minimum_required (VERSION 3.20)
 project(VNote
 project(VNote
     VERSION 3.17.0
     VERSION 3.17.0
     DESCRIPTION "A pleasant note-taking platform"
     DESCRIPTION "A pleasant note-taking platform"

+ 1 - 1
libs/CMakeLists.txt

@@ -1,2 +1,2 @@
-add_subdirectory(QHotKey)
+add_subdirectory(QHotkey)
 add_subdirectory(vtextedit)
 add_subdirectory(vtextedit)

+ 1 - 1
libs/vtextedit

@@ -1 +1 @@
-Subproject commit 20c5615f4576828cb600e922cc8f7871dd53ddf2
+Subproject commit f2d0cdcf3ca212164ce8b8d6d9fc6a9042dd0a1b

+ 33 - 6
src/CMakeLists.txt

@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.16)
+cmake_minimum_required(VERSION 3.20)
 
 
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
 
 
@@ -106,19 +106,46 @@ if((QT_DEFAULT_MAJOR_VERSION GREATER 5))
 endif()
 endif()
 
 
 # Copy the qt.conf on Windows
 # Copy the qt.conf on Windows
-if(MSVC)
+if(WIN32)
     add_custom_command(TARGET vnote POST_BUILD
     add_custom_command(TARGET vnote POST_BUILD
         COMMAND ${CMAKE_COMMAND} -E copy_if_different
         COMMAND ${CMAKE_COMMAND} -E copy_if_different
         "${PROJECT_SOURCE_DIR}/package/qt.conf" $<TARGET_FILE_DIR:vnote>)
         "${PROJECT_SOURCE_DIR}/package/qt.conf" $<TARGET_FILE_DIR:vnote>)
 endif()
 endif()
 
 
 # Installation
 # Installation
-if (MSVC)
-    install(TARGETS vnote
-        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
-        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+install(TARGETS vnote
+    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+install(FILES "${CMAKE_CURRENT_BINARY_DIR}/vnote_extra.rcc"
+    DESTINATION ${CMAKE_INSTALL_BINDIR})
+
+if (WIN32)
     install(FILES "${PROJECT_SOURCE_DIR}/package/qt.conf"
     install(FILES "${PROJECT_SOURCE_DIR}/package/qt.conf"
         DESTINATION ${CMAKE_INSTALL_BINDIR})
         DESTINATION ${CMAKE_INSTALL_BINDIR})
+elseif(APPLE)
+
+else()
+    set(desktop.path applications)
+    set(desktop.files data/core/vnote.desktop)
+    set(icon16.path icons/hicolor/16x16/apps)
+    set(icon16.files data/core/logo/16x16/vnote.png)
+    set(icon32.path icons/hicolor/32x32/apps)
+    set(icon32.files data/core/logo/32x32/vnote.png)
+    set(icon48.path icons/hicolor/48x48/apps)
+    set(icon48.files data/core/logo/48x48/vnote.png)
+    set(icon64.path icons/hicolor/64x64/apps)
+    set(icon64.files data/core/logo/64x64/vnote.png)
+    set(icon128.path icons/hicolor/128x128/apps)
+    set(icon128.files data/core/logo/128x128/vnote.png)
+    set(icon256.path icons/hicolor/256x256/apps)
+    set(icon256.files data/core/logo/256x256/vnote.png)
+    set(iconsvg.path icons/hicolor/scalable/apps)
+    set(iconsvg.files data/core/logo/vnote.svg)
+    foreach(items IN ITEMS desktop icon16 icon32 icon48 icon64 icon128 icon256 iconsvg)
+        install(FILES ${CMAKE_CURRENT_LIST_DIR}/${${items}.files}
+                DESTINATION share/${${items}.path}
+                PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
+    endforeach()
 endif()
 endif()
 
 
 include(${CMAKE_CURRENT_LIST_DIR}/Packaging.cmake)
 include(${CMAKE_CURRENT_LIST_DIR}/Packaging.cmake)

+ 16 - 0
src/CPackLinuxDeployQt.cmake.in

@@ -0,0 +1,16 @@
+message(STATUS "VX_APPIMAGE_DEST_DIR ${VX_APPIMAGE_DEST_DIR}")
+message(STATUS "VX_APPIMAGE_DESKTOP_FILE ${VX_APPIMAGE_DESKTOP_FILE}")
+
+execute_process(
+    COMMAND ${CMAKE_MAKE_PROGRAM} DESTDIR=${VX_APPIMAGE_DEST_DIR} install
+    WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
+execute_process(
+    COMMAND env QMAKE=${QMAKE_EXECUTABLE} LD_LIBRARY_PATH=/usr/local/lib64:$ENV{LD_LIBRARY_PATH} "${LINUXDEPLOY_EXECUTABLE}" --plugin=qt --output=appimage
+        --appdir=${VX_APPIMAGE_DEST_DIR} -e ${CMAKE_CURRENT_BINARY_DIR}/vnote -d ${VX_APPIMAGE_DESKTOP_FILE}
+        -i ${CMAKE_CURRENT_LIST_DIR}/data/core/logo/64x64/vnote.png
+        -l ${QT_PLUGINS_DIR}/platformthemes/libqgtk3.so
+        -l /usr/local/lib64/libcrypto.so.3
+        -l /usr/local/lib64/libssl.so.3
+        # --exclude-library option does not work as expected
+        # --exclude-library=libssl.so.1.1,libcrypto.so.1.1,libnss3.so,libnssutil3.so
+    WORKING_DIRECTORY ${CPACK_PACKAGE_DIRECTORY})

+ 24 - 7
src/Packaging.cmake

@@ -1,5 +1,4 @@
 # from: https://github.com/miurahr/cmake-qt-packaging-example
 # from: https://github.com/miurahr/cmake-qt-packaging-example
-
 find_package(Qt${QT_DEFAULT_MAJOR_VERSION} REQUIRED COMPONENTS Core)
 find_package(Qt${QT_DEFAULT_MAJOR_VERSION} REQUIRED COMPONENTS Core)
 
 
 get_target_property(QMAKE_EXECUTABLE Qt::qmake IMPORTED_LOCATION)
 get_target_property(QMAKE_EXECUTABLE Qt::qmake IMPORTED_LOCATION)
@@ -7,6 +6,10 @@ get_filename_component(QT_BIN_DIR "${QMAKE_EXECUTABLE}" DIRECTORY)
 execute_process(COMMAND ${QMAKE_EXECUTABLE} -query QT_VERSION OUTPUT_VARIABLE QT_VERSION)
 execute_process(COMMAND ${QMAKE_EXECUTABLE} -query QT_VERSION OUTPUT_VARIABLE QT_VERSION)
 
 
 set(QT_TOOLS_DIR "${QT_BIN_DIR}/../../../Tools")
 set(QT_TOOLS_DIR "${QT_BIN_DIR}/../../../Tools")
+cmake_path(NORMAL_PATH QT_TOOLS_DIR OUTPUT_VARIABLE QT_TOOLS_DIR)
+
+set(QT_PLUGINS_DIR "${QT_BIN_DIR}/../plugins")
+cmake_path(NORMAL_PATH QT_PLUGINS_DIR OUTPUT_VARIABLE QT_PLUGINS_DIR)
 
 
 # To use the specific version of Qt
 # To use the specific version of Qt
 set(WINDEPLOYQT_EXECUTABLE "${QT_BIN_DIR}/windeployqt.exe")
 set(WINDEPLOYQT_EXECUTABLE "${QT_BIN_DIR}/windeployqt.exe")
@@ -28,8 +31,6 @@ function(windeployqt target)
         endif()
         endif()
     endif()
     endif()
 
 
-    message(INFO " debug: windeployqt:${WINDEPLOYQT_EXECUTABLE}")
-
     add_custom_target(deploy
     add_custom_target(deploy
         COMMAND "${CMAKE_COMMAND}" -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/winqt/"
         COMMAND "${CMAKE_COMMAND}" -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/winqt/"
         COMMAND "${CMAKE_COMMAND}" -E
         COMMAND "${CMAKE_COMMAND}" -E
@@ -49,19 +50,19 @@ function(windeployqt target)
     )
     )
 
 
     add_dependencies(deploy lrelease)
     add_dependencies(deploy lrelease)
+    add_dependencies(pack deploy)
 
 
     install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/winqt/" DESTINATION "${CMAKE_INSTALL_BINDIR}" OPTIONAL)
     install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/winqt/" DESTINATION "${CMAKE_INSTALL_BINDIR}" OPTIONAL)
 
 
-    cmake_path(NORMAL_PATH QT_TOOLS_DIR OUTPUT_VARIABLE QT_TOOLS_DIR)
     set(OPENSSL_ROOT_DIR "${QT_TOOLS_DIR}/OpenSSL/Win_x64" CACHE STRING "OpenSSL dir")
     set(OPENSSL_ROOT_DIR "${QT_TOOLS_DIR}/OpenSSL/Win_x64" CACHE STRING "OpenSSL dir")
     file(GLOB OPENSSL_LIBS_FILES "${OPENSSL_ROOT_DIR}/bin/lib*.dll")
     file(GLOB OPENSSL_LIBS_FILES "${OPENSSL_ROOT_DIR}/bin/lib*.dll")
     cmake_path(NORMAL_PATH OPENSSL_LIBS_FILES OUTPUT_VARIABLE OPENSSL_LIBS_FILES)
     cmake_path(NORMAL_PATH OPENSSL_LIBS_FILES OUTPUT_VARIABLE OPENSSL_LIBS_FILES)
     install(FILES ${OPENSSL_LIBS_FILES} DESTINATION "${CMAKE_INSTALL_BINDIR}" OPTIONAL)
     install(FILES ${OPENSSL_LIBS_FILES} DESTINATION "${CMAKE_INSTALL_BINDIR}" OPTIONAL)
 
 
-    message(INFO " debug: OpenSSLExtraLIBDIR:${OPENSSL_EXTRA_LIB_DIR}")
+    message(STATUS "OpenSSLExtraLIBDIR:${OPENSSL_EXTRA_LIB_DIR}")
     file(GLOB OPENSSL_EXTRA_LIB_FILES "${OPENSSL_EXTRA_LIB_DIR}/lib*.dll")
     file(GLOB OPENSSL_EXTRA_LIB_FILES "${OPENSSL_EXTRA_LIB_DIR}/lib*.dll")
     cmake_path(NORMAL_PATH OPENSSL_EXTRA_LIB_FILES OUTPUT_VARIABLE OPENSSL_EXTRA_LIB_FILES)
     cmake_path(NORMAL_PATH OPENSSL_EXTRA_LIB_FILES OUTPUT_VARIABLE OPENSSL_EXTRA_LIB_FILES)
-    message(INFO " debug: OpenSSLExtraLibFiles:${OPENSSL_EXTRA_LIB_FILES}")
+    message(STATUS "OpenSSLExtraLibFiles:${OPENSSL_EXTRA_LIB_FILES}")
     install(FILES ${OPENSSL_EXTRA_LIB_FILES} DESTINATION "${CMAKE_INSTALL_BINDIR}" OPTIONAL)
     install(FILES ${OPENSSL_EXTRA_LIB_FILES} DESTINATION "${CMAKE_INSTALL_BINDIR}" OPTIONAL)
 
 
     set(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
     set(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
@@ -104,9 +105,11 @@ add_custom_target(pack
                   COMMAND ${CMAKE_CPACK_COMMAND} "--config" "${CMAKE_BINARY_DIR}/BundleConfig.cmake"
                   COMMAND ${CMAKE_CPACK_COMMAND} "--config" "${CMAKE_BINARY_DIR}/BundleConfig.cmake"
                   COMMENT "Running CPACK. Please wait..."
                   COMMENT "Running CPACK. Please wait..."
                   DEPENDS vnote)
                   DEPENDS vnote)
+add_dependencies(pack lrelease)
+
 set(CPACK_GENERATOR)
 set(CPACK_GENERATOR)
 
 
-if (WIN32)
+if(WIN32)
     find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${QT_BIN_DIR}" DOC "Path to the windeployqt utility")
     find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${QT_BIN_DIR}" DOC "Path to the windeployqt utility")
 
 
     list(APPEND CPACK_GENERATOR ZIP)
     list(APPEND CPACK_GENERATOR ZIP)
@@ -120,6 +123,20 @@ if (WIN32)
     endif()
     endif()
 
 
     windeployqt(vnote)
     windeployqt(vnote)
+elseif(APPLE)
+else()
+    message(STATUS "LinuxDeployExecutable: ${LINUXDEPLOY_EXECUTABLE}")
+    if(LINUXDEPLOY_EXECUTABLE)
+        message(STATUS "Package generation - Linux - AppImage")
+
+        set(CPACK_GENERATOR "External;${CPACK_GENERATOR}")
+        set(VX_APPIMAGE_DEST_DIR "${CPACK_PACKAGE_DIRECTORY}/_CPack_Packages/Linux/External/AppImage")
+        set(VX_APPIMAGE_DESKTOP_FILE "${VX_APPIMAGE_DEST_DIR}${CMAKE_INSTALL_PREFIX}/share/applications/vnote.desktop")
+        configure_file(${CMAKE_CURRENT_LIST_DIR}/CPackLinuxDeployQt.cmake.in "${CMAKE_BINARY_DIR}/CPackExternal.cmake")
+        set(CPACK_EXTERNAL_PACKAGE_SCRIPT "${CMAKE_BINARY_DIR}/CPackExternal.cmake")
+    endif()
+
+    set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_LIST_DIR}/data/core/logo/64x64/vnote.png")
 endif()
 endif()
 
 
 include(CPack)
 include(CPack)

+ 1 - 1
src/data/core/vnote.desktop

@@ -10,4 +10,4 @@ Icon=vnote
 Terminal=false
 Terminal=false
 Exec=vnote %F
 Exec=vnote %F
 MimeType=text/markdown;
 MimeType=text/markdown;
-Categories=Qt;Utility;TextEditor;Office;
+Categories=Utility