Warning, /plasma/plasma-workspace/CMakeLists.txt is written in an unsupported language. File is not indexed.
0001 cmake_minimum_required(VERSION 3.16)
0002
0003 project(plasma-workspace)
0004 set(PROJECT_VERSION "6.0.80")
0005 string(REPLACE "." ";" VERSION_LIST ${PROJECT_VERSION})
0006 list(GET VERSION_LIST 0 PROJECT_VERSION_MAJOR)
0007 list(GET VERSION_LIST 1 PROJECT_VERSION_MINOR)
0008 list(GET VERSION_LIST 2 PROJECT_VERSION_PATCH)
0009
0010 set(PROJECT_DEP_VERSION "6.0.80")
0011 set(QT_MIN_VERSION "6.6.0")
0012 set(KF6_MIN_VERSION "5.240.0")
0013 set(KDE_COMPILERSETTINGS_LEVEL "5.82")
0014 set(INSTALL_SDDM_THEME TRUE)
0015 option(PLASMA_X11_DEFAULT_SESSION "Use X11 session by default for Plasma" OFF)
0016 option(INSTALL_SDDM_WAYLAND_SESSION OFF)
0017 option(WITH_X11 "Build with X11 support. Building without is experimental" ON)
0018
0019 set(CMAKE_CXX_STANDARD 20)
0020 set(CMAKE_CXX_STANDARD_REQUIRED ON)
0021
0022 find_package(ECM ${KF6_MIN_VERSION} REQUIRED NO_MODULE)
0023 set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
0024
0025 include(KDEInstallDirs)
0026 include(KDECMakeSettings)
0027 include(KDECompilerSettings NO_POLICY_SCOPE)
0028 include(ECMMarkNonGuiExecutable)
0029 include(CMakePackageConfigHelpers)
0030 include(WriteBasicConfigVersionFile)
0031 include(CheckIncludeFiles)
0032 include(FeatureSummary)
0033 include(ECMOptionalAddSubdirectory)
0034 include(ECMQtDeclareLoggingCategory)
0035 include(ECMQueryQt)
0036 include(ECMInstallIcons)
0037 include(KDEClangFormat)
0038 include(KDEGitCommitHooks)
0039 include(ECMConfiguredInstall)
0040 include(ECMGenerateDBusServiceFile)
0041 include(ECMFindQmlModule)
0042 include(ECMGenerateExportHeader)
0043 include(ECMGenerateQmlTypes)
0044 include(ECMDeprecationSettings)
0045 include(ECMQmlModule)
0046
0047 find_package(Qt6 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Svg Widgets Quick QuickWidgets Concurrent Network Core5Compat DBus ShaderTools)
0048 find_package(KF6 ${KF6_MIN_VERSION} REQUIRED COMPONENTS
0049 Auth Parts Runner Notifications NotifyConfig NewStuff Wallet IdleTime
0050 Svg Declarative I18n KCMUtils TextWidgets Crash GlobalAccel DBusAddons
0051 CoreAddons KIO Prison Package
0052 GuiAddons Archive ItemModels IconThemes UnitConversion TextEditor StatusNotifierItem
0053 OPTIONAL_COMPONENTS DocTools)
0054 find_package(Plasma5Support ${PROJECT_DEP_VERSION} REQUIRED)
0055 find_package(Plasma ${PROJECT_DEP_VERSION} REQUIRED)
0056 find_package(PlasmaQuick ${PROJECT_DEP_VERSION} REQUIRED)
0057 find_package(KWayland ${PROJECT_DEP_VERSION} REQUIRED)
0058 find_package(PlasmaActivities ${PROJECT_DEP_VERSION} REQUIRED)
0059 find_package(PlasmaActivitiesStats ${PROJECT_DEP_VERSION} REQUIRED)
0060
0061 if (BUILD_TESTING)
0062 include(ECMAddTests)
0063 find_package(Qt6 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Test QuickTest)
0064 find_package(Qt6 REQUIRED CONFIG COMPONENTS WaylandCompositor)
0065 endif()
0066
0067 find_package(KF6KDED CONFIG REQUIRED)
0068 find_package(KPipeWire CONFIG)
0069
0070 find_package(KF6NetworkManagerQt ${KF6_MIN_VERSION})
0071 set_package_properties(KF6NetworkManagerQt PROPERTIES DESCRIPTION "Qt wrapper for NetworkManager API"
0072 TYPE OPTIONAL
0073 PURPOSE "Needed by geolocation data engine."
0074 )
0075
0076 find_package(KF6Kirigami2 ${KF6_MIN_VERSION} CONFIG)
0077 set_package_properties(KF6Kirigami2 PROPERTIES
0078 DESCRIPTION "A QtQuick based components set"
0079 TYPE RUNTIME
0080 )
0081
0082 find_package(KF6KirigamiAddons2 0.10.0 CONFIG)
0083 set_package_properties(KF6KirigamiAddons2 PROPERTIES
0084 DESCRIPTION "Extra controls for Kirigami applications"
0085 PURPOSE "Required at runtime for the User KCM"
0086 TYPE RUNTIME
0087 )
0088
0089 find_package(KF6QuickCharts ${KF6_MIN_VERSION} CONFIG)
0090 set_package_properties(KF6QuickCharts PROPERTIES
0091 DESCRIPTION "Used for rendering charts"
0092 TYPE RUNTIME
0093 )
0094
0095 find_package(KF6UserFeedback)
0096 find_package(KSysGuard CONFIG REQUIRED)
0097
0098 find_package(KF6Baloo)
0099 set_package_properties(KF6Baloo PROPERTIES DESCRIPTION "File Searching"
0100 TYPE RECOMMENDED
0101 PURPOSE "Needed for the File Search runner."
0102 )
0103
0104 find_package(PkgConfig REQUIRED)
0105 pkg_check_modules(QALCULATE libqalculate>2.0 REQUIRED IMPORTED_TARGET)
0106
0107 find_package(KWinDBusInterface CONFIG REQUIRED)
0108
0109 find_package(KF6Screen CONFIG REQUIRED)
0110 find_package(KScreenLocker 5.13.80 REQUIRED)
0111 find_package(ScreenSaverDBusInterface CONFIG REQUIRED)
0112 find_package(LayerShellQt CONFIG REQUIRED)
0113 find_package(KF6Holidays)
0114 set_package_properties(KF6Holidays PROPERTIES DESCRIPTION "Holidays provider for Plasma calendar"
0115 TYPE OPTIONAL
0116 PURPOSE "Needed to for holidays plugin for Plasma Calendar."
0117 )
0118 # Used in kcm_autostart
0119 pkg_check_modules(SYSTEMD "systemd")
0120
0121 find_package(Phonon4Qt6 4.6.60 REQUIRED NO_MODULE)
0122 set_package_properties(Phonon4Qt6 PROPERTIES
0123 DESCRIPTION "Qt-based audio library"
0124 TYPE REQUIRED)
0125
0126 find_package(Canberra)
0127 set_package_properties(Canberra PROPERTIES
0128 PURPOSE "Needed to preview notification sounds"
0129 TYPE REQUIRED)
0130
0131 find_package(Breeze ${PROJECT_DEP_VERSION} CONFIG)
0132 set_package_properties(Breeze PROPERTIES
0133 TYPE OPTIONAL
0134 PURPOSE "For setting the default window decoration plugin")
0135
0136 find_package(ZLIB)
0137 set_package_properties(ZLIB PROPERTIES DESCRIPTION "Support for gzip compressed files and data streams"
0138 URL "https://www.zlib.net"
0139 TYPE REQUIRED
0140 )
0141
0142 find_package(Fontconfig)
0143 set_package_properties(Fontconfig PROPERTIES DESCRIPTION "Font access configuration library"
0144 URL "https://www.freedesktop.org/wiki/Software/fontconfig"
0145 TYPE OPTIONAL
0146 PURPOSE "Needed to build font configuration and installation tools"
0147 )
0148
0149 if(PLASMA_X11_DEFAULT_SESSION)
0150 set(WITH_X11 1)
0151 endif()
0152
0153 if(WITH_X11)
0154 find_package(X11)
0155 set_package_properties(X11 PROPERTIES DESCRIPTION "X11 libraries"
0156 URL "https://www.x.org"
0157 TYPE REQUIRED
0158 PURPOSE "Required for building the X11 based workspace")
0159 function(check_X11_lib _lib)
0160 if (NOT TARGET X11::${_lib})
0161 message(SEND_ERROR "Required component ${_lib} of X11 was not found")
0162 endif()
0163 endfunction()
0164 check_X11_lib(ICE)
0165 check_X11_lib(SM)
0166 check_X11_lib(X11)
0167 check_X11_lib(Xau)
0168 check_X11_lib(Xcursor)
0169 check_X11_lib(Xfixes)
0170 check_X11_lib(Xft)
0171 check_X11_lib(Xrender)
0172 check_X11_lib(Xtst)
0173
0174 set(HAVE_X11 1)
0175 set(HAVE_XCURSOR 1)
0176 set(HAVE_XFIXES 1)
0177
0178 find_package(XCB MODULE REQUIRED COMPONENTS XCB RANDR IMAGE)
0179 set_package_properties(XCB PROPERTIES TYPE REQUIRED)
0180
0181 else()
0182 set(HAVE_X11 0)
0183 set(HAVE_XCURSOR 0)
0184 set(HAVE_XFIXES 0)
0185 endif()
0186
0187 pkg_check_modules(PipeWire IMPORTED_TARGET libpipewire-0.3)
0188 add_feature_info(PipeWire PipeWire_FOUND "Required for Wayland screencasting")
0189
0190 if(PipeWire_FOUND)
0191 find_package(Libdrm REQUIRED)
0192 endif()
0193
0194 # FreeBSD systems might have libxcrypt but their shadow equivalent doesn't use it
0195 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
0196 pkg_check_modules(libxcrypt libxcrypt>=4)
0197 if(libxcrypt_FOUND)
0198 set(HAVE_CRYPT_GENSALT true)
0199 endif()
0200 endif()
0201
0202 find_package(Qt6WaylandClient COMPONENTS Private)
0203 find_package(PlasmaWaylandProtocols 1.6 REQUIRED)
0204 find_package(Wayland REQUIRED COMPONENTS Client Server) # Server is used in autotests
0205
0206 if(FONTCONFIG_FOUND)
0207 # kfontinst
0208 find_package(Qt6 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS PrintSupport)
0209 endif()
0210
0211 find_package(AppStreamQt 1.0) # 1.0 will be the first release to support Qt6
0212 set_package_properties(AppStreamQt PROPERTIES DESCRIPTION "Access metadata for listing available software"
0213 URL "https://www.freedesktop.org/wiki/Distributions/AppStream/"
0214 TYPE OPTIONAL)
0215
0216 if(${AppStreamQt_FOUND})
0217 set(HAVE_APPSTREAMQT true)
0218 endif()
0219
0220 find_package(UDev REQUIRED)
0221 set_package_properties(UDev PROPERTIES
0222 PURPOSE "Allows to play notification sounds when (un)plugging devices"
0223 TYPE OPTIONAL
0224 )
0225
0226 # Region & Language KCM
0227 if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
0228 # notes for packager:
0229 # This is the macro definition part of Region & Language KCM
0230 # Depending on your distributions, the KCM behaves differently
0231 # For Ubuntu based systems, this KCM uses "check-language-support" and PackageKit
0232 # to install relevant fonts and packages
0233 # You should enable option UBUNTU_PACKAGEKIT (it's auto detected though)
0234 #
0235 # For Glibc systems that don't come with pre-generated locales, such as ArchLinux
0236 # This KCM uses "/etc/locale.gen" and "locale-gen" to generate configured locales
0237 # and display a note to let user install fonts themselves if required
0238 # You shouldn't required to do anything in this case
0239 #
0240 # For Glibc systems that come with pre-generated locales, such as Fedora and openSUSE
0241 # a note to let user install fonts themselves if required is displayed
0242 # You should enable GLIBC_LOCALE_PREGENERATED option
0243 #
0244 # For non-glibc systems such as VoidLinux and *BSD
0245 # A warning of configure locale manually is displayed (although the relevant ENVs are set by Plasma)
0246 # You should disable GLIBC_LOCALE_GEN option
0247
0248
0249 # find out if the build system is Ubuntu based
0250 if (${CMAKE_VERSION} VERSION_LESS 3.22)
0251 find_program(LSB_RELEASE_EXEC lsb_release)
0252 execute_process(COMMAND ${LSB_RELEASE_EXEC} -is
0253 OUTPUT_VARIABLE DISTRO_NAME
0254 OUTPUT_STRIP_TRAILING_WHITESPACE
0255 )
0256 string(TOLOWER "${DISTRO_NAME}" DISTRO_NAME)
0257 else()
0258 cmake_host_system_information(RESULT DISTRO_NAME QUERY DISTRIB_ID)
0259 cmake_host_system_information(RESULT DISTRO_ID_LIKE QUERY DISTRIB_ID_LIKE)
0260 endif()
0261
0262 string(COMPARE EQUAL "ubuntu" "${DISTRO_NAME}" SYSTEM_UBUNTU_BASED)
0263 string(FIND "${DISTRO_ID_LIKE}" "ubuntu" FINDINDEX)
0264 if(NOT (FINDINDEX EQUAL -1))
0265 set(SYSTEM_UBUNTU_BASED ON)
0266 find_program(LANGUAGE_SELECTOR_COMMON "check-language-support" DOC "Required for ubuntu-based distros to generate locale")
0267 endif()
0268
0269 set(UBUNTU_LOCALE FALSE)
0270 option(UBUNTU_PACKAGEKIT "Install required package for language on Ubuntu Based systems, PackageKitQt6 required" ${SYSTEM_UBUNTU_BASED})
0271 if(UBUNTU_PACKAGEKIT)
0272 find_package(PackageKitQt6)
0273 set_package_properties(PackageKitQt6
0274 PROPERTIES DESCRIPTION "Software Manager integration"
0275 TYPE OPTIONAL
0276 PURPOSE "Used to install additional language packages on demand"
0277 )
0278 set(UBUNTU_LOCALE ${PackageKitQt6_FOUND})
0279 endif()
0280
0281 set(GLIBC_LOCALE_GEN_DEFAULT ON)
0282 if(UBUNTU_LOCALE)
0283 set(GLIBC_LOCALE_GEN_DEFAULT OFF)
0284 endif()
0285
0286 option(GLIBC_LOCALE_GEN "Auto generate Glibc locale with locale-gen and /etc/locale.gen" ${GLIBC_LOCALE_GEN_DEFAULT})
0287 if(GLIBC_LOCALE_GEN AND UBUNTU_LOCALE)
0288 message(FATAL_ERROR "UBUNTU_PACKAGEKIT and GLIBC_LOCALE_GEN both enabled, only UBUNTU_PACKEGKIT will be used")
0289 endif()
0290 if(GLIBC_LOCALE_GEN)
0291 set(GLIBC_LOCALE_AUTO TRUE)
0292 endif()
0293 set(REGION_LANG_GENERATE_LOCALE_HELPER FALSE)
0294 if(UBUNTU_LOCALE OR GLIBC_LOCALE_GEN)
0295 set(REGION_LANG_GENERATE_LOCALE_HELPER TRUE)
0296 endif()
0297
0298 option(GLIBC_LOCALE_PREGENERATED "Systems that don't require locale generation. Such as openSUSE or Fedora" OFF)
0299 if(GLIBC_LOCALE_PREGENERATED)
0300 set(GLIBC_LOCALE_GENERATED TRUE)
0301 endif()
0302 if(REGION_LANG_GENERATE_LOCALE_HELPER AND GLIBC_LOCALE_PREGENERATED)
0303 message(FATAL_ERROR "(UBUNTU_PACKAGEKIT || GLIBC_LOCALE_GEN) and GLIBC_LOCALE_PREGENERATED both enabled")
0304 endif()
0305
0306 option(GLIBC_LOCALE "Build with glibc-compatible locale infrastructure" ON)
0307 add_feature_info(GLIBC_LOCALE GLIBC_LOCALE "Locale support is glibc based")
0308 add_feature_info(UBUNTU_LOCALE UBUNTU_LOCALE "Install language packages on Ubuntu-like systems")
0309 add_feature_info(GLIBC_LOCALE_GEN GLIBC_LOCALE_GEN "Generate glibc locales")
0310 add_feature_info(GLIBC_LOCALE_PREGENERATED GLIBC_LOCALE_PREGENERATED "glibc locales are pregenerated")
0311 ################## Find libraries ###################
0312 if(REGION_LANG_GENERATE_LOCALE_HELPER)
0313 find_package(PolkitQt6-1)
0314 set_package_properties(PolkitQt6-1
0315 PROPERTIES DESCRIPTION "DBus interface wrapper for Polkit"
0316 PURPOSE "Communicate with localegen helper in region & lang kcm"
0317 TYPE REQUIRED
0318 )
0319 endif()
0320 endif()
0321
0322 find_package(ICU COMPONENTS i18n uc)
0323 set_package_properties(ICU
0324 PROPERTIES DESCRIPTION "Unicode and Globalization support for software applications"
0325 TYPE REQUIRED
0326 PURPOSE "Better application groups in Kicker, timezone support"
0327 )
0328 if(${ICU_FOUND})
0329 set(HAVE_ICU TRUE)
0330 endif()
0331
0332 find_package(KExiv2Qt6)
0333 set_package_properties(KExiv2Qt6
0334 PROPERTIES URL "https://commits.kde.org/libkexiv2"
0335 DESCRIPTION "Image metadata support"
0336 TYPE OPTIONAL
0337 PURPOSE "Provides metadata for image wallpaper plugin"
0338 )
0339 if(${KExiv2Qt6_FOUND})
0340 set(HAVE_KExiv2 TRUE)
0341 endif()
0342
0343 find_package(KIOExtras)
0344 set_package_properties(KIOExtras PROPERTIES DESCRIPTION "Common KIO slaves for operations."
0345 PURPOSE "Show thumbnails in wallpaper selection."
0346 TYPE RUNTIME
0347 )
0348
0349 find_package(KIOFuse)
0350 set_package_properties(KIOFuse PROPERTIES DESCRIPTION "Provide KIO support to legacy applications. "
0351 TYPE RUNTIME
0352 )
0353
0354 if(Qt6WaylandClient_VERSION VERSION_LESS "6.6.0")
0355 pkg_check_modules(XKBCOMMON xkbcommon REQUIRED IMPORTED_TARGET)
0356 endif()
0357
0358 # Clipboard applet
0359 ecm_find_qmlmodule(org.kde.prison 1.0)
0360
0361 # Is building in KDE CI
0362 if(DEFINED ENV{KDECI_BUILD})
0363 set(KDECI_BUILD true)
0364 endif()
0365
0366 include(ConfigureChecks.cmake)
0367
0368 include_directories("${CMAKE_CURRENT_BINARY_DIR}")
0369
0370 ecm_set_disabled_deprecation_versions(
0371 QT 5.15.2
0372 KF 5.98.0
0373 KDECLARATIVE 5.88.0
0374 KRUNNER 5.103.0
0375 )
0376
0377 configure_file(config-workspace.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-workspace.h)
0378 configure_file(config-X11.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-X11.h)
0379 configure_file(config-appstream.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-appstream.h )
0380 configure_file(config-KDECI_BUILD.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-KDECI_BUILD.h )
0381 add_subdirectory(login-sessions)
0382 add_subdirectory(lookandfeel)
0383
0384 if (INSTALL_SDDM_WAYLAND_SESSION)
0385 install(FILES sddm-wayland-session/plasma-wayland.conf DESTINATION /etc/sddm.conf.d)
0386 else()
0387 message(STATUS "INSTALL_SDDM_WAYLAND_SESSION is disabled. As soon as it's installed, SDDM will default to use Wayland and KWin for its greeter session (BETA, do not deploy to final users yet).")
0388 endif()
0389
0390 add_definitions(-DQT_NO_URL_CAST_FROM_STRING)
0391
0392 # locate qdbus in the Qt path because not every distro makes a symlink at /usr/bin/qdbus
0393 ecm_query_qt(QtBinariesDir QT_INSTALL_BINS)
0394
0395 if(KF6DocTools_FOUND)
0396 add_subdirectory(doc)
0397 kdoctools_install(po)
0398 endif()
0399 add_subdirectory(libkworkspace)
0400 add_subdirectory(libdbusmenuqt)
0401 add_subdirectory(appmenu)
0402
0403 add_subdirectory(libtaskmanager)
0404 add_subdirectory(libkmpris)
0405 add_subdirectory(libnotificationmanager)
0406 add_subdirectory(libcolorcorrect)
0407 add_subdirectory(components)
0408
0409 add_subdirectory(plasma-windowed)
0410 add_subdirectory(shell)
0411 add_subdirectory(freespacenotifier)
0412 add_subdirectory(klipper)
0413 add_subdirectory(krunner)
0414 add_subdirectory(ksmserver)
0415 add_subdirectory(logout-greeter)
0416 add_subdirectory(ksplash)
0417 add_subdirectory(statusnotifierwatcher)
0418 add_subdirectory(startkde)
0419 add_subdirectory(themes)
0420
0421 add_subdirectory(kcms)
0422
0423 add_subdirectory(containmentactions)
0424 add_subdirectory(runners)
0425 add_subdirectory(applets)
0426 add_subdirectory(dataengines)
0427 add_subdirectory(wallpapers)
0428
0429 add_subdirectory(kioworkers)
0430 add_subdirectory(ktimezoned)
0431 add_subdirectory(menu)
0432 add_subdirectory(phonon)
0433
0434 add_subdirectory(interactiveconsole)
0435
0436 # This ensures pressing the eject button on a CD drive ejects the disc
0437 # It listens to the Solid::OpticalDrive::ejectPressed signal that is only
0438 # supported by Solid in the HAL backend and does nothing with UDev
0439 if(CMAKE_SYSTEM_NAME MATCHES FreeBSD)
0440 add_subdirectory(solidautoeject)
0441 endif()
0442
0443 ecm_optional_add_subdirectory(xembed-sni-proxy)
0444
0445 ecm_optional_add_subdirectory(gmenu-dbusmenu-proxy)
0446
0447 add_subdirectory(soliduiserver)
0448
0449 if(KF6Holidays_FOUND)
0450 add_subdirectory(plasmacalendarintegration)
0451 endif()
0452
0453 add_subdirectory(appiumtests)
0454
0455 if (TARGET UDev::UDev)
0456 add_subdirectory(devicenotifications)
0457 endif()
0458
0459 ki18n_install(po)
0460
0461 install(FILES completions/plasmashell.zsh RENAME _plasmashell DESTINATION ${KDE_INSTALL_ZSHAUTOCOMPLETEDIR})
0462
0463 ecm_qt_install_logging_categories(
0464 EXPORT PLASMAWORKSPACE
0465 FILE plasma-workspace.categories
0466 DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}
0467 )
0468
0469
0470 feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
0471
0472 # add clang-format target for all our real source files
0473 file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h)
0474 kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES})
0475 kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)