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 "5.27.10") 0006 set(PROJECT_VERSION_MAJOR 5) 0007 0008 set(QT_MIN_VERSION "5.15.2") 0009 set(KF5_MIN_VERSION "5.102.0") 0010 set(KDE_COMPILERSETTINGS_LEVEL "5.82") 0011 0012 set(CMAKE_CXX_STANDARD 17) 0013 set(CMAKE_CXX_STANDARD_REQUIRED ON) 0014 0015 find_package(ECM ${KF5_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(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS DBus Widgets Quick Test) 0046 find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS 0047 Crash 0048 Declarative 0049 KCMUtils 0050 KIO 0051 GlobalAccel 0052 I18n 0053 IdleTime 0054 Notifications 0055 Solid 0056 Wayland 0057 WindowSystem 0058 XmlGui 0059 ) 0060 0061 find_package(X11) 0062 set_package_properties(X11 PROPERTIES DESCRIPTION "X11 libraries" 0063 URL "https://www.x.org" 0064 TYPE REQUIRED 0065 PURPOSE "Required for building the X11 based workspace") 0066 0067 find_package(XCB MODULE REQUIRED COMPONENTS XCB KEYSYMS XTEST) 0068 set_package_properties(XCB PROPERTIES TYPE REQUIRED) 0069 add_feature_info("XInput" X11_Xinput_FOUND "Required for grabbing XInput2 devices in the screen locker") 0070 0071 if (QT_MAJOR_VERSION EQUAL "5") 0072 find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS X11Extras) 0073 endif() 0074 0075 find_package(WaylandScanner) 0076 find_package(Wayland 1.3 COMPONENTS Client Server) 0077 find_package(LayerShellQt REQUIRED) 0078 find_package(KF5Screen REQUIRED) 0079 0080 set_package_properties(Wayland PROPERTIES 0081 TYPE REQUIRED 0082 PURPOSE "Required for building screenlocker") 0083 0084 find_package(loginctl) 0085 set_package_properties(loginctl PROPERTIES 0086 URL "https://www.freedesktop.org/software/systemd/man/loginctl.html" 0087 DESCRIPTION "Send control commands to the login manager" 0088 TYPE RUNTIME 0089 ) 0090 set(HAVE_LOGINCTL ${loginctl_FOUND}) 0091 0092 if (NOT HAVE_LOGINCTL) 0093 find_package(ConsoleKit) 0094 set_package_properties(ConsoleKit PROPERTIES 0095 URL "https://github.com/ConsoleKit2/ConsoleKit2" 0096 DESCRIPTION "Framework for tracking user login sessions" 0097 TYPE RECOMMENDED 0098 ) 0099 set(HAVE_CONSOLEKIT ${ConsoleKit_FOUND}) 0100 endif () 0101 0102 if (HAVE_LOGINCTL OR HAVE_CONSOLEKIT) 0103 set(HAVE_UNLOCK_CAPABILITY TRUE) 0104 endif () 0105 0106 add_feature_info("Unlock broken screenlocker" 0107 HAVE_UNLOCK_CAPABILITY 0108 "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.") 0109 0110 option(PAM_REQUIRED "Require building with PAM" ON) 0111 0112 include(ConfigureChecks.cmake) 0113 0114 configure_file(config-unix.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-unix.h ) 0115 0116 if (HAVE_CONSOLEKIT) 0117 configure_file(ck-unlock-session.cmake ${CMAKE_CURRENT_BINARY_DIR}/ck-unlock-session) 0118 endif () 0119 0120 # adjusting CMAKE_C_FLAGS to get wayland protocols to compile 0121 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu90") 0122 0123 ecm_setup_version(${PROJECT_VERSION} VARIABLE_PREFIX KSCREENLOCKER 0124 VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kscreenlocker_version.h" 0125 PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KScreenLockerConfigVersion.cmake" 0126 SOVERSION 5 0127 ) 0128 0129 configure_file(config-kscreenlocker.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-kscreenlocker.h) 0130 include_directories(${CMAKE_CURRENT_BINARY_DIR}) 0131 0132 set(KSLD_INCLUDEDIR "${KDE_INSTALL_INCLUDEDIR}/KScreenLocker") 0133 0134 include(ECMQtDeclareLoggingCategory) 0135 0136 ecm_set_disabled_deprecation_versions(QT 5.15.2 0137 KF 5.101 0138 ) 0139 0140 add_subdirectory(greeter) 0141 add_subdirectory(kcm) 0142 add_subdirectory(settings) 0143 0144 add_definitions(-DTRANSLATION_DOMAIN=\"kscreenlocker\") 0145 0146 set(screensaver_dbusXML dbus/org.freedesktop.ScreenSaver.xml) 0147 set(kscreensaver_dbusXML dbus/org.kde.screensaver.xml) 0148 set(powerdevilpolicyagent_xml dbus/kf5_org.kde.Solid.PowerManagement.PolicyAgent.xml) 0149 0150 set(ksld_SRCS 0151 abstractlocker.cpp 0152 ksldapp.cpp 0153 interface.cpp 0154 globalaccel.cpp 0155 x11locker.cpp 0156 waylandlocker.cpp 0157 logind.cpp 0158 waylandserver.cpp 0159 powermanagement_inhibition.cpp 0160 abstractlocker.h 0161 ksldapp.h 0162 interface.h 0163 globalaccel.h 0164 x11locker.h 0165 waylandlocker.h 0166 logind.h 0167 waylandserver.h 0168 powermanagement_inhibition.h 0169 ) 0170 0171 ecm_qt_declare_logging_category(ksld_SRCS 0172 HEADER kscreenlocker_logging.h 0173 IDENTIFIER KSCREENLOCKER 0174 CATEGORY_NAME kscreenlocker 0175 DEFAULT_SEVERITY Critical 0176 DESCRIPTION "KScreenLocker" 0177 EXPORT KSCREENLOCKER 0178 ) 0179 0180 qt_add_dbus_adaptor(ksld_SRCS ${screensaver_dbusXML} interface.h ScreenLocker::Interface) 0181 qt_add_dbus_adaptor(ksld_SRCS ${kscreensaver_dbusXML} interface.h ScreenLocker::Interface kscreensaveradaptor KScreenSaverAdaptor) 0182 qt_add_dbus_interface(ksld_SRCS ${powerdevilpolicyagent_xml} powerdevilpolicyagent) 0183 0184 ecm_add_wayland_server_protocol(ksld_SRCS 0185 PROTOCOL protocols/ksld.xml 0186 BASENAME ksld 0187 ) 0188 0189 add_library(KScreenLocker SHARED ${ksld_SRCS}) 0190 0191 target_link_libraries(KScreenLocker 0192 PUBLIC 0193 Qt::Core 0194 PRIVATE 0195 settings 0196 Qt::DBus 0197 KF5::I18n 0198 KF5::IdleTime 0199 KF5::GlobalAccel 0200 KF5::Notifications 0201 KF5::CoreAddons 0202 KF5::ConfigGui 0203 KF5::Package 0204 KF5::WindowSystem 0205 KF5::XmlGui 0206 X11::X11 0207 XCB::XCB 0208 XCB::KEYSYMS 0209 Wayland::Server 0210 ) 0211 if (QT_MAJOR_VERSION EQUAL "5") 0212 target_link_libraries(KScreenLocker PUBLIC Qt5::X11Extras) 0213 else() 0214 target_link_libraries(KScreenLocker PRIVATE Qt::GuiPrivate) 0215 endif() 0216 0217 set(kscreenlocker_greet_bin_abs ${CMAKE_INSTALL_FULL_LIBEXECDIR}/kscreenlocker_greet) 0218 # The file path of kscreenlocker_greet must be relative to the KScreenLocker library. 0219 file(RELATIVE_PATH kscreenlocker_greet_bin_rel ${CMAKE_INSTALL_FULL_LIBDIR} ${kscreenlocker_greet_bin_abs}) 0220 target_compile_definitions(KScreenLocker PRIVATE 0221 KSCREENLOCKER_GREET_BIN_ABS="${kscreenlocker_greet_bin_abs}" 0222 KSCREENLOCKER_GREET_BIN_REL="${kscreenlocker_greet_bin_rel}" 0223 ) 0224 0225 if (X11_Xinput_FOUND) 0226 target_link_libraries(KScreenLocker PRIVATE X11::Xi) 0227 endif() 0228 0229 target_include_directories(KScreenLocker INTERFACE "$<INSTALL_INTERFACE:${KSLD_INCLUDEDIR}>") 0230 0231 # Needed to compile on Arm target. 0232 set_target_properties(KScreenLocker PROPERTIES COMPILE_FLAGS "-fPIC") 0233 0234 add_library(PW::KScreenLocker ALIAS KScreenLocker) 0235 0236 # add clang-format target for all our real source files 0237 file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h *.c) 0238 kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES}) 0239 kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT) 0240 0241 generate_export_header(KScreenLocker 0242 BASE_NAME KScreenLocker 0243 EXPORT_MACRO_NAME KSCREENLOCKER_EXPORT 0244 EXPORT_FILE_NAME KScreenLocker/kscreenlocker_export.h 0245 ) 0246 0247 configure_package_config_file(ScreenSaverDBusInterfaceConfig.cmake.in 0248 ${CMAKE_CURRENT_BINARY_DIR}/ScreenSaverDBusInterfaceConfig.cmake 0249 PATH_VARS KDE_INSTALL_DBUSINTERFACEDIR 0250 INSTALL_DESTINATION "${KDE_INSTALL_CMAKEPACKAGEDIR}/ScreenSaverDBusInterface") 0251 0252 set_target_properties(KScreenLocker PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}) 0253 0254 install(FILES 0255 ${CMAKE_CURRENT_BINARY_DIR}/ScreenSaverDBusInterfaceConfig.cmake 0256 DESTINATION "${KDE_INSTALL_CMAKEPACKAGEDIR}/ScreenSaverDBusInterface") 0257 0258 configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/KScreenLockerConfig.cmake.in" 0259 "${CMAKE_CURRENT_BINARY_DIR}/KScreenLockerConfig.cmake" 0260 PATH_VARS KDE_INSTALL_DBUSINTERFACEDIR 0261 INSTALL_DESTINATION "${KDE_INSTALL_CMAKEPACKAGEDIR}/KScreenLocker") 0262 0263 if (HAVE_CONSOLEKIT) 0264 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/ck-unlock-session DESTINATION ${KDE_INSTALL_BINDIR}) 0265 endif () 0266 0267 install(TARGETS KScreenLocker EXPORT KScreenLockerTargets ${KDE_INSTALL_TARGETS_DEFAULT_ARGS} LIBRARY) 0268 install(EXPORT KScreenLockerTargets DESTINATION "${KDE_INSTALL_CMAKEPACKAGEDIR}/KScreenLocker" FILE KScreenLockerTargets.cmake NAMESPACE PW::) 0269 0270 ecm_generate_headers(KScreenLocker_CamelCase_HEADERS 0271 HEADER_NAMES 0272 KsldApp 0273 REQUIRED_HEADERS KScreenLocker_HEADERS) 0274 0275 install( 0276 FILES 0277 ${CMAKE_CURRENT_BINARY_DIR}/KScreenLocker/kscreenlocker_export.h 0278 ${KScreenLocker_CamelCase_HEADERS} 0279 ${KScreenLocker_HEADERS} 0280 DESTINATION 0281 ${KSLD_INCLUDEDIR}/KScreenLocker 0282 COMPONENT Devel) 0283 0284 install(FILES "${CMAKE_CURRENT_BINARY_DIR}/KScreenLockerConfig.cmake" 0285 "${CMAKE_CURRENT_BINARY_DIR}/KScreenLockerConfigVersion.cmake" 0286 DESTINATION "${KDE_INSTALL_CMAKEPACKAGEDIR}/KScreenLocker" 0287 COMPONENT Devel) 0288 0289 ecm_qt_install_logging_categories( 0290 EXPORT KSCREENLOCKER 0291 FILE kscreenlocker.categories 0292 DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR} 0293 ) 0294 0295 install(FILES kscreenlocker.notifyrc DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR} RENAME ksmserver.notifyrc) 0296 install(FILES ${screensaver_dbusXML} 0297 DESTINATION ${KDE_INSTALL_DBUSINTERFACEDIR} 0298 RENAME kf5_org.freedesktop.ScreenSaver.xml) 0299 0300 install(FILES ${kscreensaver_dbusXML} 0301 DESTINATION ${KDE_INSTALL_DBUSINTERFACEDIR}) 0302 0303 0304 install(FILES updaters/kscreenlocker.upd DESTINATION ${KDE_INSTALL_DATADIR}/kconf_update) 0305 install(PROGRAMS updaters/ksreenlocker_5_3_separate_autologin.pl 0306 DESTINATION ${KDE_INSTALL_DATADIR}/kconf_update) 0307 0308 if(BUILD_TESTING) 0309 add_subdirectory(autotests) 0310 add_subdirectory(tests) 0311 endif() 0312 0313 ki18n_install(po) 0314 0315 feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)