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