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)