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)