Warning, /plasma/kscreenlocker/CMakeLists.txt is written in an unsupported language. File is not indexed.
0001 cmake_minimum_required(VERSION 3.16)
0002
0003 project(kscreenlocker)
0004 set(CMAKE_C_STANDARD 99)
0005 set(PROJECT_VERSION "6.0.80")
0006 set(PROJECT_VERSION_MAJOR 6)
0007
0008 set(QT_MIN_VERSION "6.6.0")
0009 set(KF6_MIN_VERSION "5.240.0")
0010 set(KDE_COMPILERSETTINGS_LEVEL "5.82")
0011
0012 set(CMAKE_CXX_STANDARD 20)
0013 set(CMAKE_CXX_STANDARD_REQUIRED ON)
0014
0015 find_package(ECM ${KF6_MIN_VERSION} REQUIRED NO_MODULE)
0016 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${ECM_MODULE_PATH} )
0017
0018 include(KDEInstallDirs)
0019 include(KDECMakeSettings)
0020 include(KDECompilerSettings NO_POLICY_SCOPE)
0021 include(ECMSetupVersion)
0022 include(ECMGenerateHeaders)
0023 include(CheckIncludeFiles)
0024 include(ECMMarkNonGuiExecutable)
0025 include(CMakePackageConfigHelpers)
0026 include(FeatureSummary)
0027 include(GenerateExportHeader)
0028 include(KDEClangFormat)
0029 include(KDEGitCommitHooks)
0030 include(ECMDeprecationSettings)
0031
0032 include(CheckIncludeFile)
0033 include(CheckSymbolExists)
0034 check_include_file("sys/prctl.h" HAVE_SYS_PRCTL_H)
0035 check_symbol_exists(PR_SET_DUMPABLE "sys/prctl.h" HAVE_PR_SET_DUMPABLE)
0036 check_include_file("sys/procctl.h" HAVE_SYS_PROCCTL_H)
0037 check_symbol_exists(PROC_TRACE_CTL "sys/procctl.h" HAVE_PROC_TRACE_CTL)
0038 if (HAVE_PR_SET_DUMPABLE OR HAVE_PROC_TRACE_CTL)
0039 set(CAN_DISABLE_PTRACE TRUE)
0040 endif ()
0041 add_feature_info("prctl/procctl tracing control"
0042 CAN_DISABLE_PTRACE
0043 "Required for disallowing ptrace on greeter and kcheckpass process")
0044
0045 find_package(Qt6 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS DBus Widgets Quick Test)
0046 find_package(KF6 ${KF6_MIN_VERSION} REQUIRED COMPONENTS
0047 Crash
0048 KCMUtils
0049 KIO
0050 GlobalAccel
0051 I18n
0052 IdleTime
0053 Notifications
0054 Solid
0055 WindowSystem
0056 XmlGui
0057 Svg
0058 )
0059
0060 find_package(PlasmaQuick ${PROJECT_VERSION} REQUIRED)
0061
0062 find_package(X11)
0063 set_package_properties(X11 PROPERTIES DESCRIPTION "X11 libraries"
0064 URL "https://www.x.org"
0065 TYPE REQUIRED
0066 PURPOSE "Required for building the X11 based workspace")
0067
0068 find_package(XCB MODULE REQUIRED COMPONENTS XCB KEYSYMS XTEST)
0069 set_package_properties(XCB PROPERTIES TYPE REQUIRED)
0070 add_feature_info("XInput" X11_Xinput_FOUND "Required for grabbing XInput2 devices in the screen locker")
0071
0072 find_package(WaylandScanner)
0073 find_package(Wayland 1.3 COMPONENTS Client Server)
0074 find_package(LayerShellQt REQUIRED)
0075 find_package(KF6Screen REQUIRED)
0076
0077 set_package_properties(Wayland PROPERTIES
0078 TYPE REQUIRED
0079 PURPOSE "Required for building screenlocker")
0080
0081 find_package(loginctl)
0082 set_package_properties(loginctl PROPERTIES
0083 URL "https://www.freedesktop.org/software/systemd/man/loginctl.html"
0084 DESCRIPTION "Send control commands to the login manager"
0085 TYPE RUNTIME
0086 )
0087 set(HAVE_LOGINCTL ${loginctl_FOUND})
0088
0089 if (NOT HAVE_LOGINCTL)
0090 find_package(ConsoleKit)
0091 set_package_properties(ConsoleKit PROPERTIES
0092 URL "https://github.com/ConsoleKit2/ConsoleKit2"
0093 DESCRIPTION "Framework for tracking user login sessions"
0094 TYPE RECOMMENDED
0095 )
0096 set(HAVE_CONSOLEKIT ${ConsoleKit_FOUND})
0097 endif ()
0098
0099 if (HAVE_LOGINCTL OR HAVE_CONSOLEKIT)
0100 set(HAVE_UNLOCK_CAPABILITY TRUE)
0101 endif ()
0102
0103 add_feature_info("Unlock broken screenlocker"
0104 HAVE_UNLOCK_CAPABILITY
0105 "Needed for emergency unlock in case that the greeter is broken. In case your distribution does not provide loginctl or consolekit please contact plasma-devel@kde.org to discuss alternatives.")
0106
0107 option(PAM_REQUIRED "Require building with PAM" ON)
0108
0109 include(ConfigureChecks.cmake)
0110
0111 configure_file(config-unix.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-unix.h )
0112
0113 if (HAVE_CONSOLEKIT)
0114 configure_file(ck-unlock-session.cmake ${CMAKE_CURRENT_BINARY_DIR}/ck-unlock-session)
0115 endif ()
0116
0117 # adjusting CMAKE_C_FLAGS to get wayland protocols to compile
0118 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu90")
0119
0120 ecm_setup_version(${PROJECT_VERSION} VARIABLE_PREFIX KSCREENLOCKER
0121 VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kscreenlocker_version.h"
0122 PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KScreenLockerConfigVersion.cmake"
0123 SOVERSION 5
0124 )
0125
0126 configure_file(config-kscreenlocker.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-kscreenlocker.h)
0127 include_directories(${CMAKE_CURRENT_BINARY_DIR})
0128
0129 set(KSLD_INCLUDEDIR "${KDE_INSTALL_INCLUDEDIR}/KScreenLocker")
0130
0131 include(ECMQtDeclareLoggingCategory)
0132
0133 ecm_set_disabled_deprecation_versions(QT 5.15.2
0134 KF 5.101
0135 )
0136
0137 add_subdirectory(greeter)
0138 add_subdirectory(kcm)
0139 add_subdirectory(settings)
0140
0141 add_definitions(-DTRANSLATION_DOMAIN=\"kscreenlocker\")
0142
0143 set(screensaver_dbusXML dbus/org.freedesktop.ScreenSaver.xml)
0144 set(kscreensaver_dbusXML dbus/org.kde.screensaver.xml)
0145 set(powerdevilpolicyagent_xml dbus/kf6_org.kde.Solid.PowerManagement.PolicyAgent.xml)
0146
0147 set(ksld_SRCS
0148 abstractlocker.cpp
0149 ksldapp.cpp
0150 interface.cpp
0151 globalaccel.cpp
0152 x11locker.cpp
0153 waylandlocker.cpp
0154 logind.cpp
0155 waylandserver.cpp
0156 powermanagement_inhibition.cpp
0157 abstractlocker.h
0158 ksldapp.h
0159 interface.h
0160 globalaccel.h
0161 x11locker.h
0162 waylandlocker.h
0163 logind.h
0164 waylandserver.h
0165 powermanagement_inhibition.h
0166 )
0167
0168 ecm_qt_declare_logging_category(ksld_SRCS
0169 HEADER kscreenlocker_logging.h
0170 IDENTIFIER KSCREENLOCKER
0171 CATEGORY_NAME kscreenlocker
0172 DEFAULT_SEVERITY Critical
0173 DESCRIPTION "KScreenLocker"
0174 EXPORT KSCREENLOCKER
0175 )
0176
0177 qt_add_dbus_adaptor(ksld_SRCS ${screensaver_dbusXML} interface.h ScreenLocker::Interface)
0178 qt_add_dbus_adaptor(ksld_SRCS ${kscreensaver_dbusXML} interface.h ScreenLocker::Interface kscreensaveradaptor KScreenSaverAdaptor)
0179 qt_add_dbus_interface(ksld_SRCS ${powerdevilpolicyagent_xml} powerdevilpolicyagent)
0180
0181 ecm_add_wayland_server_protocol(ksld_SRCS
0182 PROTOCOL protocols/ksld.xml
0183 BASENAME ksld
0184 )
0185
0186 add_library(KScreenLocker SHARED ${ksld_SRCS})
0187
0188 target_link_libraries(KScreenLocker
0189 PUBLIC
0190 Qt::Core
0191 PRIVATE
0192 settings
0193 Qt::DBus
0194 KF6::I18n
0195 KF6::IdleTime
0196 KF6::GlobalAccel
0197 KF6::Notifications
0198 KF6::CoreAddons
0199 KF6::ConfigGui
0200 KF6::Package
0201 KF6::WindowSystem
0202 X11::X11
0203 XCB::XCB
0204 XCB::KEYSYMS
0205 Wayland::Server
0206 )
0207
0208 set(kscreenlocker_greet_bin_abs ${CMAKE_INSTALL_FULL_LIBEXECDIR}/kscreenlocker_greet)
0209 # The file path of kscreenlocker_greet must be relative to the KScreenLocker library.
0210 file(RELATIVE_PATH kscreenlocker_greet_bin_rel ${CMAKE_INSTALL_FULL_LIBDIR} ${kscreenlocker_greet_bin_abs})
0211 target_compile_definitions(KScreenLocker PRIVATE
0212 KSCREENLOCKER_GREET_BIN_ABS="${kscreenlocker_greet_bin_abs}"
0213 KSCREENLOCKER_GREET_BIN_REL="${kscreenlocker_greet_bin_rel}"
0214 )
0215
0216 if (X11_Xinput_FOUND)
0217 target_link_libraries(KScreenLocker PRIVATE X11::Xi)
0218 endif()
0219
0220 target_include_directories(KScreenLocker INTERFACE "$<INSTALL_INTERFACE:${KSLD_INCLUDEDIR}>")
0221
0222 # Needed to compile on Arm target.
0223 set_target_properties(KScreenLocker PROPERTIES COMPILE_FLAGS "-fPIC")
0224
0225 add_library(PW::KScreenLocker ALIAS KScreenLocker)
0226
0227 # add clang-format target for all our real source files
0228 file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h *.c)
0229 kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES})
0230 kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)
0231
0232 generate_export_header(KScreenLocker
0233 BASE_NAME KScreenLocker
0234 EXPORT_MACRO_NAME KSCREENLOCKER_EXPORT
0235 EXPORT_FILE_NAME KScreenLocker/kscreenlocker_export.h
0236 )
0237
0238 configure_package_config_file(ScreenSaverDBusInterfaceConfig.cmake.in
0239 ${CMAKE_CURRENT_BINARY_DIR}/ScreenSaverDBusInterfaceConfig.cmake
0240 PATH_VARS KDE_INSTALL_DBUSINTERFACEDIR
0241 INSTALL_DESTINATION "${KDE_INSTALL_CMAKEPACKAGEDIR}/ScreenSaverDBusInterface")
0242
0243 set_target_properties(KScreenLocker PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR})
0244
0245 install(FILES
0246 ${CMAKE_CURRENT_BINARY_DIR}/ScreenSaverDBusInterfaceConfig.cmake
0247 DESTINATION "${KDE_INSTALL_CMAKEPACKAGEDIR}/ScreenSaverDBusInterface")
0248
0249 configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/KScreenLockerConfig.cmake.in"
0250 "${CMAKE_CURRENT_BINARY_DIR}/KScreenLockerConfig.cmake"
0251 PATH_VARS KDE_INSTALL_DBUSINTERFACEDIR
0252 INSTALL_DESTINATION "${KDE_INSTALL_CMAKEPACKAGEDIR}/KScreenLocker")
0253
0254 if (HAVE_CONSOLEKIT)
0255 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/ck-unlock-session DESTINATION ${KDE_INSTALL_BINDIR})
0256 endif ()
0257
0258 install(TARGETS KScreenLocker EXPORT KScreenLockerTargets ${KDE_INSTALL_TARGETS_DEFAULT_ARGS} LIBRARY)
0259 install(EXPORT KScreenLockerTargets DESTINATION "${KDE_INSTALL_CMAKEPACKAGEDIR}/KScreenLocker" FILE KScreenLockerTargets.cmake NAMESPACE PW::)
0260
0261 ecm_generate_headers(KScreenLocker_CamelCase_HEADERS
0262 HEADER_NAMES
0263 KsldApp
0264 REQUIRED_HEADERS KScreenLocker_HEADERS)
0265
0266 install(
0267 FILES
0268 ${CMAKE_CURRENT_BINARY_DIR}/KScreenLocker/kscreenlocker_export.h
0269 ${KScreenLocker_CamelCase_HEADERS}
0270 ${KScreenLocker_HEADERS}
0271 DESTINATION
0272 ${KSLD_INCLUDEDIR}/KScreenLocker
0273 COMPONENT Devel)
0274
0275 install(FILES "${CMAKE_CURRENT_BINARY_DIR}/KScreenLockerConfig.cmake"
0276 "${CMAKE_CURRENT_BINARY_DIR}/KScreenLockerConfigVersion.cmake"
0277 DESTINATION "${KDE_INSTALL_CMAKEPACKAGEDIR}/KScreenLocker"
0278 COMPONENT Devel)
0279
0280 ecm_qt_install_logging_categories(
0281 EXPORT KSCREENLOCKER
0282 FILE kscreenlocker.categories
0283 DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}
0284 )
0285
0286 install(FILES kscreenlocker.notifyrc DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR} RENAME ksmserver.notifyrc)
0287 install(FILES ${screensaver_dbusXML}
0288 DESTINATION ${KDE_INSTALL_DBUSINTERFACEDIR}
0289 RENAME kf6_org.freedesktop.ScreenSaver.xml)
0290
0291 install(FILES ${kscreensaver_dbusXML}
0292 DESTINATION ${KDE_INSTALL_DBUSINTERFACEDIR})
0293
0294 if(BUILD_TESTING)
0295 add_subdirectory(autotests)
0296 add_subdirectory(tests)
0297 endif()
0298
0299 ki18n_install(po)
0300
0301 feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)