From 3b755287e7b131a657f3aa4ba8fac86495d7ea08 Mon Sep 17 00:00:00 2001 From: Le Tan Date: Tue, 30 Apr 2024 15:13:21 +0800 Subject: [PATCH] support windows packaging --- CMakeLists.txt | 12 ++- libs/vtextedit | 2 +- src/CMakeLists.txt | 23 ++++- src/Packaging.cmake | 105 ++++++++++++++++++++++ src/data/core/translations/vnote_zh_CN.ts | 2 +- 5 files changed, 140 insertions(+), 4 deletions(-) create mode 100644 src/Packaging.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d6757b3..8008e1c7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,12 @@ cmake_minimum_required (VERSION 3.12) -project(VNote VERSION 3.17.0 LANGUAGES C CXX) +project(VNote + VERSION 3.17.0 + DESCRIPTION "A pleasant note-taking platform" + HOMEPAGE_URL "https://app.vnote.fun" + LANGUAGES C CXX) + +set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type, defaults to Release") + set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -7,7 +14,10 @@ set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) +set(QHOTKEY_INSTALL OFF CACHE BOOL "Disable installing QHotKey" FORCE) add_subdirectory(libs) + add_subdirectory(src) + # TODO: find a better way to organize tests # add_subdirectory(tests) diff --git a/libs/vtextedit b/libs/vtextedit index 70b856b1..20c5615f 160000 --- a/libs/vtextedit +++ b/libs/vtextedit @@ -1 +1 @@ -Subproject commit 70b856b124aedf6b683926d9170b65eda45578cf +Subproject commit 20c5615f4576828cb600e922cc8f7871dd53ddf2 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a5f87e45..f971b618 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,6 +2,8 @@ cmake_minimum_required(VERSION 3.16) set(CMAKE_INCLUDE_CURRENT_DIR ON) +set(CMAKE_INSTALL_BINDIR "." CACHE STRING "Binary dir for install") + set(QT_DEFAULT_MAJOR_VERSION 6 CACHE STRING "Qt version to use (5 or 6), defaults to 6") find_package(Qt${QT_DEFAULT_MAJOR_VERSION} REQUIRED COMPONENTS Core Gui Network PrintSupport Sql Svg Widgets WebChannel WebEngineWidgets LinguistTools) find_package(Qt${QT_DEFAULT_MAJOR_VERSION} OPTIONAL_COMPONENTS Core5Compat) @@ -31,7 +33,8 @@ qt_add_translation(VX_QM_FILES ${VX_TS_FILES}) # Resources set(VX_RESOURCE_FILES data/core/core.qrc) -qt_add_binary_resources(VX_EXTRA_RESOURCE data/extra/extra.qrc DESTINATION vnote_extra.rcc) +qt_add_binary_resources(VX_EXTRA_RESOURCE data/extra/extra.qrc DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/vnote_extra.rcc + OPTIONS -compress 9) add_executable(vnote WIN32 MACOSX_BUNDLE application.cpp application.h @@ -86,3 +89,21 @@ if((QT_DEFAULT_MAJOR_VERSION GREATER 5)) Qt::Core5Compat ) endif() + +# Copy the qt.conf on Windows +if(MSVC) + add_custom_command(TARGET vnote POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${PROJECT_SOURCE_DIR}/package/qt.conf" $) +endif() + +# Installation +if (MSVC) + install(TARGETS vnote + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + install(FILES "${PROJECT_SOURCE_DIR}/package/qt.conf" + DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() + +include(${CMAKE_CURRENT_LIST_DIR}/Packaging.cmake) diff --git a/src/Packaging.cmake b/src/Packaging.cmake new file mode 100644 index 00000000..8e3f79b1 --- /dev/null +++ b/src/Packaging.cmake @@ -0,0 +1,105 @@ +# from: https://github.com/miurahr/cmake-qt-packaging-example + +find_package(Qt${QT_DEFAULT_MAJOR_VERSION} REQUIRED COMPONENTS Core) + +get_target_property(QMAKE_EXECUTABLE Qt::qmake IMPORTED_LOCATION) +get_filename_component(QT_BIN_DIR "${QMAKE_EXECUTABLE}" DIRECTORY) +execute_process(COMMAND ${QMAKE_EXECUTABLE} -query QT_VERSION OUTPUT_VARIABLE QT_VERSION) + +find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${QT_BIN_DIR}") +find_program(LINUXDEPLOY_EXECUTABLE linuxdeploy linuxdeploy-x86_64.AppImage HINTS "${QT_BIN_DIR}") +find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${QT_BIN_DIR}") +find_program(MACDEPLOYQTFIX_EXECUTABLE macdeployqtfix.py HINTS "${QT_BIN_DIR}") +find_package(Python) + +mark_as_advanced(WINDEPLOYQT_EXECUTABLE LINUXDEPLOY_EXECUTABLE MACDEPLOYQT_EXECUTABLE) + +function(windeployqt target) + # Bundle Library Files + string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UPPER) + + if(CMAKE_BUILD_TYPE_UPPER STREQUAL "DEBUG") + set(WINDEPLOYQT_ARGS --debug) + else() + set(WINDEPLOYQT_ARGS --release) + endif() + + add_custom_target(deploy + COMMAND "${CMAKE_COMMAND}" -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/winqt/" + COMMAND "${CMAKE_COMMAND}" -E + env PATH="${QT_BIN_DIR}" "${WINDEPLOYQT_EXECUTABLE}" + ${WINDEPLOYQT_ARGS} + --verbose 0 + --no-quick-import + --no-opengl-sw + --no-compiler-runtime + --translations zh_CN,ja + --dir "${CMAKE_CURRENT_BINARY_DIR}/winqt/" + $ + COMMAND "${CMAKE_COMMAND}" -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/winqt/generic/" + COMMAND "${CMAKE_COMMAND}" -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/winqt/styles/" + COMMAND "${CMAKE_COMMAND}" -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/winqt/qmltooling/" + COMMENT "Deploying Qt..." + DEPENDS vnote + ) + + install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/winqt/" DESTINATION ${CMAKE_INSTALL_BINDIR}) + set(CMAKE_INSTALL_UCRT_LIBRARIES TRUE) + include(InstallRequiredSystemLibraries) +endfunction() + +set(CPACK_PACKAGE_VENDOR "VNoteX") +set(CPACK_PACKAGE_NAME ${PROJECT_NAME}) +set(CPACK_PACKAGE_CONTACT "Le Tan ") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_DESCRIPTION}") +set(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/README.md") +set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/COPYING.LESSER") +set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) +set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) +set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) + +set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME}") +set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}") + +# Start menu entry on Windows +set(CPACK_PACKAGE_EXECUTABLES "vnote" "VNote") +# Desktop link on Windows +set(CPACK_CREATE_DESKTOP_LINKS "vnote") + +set(CPACK_STRIP_FILES TRUE) + +# WIX generator +set(CPACK_WIX_UPGRADE_GUID BA25F337-991A-4893-9D8A-AD5E89BAF5C4) +set(CPACK_WIX_PRODUCT_GUID BA25F337-991A-4893-9D8A-AD5E89BAF5C4) +set(CPACK_WIX_LICENSE_RTF "${PROJECT_SOURCE_DIR}/package/lgpl-3.0.rtf") +set(CPACK_WIX_PRODUCT_ICON "${CMAKE_CURRENT_LIST_DIR}/data/core/icons/vnote.ico") +set(CPACK_WIX_UI_BANNER "${PROJECT_SOURCE_DIR}/package/wix_banner.png") +set(CPACK_WIX_UI_DIALOG "${PROJECT_SOURCE_DIR}/package/wix_dialog.png") + +#------------------------------------------------------------------------------ +# include CPack, so we get target for packages +set(CPACK_OUTPUT_CONFIG_FILE "${CMAKE_BINARY_DIR}/BundleConfig.cmake") + +add_custom_target(pack + COMMAND ${CMAKE_CPACK_COMMAND} "--config" "${CMAKE_BINARY_DIR}/BundleConfig.cmake" + COMMENT "Running CPACK. Please wait..." + DEPENDS vnote) +set(CPACK_GENERATOR) + +if (WIN32) + find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${QT_BIN_DIR}" DOC "Path to the windeployqt utility") + + list(APPEND CPACK_GENERATOR ZIP) + message(STATUS "Package generation - Windows - Zip") + + find_program(WIX_EXECUTABLE wix HINTS "${QT_BIN_DIR}" DOC "Path to the WiX utility") + + if (NOT WIX_EXECUTABLE-NOTFOUND) + list(APPEND CPACK_GENERATOR WIX) + message(STATUS "Package generation - Windows - WiX") + endif() + + windeployqt(vnote) +endif() + +include(CPack) diff --git a/src/data/core/translations/vnote_zh_CN.ts b/src/data/core/translations/vnote_zh_CN.ts index b97fe208..481835d2 100644 --- a/src/data/core/translations/vnote_zh_CN.ts +++ b/src/data/core/translations/vnote_zh_CN.ts @@ -1351,7 +1351,7 @@ Clear the input except the entry name - 清楚输入但保留入口名字 + 清除输入但保留入口名字