build: add elogind support

Checking the uid of the user seat also works if elogind is used. Add
this as an option to the build and make it mutually exclusive with
enabling systemd.
This commit is contained in:
Dudemanguy 2024-12-20 10:53:28 -06:00 committed by Simon McVittie
parent a2ca9bc228
commit 79e7e69aaa
4 changed files with 25 additions and 1 deletions

View file

@ -42,6 +42,10 @@
#include <systemd/sd-login.h>
#endif
#ifdef HAVE_ELOGIND
#include <elogind/sd-login.h>
#endif
/**
* @addtogroup DBusInternalsUtils
* @{
@ -67,7 +71,7 @@ dbus_bool_t
_dbus_is_console_user (dbus_uid_t uid,
DBusError *error)
{
#ifdef HAVE_SYSTEMD
#if defined(HAVE_SYSTEMD) || defined(HAVE_ELOGIND)
/* check if we have logind */
if (access ("/run/systemd/seats/", F_OK) >= 0)
{

View file

@ -24,6 +24,7 @@ dbus_dependencies = [
adt_libs,
network_libs,
systemd,
elogind,
valgrind.partial_dependency(compile_args: true),
]

View file

@ -535,6 +535,17 @@ else
endif
data_config.set('SYSTEMCTL', systemctl)
elogind_opt = get_option('elogind')
if use_systemd
if elogind_opt.enabled()
error('-Dsystemd and -Delogind are mutually exclusive')
endif
elogind = dependency('', required: false)
else
elogind = dependency('libelogind', version: '>=209', required: elogind_opt)
endif
use_elogind = elogind.found()
config.set('HAVE_ELOGIND', use_elogind)
use_traditional_activation = message_bus and get_option('traditional_activation')
@ -1378,6 +1389,7 @@ summary_dict += {
'Building inotify support': use_inotify,
'Building kqueue support': use_kqueue,
'Building systemd support': use_systemd,
'Building elogind support': use_elogind,
'Traditional activation': use_traditional_activation,
'Building X11 code': config.get('DBUS_BUILD_X11'),
'Building Doxygen docs': doxygen.found(),

View file

@ -95,6 +95,13 @@ option(
description: 'Enable tests that require insecure extra code in the library and binaries'
)
option(
'elogind',
type: 'feature',
value: 'disabled',
description: 'Use elogind for detecting user sessions'
)
option(
'epoll',
type: 'feature',