From ab8893f12c925050aceea4e31dd84aef674c6e9f Mon Sep 17 00:00:00 2001
From: Dudemanguy <random342@airmail.cc>
Date: Wed, 7 Oct 2020 10:08:33 -0500
Subject: [PATCH 1/1] meson: add elogind support
systemd session management (AKA logind) works with elogind. Just add an
option to enable elogind and modify the defines a little bit to get it
to build with systemd session management support.
---
data/meson.build | 2 +-
gnome-session/gsm-autostart-app.c | 2 +-
gnome-session/gsm-manager.c | 4 ++--
gnome-session/gsm-systemd.c | 2 +-
gnome-session/gsm-util.c | 4 ++--
gnome-session/gsm-util.h | 2 +-
gnome-session/main.c | 4 ++--
meson.build | 15 +++++++++++++--
meson_options.txt | 1 +
9 files changed, 24 insertions(+), 12 deletions(-)
diff --git a/data/meson.build b/data/meson.build
index f6d264f8..ad04e6bc 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -120,7 +120,7 @@ install_data(
install_dir: join_paths(session_datadir, 'GConf', 'gsettings')
)
-if enable_systemd_session
+if enable_systemd_session and enable_systemd
unit_conf = configuration_data()
unit_conf.set('libexecdir', session_libexecdir)
diff --git a/gnome-session/gsm-autostart-app.c b/gnome-session/gsm-autostart-app.c
index 8204d4f1..244a325f 100644
--- a/gnome-session/gsm-autostart-app.c
+++ b/gnome-session/gsm-autostart-app.c
@@ -31,7 +31,7 @@
#define GNOME_DESKTOP_USE_UNSTABLE_API
#include <libgnome-desktop/gnome-systemd.h>
-#ifdef HAVE_SYSTEMD
+#if defined(HAVE_SYSTEMD) || defined(HAVE_ELOGIND)
#ifdef ENABLE_SYSTEMD_JOURNAL
#include <systemd/sd-journal.h>
#endif
diff --git a/gnome-session/gsm-manager.c b/gnome-session/gsm-manager.c
index 1b88b266..8dfd23fe 100644
--- a/gnome-session/gsm-manager.c
+++ b/gnome-session/gsm-manager.c
@@ -974,7 +974,7 @@ _client_stop (const char *id,
return FALSE;
}
-#ifdef HAVE_SYSTEMD
+#if defined(HAVE_SYSTEMD) || defined(HAVE_ELOGIND)
static void
maybe_restart_user_bus (GsmManager *manager)
{
@@ -1020,7 +1020,7 @@ do_phase_exit (GsmManager *manager)
NULL);
}
-#ifdef HAVE_SYSTEMD
+#if defined(HAVE_SYSTEMD) || defined(HAVE_ELOGIND)
if (!priv->systemd_managed)
maybe_restart_user_bus (manager);
#endif
diff --git a/gnome-session/gsm-systemd.c b/gnome-session/gsm-systemd.c
index cf30a4bd..d25ca83c 100644
--- a/gnome-session/gsm-systemd.c
+++ b/gnome-session/gsm-systemd.c
@@ -21,7 +21,7 @@
#include "config.h"
#include "gsm-systemd.h"
-#ifdef HAVE_SYSTEMD
+#if defined(HAVE_SYSTEMD) || defined(HAVE_ELOGIND)
#include <errno.h>
#include <string.h>
diff --git a/gnome-session/gsm-util.c b/gnome-session/gsm-util.c
index f1e6489d..607395c8 100644
--- a/gnome-session/gsm-util.c
+++ b/gnome-session/gsm-util.c
@@ -626,7 +626,7 @@ gsm_util_export_activation_environment (GError **error)
return environment_updated;
}
-#ifdef HAVE_SYSTEMD
+#if defined(HAVE_SYSTEMD) || defined(HAVE_ELOGIND)
gboolean
gsm_util_export_user_environment (GError **error)
{
@@ -839,7 +839,7 @@ gsm_util_setenv (const char *variable,
g_clear_error (&error);
}
-#ifdef HAVE_SYSTEMD
+#if defined(HAVE_SYSTEMD) || defined(HAVE_ELOGIND)
/* If this fails, the system user session won't get the updated environment
*/
if (!gsm_util_update_user_environment (variable, value, &error)) {
diff --git a/gnome-session/gsm-util.h b/gnome-session/gsm-util.h
index bc26a21e..97289c02 100644
--- a/gnome-session/gsm-util.h
+++ b/gnome-session/gsm-util.h
@@ -53,7 +53,7 @@ const char * const * gsm_util_listenv (void);
const char * const * gsm_util_get_variable_blacklist(void);
gboolean gsm_util_export_activation_environment (GError **error);
-#ifdef HAVE_SYSTEMD
+#if defined(HAVE_SYSTEMD) || defined(HAVE_ELOGIND)
gboolean gsm_util_export_user_environment (GError **error);
gboolean gsm_util_start_systemd_unit (const char *unit,
const char *mode,
diff --git a/gnome-session/main.c b/gnome-session/main.c
index a460a849..65bc9721 100644
--- a/gnome-session/main.c
+++ b/gnome-session/main.c
@@ -541,7 +541,7 @@ main (int argc, char **argv)
session_name = opt_session_name;
-#ifdef HAVE_SYSTEMD
+#if defined(HAVE_SYSTEMD) || defined(HAVE_ELOGIND)
gsm_util_export_user_environment (&error);
if (error && !g_getenv ("RUNNING_UNDER_GDM")) {
g_warning ("Failed to upload environment to systemd: %s", error->message);
@@ -624,7 +624,7 @@ main (int argc, char **argv)
gsm_main ();
-#ifdef HAVE_SYSTEMD
+#if defined(HAVE_SYSTEMD) || defined(HAVE_ELOGIND)
gsm_util_export_user_environment (NULL);
#endif
diff --git a/meson.build b/meson.build
index f56aa316..b29860b1 100644
--- a/meson.build
+++ b/meson.build
@@ -119,7 +119,8 @@ enable_systemd_session = get_option('systemd_session') != 'disable'
use_systemd_session = get_option('systemd_session') == 'default'
enable_systemd_journal = get_option('systemd_journal')
enable_consolekit = get_option('consolekit')
-if enable_systemd or enable_consolekit
+enable_elogind = get_option('elogind')
+if enable_systemd or enable_consolekit or enable_elogind
session_bin_deps += dependency('gio-unix-2.0', version: glib_req_version)
# Check for systemd
@@ -161,14 +162,24 @@ if enable_systemd or enable_consolekit
session_tracking = 'ConsoleKit'
endif
endif
+
+ # Check for elogind
+ if enable_elogind
+ elogind_dep = dependency('libelogind', version: '>= 209')
+ session_bin_deps += elogind_dep
+
+ session_tracking = 'elogind'
+ endif
+
endif
if enable_systemd_session
- assert(enable_systemd, 'Systemd support must be enabled when using systemd session management')
+ assert(enable_systemd or enable_elogind, 'Systemd or elogind support must be enabled when using systemd session management')
endif
config_h.set('HAVE_SYSTEMD', enable_systemd)
config_h.set('ENABLE_SYSTEMD_SESSION', enable_systemd_session)
config_h.set('ENABLE_SYSTEMD_JOURNAL', enable_systemd_journal)
config_h.set('HAVE_CONSOLEKIT', enable_consolekit)
+config_h.set('HAVE_ELOGIND', enable_elogind)
config_h.set10('USE_SYSTEMD_SESSION', use_systemd_session)
configure_file(
diff --git a/meson_options.txt b/meson_options.txt
index 4c05dc6e..4a27c7fd 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -3,6 +3,7 @@ option('session_selector', type: 'boolean', value: false, description: 'enable b
option('systemd', type: 'boolean', value: true, description: 'Use systemd')
option('systemd_session', type: 'combo', choices: ['disable', 'enable', 'default'], value: 'default', description: 'Whether to include systemd session support and use it by default')
option('systemd_journal', type: 'boolean', value:'true', description: 'Send log to systemd-journal')
+option('elogind', type: 'boolean', value: false, description: 'Use elogind')
option('consolekit', type: 'boolean', value: false, description: 'Use consolekit')
option('docbook', type: 'boolean', value: true, description: 'build documentation')
option('man', type: 'boolean', value: true, description: 'build documentation (requires xmlto)')
--
2.34.1
|