cmake_minimum_required(VERSION 3.16) project(plasma-desktop) set(PROJECT_VERSION "6.8.80") string(REPLACE "." ";" VERSION_LIST ${PROJECT_VERSION}) list(GET VERSION_LIST 0 PROJECT_VERSION_MAJOR) set(PROJECT_DEP_VERSION "6.7.90") set(QT_MIN_VERSION "6.11.0") set(KF6_MIN_VERSION "6.30.0") set(ACCOUNTSQT_DEP_VERSION "1.13") set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(ECM ${KF6_MIN_VERSION} REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) set(INSTALL_SDDM_THEME TRUE) include(KDEInstallDirs) include(KDECMakeSettings) include(KDECompilerSettings NO_POLICY_SCOPE) include(ECMFindQmlModule) include(ECMGenerateExportHeader) include(ECMInstallIcons) include(ECMMarkAsTest) include(ECMMarkNonGuiExecutable) include(ECMOptionalAddSubdirectory) include(ECMQtDeclareLoggingCategory) include(ECMSetupVersion) include(FeatureSummary) include(CheckIncludeFiles) include(KDEClangFormat) include(KDEGitCommitHooks) include(ECMQmlModule) include(ECMConfiguredInstall) option(BUILD_DOC "Whether to build the documentation" ON) option(BUILD_KCM_TABLET "Build the Tablet KCM" ON) find_package(Qt6 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Quick QuickWidgets DBus Widgets Svg Concurrent Core5Compat ShaderTools Sql # kcms/activities ) find_package(Qt6GuiPrivate ${QT_MIN_VERSION} REQUIRED NO_MODULE) if(BUILD_KCM_TABLET) find_package(Qt6WaylandClient ${QT_MIN_VERSION} CONFIG REQUIRED) endif() find_package(KF6 ${KF6_MIN_VERSION} REQUIRED COMPONENTS Auth Crash Config I18n KCMUtils NewStuff KIO Notifications NotifyConfig Attica Runner GlobalAccel CoreAddons # KSharedDataCache required by KImageCache, KStringHandler required by FolderModel GuiAddons # KImageCache DBusAddons Config WidgetsAddons Codecs Sonnet Package IconThemes XmlGui Svg ) find_package(Plasma5Support ${PROJECT_DEP_VERSION} REQUIRED) find_package(Plasma ${PROJECT_DEP_VERSION} REQUIRED) find_package(PlasmaQuick ${PROJECT_DEP_VERSION} REQUIRED) find_package(PlasmaActivities ${PROJECT_DEP_VERSION} REQUIRED) find_package(PlasmaActivitiesStats ${PROJECT_DEP_VERSION} REQUIRED) find_package(PolkitQt6-1 REQUIRED) if(BUILD_TESTING) find_package(Qt6Test ${QT_MIN_VERSION} CONFIG REQUIRED) include(ECMAddTests) endif() if(BUILD_DOC) find_package(KF6DocTools ${KF6_MIN_VERSION}) set_package_properties(KF6DocTools PROPERTIES DESCRIPTION "Tools to generate documentation" TYPE REQUIRED ) endif() find_package(AccountsQt6 ${ACCOUNTSQT_DEP_VERSION} CONFIG) set_package_properties(AccountsQt6 PROPERTIES DESCRIPTION "Accounts management library for Qt applications" URL "https://gitlab.com/accounts-sso/libaccounts-qt" PURPOSE "Required for building the OpenDesktop integration plugin" TYPE OPTIONAL ) find_package(KAccounts6 20.04) set_package_properties(KAccounts6 PROPERTIES DESCRIPTION "Accounts management library for KDE applications" PURPOSE "Required for building the OpenDesktop integration plugin" TYPE OPTIONAL ) find_package(PkgConfig REQUIRED) pkg_check_modules(SignOnOAuth2 IMPORTED_TARGET signon-oauth2plugin) set_package_properties(signon-oauth2plugin PROPERTIES DESCRIPTION "Plugin for SignOnQt6 which handles OAuth and OAuth2 logins" URL "https://gitlab.com/accounts-sso/signon-plugin-oauth2" PURPOSE "Required for running the OpenDesktop integration plugin" TYPE RUNTIME ) find_package(KF6Kirigami ${KF6_MIN_VERSION} CONFIG) set_package_properties(KF6Kirigami PROPERTIES DESCRIPTION "A QtQuick based components set" PURPOSE "Required at runtime by many KCMs" TYPE RUNTIME ) find_package(KF6KirigamiAddons 1.0.0 CONFIG) set_package_properties(KF6KirigamiAddons PROPERTIES DESCRIPTION "Extra controls for Kirigami applications" PURPOSE "Required at runtime for Kickoff" TYPE RUNTIME ) find_package(KF6QQC2DesktopStyle ${KF6_MIN_VERSION} CONFIG) set_package_properties(KF6QQC2DesktopStyle PROPERTIES DESCRIPTION "QtQuickControls 2 style that uses QWidget's QStyle for painting" PURPOSE "Required at runtime by many KCMs" TYPE RUNTIME ) if(BUILD_KCM_TABLET) find_package(Canberra) set_package_properties(Canberra PROPERTIES TYPE REQUIRED PURPOSE "Required for building Tablet input KCM" ) find_package(WaylandProtocols 1.44) set_package_properties(WaylandProtocols PROPERTIES TYPE REQUIRED PURPOSE "Collection of Wayland protocols that add functionality not available in the Wayland core protocol" URL "https://gitlab.freedesktop.org/wayland/wayland-protocols/" ) find_package(Wayland 1.2) set_package_properties(Wayland PROPERTIES TYPE REQUIRED PURPOSE "Required for building Tablet input KCM" ) pkg_check_modules(LIBWACOM libwacom REQUIRED IMPORTED_TARGET) endif() find_package(SDL2 2.0.16) set_package_properties(SDL2 PROPERTIES TYPE OPTIONAL PURPOSE "Required for building Game Controller KCM" ) find_package(LibKLookAndFeel ${PROJECT_DEP_VERSION} CONFIG REQUIRED) find_package(LibKWorkspace ${PROJECT_DEP_VERSION} CONFIG REQUIRED) find_package(LibNotificationManager ${PROJECT_DEP_VERSION} CONFIG REQUIRED) find_package(LibTaskManager ${PROJECT_DEP_VERSION} CONFIG REQUIRED) find_package(KWinDBusInterface CONFIG REQUIRED) find_package(ScreenSaverDBusInterface CONFIG REQUIRED) find_package(KRunnerAppDBusInterface CONFIG REQUIRED) find_package(KF6ItemModels CONFIG REQUIRED) find_package(KSysGuard CONFIG REQUIRED) find_package(KF6KDED CONFIG REQUIRED) find_package(KF6Baloo ${KF6_MIN_VERSION}) set_package_properties(KF6Baloo PROPERTIES DESCRIPTION "File Searching" PURPOSE "Needed to build the File Search KCM" TYPE RECOMMENDED ) find_package(X11) set_package_properties(X11 PROPERTIES DESCRIPTION "X11 libraries" URL "https://www.x.org" PURPOSE "Required for building the X11 based workspace" TYPE REQUIRED ) find_package(UDev) set_package_properties(UDev PROPERTIES DESCRIPTION "API for enumerating and introspecting local devices (part of systemd)" URL "https://www.freedesktop.org/wiki/Software/systemd/" PURPOSE "Required for device discovery in game controller kcm" TYPE OPTIONAL ) find_package(XCB REQUIRED COMPONENTS XCB) pkg_check_modules(XKBREGISTRY xkbregistry REQUIRED IMPORTED_TARGET) ecm_find_qmlmodule(org.kde.pipewire 0.1) if(XORGLIBINPUT_FOUND) set(HAVE_XORGLIBINPUT 1) endif() include(ConfigureChecks.cmake) find_package(PackageKitQt6) set_package_properties(PackageKitQt6 PROPERTIES DESCRIPTION "Software Manager integration" PURPOSE "Used in the KRunner plugin installer" TYPE OPTIONAL ) if(PackageKitQt6_FOUND) set(HAVE_PACKAGEKIT TRUE) endif() find_package(GLIB2) set_package_properties(GLIB2 PROPERTIES PURPOSE "Required for building kimpanel" TYPE OPTIONAL ) # For kimpanel pkg_check_modules(IBUS "ibus-1.0>=1.5.0" IMPORTED_TARGET) pkg_check_modules(GOBJECT gobject-2.0 IMPORTED_TARGET) pkg_check_modules(SCIM scim IMPORTED_TARGET) ecm_setup_version(${PROJECT_VERSION} VARIABLE_PREFIX PLASMA VERSION_HEADER plasma_version.h) include_directories("${CMAKE_CURRENT_BINARY_DIR}") add_definitions( -DQT_NO_CONTEXTLESS_CONNECT ) configure_file(config-workspace.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-workspace.h) plasma_install_package(desktoppackage org.kde.plasma.desktop shells shell) if (INSTALL_SDDM_THEME) configure_file(sddm-theme/theme.conf.cmake ${CMAKE_CURRENT_BINARY_DIR}/sddm-theme/theme.conf) # Install the login theme into the SDDM directory #NOTE this trailing slash is important to rename the directory install(DIRECTORY sddm-theme/ DESTINATION ${KDE_INSTALL_FULL_DATADIR}/sddm/themes/breeze PATTERN "README.txt" EXCLUDE PATTERN "components" EXCLUDE PATTERN "dummydata" EXCLUDE PATTERN "theme.conf.cmake" EXCLUDE ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/sddm-theme/theme.conf DESTINATION ${KDE_INSTALL_FULL_DATADIR}/sddm/themes/breeze ) endif() add_subdirectory(layout-templates) add_subdirectory(runners) add_subdirectory(containments) add_subdirectory(toolboxes) add_subdirectory(applets) add_subdirectory(kcms) add_subdirectory(knetattach) if(KAccounts6_FOUND AND AccountsQt6_FOUND) add_subdirectory(attica-kde) endif() add_subdirectory(imports/activitymanager/) add_subdirectory(solid-device-automounter) add_subdirectory(emojier) add_subdirectory(kded) if(X11_FOUND) add_subdirectory(kaccess) endif() install(FILES org.kde.plasmashell.metainfo.xml DESTINATION ${KDE_INSTALL_METAINFODIR}) # Only link Discover to debian files in the debian world. find_program(DPKG dpkg) if (DPKG) file(COPY_FILE kde-mimeapps.list ${CMAKE_BINARY_DIR}/kde-mimeapps.list) file(APPEND ${CMAKE_BINARY_DIR}/kde-mimeapps.list "\n# Discover (extra *.deb) \napplication/vnd.debian.binary-package=org.kde.discover.desktop\n") install(FILES ${CMAKE_BINARY_DIR}/kde-mimeapps.list DESTINATION ${KDE_INSTALL_APPDIR}) else() install(FILES kde-mimeapps.list DESTINATION ${KDE_INSTALL_APPDIR}) endif () install(FILES kconf_update/50-krunner-activate-typing.upd DESTINATION ${KDE_INSTALL_KCONFUPDATEDIR}) install(PROGRAMS kconf_update/50-krunner-activate-typing.sh DESTINATION ${KDE_INSTALL_KCONFUPDATEDIR}) # add clang-format target for all our real source files file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h) kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES}) kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT) feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) find_package(XdgUserDir) set_package_properties(XdgUserDir PROPERTIES DESCRIPTION "Xdg-user-dir script" PURPOSE "Used to translate default paths in KCM desktoppath" TYPE RUNTIME ) find_package(FontNotoColorEmoji) set_package_properties(FontNotoColorEmoji PROPERTIES PURPOSE "Default emoji font, needed to display emojis properly in Emoji Selector" URL "https://www.google.com/get/noto/" TYPE RUNTIME ) add_subdirectory(appiumtests) if(BUILD_DOC) add_subdirectory(doc) kdoctools_install(po) endif() ki18n_install(po)