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)