[gnome-initial-setup: 1/3] data: Leave to meson the duty of keeping the lists in sync




commit 8d8f156ee2b900a6f4f45ac6f17086022d79cbb1
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date:   Thu Sep 17 14:14:20 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-initial-setup.session
    list is filled with an hard-to-maintain single-line semicolon separated
    list of components, that then are almost repeated in the gnome systemd
    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.

 data/gnome-initial-setup.session         |  4 ---
 data/gnome-initial-setup.session.conf    | 23 -------------
 data/gnome-initial-setup.session.conf.in |  8 +++++
 data/gnome-initial-setup.session.in      |  4 +++
 data/meson.build                         | 58 ++++++++++++++++++++++++++++----
 5 files changed, 64 insertions(+), 33 deletions(-)
---
diff --git a/data/gnome-initial-setup.session.conf.in b/data/gnome-initial-setup.session.conf.in
new file mode 100644
index 00000000..5c28f747
--- /dev/null
+++ b/data/gnome-initial-setup.session.conf.in
@@ -0,0 +1,8 @@
+[Unit]
+# Must be in sync with @this_component@.session
+@wants_required_components@
+
+Requires=@requires_component@.target
+
+# Only difference to a standard GNOME session is the @this_component@ service
+Requires=@this_component@.service
diff --git a/data/gnome-initial-setup.session.in b/data/gnome-initial-setup.session.in
new file mode 100644
index 00000000..e8d1890c
--- /dev/null
+++ b/data/gnome-initial-setup.session.in
@@ -0,0 +1,4 @@
+[GNOME Session]
+Name=GNOME Initial Setup
+# Must be in sync with gnome-session@@this_component@.target.d/session.conf drop-in
+RequiredComponents=@gnome_session_required_components@;
diff --git a/data/meson.build b/data/meson.build
index 3cc04977..d9cb2728 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -4,6 +4,28 @@ autostart_files = [
     'gnome-welcome-tour.desktop'
 ]
 
+gis_shell_component = 'org.gnome.Shell'
+gis_gnome_session_required_components = [
+    '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',
+]
+
+gis_user_session_wanted_components = gis_gnome_session_required_components
+
 desktop_conf = configuration_data()
 desktop_conf.set('LIBEXECDIR', libexec_dir)
 desktop_conf.set('systemd_hidden', enable_systemd ? 'true' : 'false')
@@ -61,11 +83,23 @@ if enable_systemd
         endforeach
     endforeach
 
-    install_data(
-        'gnome-initial-setup.session.conf',
-        rename: join_paths('gnome-session@gnome-initial-setup.target.d', 'session.conf'),
-        install_dir: systemd_userunitdir
-  )
+    gis_user_session_wanted_targets = []
+    foreach component: gis_user_session_wanted_components
+        gis_user_session_wanted_targets += 'Wants=@0@.target'.format(component)
+    endforeach
+
+    configure_file(
+        input: '@0  session conf in'.format(meson.project_name()),
+        output: 'session.conf',
+        configuration: {
+            'this_component': meson.project_name(),
+            'requires_component': gis_shell_component,
+            'wants_required_components': '\n'.join(
+                gis_user_session_wanted_targets),
+        },
+        install_dir: systemd_userunitdir / 'gnome-session@@0@.target.d'.format(
+            meson.project_name()),
+    )
 endif
 
 
@@ -73,7 +107,19 @@ rules_dir = join_paths(data_dir, 'polkit-1', 'rules.d')
 install_data('20-gnome-initial-setup.rules', install_dir: rules_dir)
 
 session_dir = join_paths(data_dir, 'gnome-session', 'sessions')
-install_data('gnome-initial-setup.session', install_dir: session_dir)
+configure_file(
+  input: '@0  session in'.format(meson.project_name()),
+  output: '@BASENAME@',
+  configuration: {
+    'this_component': meson.project_name(),
+    'gnome_session_required_components': ';'.join([
+        gis_shell_component,
+        meson.project_name(),
+      ] +
+      gis_gnome_session_required_components),
+  },
+  install_dir: session_dir,
+)
 
 mode_dir = join_paths(data_dir, 'gnome-shell', 'modes')
 install_data('initial-setup.json', install_dir: mode_dir)


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