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