]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
meson: replace some m4 templates with jinja2
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 16 May 2021 09:55:36 +0000 (11:55 +0200)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 19 May 2021 01:24:43 +0000 (10:24 +0900)
m4 was nice in '85, but the syntax feels a bit dated. Since we use python for
meson, let's use a popular python templating engine to replace some m4 usage.

A little nicety is that typos are caught:

FAILED: sysusers.d/systemd-remote.conf
/usr/bin/meson --internal exe --capture sysusers.d/systemd-remote.conf -- /home/zbyszek/src/systemd/tools/meson-render-jinja2.py config.h ../sysusers.d/systemd-remote.conf.j2
Traceback (most recent call last):
  File "/home/zbyszek/src/systemd/tools/meson-render-jinja2.py", line 28, in <module>
    print(render(sys.argv[2], defines))
  File "/home/zbyszek/src/systemd/tools/meson-render-jinja2.py", line 24, in render
    return template.render(defines)
  File "/usr/lib/python3.9/site-packages/jinja2/environment.py", line 1090, in render
    self.environment.handle_exception()
  File "/usr/lib/python3.9/site-packages/jinja2/environment.py", line 832, in handle_exception
    reraise(*rewrite_traceback_stack(source=source))
  File "/usr/lib/python3.9/site-packages/jinja2/_compat.py", line 28, in reraise
    raise value.with_traceback(tb)
  File "<template>", line 8, in top-level template code
jinja2.exceptions.UndefinedError: 'HAVE_MICROHTTP' is undefined

This checking mirrors what 349cc4a507c4d84fcadf61f42159ea6412717896 did for C defines.

meson.build
sysusers.d/basic.conf.in
sysusers.d/meson.build
sysusers.d/systemd-remote.conf.in [moved from sysusers.d/systemd-remote.conf.m4 with 90% similarity]
sysusers.d/systemd.conf.in [moved from sysusers.d/systemd.conf.m4 with 75% similarity]
tools/meson-render-jinja2.py [new file with mode: 0755]

index 5dc083f47f2436338ac9542d1e0fe21b0edd3576..9dbdf3408040078e9e8bf96507df90f6ba2dfc02 100644 (file)
@@ -1647,6 +1647,7 @@ make_autosuspend_rules_py = find_program('tools/make-autosuspend-rules.py')
 make_directive_index_py = find_program('tools/make-directive-index.py')
 make_man_index_py = find_program('tools/make-man-index.py')
 meson_apply_m4 = find_program('tools/meson-apply-m4.sh')
+meson_render_jinja2 = find_program('tools/meson-render-jinja2.py')
 update_dbus_docs_py = find_program('tools/update-dbus-docs.py')
 update_hwdb_sh = find_program('tools/update-hwdb.sh')
 update_hwdb_autosuspend_sh = find_program('tools/update-hwdb-autosuspend.sh')
index 4be0bd869e7fff6f7016403ca86f4dab38778417..9da02514216d74a97eedb97126a4d70c31ac99ca 100644 (file)
@@ -9,7 +9,7 @@
 u root    0     "Super User" /root
 
 # The nobody user for NFS file systems
-u @NOBODY_USER_NAME@  65534 "Nobody"     -
+u {{NOBODY_USER_NAME}}  65534 "Nobody"     -
 
 # Administrator group: can *see* more than normal users
 g adm     -     -            -
@@ -19,7 +19,7 @@ g wheel   -     -            -
 
 # Access to certain kernel and userspace facilities
 g kmem    -     -            -
-g tty     @TTY_GID@     -            -
+g tty     {{TTY_GID}}     -            -
 g utmp    -     -            -
 
 # Hardware access groups
@@ -36,4 +36,4 @@ g tape    -     -            -
 g video   -     -            -
 
 # Default group for normal users
-g users   @USERS_GID@     -            -
+g users   {{USERS_GID}}     -            -
index ef809a4f4486dfbbe6e5833f8197086fe9a6d253..894d1840bcf63faefa10f186ee8ab3b802df92e9 100644 (file)
@@ -4,32 +4,19 @@ if enable_sysusers
         install_data('README', install_dir : sysusersdir)
 endif
 
