From: Christian Brauner Date: Fri, 5 Nov 2021 13:29:53 +0000 (+0100) Subject: build: preserve correct mode when generating files via jinja2 X-Git-Tag: v250-rc1~337 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a6d1760024d0884efb343e1c739f303619f7c8b9;p=thirdparty%2Fsystemd.git build: preserve correct mode when generating files via jinja2 When using "capture : true" in custom_target()s the mode of the source file is not preserved when the generated file is not installed and so needs to be tweaked manually. Switch from output capture to creating the target file and copy the permissions from the input file. Signed-off-by: Christian Brauner --- diff --git a/docs/sysvinit/meson.build b/docs/sysvinit/meson.build index 0a1935388ab..cd3015ca4b4 100644 --- a/docs/sysvinit/meson.build +++ b/docs/sysvinit/meson.build @@ -4,7 +4,6 @@ custom_target( 'README', input : 'README.in', output : 'README', - command : [meson_render_jinja2, config_h, '@INPUT@'], - capture : true, + command : [meson_render_jinja2, config_h, '@INPUT@', '@OUTPUT@'], install : conf.get('HAVE_SYSV_COMPAT') == 1, install_dir : sysvinit_path) diff --git a/man/meson.build b/man/meson.build index f259ab8eb4f..a06a6017670 100644 --- a/man/meson.build +++ b/man/meson.build @@ -30,8 +30,7 @@ custom_entities_ent = custom_target( 'custom-entities.ent', input : 'custom-entities.ent.in', output : 'custom-entities.ent', - command : [meson_render_jinja2, config_h, '@INPUT@'], - capture : true) + command : [meson_render_jinja2, config_h, '@INPUT@', '@OUTPUT@']) man_pages = [] html_pages = [] diff --git a/rules.d/meson.build b/rules.d/meson.build index 05c55a6b41e..5cecddb34f6 100644 --- a/rules.d/meson.build +++ b/rules.d/meson.build @@ -52,8 +52,7 @@ foreach file : rules_in file, input : file + '.in', output: file, - command : [meson_render_jinja2, config_h, '@INPUT@'], - capture : true, + command : [meson_render_jinja2, config_h, '@INPUT@', '@OUTPUT@'], install : true, install_dir : udevrulesdir) endforeach diff --git a/shell-completion/bash/meson.build b/shell-completion/bash/meson.build index 1196795814e..c6668e5ea33 100644 --- a/shell-completion/bash/meson.build +++ b/shell-completion/bash/meson.build @@ -14,8 +14,7 @@ custom_target( 'systemctl', input : 'systemctl.in', output : 'systemctl', - command : [meson_render_jinja2, config_h, '@INPUT@'], - capture : true, + command : [meson_render_jinja2, config_h, '@INPUT@', '@OUTPUT@'], install : bashcompletiondir != 'no', install_dir : bashcompletiondir) diff --git a/shell-completion/zsh/meson.build b/shell-completion/zsh/meson.build index 31d9a39ccfc..a0615c4df97 100644 --- a/shell-completion/zsh/meson.build +++ b/shell-completion/zsh/meson.build @@ -9,8 +9,7 @@ custom_target( '_systemctl', input : '_systemctl.in', output : '_systemctl', - command : [meson_render_jinja2, config_h, '@INPUT@'], - capture : true, + command : [meson_render_jinja2, config_h, '@INPUT@', '@OUTPUT@'], install : zshcompletiondir != 'no', install_dir : zshcompletiondir) diff --git a/src/core/meson.build b/src/core/meson.build index de7c2ae798e..c02543bd062 100644 --- a/src/core/meson.build +++ b/src/core/meson.build @@ -149,8 +149,7 @@ load_fragment_gperf_gperf = custom_target( 'load-fragment-gperf.gperf', input : 'load-fragment-gperf.gperf.in', output: 'load-fragment-gperf.gperf', - command : [meson_render_jinja2, config_h, '@INPUT@'], - capture : true) + command : [meson_render_jinja2, config_h, '@INPUT@', '@OUTPUT@']) load_fragment_gperf_c = custom_target( 'load-fragment-gperf.c', @@ -202,8 +201,7 @@ foreach item : in_files file, input : file + '.in', output: file, - command : [meson_render_jinja2, config_h, '@INPUT@'], - capture : true, + command : [meson_render_jinja2, config_h, '@INPUT@', '@OUTPUT@'], install : (dir == pkgsysconfdir) ? install_sysconfdir_samples : (dir != 'no'), install_dir : dir) endforeach diff --git a/src/journal-remote/meson.build b/src/journal-remote/meson.build index 5670d55ec55..54b314552b4 100644 --- a/src/journal-remote/meson.build +++ b/src/journal-remote/meson.build @@ -54,8 +54,7 @@ foreach tuple : in_files file, input : file + '.in', output: file, - command : [meson_render_jinja2, config_h, '@INPUT@'], - capture : true, + command : [meson_render_jinja2, config_h, '@INPUT@', '@OUTPUT@'], install : tuple[1], install_dir : pkgsysconfdir) endforeach diff --git a/src/libsystemd/meson.build b/src/libsystemd/meson.build index 02b2cd64b2b..6ee78fd1955 100644 --- a/src/libsystemd/meson.build +++ b/src/libsystemd/meson.build @@ -183,8 +183,7 @@ custom_target( 'libsystemd.pc', input : 'libsystemd.pc.in', output : 'libsystemd.pc', - command : [meson_render_jinja2, config_h, '@INPUT@'], - capture : true, + command : [meson_render_jinja2, config_h, '@INPUT@', '@OUTPUT@'], install : pkgconfiglibdir != 'no', install_dir : pkgconfiglibdir) diff --git a/src/libudev/meson.build b/src/libudev/meson.build index 130374d14fb..488ae624809 100644 --- a/src/libudev/meson.build +++ b/src/libudev/meson.build @@ -43,8 +43,7 @@ custom_target( 'libudev.pc', input : 'libudev.pc.in', output : 'libudev.pc', - command : [meson_render_jinja2, config_h, '@INPUT@'], - capture : true, + command : [meson_render_jinja2, config_h, '@INPUT@', '@OUTPUT@'], install : pkgconfiglibdir != 'no', install_dir : pkgconfiglibdir) diff --git a/src/login/meson.build b/src/login/meson.build index da704d238fe..a583025a1bc 100644 --- a/src/login/meson.build +++ b/src/login/meson.build @@ -81,8 +81,7 @@ foreach tuple : in_files file, input : file + '.in', output: file, - command : [meson_render_jinja2, config_h, '@INPUT@'], - capture : true, + command : [meson_render_jinja2, config_h, '@INPUT@', '@OUTPUT@'], install : tuple[2] and install, install_dir : dir) endforeach diff --git a/src/resolve/meson.build b/src/resolve/meson.build index 1f9b8af4f3f..c7cb88ac04b 100644 --- a/src/resolve/meson.build +++ b/src/resolve/meson.build @@ -166,8 +166,7 @@ custom_target( 'resolved.conf', input : 'resolved.conf.in', output : 'resolved.conf', - command : [meson_render_jinja2, config_h, '@INPUT@'], - capture : true, + command : [meson_render_jinja2, config_h, '@INPUT@', '@OUTPUT@'], install : conf.get('ENABLE_RESOLVE') == 1 and install_sysconfdir_samples, install_dir : pkgsysconfdir) diff --git a/src/rpm/meson.build b/src/rpm/meson.build index 2ad3308cc1c..8decb11f3be 100644 --- a/src/rpm/meson.build +++ b/src/rpm/meson.build @@ -18,8 +18,7 @@ foreach tuple : in_files file, input : file + '.in', output : file, - command : [meson_render_jinja2, config_h, '@INPUT@'], - capture : true, + command : [meson_render_jinja2, config_h, '@INPUT@', '@OUTPUT@'], install : tuple[1], install_dir : tuple.length() > 2 ? tuple[2] : '', install_mode : tuple.length() > 3 ? tuple[3] : false, diff --git a/src/timesync/meson.build b/src/timesync/meson.build index ec80b16e829..6d6ddeb2854 100644 --- a/src/timesync/meson.build +++ b/src/timesync/meson.build @@ -38,8 +38,7 @@ custom_target( 'timesyncd.conf', input : 'timesyncd.conf.in', output : 'timesyncd.conf', - command : [meson_render_jinja2, config_h, '@INPUT@'], - capture : true, + command : [meson_render_jinja2, config_h, '@INPUT@', '@OUTPUT@'], install : conf.get('ENABLE_TIMESYNCD') == 1 and install_sysconfdir_samples, install_dir : pkgsysconfdir) diff --git a/src/udev/meson.build b/src/udev/meson.build index 3423d6de946..0b692df3d8a 100644 --- a/src/udev/meson.build +++ b/src/udev/meson.build @@ -162,8 +162,7 @@ custom_target( 'udev.pc', input : 'udev.pc.in', output : 'udev.pc', - command : [meson_render_jinja2, config_h, '@INPUT@'], - capture : true, + command : [meson_render_jinja2, config_h, '@INPUT@', '@OUTPUT@'], install : pkgconfigdatadir != 'no', install_dir : pkgconfigdatadir) diff --git a/src/vconsole/meson.build b/src/vconsole/meson.build index dea4121f1a7..eb22358c205 100644 --- a/src/vconsole/meson.build +++ b/src/vconsole/meson.build @@ -4,7 +4,6 @@ custom_target( '90-vconsole.rules', input : '90-vconsole.rules.in', output : '90-vconsole.rules', - command : [meson_render_jinja2, config_h, '@INPUT@'], - capture : true, + command : [meson_render_jinja2, config_h, '@INPUT@', '@OUTPUT@'], install : conf.get('ENABLE_VCONSOLE') == 1, install_dir : udevrulesdir) diff --git a/sysctl.d/meson.build b/sysctl.d/meson.build index b058f9364be..1745a13bfbd 100644 --- a/sysctl.d/meson.build +++ b/sysctl.d/meson.build @@ -16,8 +16,7 @@ custom_target( '50-coredump.conf', input : '50-coredump.conf.in', output : '50-coredump.conf', - command : [meson_render_jinja2, config_h, '@INPUT@'], - capture : true, + command : [meson_render_jinja2, config_h, '@INPUT@', '@OUTPUT@'], install : conf.get('ENABLE_COREDUMP') == 1, install_dir : sysctldir) diff --git a/sysusers.d/meson.build b/sysusers.d/meson.build index 132d8a187af..73d507f1f15 100644 --- a/sysusers.d/meson.build +++ b/sysusers.d/meson.build @@ -33,8 +33,7 @@ foreach tuple : in_files file, input : file + '.in', output: file, - command : [meson_render_jinja2, config_h, '@INPUT@'], - capture : true, + command : [meson_render_jinja2, config_h, '@INPUT@', '@OUTPUT@'], install : tuple[1], install_dir : sysusersdir) endforeach diff --git a/tmpfiles.d/meson.build b/tmpfiles.d/meson.build index de36f5743d0..6ae9e3e0b85 100644 --- a/tmpfiles.d/meson.build +++ b/tmpfiles.d/meson.build @@ -40,8 +40,7 @@ foreach pair : in_files pair[0], input : pair[0] + '.in', output: pair[0], - command : [meson_render_jinja2, config_h, '@INPUT@'], - capture : true, + command : [meson_render_jinja2, config_h, '@INPUT@', '@OUTPUT@'], install : enable_tmpfiles, install_dir : tmpfilesdir) else diff --git a/tools/meson-render-jinja2.py b/tools/meson-render-jinja2.py index 9a6fc7c31c8..0f9fc431243 100755 --- a/tools/meson-render-jinja2.py +++ b/tools/meson-render-jinja2.py @@ -2,6 +2,7 @@ # SPDX-License-Identifier: LGPL-2.1-or-later import ast +import os import re import sys @@ -27,4 +28,8 @@ def render(filename, defines): if __name__ == '__main__': defines = parse_config_h(sys.argv[1]) - print(render(sys.argv[2], defines)) + output = render(sys.argv[2], defines) + with open(sys.argv[3], 'w') as f: + f.write(output) + info = os.stat(sys.argv[2]) + os.chmod(sys.argv[3], info.st_mode) diff --git a/units/meson.build b/units/meson.build index c106284e0fd..903443a85df 100644 --- a/units/meson.build +++ b/units/meson.build @@ -272,8 +272,7 @@ foreach tuple : in_units file, input : file + '.in', output : file, - command : [meson_render_jinja2, config_h, '@INPUT@'], - capture : true, + command : [meson_render_jinja2, config_h, '@INPUT@', '@OUTPUT@'], install : install, install_dir : systemunitdir)