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 "01")
0007 set(RELEASE_SERVICE_VERSION_MICRO "95")
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 "1")
0021 set(KLEOPATRA_VERSION_MICRO "28")
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.246.0")
0038 set(KIDENTITYMANAGEMENT_VERSION "6.0.0")
0039 set(KMAILTRANSPORT_VERSION "6.0.0")
0040 set(AKONADI_MIME_VERSION "6.0.0")
0041 set(KMIME_VERSION "6.0.0")
0042 set(LIBKLEO_VERSION "5.240.50")
0043 set(QT_REQUIRED_VERSION "6.6.0")
0044 set(MIMETREEPARSER_VERSION "6.0.0")
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 "6.0.0")
0051   set(KMIME_WANT_VERSION "5.246.0")
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(KDEClangFormat)
0078 include(KDEGitCommitHooks)
0079 
0080 # Find KF6 packages
0081 find_package(KF6 ${KF6_WANT_VERSION}
0082     REQUIRED COMPONENTS
0083     Codecs
0084     Config
0085     CoreAddons
0086     Crash
0087     I18n
0088     IconThemes
0089     ItemModels
0090     KCMUtils
0091     KIO
0092     WidgetsAddons
0093     WindowSystem
0094     XmlGui
0095     StatusNotifierItem
0096 
0097     OPTIONAL_COMPONENTS
0098     DocTools
0099 )
0100 
0101 set_package_properties(KF6DocTools PROPERTIES
0102     DESCRIPTION "Documentation tools"
0103     PURPOSE "Required to generate Kleopatra documentation."
0104     TYPE OPTIONAL)
0105 
0106 # Optional packages
0107 if (WIN32)
0108   # Only a replacement available for Windows so this
0109   # is required on other platforms.
0110   find_package(KF6DBusAddons ${KF6_WANT_VERSION} CONFIG)
0111   set_package_properties(KF6DBusAddons PROPERTIES DESCRIPTION "Support library to work with DBus"
0112                          PURPOSE "DBus session integration"
0113                          URL "https://inqlude.org/libraries/kdbusaddons.html"
0114                          TYPE OPTIONAL)
0115 else()
0116   find_package(KF6DBusAddons ${KF6_WANT_VERSION} CONFIG REQUIRED)
0117   set(_kleopatra_dbusaddons_libs KF6::DBusAddons)
0118 endif()
0119 
0120 set(HAVE_QDBUS ${Qt6DBus_FOUND})
0121 
0122 find_package(Gpgmepp ${GPGME_REQUIRED_VERSION} CONFIG REQUIRED)
0123 set(QGPGME_NAME "QGpgmeQt6")
0124 find_package(${QGPGME_NAME} ${GPGME_REQUIRED_VERSION} CONFIG REQUIRED)
0125 if (${QGPGME_NAME}_VERSION VERSION_GREATER_EQUAL "1.21.0")
0126     set(QGPGME_ARCHIVE_JOBS_SUPPORT_OUTPUT_FILENAME 1)
0127     set(QGPGME_ARCHIVE_JOBS_SUPPORT_INPUT_FILENAME 1)
0128 endif()
0129 if (${QGPGME_NAME}_VERSION VERSION_GREATER_EQUAL "1.22.0")
0130     set(QGPGME_HAS_TOLOGSTRING 1)
0131     set(QGPGME_SUPPORTS_IS_MIME 1)
0132 endif()
0133 if (${QGPGME_NAME}_VERSION VERSION_GREATER_EQUAL "1.23.0")
0134     set(QGPGME_SUPPORTS_WKD_REFRESH_JOB 1)
0135 endif()
0136 
0137 find_package(KPim6Libkleo ${LIBKLEO_VERSION} CONFIG REQUIRED)
0138 find_package(KPim6Mime ${KMIME_WANT_VERSION} CONFIG REQUIRED)
0139 find_package(KPim6IdentityManagementCore ${KIDENTITYMANAGEMENT_VERSION} CONFIG)
0140 find_package(KPim6MailTransport ${KMAILTRANSPORT_VERSION} CONFIG)
0141 find_package(KPim6AkonadiMime ${AKONADI_MIME_VERSION} CONFIG)
0142 find_package(KPim6MimeTreeParserWidgets ${MIMETREEPARSER_VERSION} CONFIG REQUIRED)
0143 
0144 find_package(Qt6 ${QT_REQUIRED_VERSION} CONFIG REQUIRED Widgets Test Network PrintSupport)
0145 
0146 find_package(LibAssuan ${LIBASSUAN_REQUIRED_VERSION} REQUIRED)
0147 set_package_properties(LibAssuan PROPERTIES
0148   TYPE REQUIRED
0149   PURPOSE "Needed for Kleopatra to act as the GnuPG UI Server"
0150 )
0151 find_package(LibGpgError ${GPG_ERROR_REQUIRED_VERSION} REQUIRED)
0152 set_package_properties(LibGpgError PROPERTIES
0153   TYPE REQUIRED
0154 )
0155 
0156 set(kleopatra_release FALSE)
0157 
0158 if(NOT kleopatra_release)
0159     find_package(Git)
0160     if(GIT_FOUND)
0161         execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse
0162                         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
0163                         RESULT_VARIABLE rc
0164                         ERROR_QUIET)
0165         if(rc EQUAL 0)
0166             execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --oneline --format=%h ${CMAKE_CURRENT_SOURCE_DIR}
0167                 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
0168                 OUTPUT_VARIABLE Kleopatra_WC_REVISION)
0169             string(REGEX REPLACE "\n" "" Kleopatra_WC_REVISION "${Kleopatra_WC_REVISION}")
0170 
0171             execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --oneline --format=%cI ${CMAKE_CURRENT_SOURCE_DIR}
0172                 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
0173                 OUTPUT_VARIABLE Kleopatra_WC_LAST_CHANGED_DATE)
0174             string(REGEX REPLACE "^([0-9]+)-([0-9]+)-([0-9]+)T([0-9]+):([0-9]+):([0-9]+).*$" "\\1\\2\\3T\\4\\5\\6"
0175                    Kleopatra_WC_LAST_CHANGED_DATE "${Kleopatra_WC_LAST_CHANGED_DATE}")
0176 
0177             set(kleopatra_version "${kleopatra_version}+git${Kleopatra_WC_LAST_CHANGED_DATE}~${Kleopatra_WC_REVISION}")
0178         endif()
0179     endif()
0180 endif()
0181 
0182 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version-kleopatra.h.in ${CMAKE_CURRENT_BINARY_DIR}/version-kleopatra.h)
0183 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config-kleopatra.h.in ${CMAKE_CURRENT_BINARY_DIR}/config-kleopatra.h)
0184 
0185 include_directories(
0186     ${CMAKE_CURRENT_BINARY_DIR}
0187     ${CMAKE_CURRENT_SOURCE_DIR}
0188 )
0189 
0190 if (WIN32)
0191 # On Windows, we need to use stuff deprecated since Qt 5.11, e.g. from QDesktopWidget
0192 add_definitions(-DQT_NO_CONTEXTLESS_CONNECT)
0193 ecm_set_disabled_deprecation_versions(QT 5.10.0  KF 5.248.0)
0194 else ()
0195 add_definitions(-DQT_NO_CONTEXTLESS_CONNECT)
0196 ecm_set_disabled_deprecation_versions(QT 6.6.0 KF 5.248.0)
0197 endif ()
0198 
0199 if(CMAKE_COMPILER_IS_GNUCXX)
0200     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-missing-braces -Wno-parentheses -Wno-ignored-qualifiers")
0201 endif()
0202 if(MINGW)
0203     # we do not care about different signedness of passed pointer arguments
0204     add_compile_options($<$<COMPILE_LANGUAGE:C>:-Wno-pointer-sign>)
0205 endif()
0206 
0207 add_definitions(-DQT_NO_EMIT)
0208 remove_definitions(-DQT_NO_FOREACH)
0209 
0210 # Disable the use of QStringBuilder for operator+ to prevent crashes when
0211 # returning the result of concatenating string temporaries in lambdas. We do
0212 # this for example in some std::transform expressions.
0213 # This is a known issue: https://bugreports.qt.io/browse/QTBUG-47066
0214 # Alternatively, one would always have to remember to force the lambdas to
0215 # return a QString instead of QStringBuilder, but that's just too easy to
0216 # forget and, unfortunately, the compiler doesn't issue a warning if one forgets
0217 # this. So, it's just too dangerous.
0218 # One can still use QStringBuilder explicitly with the operator% if necessary.
0219 remove_definitions(-DQT_USE_FAST_OPERATOR_PLUS)
0220 remove_definitions(-DQT_USE_QSTRINGBUILDER)
0221 
0222 kde_enable_exceptions()
0223 option(USE_UNITY_CMAKE_SUPPORT "Use UNITY cmake support (speedup compile time)" OFF)
0224 
0225 set(COMPILE_WITH_UNITY_CMAKE_SUPPORT OFF)
0226 if (USE_UNITY_CMAKE_SUPPORT)
0227     set(COMPILE_WITH_UNITY_CMAKE_SUPPORT ON)
0228 endif()
0229 
0230 
0231 add_subdirectory(pics)
0232 add_subdirectory(src)
0233 
0234 if(BUILD_TESTING)
0235     add_subdirectory(tests)
0236     add_subdirectory(autotests)
0237 endif()
0238 
0239 ecm_qt_install_logging_categories(
0240         EXPORT KLEOPATRA
0241         FILE kleopatra.categories
0242         DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}
0243         )
0244 
0245 ki18n_install(po)
0246 if(KF6DocTools_FOUND)
0247     kdoctools_install(po)
0248     add_subdirectory(doc)
0249 endif()
0250 feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
0251 
0252 # add clang-format target for all our real source files
0253 file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h *.c)
0254 kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES})
0255 kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)
0256