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