diff options
-rw-r--r-- | .github/workflows/debug.yml | 54 | ||||
-rw-r--r-- | .github/workflows/release-deb-package.yml | 93 | ||||
-rw-r--r-- | .github/workflows/release-linux-package.yml | 112 | ||||
-rw-r--r-- | .github/workflows/release.yml | 18 | ||||
-rw-r--r-- | CMakeLists.txt | 136 | ||||
-rw-r--r-- | src/CMakeLists.txt | 12 | ||||
-rw-r--r-- | src/gpg/CMakeLists.txt | 9 | ||||
-rw-r--r-- | src/gpg/GpgConstants.cpp | 64 | ||||
-rw-r--r-- | src/gpg/GpgConstants.h | 1 | ||||
-rw-r--r-- | src/ui/CMakeLists.txt | 3 | ||||
-rw-r--r-- | third_party/CMakeLists.txt | 42 |
11 files changed, 335 insertions, 209 deletions
diff --git a/.github/workflows/debug.yml b/.github/workflows/debug.yml index b88b607e..68d50d38 100644 --- a/.github/workflows/debug.yml +++ b/.github/workflows/debug.yml @@ -2,19 +2,15 @@ name: Debug Build & Package on: push: - branches: [ develop, develop_ui ] + branches: [ 'develop-**', 'dev/**' ] paths-ignore: - - '**/README.md' - - '**/README_CN.md' - - 'resource/ts/**' + - 'resource/locale/template/**' - 'docs/**' - '**.md' pull_request: - branches: [ develop ] + branches: [ 'develop-**', 'dev/**' ] paths-ignore: - - '**/README.md' - - '**/README_CN.md' - - 'resource/ts/**' + - 'resource/locale/template/**' - 'docs/**' - '**.md' @@ -39,8 +35,8 @@ jobs: run: | sudo apt-get update sudo apt-get -y install build-essential binutils git autoconf automake gettext texinfo - sudo apt-get -y install gcc g++ libconfig++-dev libboost-all-dev - sudo apt-get -y install gpgsm + sudo apt-get -y install gcc g++ libconfig++-dev libboost-all-dev ninja-build + sudo apt-get -y install gpg if: matrix.os == 'ubuntu-latest' - name: Git Sumbodule Update @@ -61,7 +57,7 @@ jobs: - name: Install Dependence (macOS) run: | brew install cmake git autoconf automake qt@5 gcc texinfo gettext libgpg-error libassuan gpgme openssl - brew install boost libconfig gettext + brew install boost libconfig gettext ninja brew unlink gettext && brew link --force gettext brew link qt@5 brew link gcc @@ -92,9 +88,10 @@ jobs: - name: Set up Dependence (Windows) shell: msys2 {0} run: | - pacman --noconfirm -S --needed mingw-w64-x86_64-gcc mingw-w64-x86_64-make mingw-w64-x86_64-cmake autoconf automake mingw-w64-x86_64-gpgme - pacman --noconfirm -S --needed make texinfo mingw-w64-x86_64-libconfig mingw-w64-x86_64-boost mingw-w64-x86_64-gnupg gettext-devel libintl msys2-runtime-devel - pacman --noconfirm -S --needed mingw-w64-x86_64-qt5 + pacman --noconfirm -S --needed mingw-w64-x86_64-gcc mingw-w64-x86_64-make mingw-w64-x86_64-cmake autoconf + pacman --noconfirm -S --needed make texinfo mingw-w64-x86_64-libconfig mingw-w64-x86_64-boost automake + pacman --noconfirm -S --needed mingw-w64-x86_64-qt5 libintl msys2-runtime-devel gettext-devel + pacman --noconfirm -S --needed mingw-w64-x86_64-gpgme mingw-w64-x86_64-ninja mingw-w64-x86_64-gnupg if: matrix.os == 'windows-latest' - name: Build gpg-error (Linux) @@ -134,15 +131,36 @@ jobs: make install if: matrix.os == 'windows-latest' + - name: Build vmime + run: | + cd ${{github.workspace}}/third_party/vmime + mkdir build + cd build + cmake -G Ninja -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DVMIME_HAVE_MESSAGING_PROTO_SENDMAIL=OFF -DVMIME_CHARSETCONV_LIB=iconv -DVMIME_TLS_SUPPORT_LIB=openssl -DVMIME_HAVE_SASL_SUPPORT=OFF .. + ninja -v + sudo ninja install + cd ${{github.workspace}} + if: matrix.os == 'macos-10.15' + + - name: Build vmime + run: | + cd ${{github.workspace}}/third_party/vmime + mkdir build + cd build + cmake -G Ninja -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DVMIME_HAVE_MESSAGING_PROTO_SENDMAIL=OFF -DVMIME_CHARSETCONV_LIB=iconv -DVMIME_TLS_SUPPORT_LIB=openssl -DVMIME_HAVE_SASL_SUPPORT=OFF .. + ninja -v + sudo ninja install + cd ${{github.workspace}} + - name: Configure CMake # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DEXECUTABLE_OUTPUT_PATH=${{env.EXECUTABLE_OUTPUT_PATH}} -DBUILD_CONFIG="test_ui" + run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DGPGFRONTEND_BUILD_TYPE_TEST_UI=ON if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-10.15' - name: Build GpgFrontend # Build your program with the given configuration - run: cmake --build ${{github.workspace}}/build --config $env.BUILD_TYPE}} -- -j 2 + run: cmake -G Ninja --build ${{github.workspace}}/build --config $env.BUILD_TYPE}} -- -v if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-10.15' - name: Configure CMake & Build Binary(Windows) @@ -150,9 +168,9 @@ jobs: run: | cd $(echo "/${{github.workspace}}" | sed 's/\\/\//g' | sed 's/://') mkdir build && cd build - cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DEXECUTABLE_OUTPUT_PATH=${{env.EXECUTABLE_OUTPUT_PATH}} .. + cmake -G Ninja -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DGPGFRONTEND_BUILD_TYPE_TEST_UI=ON .. # Build your program with the given configuration - cmake --build . --config ${{env.BUILD_TYPE}} -- -j 2 + cmake --build . --config ${{env.BUILD_TYPE}} -- -v if: matrix.os == 'windows-latest' - name: Get Short SHA of Commit diff --git a/.github/workflows/release-deb-package.yml b/.github/workflows/release-deb-package.yml new file mode 100644 index 00000000..f165b784 --- /dev/null +++ b/.github/workflows/release-deb-package.yml @@ -0,0 +1,93 @@ +name: Build Linux Packages + +on: + push: + branches: [ main, 'develop-**', 'dev/**' ] + paths-ignore: + - 'resource/locale/template/**' + - 'docs/**' + - '**.md' + pull_request: + branches: [ 'develop-**', 'dev/**' ] + paths-ignore: + - 'resource/locale/template/**' + - 'docs/**' + - '**.md' + +env: + # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) + BUILD_TYPE: Release + EXECUTABLE_OUTPUT_PATH: ./ + +jobs: + build: + strategy: + matrix: + os: [ 'ubuntu-20.04' ] + runs-on: ${{ matrix.os }} + steps: + + - uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Get Short SHA of Commit + id: vars + run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" + + - name: Install Dependence (Ubuntu 20.04) + run: | + sudo apt-get update + sudo apt-get -y install build-essential binutils git autoconf automake gettext texinfo qt5-default ninja-build + sudo apt-get -y install gcc g++ libconfig++-dev libboost-all-dev + sudo apt-get -y install gpg + if: matrix.os == 'ubuntu-20.04' + + - name: Build gpg-error + run: | + cd ${{github.workspace}}/third_party/libgpg-error + ./autogen.sh + ./configure --enable-maintainer-mode --enable-static=yes && make -j2 + sudo make install + cd ${{github.workspace}} + + - name: Build assuan + run: | + cd ${{github.workspace}}/third_party/libassuan + ./autogen.sh + ./configure --enable-maintainer-mode --enable-static=yes && make -j2 + sudo make install + cd ${{github.workspace}} + + - name: Build GpgME + run: | + cd ${{github.workspace}}/third_party/gpgme + ./autogen.sh + ./configure --enable-maintainer-mode --enable-static=yes --enable-languages=cpp && make -j2 + sudo make install + cd ${{github.workspace}} + + - name: Build vmime + run: | + cd ${{github.workspace}}/third_party/vmime + mkdir build + cd build + cmake -G Ninja -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DVMIME_HAVE_MESSAGING_PROTO_SENDMAIL=OFF -DVMIME_CHARSETCONV_LIB=iconv -DVMIME_TLS_SUPPORT_LIB=openssl -DVMIME_HAVE_SASL_SUPPORT=OFF .. + ninja -v + sudo ninja install + cd ${{github.workspace}} + + - name: Build & Package GpgFrontend (Linux DEB Package) + # Build your program with the given configuration + run: | + cmake -B ${{github.workspace}}/build-deb-${{matrix.os}} -G Ninja -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_BUILD_TYPE="Release" -DGENERATE_LINUX_INSTALL_SOFTWARE=ON + cmake --build ${{github.workspace}}/build-deb-${{matrix.os}} --config {{$env.BUILD_TYPE}} -- -v + cd ${{github.workspace}}/build-deb-${{matrix.os}} + ninja package + cd ${{github.workspace}} + + - name: Upload Artifact(Linux DEB) + uses: actions/upload-artifact@master + with: + name: gpgfrontend-${{matrix.os}}-${{env.BUILD_TYPE}}-${{steps.vars.outputs.sha_short}}-deb-${{matrix.os}} + path: ${{github.workspace}}/build-deb-${{matrix.os}}/gpgfrontend*.deb* diff --git a/.github/workflows/release-linux-package.yml b/.github/workflows/release-linux-package.yml deleted file mode 100644 index 43f26e9b..00000000 --- a/.github/workflows/release-linux-package.yml +++ /dev/null @@ -1,112 +0,0 @@ -name: Build Linux Packages - -on: - push: - branches: [ main, develop ] - paths-ignore: - - '**/README.md' - - '**/README_CN.md' - - 'resource/ts/**' - - 'docs/**' - pull_request: - branches: [ develop ] - paths-ignore: - - '**/README.md' - - '**/README_CN.md' - - 'resource/ts/**' - - 'docs/**' - -env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - BUILD_TYPE: Release - EXECUTABLE_OUTPUT_PATH: ./ - -jobs: - build: - strategy: - matrix: - os: [ 'ubuntu-18.04' ] - runs-on: ${{ matrix.os }} - steps: - - - uses: actions/checkout@v2 - with: - submodules: recursive - - - name: Get Short SHA of Commit - id: vars - run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" - - - name: Install Dependence (Linux) - run: | - sudo apt-get update - sudo apt-get -y install build-essential binutils git autoconf automake gettext texinfo - sudo apt-get -y install gcc-8 g++-8 libconfig++-dev libboost-all-dev - sudo apt-get -y install gpgsm libxcb-xinerama0 libxcb-icccm4-dev libcups2-dev libdrm-dev libegl1-mesa-dev - sudo apt-get -y install libgcrypt11-dev libnss3-dev libpci-dev libpulse-dev libudev-dev libxtst-dev gyp ninja-build - sudo apt-get -y install libglu1-mesa-dev libfontconfig1-dev libx11-xcb-dev libicu-dev libxcb-image0 - sudo apt-get -y install libglu1-mesa-dev libfontconfig1-dev libx11-xcb-dev libicu-dev libxcb-* - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 8 - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 8 - sudo update-alternatives --set gcc "/usr/bin/gcc-8" - sudo update-alternatives --set g++ "/usr/bin/g++-8" - if: matrix.os == 'ubuntu-18.04' - - - name: Cache Qt - id: cache-qt - uses: actions/cache@v1 - with: - path: ../Qt - key: ${{ runner.os }}-QtCache-5.12.8 - if: matrix.os == 'ubuntu-18.04' - - - name: Install Qt - uses: jurplel/install-qt-action@v2 - with: - cached: ${{ steps.cache-qt.outputs.cache-hit }} - version: '5.12.8' - if: matrix.os == 'ubuntu-18.04' - - - name: Build gpg-error - run: | - cd ${{github.workspace}}/third_party/libgpg-error - ./autogen.sh - ./configure --enable-maintainer-mode --enable-static=yes && make -j2 - sudo make install - cd ${{github.workspace}} - if: matrix.os == 'ubuntu-18.04' - - - name: Build assuan - run: | - cd ${{github.workspace}}/third_party/libassuan - ./autogen.sh - ./configure --enable-maintainer-mode --enable-static=yes && make -j2 - sudo make install - cd ${{github.workspace}} - if: matrix.os == 'ubuntu-18.04' - - - name: Build GpgME - run: | - cd ${{github.workspace}}/third_party/gpgme - ./autogen.sh - ./configure --enable-maintainer-mode --enable-static=yes --enable-languages=cpp && make -j2 - sudo make install - cd ${{github.workspace}} - if: matrix.os == 'ubuntu-18.04' - - - name: Build & Package GpgFrontend (Linux DEB Package) - # Build your program with the given configuration - run: | - cmake -B ${{github.workspace}}/build-deb -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DEXECUTABLE_OUTPUT_PATH=${{env.EXECUTABLE_OUTPUT_PATH}} -DAPP_PACKAGE_DEB=ON -DLINUX_INSTALL_SOFTWARE=ON - cmake --build ${{github.workspace}}/build-deb --config {{$env.BUILD_TYPE}} -- -j 2 - cd ${{github.workspace}}/build-deb - make package - cd ${{github.workspace}} - if: matrix.os == 'ubuntu-18.04' - - - name: Upload Artifact(Linux DEB) - uses: actions/upload-artifact@master - with: - name: gpgfrontend-${{matrix.os}}-${{env.BUILD_TYPE}}-${{steps.vars.outputs.sha_short}}-deb - path: ${{github.workspace}}/build-deb/gpgfrontend*.deb* - if: matrix.os == 'ubuntu-18.04' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7bb8120b..63ccfbe3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,19 +2,17 @@ name: Build & Package on: push: - branches: [ main, develop ] + branches: [ main, 'develop-**', 'dev/**' ] paths-ignore: - - '**/README.md' - - '**/README_CN.md' - - 'resource/ts/**' + - 'resource/locale/template/**' - 'docs/**' + - '**.md' pull_request: - branches: [ develop ] + branches: [ 'develop-**', 'dev/**' ] paths-ignore: - - '**/README.md' - - '**/README_CN.md' - - 'resource/ts/**' + - 'resource/locale/template/**' - 'docs/**' + - '**.md' env: # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) @@ -142,7 +140,7 @@ jobs: - name: Configure CMake # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DEXECUTABLE_OUTPUT_PATH=${{env.EXECUTABLE_OUTPUT_PATH}} + run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DGPGFRONTEND_BUILD_TYPE_STABLE=ON if: matrix.os == 'ubuntu-18.04' || matrix.os == 'macos-10.15' - name: Build GpgFrontend @@ -187,7 +185,7 @@ jobs: run: | cd $(echo "/${{github.workspace}}" | sed 's/\\/\//g' | sed 's/://') mkdir build && cd build - cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DEXECUTABLE_OUTPUT_PATH=${{env.EXECUTABLE_OUTPUT_PATH}} .. + cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DGPGFRONTEND_BUILD_TYPE_STABLE=ON .. # Build your program with the given configuration cmake --build . --config ${{env.BUILD_TYPE}} -- -j 2 if: matrix.os == 'windows-latest' diff --git a/CMakeLists.txt b/CMakeLists.txt index 03b779d1..977c19d7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,6 +13,85 @@ INCLUDE(CheckLibraryExists) INCLUDE(CheckCXXSourceCompiles) +# 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(GENERATE_LINUX_INSTALL_SOFTWARE "Generate an installable version" OFF) +option(GENERATE_APP_PACKAGE_DEB "Generate DEB package" OFF) +option(CONFIGURE_FOR_XCODE_BUILD "Generate a version that can be successfully compiled and packaged in Xcode" OFF) +option(USE_QT_DEFAULT_ENV "Build with the qt version provided by the qt-default package" 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 () + +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_APPLICATION_BUILD 1) +endif () + +if (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) + set(GENERATE_APP_PACKAGE_DEB 1) +endif () + +if (GENERATE_LINUX_INSTALL_SOFTWARE AND GENERATE_APP_PACKAGE_DEB) + set(APP_PACKAGE_DEB 1) +endif () + +if (CONFIGURE_FOR_XCODE_BUILD) + set(GENERATE_LINUX_INSTALL_SOFTWARE 0) + set(GENERATE_APP_PACKAGE_DEB 0) + set(LINUX_INSTALL_SOFTWARE 0) + set(APP_PACKAGE_DEB 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) + set(STABLE_APPLICATION_BUILD 1) +endif () + # C++ #Detect Compiler if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") @@ -43,23 +122,20 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # Check Env Variables Before Configuring -if (CMAKE_BUILD_TYPE) - message(STATUS "PreCheck CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE}") -else () +if (NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") - message(STATUS "Set CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE}") endif () # Specify different compilation modes if (GPGFRONTEND_BUILD_CONFIG) # Test Build if (${GPGFRONTEND_BUILD_CONFIG} STREQUAL "test_core") - message(STATUS "Switch TEST_CORE_BUILD") + message(STATUS "Switch Build Configure TEST_CORE_BUILD") set(TEST_CORE_BUILD 1) set(AppName GpgFrontendCoreTest) # Test Build With Coverage Test elseif (${GPGFRONTEND_BUILD_CONFIG} STREQUAL "test_core_coverage") - message(STATUS "Switch TEST_COVERAGE_BUILD") + message(STATUS "Switch Build Configure TEST_COVERAGE_BUILD") set(TEST_CORE_BUILD 1) if (USING_COMPILER_CLANG OR USING_COMPILER_GCC) set(TEST_COVERAGE_BUILD 1) @@ -71,35 +147,26 @@ if (GPGFRONTEND_BUILD_CONFIG) set(AppName GpgFrontendTest) # Test Build with minimum UI elseif (${GPGFRONTEND_BUILD_CONFIG} STREQUAL "test_ui") - message(STATUS "Switch TEST_MINIMUM_UI_BUILD") + message(STATUS "Switch Build Configure TEST_MINIMUM_UI_BUILD") set(MINIMUM_APPLICATION_BUILD 1) set(AppName GpgFrontend) elseif (${GPGFRONTEND_BUILD_CONFIG} STREQUAL "test_all") - message(STATUS "Switch FULL_APPLICATION_BUILD") + message(STATUS "Switch Build Configure FULL_APPLICATION_BUILD") set(FULL_APPLICATION_BUILD 1) set(AppName GpgFrontend) endif () else () - message(STATUS "Switch Default STABLE_APPLICATION_BUILD") + message(STATUS "Switch Build Configure STABLE_APPLICATION_BUILD") set(STABLE_APPLICATION_BUILD 1) set(AppName GpgFrontend) endif () -if (EXECUTABLE_OUTPUT_PATH) - message(STATUS "PreCheck EXECUTABLE_OUTPUT_PATH ${EXECUTABLE_OUTPUT_PATH}") -else () - set(EXECUTABLE_OUTPUT_PATH "./") - message(STATUS "Set EXECUTABLE_OUTPUT_PATH ${EXECUTABLE_OUTPUT_PATH}") -endif () - # Output Env Variables -message(STATUS "Define EXECUTABLE_OUTPUT_PATH ${EXECUTABLE_OUTPUT_PATH}") message(STATUS "Define CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE}") if (${CMAKE_BUILD_TYPE} STREQUAL "Release") set(BUILD_FLAG 0) ADD_DEFINITIONS(-DRELEASE) - message(STATUS "Build Type RELEASE") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2") # Release Version force to build using option STABLE_APPLICATION_BUILD set(FULL_APPLICATION_BUILD 0) @@ -107,7 +174,6 @@ if (${CMAKE_BUILD_TYPE} STREQUAL "Release") else () set(BUILD_FLAG 1) ADD_DEFINITIONS(-DDEBUG) - message(STATUS "Build Type DEBUG") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -g") # Generate branch coverage information using gcc if (TEST_COVERAGE_BUILD) @@ -149,12 +215,12 @@ set(BUILD_VERSION ${PROJECT_VERSION}_${CMAKE_SYSTEM}_${CMAKE_SYSTEM_PROCESSOR}_$ set(GIT_VERSION ${GIT_BRANCH_NAME}_${GIT_COMMIT_HASH}) string(TIMESTAMP BUILD_TIMESTAMP "%Y-%m-%d %H:%M:%S") -message(STATUS "Build Timestamp ${BUILD_TIMESTAMP}") -message(STATUS "Build Version ${BUILD_VERSION}") -message(STATUS "Git Version ${GIT_VERSION}") +message(STATUS "GpgFrontend Build Timestamp ${BUILD_TIMESTAMP}") +message(STATUS "GpgFrontend Build Version ${BUILD_VERSION}") +message(STATUS "GpgFrontend Git Repo Version ${GIT_VERSION}") IF (MINGW) - message(STATUS "Configuration For OS Platform Microsoft Windows") + message(STATUS "GpgFrontend Configuration For OS Platform Microsoft Windows") message(STATUS "Build Environment MINGW") set(OS_PLATFORM 0) @@ -173,7 +239,7 @@ IF (MINGW) endif () if (APPLE) - message(STATUS "Configuration For OS Platform MacOS") + message(STATUS "GpgFrontend Configuration For OS Platform MacOS") set(OS_PLATFORM 1) ADD_DEFINITIONS(-DMACOS) @@ -205,7 +271,7 @@ endif () if (LINUX) - message(STATUS "Configuration For OS Platform LINUX") + message(STATUS "GpgFrontend Configuration For OS Platform LINUX") set(OS_PLATFORM 2) ADD_DEFINITIONS(-DLINUX) @@ -231,20 +297,18 @@ if (LINUX) endif () -message(STATUS "OS_PLATFORM ${OS_PLATFORM}") - if (GPG_STANDALONE_MODE) add_compile_definitions(GPG_STANDALONE_MODE) endif () -# Basic Envirnoment Configure -set(BASIC_ENV_CONFIG 1) -set(QT_MOC_CONFIG 1) + if (LINUX_INSTALL_SOFTWARE) + message(STATUS "Configure Linux Install ON") include(GNUInstallDirs) set(INSTALL_GPGFRONTEND_APP 1) set(APP_INSTALL_FLAG LINUX_INSTALL) + set(USE_QT_DEFAULT_ENV ON) add_compile_definitions(LINUX_INSTALL_BUILD) set(Boost_USE_STATIC_LIBS ON) else () @@ -252,6 +316,9 @@ else () add_compile_definitions(BUNDLE_BUILD) endif () +# Basic ENV Configure +set(BASIC_ENV_CONFIG 1) +set(QT_MOC_CONFIG 1) if (FULL_APPLICATION_BUILD) message(STATUS "Build Full Application") @@ -298,10 +365,10 @@ find_package(Boost COMPONENTS date_time filesystem REQUIRED) if (QT5_ENV_SUPPORT) # Support Qt version Both 5.12.x and 5.15.x - if (LINUX_INSTALL_SOFTWARE) - find_package(Qt5 5.12 COMPONENTS Core Test Widgets PrintSupport Network REQUIRED) - else () + if (USE_QT_DEFAULT_ENV) find_package(Qt5 COMPONENTS Core Test Widgets PrintSupport Network REQUIRED) + else () + find_package(Qt5 5.15 COMPONENTS Core Test Widgets PrintSupport Network REQUIRED) endif () # find_package(Qt5 5.15.2 EXACT COMPONENTS Core Test Widgets PrintSupport Network LinguistTools REQUIRED) # Qt configuration @@ -311,7 +378,6 @@ if (QT5_ENV_SUPPORT) set(CMAKE_AUTORCC_OPTIONS "--compress;9") set(CMAKE_AUTOUIC_SEARCH_PATHS ${CMAKE_AUTOUIC_SEARCH_PATHS} ${CMAKE_SOURCE_DIR}/ui) - message(STATUS "CMAKE_AUTOUIC_SEARCH_PATHS ${CMAKE_AUTOUIC_SEARCH_PATHS}") endif () @@ -336,7 +402,7 @@ endif () # third_party add_subdirectory(third_party) - +# source code add_subdirectory(src) if (TEST_CORE_BUILD) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7f243df8..d17be5e4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -32,7 +32,6 @@ if (APPLICATION_BUILD) # Set Binary Output Path set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}) endif () - message(STATUS "CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") endif () @@ -50,7 +49,6 @@ if (APPLICATION_BUILD) else () set(RESOURCE_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) endif () - message(STATUS "RESOURCE_OUTPUT_DIRECTORY ${RESOURCE_OUTPUT_DIRECTORY}") endif () # Get ALL SOURCE FILES @@ -65,7 +63,6 @@ if (MULTI_LANG_SUPPORT) FIND_PROGRAM(GETTEXT_XGETTEXT_EXECUTABLE xgettext) set(LOCALE_OUTPUT_PATH ${RESOURCE_OUTPUT_DIRECTORY}/locales) - message(STATUS "LOCALE_OUTPUT_PATH ${LOCALE_OUTPUT_PATH}") if (NOT GETTEXT_MSGFMT_EXECUTABLE OR NOT GETTEXT_XGETTEXT_EXECUTABLE) message(ERROR "msgfmt or xgettext not found. Translations will *not* be installed") @@ -80,12 +77,11 @@ if (MULTI_LANG_SUPPORT) file(GLOB ALL_PO_FILES ${CMAKE_SOURCE_DIR}/resource/locale/po/*.po) SET(GMO_FILES) - message(STATUS "ALL_PO_FILES ${ALL_PO_FILES}") foreach (_poFile ${ALL_PO_FILES}) GET_FILENAME_COMPONENT(_poFileName ${_poFile} NAME) string(REGEX REPLACE "\\.[^.]*$" "" _langName ${_poFileName}) - message(STATUS "_poFileName ${_langName}") + message(STATUS "GNU gettext po file ${_langName}") make_directory(${RESOURCE_OUTPUT_DIRECTORY}/locales) make_directory(${RESOURCE_OUTPUT_DIRECTORY}/locales/${_langName}/LC_MESSAGES) add_custom_command( @@ -241,7 +237,6 @@ if (APPLICATION_BUILD) set(GPGFRONTEND_LIBS ${GPGFRONTEND_AFTER_UI_LIBS} gpgfrontend_ui gpgfrontend_core ${GPGFRONTEND_BEFORE_UI_LIBS} easyloggingpp) set(QT_DEPENDENCY_LIBS Qt5::Network Qt5::PrintSupport Qt5::Widgets Qt5::Test Qt5::Core) - message(STATUS "Boost Libraries ${Boost_LIBRARIES}") IF (MINGW) message(STATUS "Link Application Static Library For MINGW") @@ -293,11 +288,11 @@ if (LINUX_INSTALL_SOFTWARE) DESTINATION /usr/share/icons/hicolor/) endif () if (MULTI_LANG_SUPPORT) - message(STATUS "Local Output Path ${LOCALE_OUTPUT_PATH}") install(DIRECTORY ${LOCALE_OUTPUT_PATH}/ DESTINATION ${CMAKE_INSTALL_FULL_LOCALEDIR}) endif () if (APP_PACKAGE_DEB) + message(STATUS "Configure Deb Package") SET(CPACK_GENERATOR "DEB") set(CPACK_INSTALL_PREFIX "/usr/local/") set(CPACK_PACKAGE_NAME "gpgfrontend") @@ -314,3 +309,6 @@ if (LINUX_INSTALL_SOFTWARE) endif () endif () +message(STATUS "Resource Files: ${RESOURCE_OUTPUT_DIRECTORY}") +message(STATUS "Locale Files: ${LOCALE_OUTPUT_PATH}") +message(STATUS "Runtime Files: ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") diff --git a/src/gpg/CMakeLists.txt b/src/gpg/CMakeLists.txt index 52cb5d3c..693b9147 100644 --- a/src/gpg/CMakeLists.txt +++ b/src/gpg/CMakeLists.txt @@ -6,23 +6,22 @@ aux_source_directory(. GPG_SOURCE) add_library(gpgfrontend_core STATIC ${GPG_SOURCE}) set(UTILS_DIR ${CMAKE_SOURCE_DIR}/utils) + set(GPGME_LIB_DIR ${UTILS_DIR}/gpgme/lib) set(THIRD_PARTY_LIBS easyloggingpp config++) set(BOOST_LIBS Boost::date_time Boost::filesystem) -message(STATUS "Third Party Libraries " ${THIRD_PARTY_LIBS}) - if (MINGW) message(STATUS "Link GPG Static Library For MINGW") target_link_libraries(gpgfrontend_core ${THIRD_PARTY_LIBS} ${BOOST_LIBS} - gpgme gpg-error assuan wsock32) + gpgme assuan gpg-error wsock32) target_compile_features(gpgfrontend_core PUBLIC cxx_std_17) elseif (APPLE) message(STATUS "Link GPG Static Library For macOS") target_link_libraries(gpgfrontend_core ${THIRD_PARTY_LIBS} - gpgme gpg-error assuan + gpgme assuan gpg-error ${BOOST_LIBS} dl) if (XCODE_BUILD) @@ -35,7 +34,7 @@ elseif (APPLE) else () message(STATUS "Link GPG Static Library For Unix") target_link_libraries(gpgfrontend_core ${THIRD_PARTY_LIBS} - gpgme gpg-error assuan + gpgme assuan gpg-error ${BOOST_LIBS} pthread dl) endif () diff --git a/src/gpg/GpgConstants.cpp b/src/gpg/GpgConstants.cpp index 100bf8f8..2c9403da 100644 --- a/src/gpg/GpgConstants.cpp +++ b/src/gpg/GpgConstants.cpp @@ -49,6 +49,9 @@ const char* GpgFrontend::GpgConstants::PGP_PRIVATE_KEY_BEGIN = const char* GpgFrontend::GpgConstants::GPG_FRONTEND_SHORT_CRYPTO_HEAD = "GpgF_Scpt://"; +/// +/// \param err gpg_error_t +/// \return gpgme_error_t GpgFrontend::check_gpg_error(gpgme_error_t err) { if (gpg_err_code(err) != GPG_ERR_NO_ERROR) { LOG(ERROR) << "[" << _("Error") << " " << gpg_err_code(err) << "] " @@ -58,6 +61,10 @@ gpgme_error_t GpgFrontend::check_gpg_error(gpgme_error_t err) { return err; } +/// +/// \param err +/// \param predict +/// \return gpg_err_code_t GpgFrontend::check_gpg_error_2_err_code(gpgme_error_t err, gpgme_error_t predict) { auto err_code = gpg_err_code(err); @@ -69,7 +76,10 @@ gpg_err_code_t GpgFrontend::check_gpg_error_2_err_code(gpgme_error_t err, return err_code; } -// error-handling +/// +/// \param err +/// \param comment +/// \return gpgme_error_t GpgFrontend::check_gpg_error(gpgme_error_t err, const std::string& comment) { if (gpg_err_code(err) != GPG_ERR_NO_ERROR) { @@ -80,6 +90,9 @@ gpgme_error_t GpgFrontend::check_gpg_error(gpgme_error_t err, return err; } +/// +/// \param fingerprint +/// \return std::string GpgFrontend::beautify_fingerprint( GpgFrontend::BypeArrayConstRef fingerprint) { auto len = fingerprint.size(); @@ -93,14 +106,16 @@ std::string GpgFrontend::beautify_fingerprint( return out.str(); } -// trim from start (in place) +/// +/// \param s static inline void ltrim(std::string& s) { s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](unsigned char ch) { return !std::isspace(ch); })); } -// trim from end (in place) +/// +/// \param s static inline void rtrim(std::string& s) { s.erase(std::find_if(s.rbegin(), s.rend(), [](unsigned char ch) { return !std::isspace(ch); }) @@ -108,13 +123,18 @@ static inline void rtrim(std::string& s) { s.end()); } -// trim from both ends (in place) +/// +/// \param s +/// \return static inline std::string trim(std::string& s) { ltrim(s); rtrim(s); return s; } +/// +/// \param utf8_path +/// \return std::string GpgFrontend::read_all_data_in_file(const std::string& utf8_path) { using namespace boost::filesystem; class path file_info(utf8_path.c_str()); @@ -133,6 +153,10 @@ std::string GpgFrontend::read_all_data_in_file(const std::string& utf8_path) { return in_buffer; } +/// +/// \param utf8_path +/// \param out_buffer +/// \return bool GpgFrontend::write_buffer_to_file(const std::string& utf8_path, const std::string& out_buffer) { using namespace boost::filesystem; @@ -149,6 +173,9 @@ bool GpgFrontend::write_buffer_to_file(const std::string& utf8_path, return true; } +/// +/// \param path +/// \return std::string GpgFrontend::get_file_extension(const std::string& path) { // Create a path object from given string boost::filesystem::path path_obj(path); @@ -162,6 +189,9 @@ std::string GpgFrontend::get_file_extension(const std::string& path) { return {}; } +/// +/// \param path +/// \return std::string GpgFrontend::get_only_file_name_with_path(const std::string& path) { // Create a path object from given string boost::filesystem::path path_obj(path); @@ -174,12 +204,9 @@ std::string GpgFrontend::get_only_file_name_with_path(const std::string& path) { return {}; } -/* - * isSigned returns: - * - 0, if text isn't signed at all - * - 1, if text is partially signed - * - 2, if text is completly signed - */ +/// +/// \param text +/// \return int GpgFrontend::text_is_signed(GpgFrontend::BypeArrayRef text) { using boost::algorithm::ends_with; using boost::algorithm::starts_with; @@ -195,36 +222,53 @@ int GpgFrontend::text_is_signed(GpgFrontend::BypeArrayRef text) { return 0; } +/// +/// \param result +/// \return GpgFrontend::GpgEncrResult GpgFrontend::_new_result( gpgme_encrypt_result_t&& result) { gpgme_result_ref(result); return {result, _result_ref_deletor()}; } +/// +/// \param result +/// \return GpgFrontend::GpgDecrResult GpgFrontend::_new_result( gpgme_decrypt_result_t&& result) { gpgme_result_ref(result); return {result, _result_ref_deletor()}; } +/// +/// \param result +/// \return GpgFrontend::GpgSignResult GpgFrontend::_new_result( gpgme_sign_result_t&& result) { gpgme_result_ref(result); return {result, _result_ref_deletor()}; } +/// +/// \param result +/// \return GpgFrontend::GpgVerifyResult GpgFrontend::_new_result( gpgme_verify_result_t&& result) { gpgme_result_ref(result); return {result, _result_ref_deletor()}; } +/// +/// \param result +/// \return GpgFrontend::GpgGenKeyResult GpgFrontend::_new_result( gpgme_genkey_result_t&& result) { gpgme_result_ref(result); return {result, _result_ref_deletor()}; } +/// +/// \param _result void GpgFrontend::_result_ref_deletor::operator()(void* _result) { DLOG(INFO) << _("Called") << _result; if (_result != nullptr) gpgme_result_unref(_result); diff --git a/src/gpg/GpgConstants.h b/src/gpg/GpgConstants.h index d2f9b0b6..9ac0d7ad 100644 --- a/src/gpg/GpgConstants.h +++ b/src/gpg/GpgConstants.h @@ -25,7 +25,6 @@ #ifndef GPG_CONSTANTS_H #define GPG_CONSTANTS_H -#include <gpg-error.h> #include <gpgme.h> #include <cassert> diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt index ed250b82..073da46f 100644 --- a/src/ui/CMakeLists.txt +++ b/src/ui/CMakeLists.txt @@ -39,6 +39,9 @@ target_link_libraries(${GPGFRONTEND_UI_LIB_NAME} target_link_libraries(${GPGFRONTEND_UI_LIB_NAME} easyloggingpp) +# link gpgfrontend_core +target_link_libraries(${GPGFRONTEND_UI_LIB_NAME} + gpgfrontend_core) target_include_directories(gpgfrontend_ui PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/${GPGFRONTEND_UI_LIB_NAME}_autogen/include) diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt index 169b2368..cc8c7fcd 100644 --- a/third_party/CMakeLists.txt +++ b/third_party/CMakeLists.txt @@ -1,21 +1,26 @@ - -set(build_static_lib 1) +# easyloggingpp +set(build_static_lib 1 CACHE BOOL "" FORCE) add_subdirectory(easyloggingpp) -TARGET_INCLUDE_DIRECTORIES(easyloggingpp PUBLIC +target_include_directories(easyloggingpp PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/easyloggingpp/src) +# json set(JSON_BuildTests OFF CACHE INTERNAL "") add_subdirectory(json) +# qt-aes include(GenerateExportHeader) add_subdirectory(qt-aes) -set(VMIME_HAVE_MESSAGING_PROTO_SENDMAIL OFF) -set(VMIME_HAVE_SASL_SUPPORT OFF) -set(VMIME_CHARSETCONV_LIB iconv) -set(VMIME_TLS_SUPPORT_LIB openssl) +# vmime +set(VMIME_HAVE_MESSAGING_PROTO_SENDMAIL OFF CACHE BOOL "" FORCE) +set(VMIME_HAVE_SASL_SUPPORT OFF CACHE BOOL "" FORCE) +set(VMIME_CHARSETCONV_LIB iconv CACHE BOOL "" FORCE) +set(VMIME_TLS_SUPPORT_LIB openssl CACHE BOOL "" FORCE) add_subdirectory(vmime) +# gnupg + include(ExternalProject) # libgpg-error @@ -23,7 +28,11 @@ include(ExternalProject) set(GPG_ERROR_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libgpg-error) set(GPG_ERROR_BIN ${CMAKE_CURRENT_BINARY_DIR}/libgpg-error) set(GPG_ERROR_STATIC_LIB ${GPG_ERROR_BIN}/lib/libgpg-error.a) -set(GPG_ERROR_INCLUDES ${GPG_ERROR_BIN}/src) +set(GPG_ERROR_INCLUDES ${GPG_ERROR_BIN}/include) +set(GPG_ERROR_LIBS ${GPG_ERROR_BIN}/lib) +file(MAKE_DIRECTORY ${GPG_ERROR_INCLUDES}) + +message(STATUS "GPG_ERROR_INCLUDES ${GPG_ERROR_INCLUDES}") ExternalProject_Add(libgpg-error PREFIX ${GPG_ERROR_BIN} @@ -49,12 +58,15 @@ set_target_properties(gpg-error PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${GPG_E set(ASSUAN_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libassuan) set(ASSUAN_BIN ${CMAKE_CURRENT_BINARY_DIR}/libassuan) set(ASSUAN_STATIC_LIB ${ASSUAN_BIN}/lib/libassuan.a) -set(ASSUAN_INCLUDES ${ASSUAN_BIN}/src) +set(ASSUAN_INCLUDES ${ASSUAN_BIN}/include) +set(ASSUAN_LIBS ${ASSUAN_BIN}/lib) +file(MAKE_DIRECTORY ${ASSUAN_INCLUDES}) ExternalProject_Add(libassuan PREFIX ${ASSUAN_BIN} SOURCE_DIR ${ASSUAN_DIR} CONFIGURE_COMMAND ${ASSUAN_DIR}/configure --enable-maintainer-mode --prefix=${ASSUAN_BIN} --enable-static=yes + --with-libgpg-error-prefix=${GPG_ERROR_BIN} BUILD_COMMAND make INSTALL_COMMAND make install BUILD_BYPRODUCTS ${ASSUAN_STATIC_LIB}) @@ -65,6 +77,8 @@ ExternalProject_Add_Step(libassuan autogen DEPENDERS configure ) +ExternalProject_Add_StepDependencies(libassuan autogen libgpg-error) + add_library(assuan STATIC IMPORTED GLOBAL) add_dependencies(assuan libassuan gpg-error) set_target_properties(assuan PROPERTIES IMPORTED_LOCATION ${ASSUAN_STATIC_LIB}) @@ -80,7 +94,11 @@ set(GPGME_INCLUDES ${GPGME_BIN}/src) ExternalProject_Add(libgpgme PREFIX ${GPGME_BIN} SOURCE_DIR ${GPGME_DIR} - CONFIGURE_COMMAND ${GPGME_DIR}/configure --enable-maintainer-mode --prefix=${GPGME_BIN} --enable-static=yes --disable-gpg-test --enable-languages=cpp + CONFIGURE_COMMAND ${GPGME_DIR}/configure --enable-maintainer-mode --prefix=${GPGME_BIN} --enable-shared=no --enable-static=yes --disable-gpg-test --enable-languages=cpp + --with-libgpg-error-prefix=${GPG_ERROR_BIN} + --with-libassuan-prefix=${ASSUAN_BIN} + "LIB=-lassuan -lgpg-error" + "LDFLAGS=-L${ASSUAN_LIBS} -L${GPG_ERROR_LIBS} " BUILD_COMMAND make INSTALL_COMMAND make install BUILD_BYPRODUCTS ${GPGME_STATIC_LIB}) @@ -91,6 +109,8 @@ ExternalProject_Add_Step(libgpgme autogen DEPENDERS configure ) +ExternalProject_Add_StepDependencies(libgpgme autogen libassuan libgpg-error) + add_library(gpgme STATIC IMPORTED GLOBAL) add_dependencies(gpgme libgpgme assuan gpg-error) set_target_properties(gpgme PROPERTIES IMPORTED_LOCATION ${GPGME_STATIC_LIB}) @@ -111,4 +131,4 @@ if (SMTP_SUPPORT) LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE} LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}) endif () -endif () +endif ()
\ No newline at end of file |