aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsaturneric <[email protected]>2025-04-30 21:58:02 +0000
committersaturneric <[email protected]>2025-04-30 21:58:02 +0000
commita3e732653b51c72e427ef1be2fcc27e68f914c8a (patch)
treeb8b14bd1e90ffd598b6ab77d2e27e51028ec5373
parentfix: unit test cases (diff)
downloadGpgFrontend-a3e732653b51c72e427ef1be2fcc27e68f914c8a.tar.gz
GpgFrontend-a3e732653b51c72e427ef1be2fcc27e68f914c8a.zip
refactor: correct and simplify project configurations
-rw-r--r--CMakeLists.txt326
m---------modules0
-rw-r--r--src/CMakeLists.txt563
-rw-r--r--src/core/CMakeLists.txt9
-rw-r--r--src/sdk/CMakeLists.txt11
-rw-r--r--src/test/CMakeLists.txt3
-rw-r--r--src/ui/CMakeLists.txt7
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