diff options
author | saturneric <[email protected]> | 2025-04-30 21:58:02 +0000 |
---|---|---|
committer | saturneric <[email protected]> | 2025-04-30 21:58:02 +0000 |
commit | a3e732653b51c72e427ef1be2fcc27e68f914c8a (patch) | |
tree | b8b14bd1e90ffd598b6ab77d2e27e51028ec5373 | |
parent | fix: unit test cases (diff) | |
download | GpgFrontend-a3e732653b51c72e427ef1be2fcc27e68f914c8a.tar.gz GpgFrontend-a3e732653b51c72e427ef1be2fcc27e68f914c8a.zip |
refactor: correct and simplify project configurations
-rw-r--r-- | CMakeLists.txt | 326 | ||||
m--------- | modules | 0 | ||||
-rw-r--r-- | src/CMakeLists.txt | 563 | ||||
-rw-r--r-- | src/core/CMakeLists.txt | 9 | ||||
-rw-r--r-- | src/sdk/CMakeLists.txt | 11 | ||||
-rw-r--r-- | src/test/CMakeLists.txt | 3 | ||||
-rw-r--r-- | src/ui/CMakeLists.txt | 7 |
7 files changed, 323 insertions, 596 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 65212fe3..ba149318 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,124 +55,41 @@ include(CheckCXXSourceCompiles) # generate compile_commands.json set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -# build type options -option(GPGFRONTEND_BUILD_TYPE_TEST_CORE - "Only compile the core and generate the unit test program" OFF) -option(GPGFRONTEND_BUILD_TYPE_TEST_CORE_AND_COVERAGE - "Compile only the core and generate unit test programs that can evaluate test coverage" OFF) -option(GPGFRONTEND_BUILD_TYPE_TEST_UI - "Only generate a graphical interface with basic functions" OFF) -option(GPGFRONTEND_BUILD_TYPE_TEST_ALL - "Generate a graphical interface with all functions" OFF) -option(GPGFRONTEND_BUILD_TYPE_STABLE - "Generate release version" ON) -option(GPGFRONTEND_BUILD_TYPE_FULL_SDK "Build and install all headers and libs exclude application" OFF) -option(GPGFRONTEND_BUILD_TYPE_ONLY_SDK "Build and install sdk headers and libs" OFF) -option(GPGFRONTEND_BUILD_TYPE_ONLY_APPLICATION "Generate a usable SDK" OFF) - -# function or mode options +# general build options option(GPGFRONTEND_QT5_BUILD "Swith to Qt5 building mode" OFF) -option(GPGFRONTEND_GENERATE_LINUX_INSTALL_SOFTWARE "Generate an installable version" OFF) +option(GPGFRONTEND_BUILD_APP_FOR_PACKAGE "Allow generating an installable package(DEB or RPM)." OFF) option(GPGFRONTEND_ENABLE_ASAN "Enable ASAN" OFF) option(GPGFRONTEND_BUILD_APP_IMAGE "Build AppImage" OFF) +option(GPGFRONTEND_BUILD_MODULES "Build Modules" ON) -# xcode options +# xcode build options option(GPGFRONTEND_XCODE_TEAM_ID "GpgFrontend Apple Team ID" "NONE") option(GPGFRONTEND_XOCDE_CODE_SIGN_IDENTITY "GpgFrontend Signing Certificate" "NONE") option(GPGFRONTEND_XOCDE_APPID "GpgFrontend Apple AppID" "NONE") option(GPGFRONTEND_XOCDE_PROVISIONING_PROFILE_UUID "GpgFrontend ProvisioningProfile UUID" "NONE") option(GPGFRONTEND_XOCDE_ENABLE_SANDBOX "Enable SandBox For Xcode Build" OFF) -# analyse options -if(GPGFRONTEND_BUILD_TYPE_TEST_CORE) - set(CMAKE_BUILD_TYPE "Debug") - set(GPGFRONTEND_BUILD_CONFIG "test_core") -endif() - -if(GPGFRONTEND_BUILD_TYPE_TEST_CORE_AND_COVERAGE) - set(CMAKE_BUILD_TYPE "Debug") - set(GPGFRONTEND_BUILD_CONFIG "test_core_coverage") -endif() - -if(GPGFRONTEND_BUILD_TYPE_TEST_UI) - set(CMAKE_BUILD_TYPE "Debug") - set(GPGFRONTEND_BUILD_CONFIG "test_ui") -endif() - -if(GPGFRONTEND_BUILD_TYPE_TEST_ALL) - set(CMAKE_BUILD_TYPE "Debug") - set(GPGFRONTEND_BUILD_CONFIG "test_all") -endif() - -# Specify compilation mode -message(STATUS "Switch Build Configure STABLE_BUILD_APPLICATION") -set(STABLE_BUILD_APPLICATION 1) - -# stable features -if(GPGFRONTEND_BUILD_TYPE_STABLE) - set(GPGFRONTEND_BUILD_TYPE_TEST_CORE 0) - set(GPGFRONTEND_BUILD_TYPE_TEST_CORE_AND_COVERAGE 0) - set(GPGFRONTEND_BUILD_TYPE_TEST_UI 0) - set(GPGFRONTEND_BUILD_TYPE_TEST_ALL 0) - unset(GPGFRONTEND_BUILD_CONFIG) - - set(STABLE_BUILD_APPLICATION 1) -endif() - -# linux package build -if(GPGFRONTEND_GENERATE_LINUX_INSTALL_SOFTWARE) - set(GPGFRONTEND_BUILD_TYPE_TEST_CORE 0) - set(GPGFRONTEND_BUILD_TYPE_TEST_CORE_AND_COVERAGE 0) - set(GPGFRONTEND_BUILD_TYPE_TEST_UI 0) - set(GPGFRONTEND_BUILD_TYPE_TEST_ALL 0) - unset(GPGFRONTEND_BUILD_CONFIG) - - set(LINUX_INSTALL_SOFTWARE 1) -endif() - -if(GPGFRONTEND_BUILD_TYPE_FULL_SDK) - set(GPGFRONTEND_BUILD_TYPE_TEST_CORE 0) - set(GPGFRONTEND_BUILD_TYPE_TEST_CORE_AND_COVERAGE 0) - set(GPGFRONTEND_BUILD_TYPE_TEST_UI 0) - set(GPGFRONTEND_BUILD_TYPE_TEST_ALL 0) - unset(GPGFRONTEND_BUILD_CONFIG) - - set(STABLE_BUILD_APPLICATION 0) - set(STABLE_BUILD_FULL_SDK 1) -endif() - -if(GPGFRONTEND_BUILD_TYPE_ONLY_SDK) - set(GPGFRONTEND_BUILD_TYPE_TEST_CORE 0) - set(GPGFRONTEND_BUILD_TYPE_TEST_CORE_AND_COVERAGE 0) - set(GPGFRONTEND_BUILD_TYPE_TEST_UI 0) - set(GPGFRONTEND_BUILD_TYPE_TEST_ALL 0) - unset(GPGFRONTEND_BUILD_CONFIG) - - set(STABLE_BUILD_APPLICATION 0) - set(STABLE_BUILD_ONLY_SDK 1) +if(GPGFRONTEND_BUILD_APP_IMAGE) + set(BUILD_APP_IMAGE 1) endif() -if(GPGFRONTEND_BUILD_TYPE_ONLY_APPLICATION) - set(GPGFRONTEND_BUILD_TYPE_TEST_CORE 0) - set(GPGFRONTEND_BUILD_TYPE_TEST_CORE_AND_COVERAGE 0) - set(GPGFRONTEND_BUILD_TYPE_TEST_UI 0) - set(GPGFRONTEND_BUILD_TYPE_TEST_ALL 0) - unset(GPGFRONTEND_BUILD_CONFIG) +if(GPGFRONTEND_BUILD_APP_FOR_PACKAGE) + set(BUILD_APP_FOR_PACKAGE 1) - set(STABLE_BUILD_APPLICATION 0) - set(STABLE_BUILD_ONLY_APPLICATION 1) -endif() - -# Fallback for BUILD_APPLICATION if not set by any build type -if(NOT DEFINED BUILD_APPLICATION) - if(GPGFRONTEND_GENERATE_LINUX_INSTALL_SOFTWARE OR GPGFRONTEND_BUILD_TYPE_STABLE OR GPGFRONTEND_BUILD_TYPE_ONLY_APPLICATION) - set(BUILD_APPLICATION 1) - message(STATUS "Setting BUILD_APPLICATION=1 as fallback based on build configuration") + if(NOT DEFINED CMAKE_INSTALL_PREFIX OR CMAKE_INSTALL_PREFIX STREQUAL "") + if(BUILD_FOR_PACKAGING) + set(CMAKE_INSTALL_PREFIX "/usr" CACHE PATH "Normal packaging path" FORCE) + else() + set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Normal installing path" FORCE) + endif() endif() + + set(PACKAGING_INSTALL_PREFIX "/usr" CACHE PATH "Prefix by packaging") + set(CPACK_PACKAGING_INSTALL_PREFIX "${PACKAGING_INSTALL_PREFIX}") endif() -if(GPGFRONTEND_BUILD_APP_IMAGE) - set(BUILD_APP_IMAGE 1) +if(GPGFRONTEND_BUILD_MODULES) + set(BUILD_MODULES 1) endif() # C++ @@ -241,13 +158,6 @@ endif() if(CMAKE_BUILD_TYPE STREQUAL "Release" AND APPLE) set(GPGFRONTEND_GENERATE_LINUX_INSTALL_SOFTWARE 0) set(LINUX_INSTALL_SOFTWARE 0) - - set(GPGFRONTEND_BUILD_TYPE_TEST_CORE 0) - set(GPGFRONTEND_BUILD_TYPE_TEST_CORE_AND_COVERAGE 0) - set(GPGFRONTEND_BUILD_TYPE_TEST_UI 0) - set(GPGFRONTEND_BUILD_TYPE_TEST_ALL 0) - - unset(GPGFRONTEND_BUILD_CONFIG) endif() # if enable ASAN @@ -396,15 +306,6 @@ if(LINUX) set(HTTP_REQUEST_USER_AGENT "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:123.0) Gecko/20100101 Firefox/123.0") endif() -if(LINUX_INSTALL_SOFTWARE) - message(STATUS "Linux Install Traget ${CMAKE_INSTALL_PREFIX}") - include(GNUInstallDirs) - set(APP_INSTALL_FLAG LINUX_INSTALL) - add_compile_definitions(LINUX_INSTALL_BUILD) -else() - set(APP_INSTALL_FLAG BUNDLE) -endif() - if(GPGFRONTEND_QT5_BUILD) # Support Qt version: 5.15.x find_package(Qt5 5.15 COMPONENTS Core Widgets PrintSupport Network LinguistTools REQUIRED) @@ -418,157 +319,68 @@ set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) -set(CMAKE_AUTORCC_OPTIONS "--compress;9") set(CMAKE_AUTOUIC_SEARCH_PATHS ${CMAKE_AUTOUIC_SEARCH_PATHS} ${CMAKE_SOURCE_DIR}/ui) -# Find and configure libassuan using pkg-config -find_package(PkgConfig REQUIRED) -pkg_check_modules(LIBASSUAN libassuan) - -if(NOT LIBASSUAN_FOUND) - message(FATAL_ERROR "libassuan not found. Please install libassuan-dev or libassuan-devel package for your system.") -endif() - -# Add libassuan include and library paths globally since it's a core dependency -include_directories(${LIBASSUAN_INCLUDE_DIRS}) -link_directories(${LIBASSUAN_LIBRARY_DIRS}) - -if(STABLE_BUILD_APPLICATION) - message("[*] Build Stable Application") - set(BUILD_CORE 1) - set(BUILD_UI 1) - set(BUILD_TEST 1) - set(BUILD_SDK 1) - set(BUILD_APPLICATION 1) - set(SUPPORT_MULTI_LANG 1) -elseif(STABLE_BUILD_ONLY_SDK) - message("[*] Build SDK") - set(BUILD_CORE 1) - set(BUILD_UI 1) - set(BUILD_SDK 1) -elseif(STABLE_BUILD_FULL_SDK) - message("[*] Build All Headers and Libs (SDK fully build)") - set(BUILD_CORE 1) - set(BUILD_UI 1) - set(BUILD_TEST 1) - set(BUILD_SDK 1) -elseif(GPGFRONTEND_BUILD_TYPE_ONLY_APPLICATION) - message("[*] Build executable only") - set(BUILD_CORE 0) - set(BUILD_UI 0) - set(BUILD_TEST 0) - set(BUILD_SDK 0) - set(BUILD_APPLICATION 1) - set(SUPPORT_MULTI_LANG 1) -endif() - # For instance in order to select the highest version one SET(CMAKE_FIND_PACKAGE_SORT_ORDER NATURAL) SET(CMAKE_FIND_PACKAGE_SORT_DIRECTION DEC) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) -if(SUPPORT_MULTI_LANG) - add_compile_definitions(SUPPORT_MULTI_LANG) -endif() - # Output Env Variables message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}") message(STATUS "Build C Flags: ${CMAKE_C_FLAGS}") message(STATUS "Build C++ Flags: ${CMAKE_CXX_FLAGS}") -# CPack configuration -set(CPACK_GENERATOR "RPM") -set(CPACK_PACKAGE_NAME "GpgFrontend") -set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}") -set(CPACK_PACKAGE_RELEASE "1") -set(CPACK_PACKAGING_INSTALL_PREFIX "/usr") -set(CPACK_PACKAGE_CONTACT "[email protected]") -set(CPACK_RPM_PACKAGE_LICENSE "GPLv3") -set(CPACK_RPM_PACKAGE_GROUP "Applications/System") -set(CPACK_RPM_PACKAGE_REQUIRES "libassuan >= 2.5.0, gpgme >= 1.12.0, qt6-qtbase >= 6.0.0, gtk-update-icon-cache") -set(CPACK_RPM_PACKAGE_URL "https://gpgfrontend.bktus.com") -set(CPACK_RPM_PACKAGE_DESCRIPTION "GpgFrontend is a free, open-source, robust yet user-friendly, compact and cross-platform tool for OpenPGP encryption.") - -# Configure RPM scripts -configure_file( - "${CMAKE_SOURCE_DIR}/cmake/rpm/post-install.sh" - "${CMAKE_BINARY_DIR}/rpm-post-install.sh" - @ONLY -) -configure_file( - "${CMAKE_SOURCE_DIR}/cmake/rpm/post-uninstall.sh" - "${CMAKE_BINARY_DIR}/rpm-post-uninstall.sh" - @ONLY -) - -# Set RPM scripts -set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_BINARY_DIR}/rpm-post-install.sh") -set(CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_BINARY_DIR}/rpm-post-uninstall.sh") - -# Make the scripts executable -file(CHMOD ${CMAKE_BINARY_DIR}/rpm-post-install.sh - 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) - -# Documentation handling -set(CPACK_RPM_PACKAGE_LICENSE_FILE "${CMAKE_SOURCE_DIR}/COPYING") -set(CPACK_RPM_PACKAGE_DOCUMENTATION "${CMAKE_SOURCE_DIR}/README.md") - -# Install license and documentation -install(FILES "${CMAKE_SOURCE_DIR}/COPYING" - DESTINATION "share/licenses/${CPACK_PACKAGE_NAME}" - COMPONENT runtime) -install(FILES "${CMAKE_SOURCE_DIR}/README.md" - DESTINATION "share/doc/${CPACK_PACKAGE_NAME}" - COMPONENT runtime) - -# Install icons for all resolutions -foreach(size IN ITEMS 32 48 64 128 256 512) - install(FILES "${CMAKE_SOURCE_DIR}/resource/lfs/hicolor/${size}x${size}/apps/com.bktus.gpgfrontend.png" - DESTINATION "share/icons/hicolor/${size}x${size}/apps" - RENAME "gpgfrontend.png" - COMPONENT runtime) - # Also install with the full name for .desktop file compatibility - install(FILES "${CMAKE_SOURCE_DIR}/resource/lfs/hicolor/${size}x${size}/apps/com.bktus.gpgfrontend.png" - DESTINATION "share/icons/hicolor/${size}x${size}/apps" - COMPONENT runtime) -endforeach() - -# Install desktop file -install(FILES "${CMAKE_SOURCE_DIR}/resource/appstream/com.bktus.gpgfrontend.desktop" - DESTINATION "share/applications" - COMPONENT runtime) - -# Install metainfo/appdata -install(FILES "${CMAKE_SOURCE_DIR}/resource/appstream/com.bktus.gpgfrontend.metainfo.xml" - DESTINATION "share/metainfo" - COMPONENT runtime) - -# Exclude files from auto-detection of dependencies -set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION - "/usr/share/doc" - "/usr/share/licenses" - "/usr/share/applications" - "/usr/share/metainfo" - "/usr/share/icons" - "/usr/share/icons/hicolor" - "/usr/share/icons/hicolor/128x128" - "/usr/share/icons/hicolor/256x256" - "/usr/share/icons/hicolor/32x32" - "/usr/share/icons/hicolor/48x48" - "/usr/share/icons/hicolor/512x512" - "/usr/share/icons/hicolor/64x64" - "/usr/share/icons/hicolor/128x128/apps" - "/usr/share/icons/hicolor/256x256/apps" - "/usr/share/icons/hicolor/32x32/apps" - "/usr/share/icons/hicolor/48x48/apps" - "/usr/share/icons/hicolor/512x512/apps" - "/usr/share/icons/hicolor/64x64/apps") - -# Include CPack to enable packaging support -include(CPack) - # third_party add_subdirectory(third_party) # source code + +# Set build information +configure_file(${CMAKE_SOURCE_DIR}/src/GpgFrontend.h.in ${CMAKE_SOURCE_DIR}/src/GpgFrontend.h @ONLY) +configure_file(${CMAKE_SOURCE_DIR}/src/GpgFrontendBuildInfo.h.in ${CMAKE_SOURCE_DIR}/src/GpgFrontendBuildInfo.h @ONLY) +configure_file(${CMAKE_SOURCE_DIR}/src/GpgFrontendBuildInstallInfo.h.in ${CMAKE_SOURCE_DIR}/src/GpgFrontendBuildInstallInfo.h @ONLY) +configure_file(${CMAKE_SOURCE_DIR}/src/sdk/GFSDKBuildInfo.h.in ${CMAKE_SOURCE_DIR}/src/sdk/GFSDKBuildInfo.h @ONLY) + +if(APPLE) + configure_file(${CMAKE_SOURCE_DIR}/resource/plist/ExportOptions.plist.in ${CMAKE_BINARY_DIR}/ExportOptions.plist @ONLY) +endif() + +# binary and libraries output path +if(XCODE_BUILD) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}) +elseif(MINGW) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/artifacts/bin) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/artifacts/bin) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/artifacts/bin) +elseif(BUILD_APP_IMAGE) + set(APPDIR "${CMAKE_BINARY_DIR}/artifacts/AppDir") + + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${APPDIR}/usr/bin") + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${APPDIR}/usr/lib") + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${APPDIR}/usr/lib") + + file(MAKE_DIRECTORY "${APPDIR}/usr/share/icons") + file(COPY "${CMAKE_SOURCE_DIR}/resource/lfs/hicolor" DESTINATION "${APPDIR}/usr/share/icons") + + file(MAKE_DIRECTORY "${APPDIR}/usr/share/metainfo") + file(COPY "${CMAKE_SOURCE_DIR}/resource/appstream/com.bktus.gpgfrontend.metainfo.xml" + DESTINATION "${APPDIR}/usr/share/metainfo" FOLLOW_SYMLINK_CHAIN) + + file(MAKE_DIRECTORY "${APPDIR}/usr/share/applications") + file(COPY "${CMAKE_SOURCE_DIR}/resource/appstream/com.bktus.gpgfrontend.desktop" + DESTINATION "${APPDIR}/usr/share/applications" FOLLOW_SYMLINK_CHAIN) + + file(COPY "${CMAKE_SOURCE_DIR}/resource/lfs/pixmaps/com.bktus.gpgfrontend.png" + DESTINATION "${APPDIR}" FOLLOW_SYMLINK_CHAIN) + + message(STATUS "AppImage mode enabled. All outputs will go to: ${APPDIR}") +else() + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/artifacts) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/artifacts) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/artifacts) +endif() + add_subdirectory(src) + +if(BUILD_MODULES) + add_subdirectory(modules) +endif()
\ No newline at end of file diff --git a/modules b/modules -Subproject e348231f935e925c3ea2d7077ca7abefd106dac +Subproject 0a04125026893bcfadc65d4cbdfae70784db301 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0c9171e5..e4811a08 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -55,75 +55,85 @@ endif() find_package(OpenSSL REQUIRED) -# Set Build Information -configure_file(${CMAKE_SOURCE_DIR}/src/GpgFrontend.h.in ${CMAKE_SOURCE_DIR}/src/GpgFrontend.h @ONLY) -configure_file(${CMAKE_SOURCE_DIR}/src/GpgFrontendBuildInfo.h.in ${CMAKE_SOURCE_DIR}/src/GpgFrontendBuildInfo.h @ONLY) -configure_file(${CMAKE_SOURCE_DIR}/src/GpgFrontendBuildInstallInfo.h.in ${CMAKE_SOURCE_DIR}/src/GpgFrontendBuildInstallInfo.h @ONLY) -configure_file(${CMAKE_SOURCE_DIR}/src/sdk/GFSDKBuildInfo.h.in ${CMAKE_SOURCE_DIR}/src/sdk/GFSDKBuildInfo.h @ONLY) +add_subdirectory(core) +add_subdirectory(ui) +add_subdirectory(sdk) +add_subdirectory(test) -if(APPLE) - configure_file(${CMAKE_SOURCE_DIR}/resource/plist/ExportOptions.plist.in ${CMAKE_BINARY_DIR}/ExportOptions.plist @ONLY) -endif() - -# Set Binary Output Path -if(XCODE_BUILD) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}) -elseif(MINGW) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/artifacts/bin) -else() - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/artifacts) -endif() +# Collecting sources file of app +aux_source_directory(. APP_SOURCE) -# Print modules -if(BUILD_CORE) - message("[+] Build Core") - add_subdirectory(core) -endif() +# Make app build with resources +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}) -if(BUILD_UI) - message("[+] Build UI") - add_subdirectory(ui) -endif() - -if(BUILD_SDK) - message("[+] Build SDK") - add_subdirectory(sdk) -endif() +if(${CMAKE_BUILD_TYPE} STREQUAL "Release") + if(MINGW) + add_executable(${AppName} 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}) + + set_target_properties(${AppName} PROPERTIES + BUNDLE True + MACOSX_BUNDLE_GUI_IDENTIFIER com.bktus.gpgfrontend + MACOSX_BUNDLE_BUNDLE_NAME ${AppName} + MACOSX_BUNDLE_LONG_VERSION_STRING ${BUILD_VERSION} + MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION} + MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} + MACOSX_BUNDLE_COPYRIGHT "GPL-3.0" + MACOSX_BUNDLE_INFO_STRING "An OpenPGP Crypto Tool" + MACOSX_BUNDLE_ICON_FILE "gpgfrontend.icns" + MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/resource/plist/MacOSXBundleInfo.plist.in) + + # option for sandbox mode, still under test + if(GPGFRONTEND_XOCDE_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/ + WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + COMMENT "Copying Buddled GnuPG into App Bundle Resource") + set_target_properties(${AppName} 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() -# build to test gpgfrontend core -if(BUILD_TEST) - include(CTest) - enable_testing() - find_package(GTest REQUIRED) - add_subdirectory(test) + set_target_properties(${AppName} 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}") + else() + add_executable(${AppName} ${APP_SOURCE} ${RESOURCE_FILES}) + endif() +else() + add_executable(${AppName} ${APP_SOURCE} ${RESOURCE_FILES}) endif() -# configure for output path and resources -if(BUILD_APPLICATION) - aux_source_directory(. BASE_SOURCE) - set(APP_ICON_RESOURCE_WINDOWS "${CMAKE_SOURCE_DIR}/gpgfrontend.rc") - set_property(SOURCE gpgfrontend.rc APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_SOURCE_DIR}/gpgfrontend.ico) -endif() +# using c++ standard 17 +target_compile_features(${AppName} PUBLIC cxx_std_17) # Set Resource Output Path -if(BUILD_APPLICATION) - if(${CMAKE_BUILD_TYPE} STREQUAL "Release") - if(APPLE) - set(RESOURCE_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Resources) - set(GPGFRONTEND_MACOS_ICON ${CMAKE_SOURCE_DIR}/gpgfrontend.icns) - set_source_files_properties(${GPGFRONTEND_MACOS_ICON} PROPERTIES - MACOSX_PACKAGE_LOCATION "Resources") - elseif(LINUX AND NOT LINUX_INSTALL_SOFTWARE) - set(BUILD_APP_IMAGE 1) - else() - set(RESOURCE_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) - endif() +if(${CMAKE_BUILD_TYPE} STREQUAL "Release") + if(APPLE) + set(RESOURCE_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Resources) + set(GPGFRONTEND_MACOS_ICON ${CMAKE_SOURCE_DIR}/gpgfrontend.icns) + set_source_files_properties(${GPGFRONTEND_MACOS_ICON} PROPERTIES + MACOSX_PACKAGE_LOCATION "Resources") else() set(RESOURCE_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) endif() +else() + set(RESOURCE_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) endif() -if(BUILD_APPLICATION AND MINGW) +if(MINGW) message(STATUS "Copying Dependent DLL For Windows Runtime Env") # all dep dll list @@ -250,13 +260,6 @@ if(BUILD_APPLICATION AND MINGW) file(GLOB _libDllPath "${MSYS64_BIN_PATH}/libgtest*.dll") list(APPEND ALL_RUNTIME_DEP_PATH_LIST ${_libDllPath}) - # add gpgfrontend libraries - if(STABLE_BUILD_ONLY_APPLICATION) - unset(_libDllPath) - file(GLOB _libDllPath "${MSYS64_BIN_PATH}/libgpgfrontend_*.dll") - list(APPEND ALL_RUNTIME_DEP_PATH_LIST ${_libDllPath}) - endif() - # dll with only name set(ALL_RUNTIME_DLL_FILES "") @@ -312,274 +315,208 @@ if(BUILD_APPLICATION AND MINGW) endforeach() endif() -if(BUILD_APPLICATION) - set(RESOURCE_FILES ${CMAKE_SOURCE_DIR}/gpgfrontend.qrc ${APP_ICON_RESOURCE_WINDOWS} ${QON_QM_FILES}) - add_custom_target(resources ALL DEPENDS ${RESOURCE_FILES}) -endif() - -if(BUILD_APP_IMAGE) - file(MAKE_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/AppDir) - file(COPY ${CMAKE_SOURCE_DIR}/resource/lfs/hicolor DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/AppDir/usr/share/icons) - file(COPY ${CMAKE_SOURCE_DIR}/resource/appstream/com.bktus.gpgfrontend.metainfo.xml DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/AppDir/usr/share/metainfo FOLLOW_SYMLINK_CHAIN) - file(COPY ${CMAKE_SOURCE_DIR}/resource/appstream/com.bktus.gpgfrontend.desktop DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/AppDir/usr/share/applications FOLLOW_SYMLINK_CHAIN) - file(COPY ${CMAKE_SOURCE_DIR}/resource/lfs/pixmaps/com.bktus.gpgfrontend.png DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/AppDir FOLLOW_SYMLINK_CHAIN) - set(RESOURCE_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/AppDir/usr/share) - - file(REMOVE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/AppDir/usr/bin/${AppName}) -endif() - -if(BUILD_APPLICATION) - if(${CMAKE_BUILD_TYPE} STREQUAL "Release") - if(MINGW) - add_executable(${AppName} WIN32 ${BASE_SOURCE} ${RESOURCE_FILES}) - - # app bundle packing using xcode - elseif(APPLE AND XCODE_BUILD) - # standard app bundle packing - add_executable(${AppName} MACOSX_BUNDLE ${GPGFRONTEND_MACOS_ICON} ${BASE_SOURCE} ${RESOURCE_FILES}) - - set_target_properties(${AppName} PROPERTIES - BUNDLE True - MACOSX_BUNDLE_GUI_IDENTIFIER com.bktus.gpgfrontend - MACOSX_BUNDLE_BUNDLE_NAME ${AppName} - MACOSX_BUNDLE_LONG_VERSION_STRING ${BUILD_VERSION} - MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION} - MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} - MACOSX_BUNDLE_COPYRIGHT "GPL-3.0" - MACOSX_BUNDLE_INFO_STRING "An OpenPGP Crypto Tool" - MACOSX_BUNDLE_ICON_FILE "gpgfrontend.icns" - MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/resource/plist/MacOSXBundleInfo.plist.in) - - # option for sandbox mode, still under test - if(GPGFRONTEND_XOCDE_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/ - WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - COMMENT "Copying Buddled GnuPG into App Bundle Resource") - set_target_properties(${AppName} 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 - 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}") - elseif(LINUX) - add_executable(${AppName} ${BASE_SOURCE} ${RESOURCE_FILES}) - else() - message(FATAL_ERROR "cannot find a defined method to release application.") - endif() - else() - # if the status is debug - add_executable(${AppName} ${BASE_SOURCE} ${RESOURCE_FILES}) - endif() - - # Make app build with resources - add_dependencies(${AppName} resources) - - # using c++ standard 17 - target_compile_features(${AppName} PUBLIC cxx_std_17) -endif() - -if(BUILD_APP_IMAGE) - add_custom_command(TARGET ${AppName} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/AppDir/usr/bin" - COMMAND ${CMAKE_COMMAND} -E rename "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${AppName}" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/AppDir/usr/bin/${AppName}" - COMMENT "Copying Binary into App Image" - ) -endif() - -if(STABLE_BUILD_ONLY_APPLICATION) - message(STATUS "Application Headers Search Path: ${CMAKE_INSTALL_PREFIX}/include/gpgfrontend") - target_include_directories(${AppName} PUBLIC "${CMAKE_INSTALL_PREFIX}/include/gpgfrontend") - - # link qt - target_link_libraries(${AppName} Qt::Core Qt::Widgets) -endif() - # link options for GpgFrontend -if(BUILD_APPLICATION) - target_link_libraries(${AppName} gpgfrontend_core gpgfrontend_ui gpgfrontend_test) +target_link_libraries(${AppName} gpgfrontend_core gpgfrontend_ui gpgfrontend_test) - if(MINGW) - message(STATUS "Link Application Library For MINGW") - target_link_libraries(${AppName} crypto) - elseif(APPLE) - message(STATUS "Link Application Library For macOS") - else() - message(STATUS "Link Application Library For Linux") - target_link_libraries(${AppName} crypto pthread) - endif() +if(MINGW) + message(STATUS "Link Application Library For MINGW") + target_link_libraries(${AppName} crypto) +elseif(APPLE) + message(STATUS "Link Application Library For macOS") +else() + message(STATUS "Link Application Library For Linux") + target_link_libraries(${AppName} crypto pthread) endif() # add i18n support -if(BUILD_APPLICATION) - set(LOCALE_TS_PATH ${CMAKE_SOURCE_DIR}/resource/lfs/locale/ts) - set(TS_FILES - "${LOCALE_TS_PATH}/GpgFrontend.en_US.ts" - "${LOCALE_TS_PATH}/GpgFrontend.de_DE.ts" - "${LOCALE_TS_PATH}/GpgFrontend.fr_FR.ts" - "${LOCALE_TS_PATH}/GpgFrontend.zh_CN.ts" - "${LOCALE_TS_PATH}/GpgFrontend.zh_TW.ts" - "${LOCALE_TS_PATH}/GpgFrontend.it_IT.ts") - file(GLOB_RECURSE ALL_SOURCE_FILES RELACTIVE ${CMAKE_SOURCE_DIR}/src/*.cpp) - - if(GPGFRONTEND_QT5_BUILD) - # TODO - qt5_add_translation(GF_TRANSLATIONS_QM ${TS_FILES}) - message(STATUS "GF_TRANSLATIONS_QM ${GF_TRANSLATIONS_QM}") - - set(GF_QM_TRANSLATIONS_RESOURCE_FILE "${CMAKE_CURRENT_BINARY_DIR}/i18n.qrc") - file(WRITE ${GF_QM_TRANSLATIONS_RESOURCE_FILE} "<!DOCTYPE RCC>\n<RCC version=\"1.0\">\n <qresource prefix=\"i18n\">\n") - - foreach(QM_FILE ${GF_TRANSLATIONS_QM}) - file(RELATIVE_PATH QM_FILENAME ${CMAKE_CURRENT_BINARY_DIR} ${QM_FILE}) - file(APPEND ${GF_QM_TRANSLATIONS_RESOURCE_FILE} " <file alias=\"${QM_FILENAME}\">${QM_FILE}</file>\n") - endforeach() - - file(APPEND ${GF_QM_TRANSLATIONS_RESOURCE_FILE} " </qresource>\n</RCC>\n") - qt5_add_resources(GF_I18N_RESOURCES ${GF_QM_TRANSLATIONS_RESOURCE_FILE}) - - file(GLOB QT_TRANSLATIONS_TS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/third_party/qttranslations/translations/*.ts) - list(FILTER QT_TRANSLATIONS_TS INCLUDE REGEX ".*(qt|qtbase)_.*\.ts$") - qt5_add_translation(QT_TRANSLATIONS_QM ${QT_TRANSLATIONS_TS}) +set(LOCALE_TS_PATH ${CMAKE_SOURCE_DIR}/resource/lfs/locale/ts) +set(TS_FILES + "${LOCALE_TS_PATH}/GpgFrontend.en_US.ts" + "${LOCALE_TS_PATH}/GpgFrontend.de_DE.ts" + "${LOCALE_TS_PATH}/GpgFrontend.fr_FR.ts" + "${LOCALE_TS_PATH}/GpgFrontend.zh_CN.ts" + "${LOCALE_TS_PATH}/GpgFrontend.zh_TW.ts" + "${LOCALE_TS_PATH}/GpgFrontend.it_IT.ts") +file(GLOB_RECURSE ALL_SOURCE_FILES RELACTIVE ${CMAKE_SOURCE_DIR}/src/*.cpp) + +if(GPGFRONTEND_QT5_BUILD) + # TODO + qt5_add_translation(GF_TRANSLATIONS_QM ${TS_FILES}) + message(STATUS "GF_TRANSLATIONS_QM ${GF_TRANSLATIONS_QM}") + + set(GF_QM_TRANSLATIONS_RESOURCE_FILE "${CMAKE_CURRENT_BINARY_DIR}/i18n.qrc") + file(WRITE ${GF_QM_TRANSLATIONS_RESOURCE_FILE} "<!DOCTYPE RCC>\n<RCC version=\"1.0\">\n <qresource prefix=\"i18n\">\n") + + foreach(QM_FILE ${GF_TRANSLATIONS_QM}) + file(RELATIVE_PATH QM_FILENAME ${CMAKE_CURRENT_BINARY_DIR} ${QM_FILE}) + file(APPEND ${GF_QM_TRANSLATIONS_RESOURCE_FILE} " <file alias=\"${QM_FILENAME}\">${QM_FILE}</file>\n") + endforeach() - set(QT_QM_TRANSLATIONS_RESOURCE_FILE "${CMAKE_CURRENT_BINARY_DIR}/qt_i18n.qrc") - file(WRITE ${QT_QM_TRANSLATIONS_RESOURCE_FILE} "<!DOCTYPE RCC>\n<RCC version=\"1.0\">\n <qresource prefix=\"qt_i18n\">\n") + file(APPEND ${GF_QM_TRANSLATIONS_RESOURCE_FILE} " </qresource>\n</RCC>\n") + qt5_add_resources(GF_I18N_RESOURCES ${GF_QM_TRANSLATIONS_RESOURCE_FILE}) - foreach(QM_FILE ${QT_TRANSLATIONS_QM}) - file(RELATIVE_PATH QM_FILENAME ${CMAKE_CURRENT_BINARY_DIR} ${QM_FILE}) - file(APPEND ${QT_QM_TRANSLATIONS_RESOURCE_FILE} " <file alias=\"${QM_FILENAME}\">${QM_FILE}</file>\n") - endforeach() + file(GLOB QT_TRANSLATIONS_TS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/third_party/qttranslations/translations/*.ts) + list(FILTER QT_TRANSLATIONS_TS INCLUDE REGEX ".*(qt|qtbase)_.*\.ts$") + qt5_add_translation(QT_TRANSLATIONS_QM ${QT_TRANSLATIONS_TS}) - file(APPEND ${QT_QM_TRANSLATIONS_RESOURCE_FILE} " </qresource>\n</RCC>\n") - qt5_add_resources(GF_I18N_RESOURCES ${QT_QM_TRANSLATIONS_RESOURCE_FILE}) + set(QT_QM_TRANSLATIONS_RESOURCE_FILE "${CMAKE_CURRENT_BINARY_DIR}/qt_i18n.qrc") + file(WRITE ${QT_QM_TRANSLATIONS_RESOURCE_FILE} "<!DOCTYPE RCC>\n<RCC version=\"1.0\">\n <qresource prefix=\"qt_i18n\">\n") - message(STATUS "GF_I18N_RESOURCES ${GF_I18N_RESOURCES}") - target_sources(${AppName} 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" - PREFIX "/i18n" - BASE ${CMAKE_CURRENT_BINARY_DIR} - FILES ${GF_TRANSLATIONS_QM}) - - add_custom_target(qttranslations ALL) - - file(GLOB QT_TRANSLATIONS_TS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/third_party/qttranslations/translations/*.ts) - list(FILTER QT_TRANSLATIONS_TS INCLUDE REGEX ".*(qt|qtbase)_.*\.ts$") - qt_add_lrelease(qttranslations - TS_FILES ${QT_TRANSLATIONS_TS} - QM_FILES_OUTPUT_VARIABLE QT_TRANSLATIONS_QM) - qt_add_resources(${AppName} "qttranslations" - PREFIX "/i18n_qt" - BASE ${CMAKE_CURRENT_BINARY_DIR} - FILES ${QT_TRANSLATIONS_QM}) - endif() -endif() + foreach(QM_FILE ${QT_TRANSLATIONS_QM}) + file(RELATIVE_PATH QM_FILENAME ${CMAKE_CURRENT_BINARY_DIR} ${QM_FILE}) + file(APPEND ${QT_QM_TRANSLATIONS_RESOURCE_FILE} " <file alias=\"${QM_FILENAME}\">${QM_FILE}</file>\n") + endforeach() -# if building linux package -if(LINUX AND LINUX_INSTALL_SOFTWARE) - include(GNUInstallDirs) + file(APPEND ${QT_QM_TRANSLATIONS_RESOURCE_FILE} " </qresource>\n</RCC>\n") + qt5_add_resources(GF_I18N_RESOURCES ${QT_QM_TRANSLATIONS_RESOURCE_FILE}) - if(STABLE_BUILD_ONLY_APPLICATION) - set(GPGFRONTEND_INSTALL_LIBRARIES "") - else() - set(GPGFRONTEND_INSTALL_LIBRARIES - gpgfrontend_core - gpgfrontend_ui - gpgfrontend_test - gpgfrontend_module_sdk) - endif() - - message(STATUS "GpgFrontend Install Libraries: ${GPGFRONTEND_INSTALL_LIBRARIES}") - install(TARGETS ${AppName} ${GPGFRONTEND_INSTALL_LIBRARIES} - EXPORT GpgFrontendTargets - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - - install(FILES ${CMAKE_SOURCE_DIR}/TRANSLATORS - DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${AppName}/) - install(FILES ${CMAKE_SOURCE_DIR}/resource/appstream/com.bktus.gpgfrontend.appdata.xml - DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/metainfo/) - install(FILES ${CMAKE_SOURCE_DIR}/resource/appstream/com.bktus.gpgfrontend.desktop - DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications/) - install(DIRECTORY ${CMAKE_SOURCE_DIR}/resource/lfs/pixmaps/ - DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pixmaps/) - install(DIRECTORY ${CMAKE_SOURCE_DIR}/resource/lfs/hicolor/ - DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/) + message(STATUS "GF_I18N_RESOURCES ${GF_I18N_RESOURCES}") + target_sources(${AppName} 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" + PREFIX "/i18n" + BASE ${CMAKE_CURRENT_BINARY_DIR} + FILES ${GF_TRANSLATIONS_QM}) + + add_custom_target(qttranslations ALL) + + file(GLOB QT_TRANSLATIONS_TS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/third_party/qttranslations/translations/*.ts) + list(FILTER QT_TRANSLATIONS_TS INCLUDE REGEX ".*(qt|qtbase)_.*\.ts$") + qt_add_lrelease(qttranslations + TS_FILES ${QT_TRANSLATIONS_TS} + QM_FILES_OUTPUT_VARIABLE QT_TRANSLATIONS_QM) + qt_add_resources(${AppName} "qttranslations" + PREFIX "/i18n_qt" + BASE ${CMAKE_CURRENT_BINARY_DIR} + FILES ${QT_TRANSLATIONS_QM}) endif() -# if only build sdk -if(STABLE_BUILD_ONLY_SDK) - include(GNUInstallDirs) - - if(INSTALL_TO_MODULES_REPO) - set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/modules/sdk/${CMAKE_PROJECT_VERSION}") - message(STATUS "Set CMake Install Prefix for Cooperation: ${CMAKE_INSTALL_PREFIX}") - endif() +include(GNUInstallDirs) +include(CPack) - set(GPGFRONTEND_SDK_INSTALL_LIBRARIES - gpgfrontend_module_sdk) +# +# Install generated libraries and application +# +set(GPGFRONTEND_INSTALL_LIBRARIES + gpgfrontend_core + gpgfrontend_ui + gpgfrontend_test + gpgfrontend_module_sdk) + +install(TARGETS ${AppName} ${GPGFRONTEND_INSTALL_LIBRARIES} + EXPORT GpgFrontendTargets + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - install(TARGETS ${GPGFRONTEND_SDK_INSTALL_LIBRARIES} - EXPORT GpgFrontendTargets - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) -endif() +# +# Install resources and translation +# +install(FILES ${CMAKE_SOURCE_DIR}/TRANSLATORS + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${CPACK_PACKAGE_NAME}) -# if build full sdk -if(STABLE_BUILD_FULL_SDK) - include(GNUInstallDirs) +# +# License and documentation +# +install(FILES "${CMAKE_SOURCE_DIR}/COPYING" + DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/licenses/${CPACK_PACKAGE_NAME}" + COMPONENT runtime) - if(INSTALL_TO_MODULES_REPO) - set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/modules/sdk/${CMAKE_PROJECT_VERSION}") - message(STATUS "Set CMake Install Prefix for Cooperation: ${CMAKE_INSTALL_PREFIX}") - endif() +install(FILES "${CMAKE_SOURCE_DIR}/README.md" + DESTINATION "${CMAKE_INSTALL_DOCDIR}/${CPACK_PACKAGE_NAME}" + COMPONENT runtime) - set(GPGFRONTEND_SDK_INSTALL_LIBRARIES - gpgfrontend_core - gpgfrontend_ui - gpgfrontend_test - gpgfrontend_module_sdk) - - install(TARGETS ${GPGFRONTEND_SDK_INSTALL_LIBRARIES} - EXPORT GpgFrontendTargets - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - - install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/core" - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/gpgfrontend" - FILES_MATCHING - PATTERN "*.h" - ) +# +# Desktop integration +# +install(FILES "${CMAKE_SOURCE_DIR}/resource/appstream/com.bktus.gpgfrontend.desktop" + DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications" + COMPONENT runtime) - install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/ui" - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/gpgfrontend" - FILES_MATCHING - PATTERN "*.h" - ) +install(FILES "${CMAKE_SOURCE_DIR}/resource/appstream/com.bktus.gpgfrontend.metainfo.xml" + DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/metainfo" + COMPONENT runtime) - install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/test" - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/gpgfrontend" - FILES_MATCHING - PATTERN "*.h" - ) +# +# Icons and pixmaps +# +install(DIRECTORY "${CMAKE_SOURCE_DIR}/resource/lfs/pixmaps/" + DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/pixmaps") + +install(DIRECTORY "${CMAKE_SOURCE_DIR}/resource/lfs/hicolor/" + DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor") + +# Optional +foreach(size IN ITEMS 32 48 64 128 256 512) + install(FILES "${CMAKE_SOURCE_DIR}/resource/lfs/hicolor/${size}x${size}/apps/com.bktus.gpgfrontend.png" + DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${size}x${size}/apps" + RENAME "gpgfrontend.png" + COMPONENT runtime) +endforeach() + +# Building linux package on linux (DEB or RPM) +if(BUILD_APP_FOR_PACKAGE) + set(CPACK_PACKAGE_NAME "GpgFrontend") + set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}") + set(CPACK_PACKAGE_RELEASE "1") + set(CPACK_PACKAGE_CONTACT "[email protected]") + set(CPACK_PACKAGE_DESCRIPTION + "GpgFrontend is a free, open-source, robust yet user-friendly, compact and cross-platform tool for OpenPGP encryption.") + set(CPACK_PACKAGE_VENDOR "Saturneric") + set(CPACK_PACKAGE_HOMEPAGE_URL "https://gpgfrontend.bktus.com") + + set(CPACK_GENERATOR "RPM;DEB") + + # + # RPM Settings + # + set(CPACK_RPM_PACKAGE_LICENSE "GPLv3") + set(CPACK_RPM_PACKAGE_GROUP "Applications/System") + set(CPACK_RPM_PACKAGE_REQUIRES + "libassuan >= 2.5.0, gpgme >= 1.12.0, qt6-qtbase >= 6.0.0, gtk-update-icon-cache") + set(CPACK_RPM_PACKAGE_URL "${CPACK_PACKAGE_HOMEPAGE_URL}") + set(CPACK_RPM_PACKAGE_LICENSE_FILE "${CMAKE_SOURCE_DIR}/COPYING") + set(CPACK_RPM_PACKAGE_DOCUMENTATION "${CMAKE_SOURCE_DIR}/README.md") + + # Exclude auto-filelist paths + set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION + "/usr/share/doc" + "/usr/share/licenses" + "/usr/share/applications" + "/usr/share/metainfo" + "/usr/share/icons" + "/usr/share/icons/hicolor" + "/usr/share/icons/hicolor/*") + + # + # DEB Settings + # + set(CPACK_DEBIAN_PACKAGE_MAINTAINER "[email protected]") + set(CPACK_DEBIAN_PACKAGE_SECTION "utils") + set(CPACK_DEBIAN_PACKAGE_DEPENDS + "libassuan0 (>= 2.5.0), libgpgme11 (>= 1.12.0), qt6-base-dev (>= 6.0.0), gtk-update-icon-cache") + set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "${CPACK_PACKAGE_HOMEPAGE_URL}") + set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION}") + set(CPACK_DEBIAN_PACKAGE_LICENSE "GPLv3") + + # + # Install scripts + # + configure_file("${CMAKE_SOURCE_DIR}/cmake/rpm/post-install.sh" + "${CMAKE_BINARY_DIR}/rpm-post-install.sh" @ONLY) + configure_file("${CMAKE_SOURCE_DIR}/cmake/rpm/post-uninstall.sh" + "${CMAKE_BINARY_DIR}/rpm-post-uninstall.sh" @ONLY) + + set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_BINARY_DIR}/rpm-post-install.sh") + set(CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_BINARY_DIR}/rpm-post-uninstall.sh") + + file(CHMOD "${CMAKE_BINARY_DIR}/rpm-post-install.sh" + 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) endif()
\ No newline at end of file diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index d5dd4a6e..4f3b4318 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -55,7 +55,7 @@ target_sources(gpgfrontend_core PRIVATE ${CMAKE_SOURCE_DIR}/third_party/qt-aes/qaesencryption.cpp) # link gnupg libraries -target_link_libraries(gpgfrontend_core PUBLIC gpgme ${LIBASSUAN_LIBRARIES} gpg-error) +target_link_libraries(gpgfrontend_core PUBLIC gpgme assuan gpg-error) # link openssl target_link_libraries(gpgfrontend_core PUBLIC OpenSSL::SSL OpenSSL::Crypto) @@ -92,13 +92,6 @@ target_precompile_headers(gpgfrontend_core # using std c++ 17 target_compile_features(gpgfrontend_core PUBLIC cxx_std_17) -# MODULEs will find libraries under artifacts lib -if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") - set_target_properties(gpgfrontend_core PROPERTIES - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/lib - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/lib) -endif() - # link for different platforms if(MINGW) message(STATUS "Link GPG Static Library For MINGW") diff --git a/src/sdk/CMakeLists.txt b/src/sdk/CMakeLists.txt index 7ebb1d87..1f0baca4 100644 --- a/src/sdk/CMakeLists.txt +++ b/src/sdk/CMakeLists.txt @@ -41,17 +41,6 @@ target_include_directories(gpgfrontend_module_sdk PUBLIC sdk) # link module system target_link_libraries(gpgfrontend_module_sdk PRIVATE gpgfrontend_core gpgfrontend_ui) -# sdk export headers -file(GLOB _headerPath "${CMAKE_CURRENT_SOURCE_DIR}/*.h") -set_target_properties(gpgfrontend_module_sdk PROPERTIES PUBLIC_HEADER "${_headerPath}") - -# MODULEs will find libraries under artifacts lib -if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") - set_target_properties(gpgfrontend_module_sdk PROPERTIES - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/lib - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/lib) -endif() - if(XCODE_BUILD) set_target_properties(gpgfrontend_module_sdk PROPERTIES diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt index 7a8b9450..63d70d63 100644 --- a/src/test/CMakeLists.txt +++ b/src/test/CMakeLists.txt @@ -24,6 +24,9 @@ # SPDX-License-Identifier: GPL-3.0-or-later # Set configure for test +include(CTest) +enable_testing() +find_package(GTest REQUIRED) aux_source_directory(./core TEST_SOURCE) aux_source_directory(. TEST_SOURCE) diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt index e399068d..166dceb7 100644 --- a/src/ui/CMakeLists.txt +++ b/src/ui/CMakeLists.txt @@ -70,13 +70,6 @@ target_include_directories(gpgfrontend_ui PUBLIC # using std c++ 17 target_compile_features(gpgfrontend_ui PUBLIC cxx_std_17) -# MODULEs will find libraries under artifacts lib -if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") - set_target_properties(gpgfrontend_ui PROPERTIES - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/lib - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/lib) -endif() - # for xcode archive build if(XCODE_BUILD) set_target_properties(gpgfrontend_ui |