meson: call find_program() once and reuse the variable everywhere
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 14 May 2021 12:16:17 +0000 (14:16 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 15 May 2021 16:33:11 +0000 (18:33 +0200)
Meson 0.58 has gotten quite bad with emitting a message every time
a quoted command is used:
Program /home/zbyszek/src/systemd-work/tools/meson-make-symlink.sh found: YES (/home/zbyszek/src/systemd-work/tools/meson-make-symlink.sh)
Program sh found: YES (/usr/bin/sh)
Program sh found: YES (/usr/bin/sh)
Program sh found: YES (/usr/bin/sh)
Program sh found: YES (/usr/bin/sh)
Program sh found: YES (/usr/bin/sh)
Program sh found: YES (/usr/bin/sh)
Program xsltproc found: YES (/usr/bin/xsltproc)
Configuring custom-entities.ent using configuration
Message: Skipping bootctl.1 because ENABLE_EFI is false
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Message: Skipping journal-remote.conf.5 because HAVE_MICROHTTPD is false
Message: Skipping journal-upload.conf.5 because HAVE_MICROHTTPD is false
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Message: Skipping loader.conf.5 because ENABLE_EFI is false
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
...

Let's suffer one message only for each command. Hopefully we can silence
even this when https://github.com/mesonbuild/meson/issues/8642 is
resolved.

catalog/meson.build
hwdb.d/meson.build
man/meson.build
meson.build
src/boot/efi/meson.build
src/locale/meson.build
src/test/meson.build
test/fuzz/meson.build
test/meson.build
units/meson.build

index d61fc2cbf6ee95a8233b824246dce6203b364cc1..7139c2e0531397711f4bfcfda7501d247be109e7 100644 (file)
@@ -30,5 +30,4 @@ foreach file : in_files
 endforeach
 
 meson.add_install_script('sh', '-c',
-                         'test -n "$DESTDIR" || @0@/journalctl --update-catalog'
-                         .format(rootbindir))
+                         'test -n "$DESTDIR" || @0@/journalctl --update-catalog'.format(rootbindir))
index 7221a1ae9f64bf0b5eba5df3a6f7e8ba174757bb..30d5f36e794b4685dc419a3f63a94e8e6e1c0d8c 100644 (file)
@@ -50,8 +50,7 @@ if conf.get('ENABLE_HWDB') == 1
                                          mkdir_p.format(join_paths(sysconfdir, 'udev/hwdb.d')))
 
                 meson.add_install_script('sh', '-c',
-                                         'test -n "$DESTDIR" || @0@/systemd-hwdb update'
-                                         .format(rootbindir))
+                                         'test -n "$DESTDIR" || @0@/systemd-hwdb update'.format(rootbindir))
         endif
 
         if want_tests != 'false'
index f9c4b83dc8150a839591edd9b859a92605d6920c..2e3b858f4f3461c5fd6fb3ab32662818ecb4ca92 100644 (file)
@@ -70,7 +70,7 @@ foreach tuple : xsltproc.found() ? manpages : []
                         link = custom_target(
                                 htmlalias,
                                 output : htmlalias,
-                                command : ['ln', '-fs', html, '@OUTPUT@'])
+                                command : [ln, '-fs', html, '@OUTPUT@'])
                         if want_html
                                 dst = join_paths(docdir, 'html', htmlalias)
                                 cmd = 'ln -fs @0@ $DESTDIR@1@'.format(html, dst)
@@ -148,7 +148,7 @@ foreach tuple : xsltproc.found() ? [['systemd.directives', '7', systemd_directiv
                         htmlalias,
                         input : p2,
                         output : htmlalias,
-                        command : ['ln', '-fs', html, '@OUTPUT@'])
+                        command : [ln, '-fs', html, '@OUTPUT@'])
                 if want_html
                         dst = join_paths(docdir, 'html', htmlalias)
                         cmd = 'ln -fs @0@ $DESTDIR@1@'.format(html, dst)
