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 "23")
0006 set(RELEASE_SERVICE_VERSION_MINOR "11")
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.105.0")
0038 set(KIDENTITYMANAGEMENT_VERSION "5.24.0")
0039 set(KMAILTRANSPORT_VERSION "5.24.0")
0040 set(AKONADI_MIME_VERSION "5.24.0")
0041 set(KMIME_VERSION "5.24.0")
0042 set(LIBKLEO_VERSION "5.24.51")
0043 set(MIMETREEPARSER_VERSION "5.24.41")
0044 set(QT_REQUIRED_VERSION "5.15.2")
0045 if (QT_MAJOR_VERSION STREQUAL "6")
0046     set(QT_REQUIRED_VERSION "6.4.0")
0047 endif()
0048 set(GPGME_REQUIRED_VERSION "1.20.0")
0049 set(LIBASSUAN_REQUIRED_VERSION "2.4.2")
0050 set(GPG_ERROR_REQUIRED_VERSION "1.36")
0051 
0052 if (WIN32)
0053   set(KF5_WANT_VERSION "5.104.0")
0054   set(KMIME_WANT_VERSION "5.12.0")
0055 else ()
0056   set(KF5_WANT_VERSION ${KF_MIN_VERSION})
0057   set(KMIME_WANT_VERSION ${KMIME_VERSION})
0058 endif ()
0059 
0060 set(CMAKE_CXX_STANDARD 20)
0061 set(CMAKE_CXX_STANDARD_REQUIRED ON)
0062 
0063 find_package(ECM ${KF5_WANT_VERSION} CONFIG REQUIRED)
0064 set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
0065 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
0066 
0067 include(ECMInstallIcons)
0068 include(ECMSetupVersion)
0069 include(ECMAddTests)
0070 include(GenerateExportHeader)
0071 include(ECMGenerateHeaders)
0072 include(FeatureSummary)
0073 include(CheckFunctionExists)
0074 include(KDEInstallDirs)
0075 include(KDECMakeSettings)
0076 include(KDECompilerSettings NO_POLICY_SCOPE)
0077 include(ECMAddAppIcon)
0078 include(ECMQtDeclareLoggingCategory)
0079 include(ECMDeprecationSettings)
0080 include(KDEClangFormat)
0081 include(KDEGitCommitHooks)
0082 
0083 if (QT_MAJOR_VERSION STREQUAL "6")
0084     set(QT_REQUIRED_VERSION "6.4.0")
0085     set(KF_MIN_VERSION "5.240.0")
0086     set(KF_MAJOR_VERSION "6")
0087 else()
0088     set(KF_MIN_VERSION "5.105.0")
0089     set(KF_MAJOR_VERSION "5")
0090 endif()
0091 
0092 # Find KF5 packages
0093 find_package(KF${KF_MAJOR_VERSION} ${KF5_WANT_VERSION}
0094     REQUIRED COMPONENTS
0095     Codecs
0096     Config
0097     ConfigWidgets
0098     CoreAddons
0099     Crash
0100     I18n
0101     IconThemes
0102     ItemModels
0103     KCMUtils
0104     KIO
0105     WidgetsAddons
0106     WindowSystem
0107     XmlGui
0108 
0109     OPTIONAL_COMPONENTS
0110     DocTools
0111 )
0112 
0113 set_package_properties(KF${KF_MAJOR_VERSION}DocTools PROPERTIES
0114     DESCRIPTION "Documentation tools"
0115     PURPOSE "Required to generate Kleopatra documentation."
0116     TYPE OPTIONAL)
0117 
0118 # Optional packages
0119 if (WIN32)
0120   # Only a replacement available for Windows so this
0121   # is required on other platforms.
0122   find_package(KF${KF_MAJOR_VERSION}DBusAddons ${KF5_WANT_VERSION} CONFIG)
0123   set_package_properties(KF${KF_MAJOR_VERSION}DBusAddons PROPERTIES DESCRIPTION "Support library to work with DBus"
0124                          PURPOSE "DBus session integration"
0125                          URL "https://inqlude.org/libraries/kdbusaddons.html"
0126                          TYPE OPTIONAL)
0127 else()
0128   find_package(KF${KF_MAJOR_VERSION}DBusAddons ${KF5_WANT_VERSION} CONFIG REQUIRED)
0129   set(_kleopatra_dbusaddons_libs KF${KF_MAJOR_VERSION}::DBusAddons)
0130 endif()
0131 
0132 set(HAVE_QDBUS ${Qt${QT_MAJOR_VERSION}DBus_FOUND})
0133 
0134 find_package(Gpgmepp ${GPGME_REQUIRED_VERSION} CONFIG REQUIRED)
0135 set(QGPGME_NAME "QGpgme")
0136 find_package(${QGPGME_NAME} ${GPGME_REQUIRED_VERSION} CONFIG REQUIRED)
0137 if (${QGPGME_NAME}_VERSION VERSION_GREATER_EQUAL "1.21.0")
0138     set(QGPGME_ARCHIVE_JOBS_SUPPORT_OUTPUT_FILENAME 1)
0139     set(QGPGME_ARCHIVE_JOBS_SUPPORT_INPUT_FILENAME 1)
0140 endif()
0141 if (${QGPGME_NAME}_VERSION VERSION_GREATER_EQUAL "1.22.0")
0142     set(QGPGME_HAS_TOLOGSTRING 1)
0143     set(QGPGME_SUPPORTS_IS_MIME 1)
0144 endif()
0145 if (${QGPGME_NAME}_VERSION VERSION_GREATER_EQUAL "1.23.0")
0146     set(QGPGME_SUPPORTS_WKD_REFRESH_JOB 1)
0147 endif()
0148 if (${QGPGME_NAME}_VERSION VERSION_GREATER_EQUAL "1.23.3")
0149     set(QGPGME_FILE_JOBS_SUPPORT_DIRECT_FILE_IO 1)
0150 endif()
0151 
0152 if (QT_MAJOR_VERSION STREQUAL "6")
0153     find_package(Qt6Core5Compat)
0154 endif()
0155 
0156 # Kdepimlibs packages
0157 find_package(KPim${KF_MAJOR_VERSION}Libkleo ${LIBKLEO_VERSION} CONFIG REQUIRED)
0158 find_package(KPim${KF_MAJOR_VERSION}Mime ${KMIME_WANT_VERSION} CONFIG REQUIRED)
0159 find_package(KPim${KF_MAJOR_VERSION}IdentityManagement ${KIDENTITYMANAGEMENT_VERSION} CONFIG)
0160 find_package(KPim${KF_MAJOR_VERSION}MailTransport ${KMAILTRANSPORT_VERSION} CONFIG)
0161 find_package(KPim${KF_MAJOR_VERSION}AkonadiMime ${AKONADI_MIME_VERSION} CONFIG)
0162 find_package(KPim${KF_MAJOR_VERSION}MimeTreeParserWidgets ${MIMETREEPARSER_VERSION} CONFIG REQUIRED)
0163 
0164 find_package(Qt${QT_MAJOR_VERSION} ${QT_REQUIRED_VERSION} CONFIG REQUIRED Widgets Test Network PrintSupport)
0165 
0166 find_package(LibAssuan ${LIBASSUAN_REQUIRED_VERSION} REQUIRED)
0167 set_package_properties(LibAssuan PROPERTIES
0168   TYPE REQUIRED
0169   PURPOSE "Needed for Kleopatra to act as the GnuPG UI Server"
0170 )
0171 find_package(LibGpgError ${GPG_ERROR_REQUIRED_VERSION} REQUIRED)
0172 set_package_properties(LibGpgError PROPERTIES
0173   TYPE REQUIRED
0174 )
0175 
0176 set(kleopatra_release FALSE)
0177 
0178 if(NOT kleopatra_release)
0179     find_package(Git)
0180     if(GIT_FOUND)
0181         execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse
0182                         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
0183                         RESULT_VARIABLE rc
0184                         ERROR_QUIET)
0185         if(rc EQUAL 0)
0186             execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --oneline --format=%h ${CMAKE_CURRENT_SOURCE_DIR}
0187                 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
0188                 OUTPUT_VARIABLE Kleopatra_WC_REVISION)
0189             string(REGEX REPLACE "\n" "" Kleopatra_WC_REVISION "${Kleopatra_WC_REVISION}")
0190 
0191             execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --oneline --format=%cI ${CMAKE_CURRENT_SOURCE_DIR}
0192                 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
0193                 OUTPUT_VARIABLE Kleopatra_WC_LAST_CHANGED_DATE)
0194             string(REGEX REPLACE "^([0-9]+)-([0-9]+)-([0-9]+)T([0-9]+):([0-9]+):([0-9]+).*$" "\\1\\2\\3T\\4\\5\\6"
0195                    Kleopatra_WC_LAST_CHANGED_DATE "${Kleopatra_WC_LAST_CHANGED_DATE}")
0196 
0197             set(kleopatra_version "${kleopatra_version}+git${Kleopatra_WC_LAST_CHANGED_DATE}~${Kleopatra_WC_REVISION}")
0198         endif()
0199     endif()
0200 endif()
0201 
0202 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version-kleopatra.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/version-kleopatra.h)
0203 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config-kleopatra.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-kleopatra.h)
0204 
0205 include_directories(
0206     ${CMAKE_CURRENT_BINARY_DIR}
0207     ${CMAKE_CURRENT_SOURCE_DIR}
0208 )
0209 
0210 if (WIN32)
0211 # On Windows, we need to use stuff deprecated since Qt 5.11, e.g. from QDesktopWidget
0212 ecm_set_disabled_deprecation_versions(QT 5.10.0  KF 5.103.0)
0213 else ()
0214 ecm_set_disabled_deprecation_versions(QT 6.4  KF 5.103.0)
0215 endif ()
0216 
0217 if(CMAKE_COMPILER_IS_GNUCXX)
0218     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-missing-braces -Wno-parentheses -Wno-ignored-qualifiers")
0219 endif()
0220 if(MINGW)
0221     # we do not care about different signedness of passed pointer arguments
0222     add_compile_options($<$<COMPILE_LANGUAGE:C>:-Wno-pointer-sign>)
0223 endif()
0224 
0225 add_definitions(-DQT_NO_EMIT)
0226 remove_definitions(-DQT_NO_FOREACH)
0227 
0228 # Disable the use of QStringBuilder for operator+ to prevent crashes when
0229 # returning the result of concatenating string temporaries in lambdas. We do
0230 # this for example in some std::transform expressions.
0231 # This is a known issue: https://bugreports.qt.io/browse/QTBUG-47066
0232 # Alternatively, one would always have to remember to force the lambdas to
0233 # return a QString instead of QStringBuilder, but that's just too easy to
0234 # forget and, unfortunately, the compiler doesn't issue a warning if one forgets
0235 # this. So, it's just too dangerous.
0236 # One can still use QStringBuilder explicitly with the operator% if necessary.
0237 remove_definitions(-DQT_USE_FAST_OPERATOR_PLUS)
0238 remove_definitions(-DQT_USE_QSTRINGBUILDER)
0239 
0240 kde_enable_exceptions()
0241 option(USE_UNITY_CMAKE_SUPPORT "Use UNITY cmake support (speedup compile time)" OFF)
0242 
0243 set(COMPILE_WITH_UNITY_CMAKE_SUPPORT OFF)
0244 if (USE_UNITY_CMAKE_SUPPORT)
0245     set(COMPILE_WITH_UNITY_CMAKE_SUPPORT ON)
0246 endif()
0247 
0248 
0249 add_subdirectory(pics)
0250 add_subdirectory(src)
0251 
0252 if(BUILD_TESTING)
0253     add_subdirectory(tests)
0254     add_subdirectory(autotests)
0255 endif()
0256 
0257 ecm_qt_install_logging_categories(
0258         EXPORT KLEOPATRA
0259         FILE kleopatra.categories
0260         DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}
0261         )
0262 
0263 ki18n_install(po)
0264 if(KF${KF_MAJOR_VERSION}DocTools_FOUND)
0265     kdoctools_install(po)
0266     add_subdirectory(doc)
0267 endif()
0268 feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
0269 
0270 # add clang-format target for all our real source files
0271 file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h *.c)
0272 kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES})
0273 kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)
0274