-in_files = ['basic.conf']
+in_files = [['basic.conf',          enable_sysusers],
+            ['systemd.conf',        enable_sysusers],
+            ['systemd-remote.conf', enable_sysusers and
+                                    conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1]]
 
-foreach file : in_files
-        gen = configure_file(
-                input : file + '.in',
-                output : file,
-                configuration : substs)
-        if enable_sysusers
-                install_data(gen,
-                             install_dir : sysusersdir)
-        endif
-endforeach
-
-m4_files = ['systemd.conf']
-
-if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
-        m4_files += ['systemd-remote.conf']
-endif
-
-foreach file : m4_files
+foreach tuple : in_files
+        file = tuple[0]
         custom_target(
-                'sysusers.d_' + file,
-                input : file + '.m4',
+                file,
+                input : file + '.in',
                 output: file,
-                command : [meson_apply_m4, config_h, '@INPUT@'],
+                command : [meson_render_jinja2, config_h, '@INPUT@'],
                 capture : true,
-                install : enable_sysusers,
+                install : tuple[1],
                 install_dir : sysusersdir)
 endforeach
similarity index 90%
rename from sysusers.d/systemd-remote.conf.m4
rename to sysusers.d/systemd-remote.conf.in
index 988917672b68789f71cddb6fd9adb8c5724e36cd..dae1077225f44f20c3bf4f3f9e4e10df8a72bd3f 100644 (file)
@@ -5,6 +5,6 @@
 #  the Free Software Foundation; either version 2.1 of the License, or
 #  (at your option) any later version.
 
-m4_ifdef(`HAVE_MICROHTTPD',
+{% if HAVE_MICROHTTPD %}
 u systemd-journal-remote  - "systemd Journal Remote"
-)m4_dnl
+{% endif %}
similarity index 75%
rename from sysusers.d/systemd.conf.m4
rename to sysusers.d/systemd.conf.in
index fdfdcf553c3fa622982a1758bd12188ec8323d66..9905eb596c6177a92463946611289c57903aee12 100644 (file)
@@ -6,18 +6,18 @@
 #  (at your option) any later version.
 
 g systemd-journal   - -
-m4_ifdef(`ENABLE_NETWORKD',
+{% if ENABLE_NETWORKD %}
 u systemd-network   - "systemd Network Management"
-)m4_dnl
-m4_ifdef(`ENABLE_OOMD',
+{% endif %}
+{% if ENABLE_OOMD %}
 u systemd-oom       - "systemd Userspace OOM Killer"
-)m4_dnl
-m4_ifdef(`ENABLE_RESOLVE',
+{% endif %}
+{% if ENABLE_RESOLVE %}
 u systemd-resolve   - "systemd Resolver"
-)m4_dnl
-m4_ifdef(`ENABLE_TIMESYNCD',
+{% endif %}
+{% if ENABLE_TIMESYNCD %}
 u systemd-timesync  - "systemd Time Synchronization"
-)m4_dnl
-m4_ifdef(`ENABLE_COREDUMP',
+{% endif %}
+{% if ENABLE_COREDUMP %}
 u systemd-coredump  - "systemd Core Dumper"
-)m4_dnl
+{% endif %}
diff --git a/tools/meson-render-jinja2.py b/tools/meson-render-jinja2.py
new file mode 100755 (executable)
index 0000000..063cb0e
--- /dev/null
@@ -0,0 +1,28 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: LGPL-2.1+
+
+import jinja2
+import re
+import sys
+
+def parse_config_h(filename):
+    # Parse config.h file generated by meson.
+    ans = {}
+    for line in open(filename):
+        m = re.match(r'#define\s+(\w+)\s+(.*)', line)
+        if not m:
+            continue
+        a, b = m.groups()
+        if b and b[0] in '0123456789"':
+            b = eval(b)
+        ans[a] = b
+    return ans
+
+def render(filename, defines):
+    text = open(filename).read()
+    template = jinja2.Template(text, trim_blocks=True, undefined=jinja2.StrictUndefined)
+    return template.render(defines)
+
+if __name__ == '__main__':
+    defines = parse_config_h(sys.argv[1])
+    print(render(sys.argv[2], defines))