Warning, /pim/akonadi/CMakeLists.txt is written in an unsupported language. File is not indexed.
0001 cmake_minimum_required(VERSION 3.16 FATAL_ERROR) 0002 0003 set(PIM_VERSION "6.0.40") 0004 project(Akonadi VERSION ${PIM_VERSION}) 0005 0006 0007 # ECM setup 0008 set(KF_MIN_VERSION "5.248.0") 0009 set(QT_REQUIRED_VERSION "6.6.0") 0010 0011 find_package(ECM ${KF_MIN_VERSION} CONFIG REQUIRED) 0012 0013 set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) 0014 0015 include(KDEInstallDirs) 0016 include(KDECMakeSettings) 0017 include(KDECompilerSettings NO_POLICY_SCOPE) 0018 0019 include(GenerateExportHeader) 0020 include(ECMGenerateHeaders) 0021 0022 include(ECMSetupVersion) 0023 include(FeatureSummary) 0024 include(KDEGitCommitHooks) 0025 include(KDEClangFormat) 0026 file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h *.c) 0027 kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES}) 0028 0029 include(CheckAtomic) 0030 include(CheckIncludeFiles) 0031 include(ECMQtDeclareLoggingCategory) 0032 include(ECMDeprecationSettings) 0033 include(ECMFeatureSummary) 0034 include(CheckSymbolExists) 0035 0036 include(KDEPackageAppTemplates) 0037 include(ECMMarkNonGuiExecutable) 0038 include(ECMAddTests) 0039 include(ECMSetupQtPluginMacroNames) 0040 0041 include(AkonadiMacros) 0042 include(ECMAddQch) 0043 0044 option(BUILD_QCH "Build API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)" OFF) 0045 add_feature_info(QCH ${BUILD_QCH} "API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)") 0046 0047 set(RELEASE_SERVICE_VERSION "24.04.40") 0048 set(AKONADI_FULL_VERSION "${PIM_VERSION} (${RELEASE_SERVICE_VERSION})") 0049 0050 configure_file(akonadifull-version.h.in ${CMAKE_CURRENT_BINARY_DIR}/akonadifull-version.h @ONLY) 0051 0052 set(CMAKE_CXX_STANDARD 20) 0053 set(CMAKE_OBJCXX_STANDARD_REQUIRED TRUE) 0054 0055 ecm_setup_version(PROJECT 0056 VARIABLE_PREFIX AKONADI 0057 VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/akonadi_version.h" 0058 PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KPim6AkonadiConfigVersion.cmake" 0059 SOVERSION 6) 0060 0061 # Find packages 0062 find_package(Qt6Core ${QT_REQUIRED_VERSION} REQUIRED COMPONENTS Private) 0063 find_package(Qt6Sql ${QT_REQUIRED_VERSION} REQUIRED COMPONENTS Private) 0064 find_package(Qt6DBus ${QT_REQUIRED_VERSION} REQUIRED) 0065 find_package(Qt6Network ${QT_REQUIRED_VERSION} REQUIRED) 0066 find_package(Qt6Test ${QT_REQUIRED_VERSION} REQUIRED) 0067 find_package(Qt6Widgets ${QT_REQUIRED_VERSION} REQUIRED) 0068 find_package(Qt6Xml ${QT_REQUIRED_VERSION} REQUIRED) 0069 0070 find_package(KF6Config ${KF_MIN_VERSION} CONFIG REQUIRED) 0071 find_package(KF6ConfigWidgets ${KF_MIN_VERSION} CONFIG REQUIRED) 0072 find_package(KF6CoreAddons ${KF_MIN_VERSION} CONFIG REQUIRED) 0073 find_package(KF6I18n ${KF_MIN_VERSION} CONFIG REQUIRED) 0074 find_package(KF6IconThemes ${KF_MIN_VERSION} CONFIG REQUIRED) 0075 find_package(KF6ItemModels ${KF_MIN_VERSION} CONFIG REQUIRED) 0076 find_package(KF6KIO ${KF_MIN_VERSION} CONFIG REQUIRED) 0077 find_package(KF6WidgetsAddons ${KF_MIN_VERSION} CONFIG REQUIRED) 0078 find_package(KF6XmlGui ${KF_MIN_VERSION} CONFIG REQUIRED) 0079 find_package(KF6Crash ${KF_MIN_VERSION} CONFIG REQUIRED) 0080 find_package(Qt6Designer NO_MODULE) 0081 set_package_properties(Qt6Designer PROPERTIES 0082 PURPOSE "Required to build the Qt Designer plugins" 0083 TYPE OPTIONAL 0084 ) 0085 0086 option(BUILD_DESIGNERPLUGIN "Build plugin for Qt Designer" ON) 0087 add_feature_info(DESIGNERPLUGIN ${BUILD_DESIGNERPLUGIN} "Build plugin for Qt Designer") 0088 0089 set(AccountsQt6_MINIMUM_VERSION "1.16") 0090 find_package(AccountsQt6 ${AccountsQt6_MINIMUM_VERSION}) 0091 set_package_properties(AccountsQt6 PROPERTIES 0092 DESCRIPTION "Qt bindings for the Accounts framework" 0093 URL "https://gitlab.com/accounts-sso/libaccounts-qt" 0094 TYPE OPTIONAL 0095 ) 0096 set(KAccounts_MINIMUM_VERSION "19.08.0") 0097 find_package(KAccounts6 ${KAccounts_MINIMUM_VERSION}) 0098 set_package_properties(KAccounts6 PROPERTIES 0099 DESCRIPTION "KDE library for Accounts framework integration" 0100 URL "https://invent.kde.org/network/kaccounts-integration" 0101 TYPE OPTIONAL 0102 ) 0103 if (${AccountsQt6_FOUND} AND ${KAccounts6_FOUND}) 0104 set(WITH_ACCOUNTS TRUE) 0105 endif() 0106 0107 set(LibLZMA_MINIMUM_VERSION "5.0.0") 0108 find_package(LibLZMA ${LibLZMA_MINIMUM_VERSION}) 0109 set_package_properties(LibLZMA PROPERTIES 0110 DESCRIPTION "LZMA compression library" 0111 URL "https://tukaani.org/xz/" 0112 TYPE REQUIRED 0113 ) 0114 0115 0116 if(BUILD_TESTING) 0117 set(AKONADI_TESTS_EXPORT AKONADICORE_EXPORT) 0118 set(AKONADIWIDGET_TESTS_EXPORT AKONADIWIDGETS_EXPORT) 0119 add_definitions(-DBUILD_TESTING) 0120 endif() 0121 0122 ecm_setup_qtplugin_macro_names( 0123 JSON_ARG2 0124 "AKONADI_AGENTCONFIG_FACTORY" 0125 CONFIG_CODE_VARIABLE 0126 PACKAGE_SETUP_AUTOMOC_VARIABLES 0127 ) 0128 0129 # Make sure the KF6Akonadi_DATA_DIR is absolute before passing it to KF6AkonadiConfig.cmake.in 0130 # otherwise build fails either on OSX CI, or for normal users 0131 if (IS_ABSOLUTE "${KDE_INSTALL_DATADIR_KF}") 0132 set(KF5Akonadi_DATA_DIR "${KDE_INSTALL_DATADIR_KF}/akonadi") 0133 else() 0134 set(KF5Akonadi_DATA_DIR "${CMAKE_INSTALL_PREFIX}/${KDE_INSTALL_DATADIR_KF}/akonadi") 0135 endif() 0136 0137 check_symbol_exists(malloc_trim "malloc.h" HAVE_MALLOC_TRIM) 0138 0139 ############### Build Options ############### 0140 option(BUILD_TOOLS "Build and install tools for development and testing purposes." TRUE) 0141 option(INSTALL_APPARMOR "Install AppArmor profiles" TRUE) 0142 0143 if(BUILD_TESTING) 0144 set(BUILD_TOOLS TRUE) 0145 endif() 0146 0147 option(USE_UNITY_CMAKE_SUPPORT "Use UNITY cmake support (speedup compile time)" OFF) 0148 0149 set(COMPILE_WITH_UNITY_CMAKE_SUPPORT OFF) 0150 if (USE_UNITY_CMAKE_SUPPORT) 0151 set(COMPILE_WITH_UNITY_CMAKE_SUPPORT ON) 0152 add_definitions(-DCOMPILE_WITH_UNITY_CMAKE_SUPPORT) 0153 endif() 0154 set(SMI_MIN_VERSION "1.3") 0155 find_package(SharedMimeInfo ${SMI_MIN_VERSION} REQUIRED) 0156 0157 find_program(XSLTPROC_EXECUTABLE xsltproc) 0158 if(NOT XSLTPROC_EXECUTABLE) 0159 message(FATAL_ERROR "\nThe command line XSLT processor program 'xsltproc' could not be found.\nPlease install xsltproc.\n") 0160 endif() 0161 0162 find_program(MYSQLD_EXECUTABLE NAMES mysqld 0163 PATHS /usr/sbin /usr/local/sbin /usr/libexec /usr/local/libexec /opt/mysql/libexec /usr/mysql/bin /opt/mysql/sbin 0164 DOC "The mysqld executable path. ONLY needed at runtime" 0165 ) 0166 0167 find_path(MYSQLD_SCRIPTS_PATH NAMES mysql_install_db 0168 DOC "Path to the mysql or mariadb installation scripts (mysql_install_db, mysql_upgrade...)" 0169 ) 0170 0171 if(MYSQLD_EXECUTABLE) 0172 message(STATUS "MySQL Server found: ${MYSQLD_EXECUTABLE}") 0173 else() 0174 message(STATUS "MySQL Server wasn't found. it is required to use the MySQL backend.") 0175 endif() 0176 0177 if(MYSQLD_SCRIPTS_PATH) 0178 message(STATUS "MySQL scripts location: ${MYSQLD_SCRIPTS_PATH}") 0179 else() 0180 message(STATUS "MySQL scripts location was not found. Use -DMYSQLD_SCRIPTS_PATH to point to the install location.") 0181 endif() 0182 0183 find_path(POSTGRES_PATH NAMES pg_ctl 0184 HINTS /usr/lib${LIB_SUFFIX}/postgresql/8.4/bin 0185 /usr/lib${LIB_SUFFIX}/postgresql/9.0/bin 0186 /usr/lib${LIB_SUFFIX}/postgresql/9.1/bin 0187 DOC "The pg_ctl executable path. ONLY needed at runtime by the PostgreSQL backend" 0188 ) 0189 0190 if(POSTGRES_PATH) 0191 message(STATUS "PostgreSQL Server found.") 0192 else() 0193 message(STATUS "PostgreSQL wasn't found. it is required to use the Postgres backend.") 0194 endif() 0195 0196 find_program(XMLLINT_EXECUTABLE xmllint) 0197 if(NOT XMLLINT_EXECUTABLE) 0198 message(STATUS "xmllint not found, skipping akonadidb.xml schema validation") 0199 endif() 0200 0201 check_include_files(unistd.h HAVE_UNISTD_H) 0202 0203 if (IS_ABSOLUTE "${KDE_INSTALL_DBUSINTERFACEDIR}") 0204 set(AKONADI_DBUS_INTERFACES_INSTALL_DIR "${KDE_INSTALL_DBUSINTERFACEDIR}") 0205 else() 0206 set(AKONADI_DBUS_INTERFACES_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${KDE_INSTALL_DBUSINTERFACEDIR}") 0207 endif() 0208 0209 if (IS_ABSOLUTE "${KDE_INSTALL_INCLUDEDIR}/KPim6") 0210 set(AKONADI_INCLUDE_DIR "${KDE_INSTALL_INCLUDEDIR}/KPim6") 0211 else() 0212 set(AKONADI_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/${KDE_INSTALL_INCLUDEDIR}/KPim6") 0213 endif() 0214 0215 ############### Build Options ############### 0216 0217 include(CTest) # Calls enable_testing(). 0218 0219 if(NOT DEFINED DATABASE_BACKEND) 0220 set(DATABASE_BACKEND "MYSQL" CACHE STRING "The default database backend to use for Akonadi. Can be either MYSQL, POSTGRES or SQLITE") 0221 endif() 0222 0223 ############### Macros ############### 0224 0225 macro(SET_DEFAULT_DB_BACKEND) 0226 set(_backend ${ARGV0}) 0227 if("${_backend}" STREQUAL "SQLITE") 0228 set(AKONADI_DATABASE_BACKEND QSQLITE) 0229 elseif("${_backend}" STREQUAL "POSTGRES") 0230 set(AKONADI_DATABASE_BACKEND QPSQL) 0231 elseif("${_backend}" STREQUAL "MYSQL") 0232 set(AKONADI_DATABASE_BACKEND QMYSQL) 0233 else() 0234 message(FATAL_ERROR "Invalid database backend \"${_backend}\". Supported values are MYSQL, POSTGRES and SQLITE.") 0235 endif() 0236 0237 message(STATUS "Using default db backend ${AKONADI_DATABASE_BACKEND}") 0238 endmacro() 0239 0240 #### DB BACKEND DEFAULT #### 0241 set_default_db_backend(${DATABASE_BACKEND}) 0242 0243 ############### Compilers flags ############### 0244 0245 if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_C_COMPILER MATCHES "icc" OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) 0246 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-long-long -std=iso9899:1990 -Wundef -Wcast-align -Werror-implicit-function-declaration -Wchar-subscripts -Wall -Wextra -Wpointer-arith -Wwrite-strings -Wformat-security -Wmissing-format-attribute -fno-common") 0247 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor -Wundef -Wcast-align -Wchar-subscripts -Wall -Wextra -Wpointer-arith -Wformat-security -fno-common -pedantic") 0248 CHECK_CXX_COMPILER_FLAG(-Wno-deprecated-copy NO_DEPRECATED_COPY) 0249 if (NO_DEPRECATED_COPY) 0250 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-copy") 0251 endif() 0252 0253 set(CMAKE_CXX_FLAGS_DEBUGFULL "-g3 -fno-inline" CACHE STRING "Flags used by the C++ compiler during debugfull builds." FORCE) 0254 set(CMAKE_C_FLAGS_DEBUGFULL "-g3 -fno-inline" CACHE STRING "Flags used by the C compiler during debugfull builds." FORCE) 0255 mark_as_advanced(CMAKE_CXX_FLAGS_DEBUGFULL CMAKE_C_FLAGS_DEBUGFULL) 0256 elseif (MSVC) 0257 # This sets the __cplusplus macro to a real value based on the version of C++ specified by 0258 # the /std switch. Without it MSVC keeps reporting C++98, so feature detection doesn't work. 0259 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:__cplusplus") 0260 endif() 0261 0262 0263 if(MSVC) 0264 set(_ENABLE_EXCEPTIONS -EHsc) 0265 else() 0266 set(_ENABLE_EXCEPTIONS -fexceptions) 0267 endif() 0268 0269 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_ENABLE_EXCEPTIONS}") 0270 0271 ############### Configure files ############# 0272 0273 configure_file(config-akonadi.h.in ${Akonadi_BINARY_DIR}/config-akonadi.h) 0274 0275 ############### build targets ############### 0276 set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KPim6Akonadi") 0277 add_definitions(-DTRANSLATION_DOMAIN=\"libakonadi6\") 0278 0279 include_directories( 0280 ${CMAKE_CURRENT_SOURCE_DIR} 0281 ${CMAKE_CURRENT_BINARY_DIR} 0282 src 0283 ) 0284 0285 0286 add_definitions(-DQT_NO_CONTEXTLESS_CONNECT) 0287 ecm_set_disabled_deprecation_versions(QT 5.15.2 KF 5.249.0) 0288 0289 add_subdirectory(src) 0290 add_subdirectory(icons) 0291 0292 add_subdirectory(templates) 0293 0294 if(BUILD_TOOLS) 0295 # add testrunner (application for managing a self-contained 0296 # test environment) 0297 add_subdirectory(autotests/libs/testrunner) 0298 add_subdirectory(autotests/libs/testresource) 0299 add_subdirectory(autotests/libs/testsearchplugin) 0300 endif() 0301 0302 if(BUILD_TESTING) 0303 add_subdirectory(autotests) 0304 add_subdirectory(tests) 0305 endif() 0306 0307 if(INSTALL_APPARMOR) 0308 add_subdirectory(apparmor) 0309 endif() 0310 0311 ############### install stuff ############### 0312 0313 install(FILES akonadi-mime.xml DESTINATION ${KDE_INSTALL_MIMEDIR}) 0314 update_xdg_mimetypes(${KDE_INSTALL_MIMEDIR}) 0315 0316 ############### CMake Config Files ############### 0317 if (BUILD_QCH) 0318 ecm_install_qch_export( 0319 TARGETS KPim6AkonadiCore_QCH 0320 KPim6AkonadiWidgets_QCH 0321 KPim6AkonadiAgent_QCH 0322 FILE KPim6AkonadiQchTargets.cmake 0323 DESTINATION "${CMAKECONFIG_INSTALL_DIR}" 0324 COMPONENT Devel 0325 ) 0326 set(PACKAGE_INCLUDE_QCHTARGETS "include(\"\${CMAKE_CURRENT_LIST_DIR}/KPim6AkonadiQchTargets.cmake\")") 0327 endif() 0328 0329 configure_package_config_file( 0330 "${CMAKE_CURRENT_SOURCE_DIR}/KPimAkonadiConfig.cmake.in" 0331 "${CMAKE_CURRENT_BINARY_DIR}/KPim6AkonadiConfig.cmake" 0332 INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR} 0333 PATH_VARS AKONADI_DBUS_INTERFACES_INSTALL_DIR 0334 AKONADI_INCLUDE_DIR 0335 KF5Akonadi_DATA_DIR 0336 ) 0337 0338 install(FILES 0339 "${CMAKE_CURRENT_BINARY_DIR}/KPim6AkonadiConfig.cmake" 0340 "${CMAKE_CURRENT_BINARY_DIR}/KPim6AkonadiConfigVersion.cmake" 0341 "${CMAKE_CURRENT_SOURCE_DIR}/KPimAkonadiMacros.cmake" 0342 DESTINATION "${CMAKECONFIG_INSTALL_DIR}" 0343 COMPONENT Devel 0344 ) 0345 0346 install(EXPORT 0347 KPim6AkonadiTargets 0348 DESTINATION "${CMAKECONFIG_INSTALL_DIR}" 0349 FILE KPim6AkonadiTargets.cmake 0350 NAMESPACE KPim6::) 0351 0352 ecm_qt_install_logging_categories( 0353 EXPORT AKONADI 0354 FILE akonadi.categories 0355 DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR} 0356 ) 0357 0358 install(FILES 0359 ${CMAKE_CURRENT_BINARY_DIR}/akonadi_version.h 0360 DESTINATION ${KDE_INSTALL_INCLUDEDIR}/KPim6/AkonadiCore COMPONENT Devel 0361 ) 0362 0363 kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT) 0364 ki18n_install(po) 0365 ecm_feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)