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)