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