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