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.0") 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)