diff options
author | saturneric <[email protected]> | 2025-05-01 00:11:27 +0000 |
---|---|---|
committer | saturneric <[email protected]> | 2025-05-01 00:11:27 +0000 |
commit | 58b38d03387613a460bc30960b3c46c9ed3dfffe (patch) | |
tree | 4d24b6dc97dc825b1c3b7fc3cda5a3726ee462eb /src | |
parent | refactor: correct and simplify project configurations (diff) | |
download | GpgFrontend-58b38d03387613a460bc30960b3c46c9ed3dfffe.tar.gz GpgFrontend-58b38d03387613a460bc30960b3c46c9ed3dfffe.zip |
fix: install and packaging on linux
Diffstat (limited to 'src')
-rw-r--r-- | src/CMakeLists.txt | 57 | ||||
-rw-r--r-- | src/GpgFrontendBuildInstallInfo.h.in | 3 | ||||
-rw-r--r-- | src/core/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/core/function/GlobalSettingStation.cpp | 13 | ||||
-rw-r--r-- | src/sdk/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/test/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/ui/CMakeLists.txt | 2 |
7 files changed, 51 insertions, 30 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e4811a08..ee4fbf17 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -68,17 +68,21 @@ set(APP_ICON_RESOURCE_WINDOWS "${CMAKE_SOURCE_DIR}/gpgfrontend.rc") set_property(SOURCE gpgfrontend.rc APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_SOURCE_DIR}/gpgfrontend.ico) set(RESOURCE_FILES ${CMAKE_SOURCE_DIR}/gpgfrontend.qrc ${APP_ICON_RESOURCE_WINDOWS} ${QON_QM_FILES}) +# rpath +set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + if(${CMAKE_BUILD_TYPE} STREQUAL "Release") if(MINGW) - add_executable(${AppName} WIN32 ${APP_SOURCE} ${RESOURCE_FILES}) + add_executable(${APP_NAME} WIN32 ${APP_SOURCE} ${RESOURCE_FILES}) elseif(APPLE AND XCODE_BUILD) # standard app bundle packing - add_executable(${AppName} MACOSX_BUNDLE ${GPGFRONTEND_MACOS_ICON} ${APP_SOURCE} ${RESOURCE_FILES}) + add_executable(${APP_NAME} MACOSX_BUNDLE ${GPGFRONTEND_MACOS_ICON} ${APP_SOURCE} ${RESOURCE_FILES}) - set_target_properties(${AppName} PROPERTIES + set_target_properties(${APP_NAME} PROPERTIES BUNDLE True MACOSX_BUNDLE_GUI_IDENTIFIER com.bktus.gpgfrontend - MACOSX_BUNDLE_BUNDLE_NAME ${AppName} + MACOSX_BUNDLE_BUNDLE_NAME ${APP_NAME} MACOSX_BUNDLE_LONG_VERSION_STRING ${BUILD_VERSION} MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION} MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} @@ -88,36 +92,36 @@ if(${CMAKE_BUILD_TYPE} STREQUAL "Release") MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/resource/plist/MacOSXBundleInfo.plist.in) # option for sandbox mode, still under test - if(GPGFRONTEND_XOCDE_ENABLE_SANDBOX) + if(GPGFRONTEND_XCODE_ENABLE_SANDBOX) message(STATUS "Build Application With App Sandbox") set(CUSTOM_ATTRIBUTE_ENABLE_APP_SANDBOX "Yes") - add_custom_command(TARGET ${AppName} POST_BUILD - COMMAND /bin/cp -rf ${CMAKE_SOURCE_DIR}/resource/lfs/macOS/GnuPG ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/${AppName}.app/Contents/ + add_custom_command(TARGET ${APP_NAME} POST_BUILD + COMMAND /bin/cp -rf ${CMAKE_SOURCE_DIR}/resource/lfs/macOS/GnuPG ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/${APP_NAME}.app/Contents/ WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - COMMENT "Copying Buddled GnuPG into App Bundle Resource") - set_target_properties(${AppName} PROPERTIES + COMMENT "Copying Bundle GnuPG into App Bundle Resource") + set_target_properties(${APP_NAME} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_SOURCE_DIR}/resource/entitlements/GpgFrontend.entitlements") else() message(STATUS "Build Application Without App Sandbox") set(CUSTOM_ATTRIBUTE_ENABLE_APP_SANDBOX "No") endif() - set_target_properties(${AppName} PROPERTIES + set_target_properties(${APP_NAME} PROPERTIES XCODE_ATTRIBUTE_INSTALL_PATH "$(LOCAL_APPS_DIR)" XCODE_ATTRIBUTE_SKIP_INSTALL "No" XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS "--deep --entitlements ${CMAKE_SOURCE_DIR}/resource/plist/entitlement.plist" XCODE_ATTRIBUTE_ENABLE_APP_SANDBOX "${CUSTOM_ATTRIBUTE_ENABLE_APP_SANDBOX}" XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME "Yes" - XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${GPGFRONTEND_XOCDE_CODE_SIGN_IDENTITY}") + XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${GPGFRONTEND_XCODE_CODE_SIGN_IDENTITY}") else() - add_executable(${AppName} ${APP_SOURCE} ${RESOURCE_FILES}) + add_executable(${APP_NAME} ${APP_SOURCE} ${RESOURCE_FILES}) endif() else() - add_executable(${AppName} ${APP_SOURCE} ${RESOURCE_FILES}) + add_executable(${APP_NAME} ${APP_SOURCE} ${RESOURCE_FILES}) endif() # using c++ standard 17 -target_compile_features(${AppName} PUBLIC cxx_std_17) +target_compile_features(${APP_NAME} PUBLIC cxx_std_17) # Set Resource Output Path if(${CMAKE_BUILD_TYPE} STREQUAL "Release") @@ -316,16 +320,16 @@ if(MINGW) endif() # link options for GpgFrontend -target_link_libraries(${AppName} gpgfrontend_core gpgfrontend_ui gpgfrontend_test) +target_link_libraries(${APP_NAME} gpgfrontend_core gpgfrontend_ui gpgfrontend_test) if(MINGW) message(STATUS "Link Application Library For MINGW") - target_link_libraries(${AppName} crypto) + target_link_libraries(${APP_NAME} crypto) elseif(APPLE) message(STATUS "Link Application Library For macOS") else() message(STATUS "Link Application Library For Linux") - target_link_libraries(${AppName} crypto pthread) + target_link_libraries(${APP_NAME} crypto pthread) endif() # add i18n support @@ -371,14 +375,14 @@ if(GPGFRONTEND_QT5_BUILD) qt5_add_resources(GF_I18N_RESOURCES ${QT_QM_TRANSLATIONS_RESOURCE_FILE}) message(STATUS "GF_I18N_RESOURCES ${GF_I18N_RESOURCES}") - target_sources(${AppName} PRIVATE ${GF_I18N_RESOURCES}) + target_sources(${APP_NAME} PRIVATE ${GF_I18N_RESOURCES}) else() add_custom_target(gftranslations ALL) qt_add_lrelease(gftranslations TS_FILES ${TS_FILES} QM_FILES_OUTPUT_VARIABLE GF_TRANSLATIONS_QM) - qt_add_resources(${AppName} "gftranslations" + qt_add_resources(${APP_NAME} "gftranslations" PREFIX "/i18n" BASE ${CMAKE_CURRENT_BINARY_DIR} FILES ${GF_TRANSLATIONS_QM}) @@ -390,14 +394,18 @@ else() qt_add_lrelease(qttranslations TS_FILES ${QT_TRANSLATIONS_TS} QM_FILES_OUTPUT_VARIABLE QT_TRANSLATIONS_QM) - qt_add_resources(${AppName} "qttranslations" + qt_add_resources(${APP_NAME} "qttranslations" PREFIX "/i18n_qt" BASE ${CMAKE_CURRENT_BINARY_DIR} FILES ${QT_TRANSLATIONS_QM}) endif() include(GNUInstallDirs) -include(CPack) + +# +# Install information read by application +# +configure_file(${CMAKE_SOURCE_DIR}/src/GpgFrontendBuildInstallInfo.h.in ${CMAKE_SOURCE_DIR}/src/GpgFrontendBuildInstallInfo.h @ONLY) # # Install generated libraries and application @@ -408,7 +416,7 @@ set(GPGFRONTEND_INSTALL_LIBRARIES gpgfrontend_test gpgfrontend_module_sdk) -install(TARGETS ${AppName} ${GPGFRONTEND_INSTALL_LIBRARIES} +install(TARGETS ${APP_NAME} ${GPGFRONTEND_INSTALL_LIBRARIES} EXPORT GpgFrontendTargets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} @@ -461,7 +469,7 @@ endforeach() # Building linux package on linux (DEB or RPM) if(BUILD_APP_FOR_PACKAGE) - set(CPACK_PACKAGE_NAME "GpgFrontend") + set(CPACK_PACKAGE_NAME "${APP_NAME_LOWER}") set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}") set(CPACK_PACKAGE_RELEASE "1") set(CPACK_PACKAGE_CONTACT "[email protected]") @@ -470,6 +478,7 @@ if(BUILD_APP_FOR_PACKAGE) set(CPACK_PACKAGE_VENDOR "Saturneric") set(CPACK_PACKAGE_HOMEPAGE_URL "https://gpgfrontend.bktus.com") + set(CPACK_PACKAGE_FILE_NAME "${APP_NAME_LOWER}-v${PROJECT_VERSION}") set(CPACK_GENERATOR "RPM;DEB") # @@ -519,4 +528,6 @@ if(BUILD_APP_FOR_PACKAGE) PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) file(CHMOD "${CMAKE_BINARY_DIR}/rpm-post-uninstall.sh" PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + + include(CPack) endif()
\ No newline at end of file diff --git a/src/GpgFrontendBuildInstallInfo.h.in b/src/GpgFrontendBuildInstallInfo.h.in index 3f9c74c9..ebb5cfd4 100644 --- a/src/GpgFrontendBuildInstallInfo.h.in +++ b/src/GpgFrontendBuildInstallInfo.h.in @@ -35,4 +35,5 @@ #define APP_BIN_PATH "@CMAKE_INSTALL_FULL_BINDIR@" #define APP_LOCALSTATE_PATH "@CMAKE_INSTALL_FULL_LOCALSTATEDIR@" #define APP_SYSCONF_PATH "@CMAKE_INSTALL_FULL_SYSCONFDIR@" -#define APP_INFO_PATH "@CMAKE_INSTALL_FULL_INFODIR@"
\ No newline at end of file +#define APP_INFO_PATH "@CMAKE_INSTALL_FULL_INFODIR@" +#define APP_LIB_PATH "@CMAKE_INSTALL_FULL_LIBDIR@"
\ No newline at end of file diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 4f3b4318..1aeb33f3 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -106,7 +106,7 @@ elseif(APPLE) LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE} LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE} XCODE_ATTRIBUTE_SKIP_INSTALL "Yes" - XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${GPGFRONTEND_XOCDE_CODE_SIGN_IDENTITY}") + XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${GPGFRONTEND_XCODE_CODE_SIGN_IDENTITY}") endif() else() # linux diff --git a/src/core/function/GlobalSettingStation.cpp b/src/core/function/GlobalSettingStation.cpp index 3c0dda88..20bbfc55 100644 --- a/src/core/function/GlobalSettingStation.cpp +++ b/src/core/function/GlobalSettingStation.cpp @@ -28,6 +28,9 @@ #include "GlobalSettingStation.h" +#include "GpgFrontendBuildInstallInfo.h" + +// #include "core/module/ModuleManager.h" #include "core/utils/FilesystemUtils.h" @@ -157,11 +160,11 @@ class GlobalSettingStation::Impl { #if defined(__linux__) // AppImage if (!qEnvironmentVariable("APPIMAGE").isEmpty()) { - return qEnvironmentVariable("APPDIR") + "/usr/modules"; + return qEnvironmentVariable("APPDIR") + "/usr/lib/modules"; } // Flatpak if (!qEnvironmentVariable("container").isEmpty()) { - return "/app/modules"; + return "/app/lib/gpgfrontend/modules"; } #endif @@ -183,6 +186,12 @@ class GlobalSettingStation::Impl { #endif + // Package or Install + auto module_install_path = QString(APP_LIB_PATH) + "/gpgfrontend/modules"; + if (QFileInfo(module_install_path).exists()) { + return module_install_path; + } + return exec_binary_path + "/modules"; } diff --git a/src/sdk/CMakeLists.txt b/src/sdk/CMakeLists.txt index 1f0baca4..55df8fe7 100644 --- a/src/sdk/CMakeLists.txt +++ b/src/sdk/CMakeLists.txt @@ -48,5 +48,5 @@ if(XCODE_BUILD) LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE} LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE} XCODE_ATTRIBUTE_SKIP_INSTALL "Yes" - XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${GPGFRONTEND_XOCDE_CODE_SIGN_IDENTITY}") + XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${GPGFRONTEND_XCODE_CODE_SIGN_IDENTITY}") endif()
\ No newline at end of file diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt index 63d70d63..52ad9c07 100644 --- a/src/test/CMakeLists.txt +++ b/src/test/CMakeLists.txt @@ -52,7 +52,7 @@ if(XCODE_BUILD) LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE} LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE} XCODE_ATTRIBUTE_SKIP_INSTALL "Yes" - XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${GPGFRONTEND_XOCDE_CODE_SIGN_IDENTITY}") + XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${GPGFRONTEND_XCODE_CODE_SIGN_IDENTITY}") endif() add_test(AllTestsInGpgFrontend gpgfrontend_test) diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt index 166dceb7..e8862bd0 100644 --- a/src/ui/CMakeLists.txt +++ b/src/ui/CMakeLists.txt @@ -78,7 +78,7 @@ if(XCODE_BUILD) LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE} LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE} XCODE_ATTRIBUTE_SKIP_INSTALL "Yes" - XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${GPGFRONTEND_XOCDE_CODE_SIGN_IDENTITY}") + XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${GPGFRONTEND_XCODE_CODE_SIGN_IDENTITY}") endif() target_compile_features(gpgfrontend_ui PUBLIC cxx_std_17)
\ No newline at end of file |