Warning, /pim/kleopatra/CMakeLists.txt is written in an unsupported language. File is not indexed.

0001 # SPDX-FileCopyrightText: none
0002 # SPDX-License-Identifier: BSD-3-Clause
0003 cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
0004 
0005 set(RELEASE_SERVICE_VERSION_MAJOR "24")
0006 set(RELEASE_SERVICE_VERSION_MINOR "04")
0007 set(RELEASE_SERVICE_VERSION_MICRO "70")
0008 
0009 # The RELEASE_SERVICE_VERSION is used by Gpg4win to add the Gpg4win version
0010 if (NOT RELEASE_SERVICE_VERSION)
0011     set(RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}")
0012 endif()
0013 if(RELEASE_SERVICE_VERSION_MICRO LESS 10)
0014     set(KDE_APPLICATIONS_COMPACT_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}${RELEASE_SERVICE_VERSION_MINOR}0${RELEASE_SERVICE_VERSION_MICRO}")
0015 else()
0016     set(KDE_APPLICATIONS_COMPACT_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}${RELEASE_SERVICE_VERSION_MINOR}${RELEASE_SERVICE_VERSION_MICRO}")
0017 endif()
0018 
0019 set(KLEOPATRA_VERSION_MAJOR "3")
0020 set(KLEOPATRA_VERSION_MINOR "2")
0021 set(KLEOPATRA_VERSION_MICRO "0")
0022 
0023 set(kleopatra_version "${KLEOPATRA_VERSION_MAJOR}.${KLEOPATRA_VERSION_MINOR}.${KLEOPATRA_VERSION_MICRO}.${KDE_APPLICATIONS_COMPACT_VERSION}")
0024 # The following is for Windows
0025 set(kleopatra_version_win "${KLEOPATRA_VERSION_MAJOR}.${KLEOPATRA_VERSION_MINOR}.${KLEOPATRA_VERSION_MICRO}")
0026 set(kleopatra_fileversion_win "${KLEOPATRA_VERSION_MAJOR},${KLEOPATRA_VERSION_MINOR},${KLEOPATRA_VERSION_MICRO},0")
0027 if (NOT KLEOPATRA_DISTRIBUTION_TEXT)
0028     # This is only used on Windows for the file attributes of Kleopatra
0029     set(KLEOPATRA_DISTRIBUTION_TEXT "KDE")
0030 endif()
0031 
0032 project(kleopatra VERSION ${kleopatra_version})
0033 
0034 option(DISABLE_KWATCHGNUPG "Don't build the kwatchgnupg tool [default=OFF]" OFF)
0035 
0036 # Standalone build. Find / include everything necessary.
0037 set(KF_MIN_VERSION "5.248.0")
0038 set(KIDENTITYMANAGEMENT_VERSION "6.0.40")
0039 set(KMAILTRANSPORT_VERSION "6.0.40")
0040 set(AKONADI_MIME_VERSION "6.0.40")
0041 set(KMIME_VERSION "6.0.40")
0042 set(LIBKLEO_VERSION "6.0.44")
0043 set(QT_REQUIRED_VERSION "6.6.0")
0044 set(MIMETREEPARSER_VERSION "6.0.40")
0045 set(GPGME_REQUIRED_VERSION "1.20.0")
0046 set(LIBASSUAN_REQUIRED_VERSION "2.4.2")
0047 set(GPG_ERROR_REQUIRED_VERSION "1.36")
0048 
0049 if (WIN32)
0050   set(KF6_WANT_VERSION ${KF_MIN_VERSION})
0051   set(KMIME_WANT_VERSION ${KMIME_VERSION})
0052 else ()
0053   set(KF6_WANT_VERSION ${KF_MIN_VERSION})
0054   set(KMIME_WANT_VERSION ${KMIME_VERSION})
0055 endif ()
0056 
0057 set(CMAKE_CXX_STANDARD 20)
0058 set(CMAKE_CXX_STANDARD_REQUIRED ON)
0059 
0060 find_package(ECM ${KF6_WANT_VERSION} CONFIG REQUIRED)
0061 set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
0062 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
0063 
0064 include(ECMInstallIcons)
0065 include(ECMSetupVersion)
0066 include(ECMAddTests)
0067 include(GenerateExportHeader)
0068 include(ECMGenerateHeaders)
0069 include(FeatureSummary)
0070 include(CheckFunctionExists)
0071 include(KDEInstallDirs)
0072 include(KDECMakeSettings)
0073 include(KDECompilerSettings NO_POLICY_SCOPE)
0074 include(ECMAddAppIcon)
0075 include(ECMQtDeclareLoggingCategory)
0076 include(ECMDeprecationSettings)
0077 include(ECMFeatureSummary)
0078 include(KDEClangFormat)
0079 include(KDEGitCommitHooks)
0080 
0081 # Find KF6 packages
0082 find_package(KF6 ${KF6_WANT_VERSION}
0083     REQUIRED COMPONENTS
0084     Codecs
0085     Config
0086     CoreAddons
0087     Crash
0088     I18n
0089     IconThemes
0090     ItemModels
0091     KCMUtils
0092     KIO
0093     WidgetsAddons
0094     WindowSystem
0095     XmlGui
0096     StatusNotifierItem
0097 
0098     OPTIONAL_COMPONENTS
0099     DocTools
0100 )
0101 
0102 set_package_properties(KF6DocTools PROPERTIES
0103     DESCRIPTION "Documentation tools"
0104     PURPOSE "Required to generate Kleopatra documentation."
0105     TYPE OPTIONAL)
0106 
0107 # Optional packages
0108 if (WIN32)
0109   # Only a replacement available for Windows so this
0110   # is required on other platforms.
0111   find_package(KF6DBusAddons ${KF6_WANT_VERSION} CONFIG)
0112   set_package_properties(KF6DBusAddons PROPERTIES DESCRIPTION "Support library to work with DBus"
0113                          PURPOSE "DBus session integration"
0114                          URL "https://inqlude.org/libraries/kdbusaddons.html"
0115                          TYPE OPTIONAL)
0116 else()
0117   find_package(KF6DBusAddons ${KF6_WANT_VERSION} CONFIG REQUIRED)
0118   set(_kleopatra_dbusaddons_libs KF6::DBusAddons)
0119 endif()
0120 
0121 set(HAVE_QDBUS ${Qt6DBus_FOUND})
0122 
0123 find_package(Gpgmepp ${GPGME_REQUIRED_VERSION} CONFIG REQUIRED)
0124 set(QGPGME_NAME "QGpgmeQt6")
0125 find_package(${QGPGME_NAME} ${GPGME_REQUIRED_VERSION} CONFIG REQUIRED)
0126 if (${QGPGME_NAME}_VERSION VERSION_GREATER_EQUAL "1.21.0")
0127     set(QGPGME_ARCHIVE_JOBS_SUPPORT_OUTPUT_FILENAME 1)
0128     set(QGPGME_ARCHIVE_JOBS_SUPPORT_INPUT_FILENAME 1)
0129 endif()
0130 if (${QGPGME_NAME}_VERSION VERSION_GREATER_EQUAL "1.22.0")
0131     set(QGPGME_HAS_TOLOGSTRING 1)
0132     set(QGPGME_SUPPORTS_IS_MIME 1)
0133 endif()
0134 if (${QGPGME_NAME}_VERSION VERSION_GREATER_EQUAL "1.23.0")
0135     set(QGPGME_SUPPORTS_WKD_REFRESH_JOB 1)
0136 endif()
0137 if (${QGPGME_NAME}_VERSION VERSION_GREATER_EQUAL "1.23.3")
0138     set(QGPGME_FILE_JOBS_SUPPORT_DIRECT_FILE_IO 1)
0139 endif()
0140 
0141 find_package(KPim6Libkleo ${LIBKLEO_VERSION} CONFIG REQUIRED)
0142 find_package(KPim6Mime ${KMIME_WANT_VERSION} CONFIG REQUIRED)
0143 find_package(KPim6IdentityManagementCore ${KIDENTITYMANAGEMENT_VERSION} CONFIG)
0144 find_package(KPim6MailTransport ${KMAILTRANSPORT_VERSION} CONFIG)
0145 find_package(KPim6AkonadiMime ${AKONADI_MIME_VERSION} CONFIG)
0146 find_package(KPim6MimeTreeParserWidgets ${MIMETREEPARSER_VERSION} CONFIG REQUIRED)
0147 
0148 find_package(Qt6 ${QT_REQUIRED_VERSION} CONFIG REQUIRED Widgets Test Network PrintSupport)
0149 
0150 find_package(LibAssuan ${LIBASSUAN_REQUIRED_VERSION} REQUIRED)
0151 set_package_properties(LibAssuan PROPERTIES
0152   TYPE REQUIRED
0153   PURPOSE "Needed for Kleopatra to act as the GnuPG UI Server"
0154 )
0155 find_package(LibGpgError ${GPG_ERROR_REQUIRED_VERSION} REQUIRED)
0156 set_package_properties(LibGpgError PROPERTIES
0157   TYPE REQUIRED
0158 )
0159 
0160 set(kleopatra_release FALSE)
0161 
0162 if(NOT kleopatra_release)
0163     find_package(Git)
0164     if(GIT_FOUND)
0165         execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse
0166                         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
0167                         RESULT_VARIABLE rc
0168                         ERROR_QUIET)
0169         if(rc EQUAL 0)
0170             execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --oneline --format=%h ${CMAKE_CURRENT_SOURCE_DIR}
0171                 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
0172                 OUTPUT_VARIABLE Kleopatra_WC_REVISION)
0173             string(REGEX REPLACE "\n" "" Kleopatra_WC_REVISION "${Kleopatra_WC_REVISION}")
0174 
0175             execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --oneline --format=%cI ${CMAKE_CURRENT_SOURCE_DIR}
0176                 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
0177                 OUTPUT_VARIABLE Kleopatra_WC_LAST_CHANGED_DATE)
0178             string(REGEX REPLACE "^([0-9]+)-([0-9]+)-([0-9]+)T([0-9]+):([0-9]+):([0-9]+).*$" "\\1\\2\\3T\\4\\5\\6"
0179                    Kleopatra_WC_LAST_CHANGED_DATE "${Kleopatra_WC_LAST_CHANGED_DATE}")
0180 
0181             set(kleopatra_version "${kleopatra_version}+git${Kleopatra_WC_LAST_CHANGED_DATE}~${Kleopatra_WC_REVISION}")
0182         endif()
0183     endif()
0184 endif()
0185 
0186 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version-kleopatra.h.in ${CMAKE_CURRENT_BINARY_DIR}/version-kleopatra.h)
0187 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config-kleopatra.h.in ${CMAKE_CURRENT_BINARY_DIR}/config-kleopatra.h)
0188 
0189 include_directories(
0190     ${CMAKE_CURRENT_BINARY_DIR}
0191     ${CMAKE_CURRENT_SOURCE_DIR}
0192 )
0193 
0194 if (WIN32)
0195 # On Windows, we need to use stuff deprecated since Qt 5.11, e.g. from QDesktopWidget
0196 add_definitions(-DQT_NO_CONTEXTLESS_CONNECT)
0197 ecm_set_disabled_deprecation_versions(QT 5.10.0  KF 5.249.0)
0198 else ()
0199 add_definitions(-DQT_NO_CONTEXTLESS_CONNECT)
0200 ecm_set_disabled_deprecation_versions(QT 6.6.0 KF 5.249.0)
0201 endif ()
0202 
0203 if(CMAKE_COMPILER_IS_GNUCXX)
0204     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-missing-braces -Wno-parentheses -Wno-ignored-qualifiers")
0205 endif()
0206 if(MINGW)
0207     # we do not care about different signedness of passed pointer arguments
0208     add_compile_options($<$<COMPILE_LANGUAGE:C>:-Wno-pointer-sign>)
0209 endif()
0210 
0211 add_definitions(-DQT_NO_EMIT)
0212 remove_definitions(-DQT_NO_FOREACH)
0213 
0214 # Disable the use of QStringBuilder for operator+ to prevent crashes when
0215 # returning the result of concatenating string temporaries in lambdas. We do
0216 # this for example in some std::transform expressions.
0217 # This is a known issue: https://bugreports.qt.io/browse/QTBUG-47066
0218 # Alternatively, one would always have to remember to force the lambdas to
0219 # return a QString instead of QStringBuilder, but that's just too easy to
0220 # forget and, unfortunately, the compiler doesn't issue a warning if one forgets
0221 # this. So, it's just too dangerous.
0222 # One can still use QStringBuilder explicitly with the operator% if necessary.
0223 remove_definitions(-DQT_USE_FAST_OPERATOR_PLUS)
0224 remove_definitions(-DQT_USE_QSTRINGBUILDER)
0225 
0226 kde_enable_exceptions()
0227 option(USE_UNITY_CMAKE_SUPPORT "Use UNITY cmake support (speedup compile time)" OFF)
0228 
0229 set(COMPILE_WITH_UNITY_CMAKE_SUPPORT OFF)
0230 if (USE_UNITY_CMAKE_SUPPORT)
0231     set(COMPILE_WITH_UNITY_CMAKE_SUPPORT ON)
0232 endif()
0233 
0234 
0235 add_subdirectory(pics)
0236 add_subdirectory(src)
0237 
0238 if(BUILD_TESTING)
0239     add_subdirectory(tests)
0240     add_subdirectory(autotests)
0241 endif()
0242 
0243 ecm_qt_install_logging_categories(
0244         EXPORT KLEOPATRA
0245         FILE kleopatra.categories
0246         DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}
0247         )
0248 
0249 ki18n_install(po)
0250 if(KF6DocTools_FOUND)
0251     kdoctools_install(po)
0252     add_subdirectory(doc)
0253 endif()
0254 ecm_feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
0255 
0256 # add clang-format target for all our real source files
0257 file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h *.c)
0258 kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES})
0259 kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)
0260