[gnome-session] data: Leave to meson the duty of keeping the lists in sync



commit dd2ffb3d21bbed59b73000ab0e92945e74c6161a
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date:   Mon Aug 31 16:38:44 2020 +0200

    data: Leave to meson the duty of keeping the lists in sync
    
    Don't leave to humans what machines can do, the gnome.session.desktop.in.in
    is filled with an hard-to-maintain single-line semicolon separated list of
    components, that then are repeated in the gnome systemd gnome.session.conf.
    And these are meant to be kept in sync.
    
    Meson can help us in this, so let's just keep a single list in meson and
    use it to generate the various formats we need.
    
    Using a map to keep the components so that this can be easily adapted and
    possibly new sessions can be defined

 data/gnome.session.conf          | 20 ---------------
 data/gnome.session.conf.in       |  5 ++++
 data/gnome.session.desktop.in.in |  4 +--
 data/meson.build                 | 55 +++++++++++++++++++++++++++++++++-------
 4 files changed, 53 insertions(+), 31 deletions(-)
---
diff --git a/data/gnome.session.conf.in b/data/gnome.session.conf.in
new file mode 100644
index 00000000..3f79d9ea
--- /dev/null
+++ b/data/gnome.session.conf.in
@@ -0,0 +1,5 @@
+[Unit]
+# Must be in sync with gnome.session
+@wants_required_components@
+
+Requires=@requires_component@.target
diff --git a/data/gnome.session.desktop.in.in b/data/gnome.session.desktop.in.in
index f3aaabce..c72e0ba9 100644
--- a/data/gnome.session.desktop.in.in
+++ b/data/gnome.session.desktop.in.in
@@ -1,4 +1,4 @@
 [GNOME Session]
 Name=GNOME
-# Keep in sync with gnome-session@gnome.target.d/session.conf drop-in
-RequiredComponents=org.gnome.Shell;org.gnome.SettingsDaemon.A11ySettings;org.gnome.SettingsDaemon.Color;org.gnome.SettingsDaemon.Datetime;org.gnome.SettingsDaemon.Housekeeping;org.gnome.SettingsDaemon.Keyboard;org.gnome.SettingsDaemon.MediaKeys;org.gnome.SettingsDaemon.Power;org.gnome.SettingsDaemon.PrintNotifications;org.gnome.SettingsDaemon.Rfkill;org.gnome.SettingsDaemon.ScreensaverProxy;org.gnome.SettingsDaemon.Sharing;org.gnome.SettingsDaemon.Smartcard;org.gnome.SettingsDaemon.Sound;org.gnome.SettingsDaemon.UsbProtection;org.gnome.SettingsDaemon.Wacom;org.gnome.SettingsDaemon.XSettings;
+# Must be in sync with gnome-session@gnome.target.d/session.conf drop-in
+RequiredComponents=@required_components@;
diff --git a/data/meson.build b/data/meson.build
index 213ce22d..99f05bd2 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -5,6 +5,31 @@ desktops = [
   'gnome-xorg'
 ]
 
+shell_component = {
+  desktop_plain: 'org.gnome.Shell',
+}
+
+required_components = {
+  desktop_plain: [
+    'org.gnome.SettingsDaemon.A11ySettings',
+    'org.gnome.SettingsDaemon.Color',
+    'org.gnome.SettingsDaemon.Datetime',
+    'org.gnome.SettingsDaemon.Housekeeping',
+    'org.gnome.SettingsDaemon.Keyboard',
+    'org.gnome.SettingsDaemon.MediaKeys',
+    'org.gnome.SettingsDaemon.Power',
+    'org.gnome.SettingsDaemon.PrintNotifications',
+    'org.gnome.SettingsDaemon.Rfkill',
+    'org.gnome.SettingsDaemon.ScreensaverProxy',
+    'org.gnome.SettingsDaemon.Sharing',
+    'org.gnome.SettingsDaemon.Smartcard',
+    'org.gnome.SettingsDaemon.Sound',
+    'org.gnome.SettingsDaemon.UsbProtection',
+    'org.gnome.SettingsDaemon.Wacom',
+    'org.gnome.SettingsDaemon.XSettings',
+  ],
+}
+
 if enable_session_selector
   desktops += 'gnome-custom-session'
 endif
@@ -44,15 +69,18 @@ foreach name: desktops
 endforeach
 
 sessions = [
-  'gnome.session',
-  'gnome-dummy.session'
+  'gnome',
+  'gnome-dummy'
 ]
 
 foreach session: sessions
+  session_file = session + '.session'
   desktop_conf = configuration_data()
   desktop_conf.set('libexecdir', session_libexecdir)
+  desktop_conf.set('required_components', ';'.join(
+    [shell_component.get(session, '')] + required_components.get(session, [])))
 
-  desktop = session + '.desktop'
+  desktop = session_file + '.desktop'
 
   desktop_in = configure_file(
     input: desktop + '.in.in',
@@ -61,10 +89,10 @@ foreach session: sessions
   )
 
   i18n.merge_file(
-    session,
+    session_file,
     type: 'desktop',
     input: desktop_in,
-    output: session,
+    output: session_file,
     po_dir: po_dir,
     install: true,
     install_dir: join_paths(session_pkgdatadir, 'sessions')
@@ -134,10 +162,19 @@ if enable_systemd_session
     install_dir : join_paths(systemd_userunitdir, 'gnome-launched-.scope.d')
   )
 
-  install_data(
-    'gnome.session.conf',
-    rename: join_paths('gnome-session@gnome.target.d', 'session.conf'),
-    install_dir: systemd_userunitdir,
+  gnome_session_wanted_targets = []
+  foreach component: required_components[desktop_plain]
+    gnome_session_wanted_targets += 'Wants=@0@.target'.format(component)
+  endforeach
+
+  configure_file(
+    input: 'gnome.session.conf.in',
+    output: 'session.conf',
+    configuration: {
+      'requires_component': shell_component[desktop_plain],
+      'wants_required_components': '\n'.join(gnome_session_wanted_targets),
+    },
+    install_dir: systemd_userunitdir / 'gnome-session@gnome.target.d',
   )
 endif
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]