@@ -176,15 +176,14 @@ man = custom_target(
         'man',
         output : 'man',
         depends : man_pages,
-        command : ['echo'])
+        command : [echo])
 
 html = custom_target(
         'html',
         output : 'html',
         depends : html_pages,
-        command : ['echo'])
+        command : [echo])
 
-rsync = find_program('rsync', required : false)
 if rsync.found()
         run_target(
                 'doc-sync',
index 3e87e7931780cb00cd8f164afdbb992ade67d0d0..27186d63a3c66d9d0197d991eed81d7329ccb806 100644 (file)
@@ -588,17 +588,22 @@ endif
 
 versiondep = declare_dependency(sources: version_h)
 
+sh = find_program('sh')
+echo = find_program('echo')
+test = find_program('test')
 sed = find_program('sed')
 awk = find_program('awk')
 m4 = find_program('m4')
 stat = find_program('stat')
+ln = find_program('ln')
 git = find_program('git', required : false)
 env = find_program('env')
 perl = find_program('perl', required : false)
-
+rsync = find_program('rsync', required : false)
 meson_make_symlink = project_source_root + '/tools/meson-make-symlink.sh'
-mkdir_p = 'mkdir -p $DESTDIR/@0@'
 test_efi_create_disk_sh = find_program('test/test-efi-create-disk.sh')
+
+mkdir_p = 'mkdir -p $DESTDIR/@0@'
 splash_bmp = files('test/splash.bmp')
 
 # if -Dxxx-path option is found, use that. Otherwise, check in $PATH,
@@ -632,7 +637,7 @@ endforeach
 
 conf.set_quoted('TELINIT', get_option('telinit-path'))
 
-if run_command('ln', '--relative', '--help').returncode() != 0
+if run_command(ln, '--relative', '--help').returncode() != 0
         error('ln does not support --relative (added in coreutils 8.16)')
 endif
 
@@ -646,7 +651,7 @@ const char * in_word_set(const char *, @0@);
 @1@
 '''
 gperf_snippet_format = 'echo foo,bar | @0@ -L ANSI-C'
-gperf_snippet = run_command('sh', '-c', gperf_snippet_format.format(gperf.path()))
+gperf_snippet = run_command(sh, '-c', gperf_snippet_format.format(gperf.path()))
 gperf_test = gperf_test_format.format('size_t', gperf_snippet.stdout())
 if cc.compiles(gperf_test)
         gperf_len_type = 'size_t'
@@ -706,11 +711,11 @@ conf.set_quoted('DEFAULT_NET_NAMING_SCHEME', default_net_naming_scheme)
 
 time_epoch = get_option('time-epoch')
 if time_epoch == -1
-        time_epoch = run_command('sh', ['-c', 'echo "$SOURCE_DATE_EPOCH"']).stdout().strip()
+        time_epoch = run_command(sh, '-c', 'echo "$SOURCE_DATE_EPOCH"').stdout().strip()
         if time_epoch == '' and git.found() and run_command('test', '-e', '.git').returncode() == 0
                 # If we're in a git repository, use the creation time of the latest git tag.
-                latest_tag = run_command('git', 'describe', '--abbrev=0', '--tags').stdout().strip()
-                time_epoch = run_command('git', 'log', '--no-show-signature', '-1', '--format=%at', latest_tag).stdout()
+                latest_tag = run_command(git, 'describe', '--abbrev=0', '--tags').stdout().strip()
+                time_epoch = run_command(git, 'log', '--no-show-signature', '-1', '--format=%at', latest_tag).stdout()
         endif
         if time_epoch == ''
                 NEWS = files('NEWS')
@@ -3307,7 +3312,7 @@ executable(
 custom_target(
         'systemd-runtest.env',
         output : 'systemd-runtest.env',
-        command : ['sh', '-c', '{ ' +
+        command : [sh, '-c', '{ ' +
                    'echo SYSTEMD_TEST_DATA=@0@; '.format(join_paths(project_source_root, 'test')) +
                    'echo SYSTEMD_CATALOG_DIR=@0@; '.format(join_paths(project_build_root, 'catalog')) +
                    '} >@OUTPUT@'],
@@ -3541,7 +3546,7 @@ foreach tuple : sanitizers
                                                 name,
                                                 output : name,
                                                 depends : build,
-                                                command : [env, 'ln', '-fs',
+                                                command : [ln, '-fs',
                                                            join_paths(build.full_path(), b),
                                                            '@OUTPUT@'],
                                                 build_by_default : true)
@@ -3568,9 +3573,8 @@ endforeach
 
 if git.found()
         all_files = run_command(
-                'env', '-u', 'GIT_WORK_TREE',
-                git,
-                '--git-dir=@0@/.git'.format(project_source_root),
+                env, '-u', 'GIT_WORK_TREE',
+                git, '--git-dir=@0@/.git'.format(project_source_root),
                 'ls-files', ':/*.[ch]')
 
         all_files = files(all_files.stdout().split())
@@ -3594,16 +3598,16 @@ endif
 if git.found()
         git_head = run_command(
                 git,
-                ['--git-dir=@0@/.git'.format(project_source_root),
-                 'rev-parse', 'HEAD']).stdout().strip()
+                '--git-dir=@0@/.git'.format(project_source_root),
+                'rev-parse', 'HEAD').stdout().strip()
         git_head_short = run_command(
                 git,
-                ['--git-dir=@0@/.git'.format(project_source_root),
-                 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
+                '--git-dir=@0@/.git'.format(project_source_root),
+                'rev-parse', '--short=7', 'HEAD').stdout().strip()
 
         run_target(
                 'git-snapshot',
-                command : ['git', 'archive',
+                command : [git, 'archive',
                            '-o', '@0@/systemd-@1@.tar.gz'.format(project_source_root,
                                                                  git_head_short),
                            '--prefix', 'systemd-@0@/'.format(git_head),
@@ -3640,7 +3644,7 @@ endif
 custom_target(
         'update-man-rules',
         output : 'update-man-rules',
-        command : ['sh', '-c',
+        command : [sh, '-c',
                    'cd @0@ && '.format(meson.build_root()) +
                    'python3 @0@/tools/update-man-rules.py $(find @0@ -wholename "*/man/*.xml") >t && '.format(project_source_root) +
                    'mv t @0@/man/rules/meson.build'.format(meson.current_source_dir())],
index 2a37b0a9ac69f96689610ccb833882f6315b1564..3c516188b2bd1e5d0e4e036946a91a06cbe1fe5a 100644 (file)
@@ -72,14 +72,14 @@ if conf.get('ENABLE_EFI') == 1 and get_option('gnu-efi') != 'false'
         if efi_libdir == ''
                 # New location first introduced with gnu-efi 3.0.11
                 efi_libdir = join_paths('/usr/lib/gnuefi', EFI_MACHINE_TYPE_NAME)
-                cmd = run_command('test', '-e', efi_libdir)
+                cmd = run_command(test, '-e', efi_libdir)
 
                 if cmd.returncode() != 0
                         # Fall back to the old approach
                         cmd = run_command(efi_cc + ['-print-multi-os-directory'])
                         if cmd.returncode() == 0
                                 path = join_paths('/usr/lib', cmd.stdout().strip())
-                                cmd = run_command('realpath', '-e', path)
+                                cmd = run_command(env, 'realpath', '-e', path)
                                 if cmd.returncode() == 0
                                         efi_libdir = cmd.stdout().strip()
                                 endif
@@ -120,7 +120,7 @@ if have_gnu_efi
         efi_lds = ''
         foreach location : efi_location_map
                 if efi_lds == ''
-                        cmd = run_command('test', '-f', location[0])
+                        cmd = run_command(test, '-f', location[0])
                         if cmd.returncode() == 0
                                 efi_lds = location[0]
                                 efi_crt0 = location[1]
index 4cbf2d278cf032b18a4e41d52b42fa034bc4eb07..757d4457e93ec2152e93bc57d84e6bfc3e7df06f 100644 (file)
@@ -20,7 +20,7 @@ endif
 # If you know a way that allows the same variables to be used
 # in sources list and concatenated to a string for test_env,
 # let me know.
-kbd_model_map = join_paths(meson.current_source_dir(),  'kbd-model-map')
+kbd_model_map = join_paths(meson.current_source_dir(), 'kbd-model-map')
 language_fallback_map = join_paths(meson.current_source_dir(), 'language-fallback-map')
 
 if conf.get('ENABLE_LOCALED') == 1
index c752e995f6f36664a48216b9b54226a7cb655fa3..283bf8320309fdaee1d188b0e1801682a2a77254 100644 (file)
@@ -11,7 +11,7 @@ test_hashmap_ordered_c = custom_target(
 
 test_include_dir = include_directories('.')
 
-path = run_command('sh', ['-c', 'echo "$PATH"']).stdout().strip()
+path = run_command(sh, '-c', 'echo "$PATH"').stdout().strip()
 test_env = environment()
 test_env.set('SYSTEMD_KBD_MODEL_MAP', kbd_model_map)
 test_env.set('SYSTEMD_LANGUAGE_FALLBACK_MAP', language_fallback_map)
index fc8033dbbee9e270386d0270aae40dd561c02a17..8ae8e23fa577681b8a6bb63867f2d80b25fe9a3a 100644 (file)
@@ -22,14 +22,11 @@ sanitize_address_undefined = custom_target(
 sanitizers = [['address,undefined', sanitize_address_undefined]]
 
 if git.found()
-        out = run_command(
-                'env', '-u', 'GIT_WORK_TREE',
-                git,
-                '--git-dir=@0@/.git'.format(project_source_root),
-                'ls-files', ':/test/fuzz/*/*')
+        out = run_command(env, '-u', 'GIT_WORK_TREE',
+                          git, '--git-dir=@0@/.git'.format(project_source_root),
+                          'ls-files', ':/test/fuzz/*/*')
 else
-        out = run_command(
-                'sh', '-c', 'ls @0@/test/fuzz/*/*'.format(project_source_root))
+        out = run_command(sh, '-c', 'ls @0@/test/fuzz/*/*'.format(project_source_root))
 endif
 
 fuzz_regression_tests = []
index 4d7b929a80947263c871eb919a58ace82842d147..180e6bb3f7ac0a990047eb73381b357863ab85d6 100644 (file)
@@ -144,13 +144,12 @@ if want_tests != 'false' and dmi_arches.contains(host_machine.cpu_family())
 
         if git.found()
                 out = run_command(
-                        'env', '-u', 'GIT_WORK_TREE',
-                        git,
-                        '--git-dir=@0@/.git'.format(project_source_root),
+                        env, '-u', 'GIT_WORK_TREE',
+                        git, '--git-dir=@0@/.git'.format(project_source_root),
                         'ls-files', ':/test/dmidecode-dumps/*.bin')
         else
                 out = run_command(
-                        'sh', '-c', 'ls @0@/test/dmidecode-dumps/*.bin'.format(project_source_root))
+                        sh, '-c', 'ls @0@/test/dmidecode-dumps/*.bin'.format(project_source_root))
         endif
 
         foreach p : out.stdout().split()
index 15463760c6796d6f93670bb25e3be6bbc8515c6d..b79374047447f4ba8d1f8503cbfe902f7c44b1c1 100644 (file)
@@ -348,8 +348,7 @@ if conf.get('HAVE_SYSV_COMPAT') == 1
         foreach i : [1, 2, 3, 4, 5]
                 meson.add_install_script(
                         'sh', '-c',
-                        mkdir_p
-                        .format(join_paths(systemunitdir, 'runlevel@0@.target.wants'.format(i))))
+                        mkdir_p.format(join_paths(systemunitdir, 'runlevel@0@.target.wants'.format(i))))
         endforeach
 endif