. add -Dsystemd=false option (uses elogind instead) . when -Dsystemd=false, do not build gnome-session-ctl and gnome-session-init-worker --- data/meson.build | 106 +++++++++++++++++++++++++-------------------- gnome-session/meson.build | 29 ++++++++------- meson.build | 37 ++++++++++++------ meson_options.txt | 1 + tools/meson.build | 6 +++- 5 files changed, 100 insertions(+), 79 deletions(-) --- a/data/meson.build +++ b/data/meson.build @@ -15,64 +15,66 @@ install_dir: session_datadir / 'wayland-sessions', ) -# Next, let's install the necessary systemd scaffolding +if get_option('systemd') + # Next, let's install the necessary systemd scaffolding -install_data( - 'gnome.session.conf', - install_dir: systemd_userunitdir / 'gnome-session@gnome.target.d', -) - -systemd_service = [ - 'gnome-session-manager@.service', - 'gnome-session-signal-init.service', - 'gnome-session-restart-dbus.service', - 'gnome-session-monitor.service', -] - -foreach service: systemd_service - configure_file( - input: service + '.in', - output: service, - install: true, - install_dir: systemd_userunitdir, - configuration: { - 'libexecdir': session_libexecdir, - }, + install_data( + 'gnome.session.conf', + install_dir: systemd_userunitdir / 'gnome-session@gnome.target.d', ) -endforeach -systemd_target = [ - 'gnome-session@.target', - 'gnome-session.target', - 'gnome-session-basic-services.target', - 'gnome-session-services.target', - 'gnome-session-pre.target', - 'gnome-session-manager.target', - 'gnome-session-initialized.target', - 'gnome-session-shutdown.target', - 'gnome-session-x11-services.target', - 'gnome-session-x11-services-ready.target', -] - -install_data( - systemd_target, - install_dir: systemd_userunitdir -) + systemd_service = [ + 'gnome-session-manager@.service', + 'gnome-session-signal-init.service', + 'gnome-session-restart-dbus.service', + 'gnome-session-monitor.service', + ] + + foreach service: systemd_service + configure_file( + input: service + '.in', + output: service, + install: true, + install_dir: systemd_userunitdir, + configuration: { + 'libexecdir': session_libexecdir, + }, + ) + endforeach + + systemd_target = [ + 'gnome-session@.target', + 'gnome-session.target', + 'gnome-session-basic-services.target', + 'gnome-session-services.target', + 'gnome-session-pre.target', + 'gnome-session-manager.target', + 'gnome-session-initialized.target', + 'gnome-session-shutdown.target', + 'gnome-session-x11-services.target', + 'gnome-session-x11-services-ready.target', + ] + + install_data( + systemd_target, + install_dir: systemd_userunitdir + ) -# Install resource limits that are applied to GNOME-launched apps + # Install resource limits that are applied to GNOME-launched apps -install_data( - 'app-override.scope.conf', - rename: 'override.conf', - install_dir : join_paths(systemd_userunitdir, 'app-gnome-.scope.d') -) + install_data( + 'app-override.scope.conf', + rename: 'override.conf', + install_dir : join_paths(systemd_userunitdir, 'app-gnome-.scope.d') + ) -# FIXME: https://github.com/systemd/systemd/issues/37104 -install_data( - 'app-override.scope.conf', - rename: 'override.conf', - install_dir : join_paths(systemd_userunitdir, 'app-flatpak-.scope.d') -) + # FIXME: https://github.com/systemd/systemd/issues/37104 + install_data( + 'app-override.scope.conf', + rename: 'override.conf', + install_dir : join_paths(systemd_userunitdir, 'app-flatpak-.scope.d') + ) +endif # Install some other misc. configuration files --- a/gnome-session/meson.build +++ b/gnome-session/meson.build @@ -19,20 +19,23 @@ install_dir: session_bindir ) -sources = files( - 'gsm-util.c', - 'leader-systemd.c', -) +# Without systemd you must supply your own leader. +if get_option('systemd') + sources = files( + 'gsm-util.c', + 'leader-systemd.c', + ) -executable( - meson.project_name() + '-init-worker', - sources, - include_directories: top_inc, - dependencies: session_bin_deps, - c_args: cflags, - install: true, - install_dir: session_libexecdir -) + executable( + meson.project_name() + '-init-worker', + sources, + include_directories: top_inc, + dependencies: session_bin_deps, + c_args: cflags, + install: true, + install_dir: session_libexecdir + ) +endif sources = files( 'gsm-app.c', --- a/meson.build +++ b/meson.build @@ -86,20 +86,30 @@ dependency('gnome-desktop-4'), ] -libsystemd_dep = dependency('libsystemd', version: '>= 209', required: true) -config_h.set('SYSTEMD_STRICT_ENV', - libsystemd_dep.version().version_compare('< 248')) - -session_bin_deps = session_deps + [ - libsystemd_dep, - dependency('gio-unix-2.0', version: glib_req_version), -] +if get_option('systemd') + libsystemd_dep = dependency('libsystemd', version: '>= 209', required: true) + config_h.set('SYSTEMD_STRICT_ENV', + libsystemd_dep.version().version_compare('< 248')) + + session_bin_deps = session_deps + [ + libsystemd_dep, + dependency('gio-unix-2.0', version: glib_req_version), + ] + + systemd_userunitdir = get_option('systemduserunitdir') + if systemd_userunitdir == '' + systemd_dep = dependency('systemd', version: '>= 242', required: true) + systemd_userunitdir = systemd_dep.get_variable(pkgconfig: 'systemduserunitdir', + pkgconfig_define: ['prefix', session_prefix]) + endif +else + # elogind implements the logind API that gnome-session actually uses. + session_bin_deps = session_deps + [ + dependency('libelogind', version: '>= 209', required: true), + dependency('gio-unix-2.0', version: glib_req_version), + ] -systemd_userunitdir = get_option('systemduserunitdir') -if systemd_userunitdir == '' - systemd_dep = dependency('systemd', version: '>= 242', required: true) - systemd_userunitdir = systemd_dep.get_variable(pkgconfig: 'systemduserunitdir', - pkgconfig_define: ['prefix', session_prefix]) + systemd_userunitdir = '' endif configure_file( @@ -130,6 +140,7 @@ 'Use *_DISABLE_DEPRECATED': get_option('deprecation_flags'), 'Build Docbook': get_option('docbook'), 'Build manpages': get_option('man'), + 'Systemd Integration': get_option('systemd'), 'Systemd Units Directory': systemd_userunitdir, } --- a/meson_options.txt +++ b/meson_options.txt @@ -1,4 +1,5 @@ option('deprecation_flags', type: 'boolean', value: false, description: 'use *_DISABLE_DEPRECATED flags') +option('systemd', type: 'boolean', value: true, description: 'systemd integration: leader, ctl and unit files') option('systemduserunitdir', type: 'string', description: 'Directory for systemd user service files') option('docbook', type: 'boolean', value: true, description: 'build documentation') option('man', type: 'boolean', value: true, description: 'build documentation (requires xmlto)') --- a/tools/meson.build +++ b/tools/meson.build @@ -1,10 +1,14 @@ programs = [ # name, deps, install_dir - ['gnome-session-ctl', session_bin_deps, session_libexecdir], ['gnome-session-inhibit', session_deps, session_bindir], ['gnome-session-quit', session_deps, session_bindir], ] +# Without systemd you must supply your own gnome-session-ctl. +if get_option('systemd') + programs += [['gnome-session-ctl', session_bin_deps, session_libexecdir]] +endif + foreach program: programs executable( program[0], -- 2.51.0