cf12defd28
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
228 lines
9.7 KiB
CMake
228 lines
9.7 KiB
CMake
####### checks for kdecore/kauth ###############
|
|
|
|
set(KAUTH_BACKEND_NAME "" CACHE STRING "Specifies the KAuth backend to build. Current available options are
|
|
PolkitQt6-1, Fake, OSX. Not setting this variable will build the most
|
|
appropriate backend for your system")
|
|
|
|
# Case-insensitive
|
|
string(TOUPPER "${KAUTH_BACKEND_NAME}" KAUTH_BACKEND_NAME)
|
|
|
|
set(KAUTH_BACKEND ${KAUTH_BACKEND_NAME})
|
|
|
|
set(POLKITQT_MIN_VERSION 0.112.0 PARENT_SCOPE)
|
|
|
|
## Check if the user did not specify a backend to be built. If that is the case,
|
|
## we check what is the best backend to build on this system.
|
|
if(NOT KAUTH_BACKEND)
|
|
# Look for the most appropriate backend
|
|
message(STATUS "No backend for KAuth was explicitly specified: probing system to find the best one available")
|
|
if(APPLE)
|
|
set(KAUTH_BACKEND "OSX")
|
|
elseif(UNIX)
|
|
find_package(PolkitQt6-1 ${POLKITQT_MIN_VERSION})
|
|
|
|
if(PolkitQt6-1_FOUND)
|
|
set(KAUTH_BACKEND "POLKITQT6-1")
|
|
|
|
set_package_properties(PolkitQt6-1 PROPERTIES
|
|
URL "http://techbase.kde.org/Polkit-Qt-1"
|
|
DESCRIPTION "PolicyKit API for Qt"
|
|
TYPE RECOMMENDED
|
|
PURPOSE "Support for executing privileged actions in a controlled way (KAuth)"
|
|
)
|
|
|
|
find_package(KF6WindowSystem ${KF_DEP_VERSION} REQUIRED)
|
|
else()
|
|
set(KAUTH_BACKEND "FAKE")
|
|
endif()
|
|
else()
|
|
set(KAUTH_BACKEND "FAKE")
|
|
endif()
|
|
|
|
elseif(KAUTH_BACKEND AND NOT KAUTH_BUILD_CODEGENERATOR_ONLY)
|
|
# Check if the specified backend is valid. If it is not, we fall back to the FAKE one
|
|
if(NOT KAUTH_BACKEND STREQUAL "OSX"
|
|
AND NOT KAUTH_BACKEND STREQUAL "POLKITQT6-1"
|
|
AND NOT KAUTH_BACKEND STREQUAL "FAKE")
|
|
message("WARNING: The KAuth Backend ${KAUTH_BACKEND} you specified does not exist. Falling back to Fake backend")
|
|
set(KAUTH_BACKEND "FAKE")
|
|
endif()
|
|
|
|
# Check requirements for each backend. If not, fall back to the fake one
|
|
if(KAUTH_BACKEND STREQUAL "OSX" AND NOT APPLE)
|
|
message("WARNING: You chose the OSX KAuth backend but your system does not support it. Falling back to Fake backend")
|
|
set(KAUTH_BACKEND "FAKE")
|
|
endif()
|
|
|
|
if(KAUTH_BACKEND STREQUAL "POLKITQT6-1")
|
|
find_package(PolkitQt6-1 ${POLKITQT_MIN_VERSION})
|
|
set_package_properties(PolkitQt6-1 PROPERTIES
|
|
URL "http://techbase.kde.org/Polkit-Qt-1"
|
|
DESCRIPTION "PolicyKit API for Qt"
|
|
TYPE RECOMMENDED
|
|
PURPOSE "Support for executing privileged actions in a controlled way (KAuth). This is required to make KAuth work, and hence enable certain workspace functionalities"
|
|
)
|
|
|
|
if(NOT PolkitQt6-1_FOUND)
|
|
message("WARNING: You chose the PolkitQt6-1 KAuth backend but you don't have PolkitQt6-1 installed.
|
|
Falling back to Fake backend")
|
|
set(KAUTH_BACKEND "FAKE")
|
|
else()
|
|
find_package(KF6WindowSystem ${KF_DEP_VERSION} REQUIRED)
|
|
find_package(Qt6DBus ${REQUIRED_QT_VERSION} CONFIG REQUIRED)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
set(KAUTH_BACKEND_NAME ${KAUTH_BACKEND} CACHE STRING "Specifies the KAuth backend to build. Current available options are
|
|
PolkitQt6-1, Fake, OSX. Not setting this variable will build the most
|
|
appropriate backend for your system" FORCE)
|
|
|
|
# Add the correct libraries depending on the backend, and eventually set the policy files install location
|
|
if(KAUTH_BACKEND_NAME STREQUAL "OSX")
|
|
find_library(CORE_FOUNDATION_LIBRARY CoreFoundation)
|
|
find_library(SECURITY_LIBRARY Security)
|
|
|
|
message(STATUS "Building OSX KAuth backend")
|
|
|
|
set(KAUTH_BACKEND_SRCS
|
|
backends/mac/AuthServicesBackend.cpp
|
|
)
|
|
|
|
set(KAUTH_BACKEND_LIBS ${SECURITY_LIBRARY} Qt6::Core KF6::AuthCore)
|
|
elseif(KAUTH_BACKEND_NAME STREQUAL "POLKITQT6-1")
|
|
message(STATUS "Building PolkitQt6-1 KAuth backend")
|
|
|
|
include_directories(SYSTEM ${POLKITQT-1_INCLUDE_DIR})
|
|
|
|
set(KAUTH_BACKEND_SRCS
|
|
backends/polkit-1/Polkit1Backend.cpp
|
|
)
|
|
|
|
set(KAUTH_BACKEND_LIBS ${POLKITQT-1_CORE_LIBRARY} Qt6::DBus Qt6::Gui KF6::AuthCore KF6::WindowSystem)
|
|
|
|
# POLKITQT-1_POLICY_FILES_INSTALL_DIR has an absolute pathname, fix that.
|
|
if(PolkitQt6-1_FOUND)
|
|
string(REPLACE ${POLKITQT-1_INSTALL_DIR}
|
|
${CMAKE_INSTALL_PREFIX} _KAUTH_POLICY_FILES_INSTALL_DIR
|
|
${POLKITQT-1_POLICY_FILES_INSTALL_DIR})
|
|
endif()
|
|
|
|
set(KAUTH_POLICY_FILES_INSTALL_DIR ${_KAUTH_POLICY_FILES_INSTALL_DIR} CACHE STRING
|
|
"Where policy files generated by KAuth will be installed" FORCE)
|
|
elseif(KAUTH_BACKEND_NAME STREQUAL "FAKE")
|
|
set(KAUTH_COMPILING_FAKE_BACKEND TRUE)
|
|
|
|
message(STATUS "Building Fake KAuth backend")
|
|
message("WARNING: No valid KAuth backends will be built. The library will not work properly unless compiled with
|
|
a working backend")
|
|
endif()
|
|
|
|
# KAuth policy generator executable source probing
|
|
set(KAUTH_POLICY_GEN_SRCS
|
|
policy-gen/policy-gen.cpp)
|
|
set(KAUTH_POLICY_GEN_LIBRARIES)
|
|
|
|
if(KAUTH_BACKEND_NAME STREQUAL "OSX")
|
|
set(KAUTH_POLICY_GEN_SRCS ${KAUTH_POLICY_GEN_SRCS}
|
|
backends/mac/kauth-policy-gen-mac.cpp)
|
|
set(KAUTH_POLICY_GEN_LIBRARIES ${KAUTH_POLICY_GEN_LIBRARIES} ${CORE_FOUNDATION_LIBRARY} ${SECURITY_LIBRARY} Qt6::Core)
|
|
elseif(KAUTH_BACKEND_NAME STREQUAL "POLKITQT6-1")
|
|
set(KAUTH_POLICY_GEN_SRCS ${KAUTH_POLICY_GEN_SRCS}
|
|
backends/polkit-1/kauth-policy-gen-polkit1.cpp)
|
|
set(KAUTH_POLICY_GEN_LIBRARIES ${KAUTH_POLICY_GEN_LIBRARIES}
|
|
Qt6::Core)
|
|
endif()
|
|
|
|
########################
|
|
# Helper backend probing
|
|
|
|
set(KAUTH_HELPER_BACKEND_NAME "" CACHE STRING "Specifies the KAuth helper backend to build. Current available options are
|
|
DBus, Fake. Not setting this variable will build the most appropriate backend for your system")
|
|
|
|
set(KAUTH_HELPER_BACKEND ${KAUTH_HELPER_BACKEND_NAME})
|
|
|
|
if(NOT KAUTH_HELPER_BACKEND)
|
|
# No checks needed, just set the dbus backend
|
|
set(KAUTH_HELPER_BACKEND "DBus")
|
|
string(TOUPPER ${KAUTH_HELPER_BACKEND} KAUTH_HELPER_BACKEND_UPPER)
|
|
set(KAUTH_HELPER_BACKEND ${KAUTH_HELPER_BACKEND_UPPER})
|
|
else()
|
|
# No checks needed here either
|
|
string(TOUPPER ${KAUTH_HELPER_BACKEND} KAUTH_HELPER_BACKEND_UPPER)
|
|
set(KAUTH_HELPER_BACKEND ${KAUTH_HELPER_BACKEND_UPPER})
|
|
endif()
|
|
|
|
set(KAUTH_HELPER_BACKEND_NAME ${KAUTH_HELPER_BACKEND} CACHE STRING "Specifies the KAuth helper backend to build. Current
|
|
available options are DBus, Fake. Not setting this variable will
|
|
build the most appropriate backend for your system" FORCE)
|
|
|
|
# Add the correct libraries/files depending on the backend
|
|
if(KAUTH_HELPER_BACKEND_NAME STREQUAL "DBUS")
|
|
qt_add_dbus_adaptor(kauth_dbus_adaptor_SRCS
|
|
backends/dbus/org.kde.kf6auth.xml
|
|
backends/dbus/DBusHelperProxy.h
|
|
KAuth::DBusHelperProxy)
|
|
|
|
set(KAUTH_HELPER_BACKEND_SRCS
|
|
backends/dbus/DBusHelperProxy.cpp
|
|
${kauth_dbus_adaptor_SRCS}
|
|
)
|
|
|
|
set(KAUTH_HELPER_BACKEND_LIBS Qt6::DBus KF6::AuthCore)
|
|
|
|
# Install some files as well
|
|
install(FILES backends/dbus/org.kde.kf6auth.conf
|
|
DESTINATION ${KDE_INSTALL_DBUSDIR}/system.d)
|
|
|
|
install(FILES backends/dbus/dbus_policy.stub
|
|
backends/dbus/dbus_service.stub
|
|
DESTINATION ${KDE_INSTALL_DATADIR_KF}/kauth COMPONENT Devel)
|
|
elseif(KAUTH_HELPER_BACKEND_NAME STREQUAL "FAKE")
|
|
message("WARNING: No valid KAuth helper backends will be built. The library will not work properly unless compiled with
|
|
a working backend")
|
|
endif()
|
|
|
|
# Set directories for plugins
|
|
if(NOT WIN32)
|
|
|
|
# ###
|
|
# WARNING Copied from KDE4Internal. Decide whether this should be fixed in
|
|
# CMake or in ECM:
|
|
# ###
|
|
|
|
# This macro implements some very special logic how to deal with the cache.
|
|
# By default the various install locations inherit their value from their "parent" variable
|
|
# so if you set CMAKE_INSTALL_PREFIX, then EXEC_INSTALL_PREFIX, PLUGIN_INSTALL_DIR will
|
|
# calculate their value by appending subdirs to CMAKE_INSTALL_PREFIX .
|
|
# This would work completely without using the cache.
|
|
# But if somebody wants e.g. a different EXEC_INSTALL_PREFIX this value has to go into
|
|
# the cache, otherwise it will be forgotten on the next cmake run.
|
|
# Once a variable is in the cache, it doesn't depend on its "parent" variables
|
|
# anymore and you can only change it by editing it directly.
|
|
# this macro helps in this regard, because as long as you don't set one of the
|
|
# variables explicitly to some location, it will always calculate its value from its
|
|
# parents. So modifying CMAKE_INSTALL_PREFIX later on will have the desired effect.
|
|
# But once you decide to set e.g. EXEC_INSTALL_PREFIX to some special location
|
|
# this will go into the cache and it will no longer depend on CMAKE_INSTALL_PREFIX.
|
|
#
|
|
# additionally if installing to the same location as kdelibs, the other install
|
|
# directories are reused from the installed kdelibs
|
|
macro(_SET_FANCY _var _value _comment)
|
|
set(predefinedvalue "${_value}")
|
|
if(NOT DEFINED ${_var})
|
|
set(${_var} ${predefinedvalue})
|
|
else()
|
|
set(${_var} "${${_var}}" CACHE PATH "${_comment}")
|
|
endif()
|
|
endmacro()
|
|
_set_fancy(KAUTH_HELPER_PLUGIN_DIR "kf6/kauth/helper" "Where KAuth's helper plugin will be installed")
|
|
_set_fancy(KAUTH_BACKEND_PLUGIN_DIR "kf6/kauth/backend" "Where KAuth's backend plugin will be installed")
|
|
#set(KAUTH_OTHER_PLUGIN_DIR "${QT_PLUGINS_DIR}/kauth/plugins")
|
|
else()
|
|
set(KAUTH_HELPER_PLUGIN_DIR "kf6/kauth/helper")
|
|
set(KAUTH_BACKEND_PLUGIN_DIR "kf6/kauth/backend")
|
|
endif()
|
|
|
|
## End
|