On Fri, Sep 5, 2025 at 3:25 AM Paolo Bonzini <pbonz...@redhat.com> wrote:
> On 9/4/25 17:11, Peter Foley wrote: > > Relying on `python3` to be avilable in $PATH doesn't work in some build > > environments. Update the build files to use the found python binary > > explicitly. > > Meson already does this, if the file is not executable. See > docs/devel/build-system.rst: > > Meson has a special convention for invoking Python scripts: if their > first line is ``#! /usr/bin/env python3`` and the file is *not* > executable, find_program() arranges to invoke the script under the > same Python interpreter that was used to invoke Meson. This is the > most common and preferred way to invoke support scripts from Meson > build files, because it automatically uses the value of configure's > --python= option. > > Using "[python, 'foo']" is only needed for scripts "where it is > desirable to make the script executable (for example for test scripts > that developers may want to invoke from the command line, such as > tests/qapi-schema/test-qapi.py)". > Interesting, that's not what I'm seeing in practice. For example, locally reverting the change to block/meson.build results in: FAILED: block/module_block.h /build/work/046b6fd7014012220d3de53b1bd62f6eb1e9/google3/third_party/qemu/block/../scripts/modules/module_block.py block/module_block.h /usr/bin/env: 'python3': No such file or directory Where module_block.py is *not* executable: -rw-rw-r-- 1 pefoley primarygroup 2751 Feb 10 2021 third_party/qemu/scripts/modules/module_block.py > > I think the only file you touched that is executable is > scripts/qemu-plugin-symbols.py; so your issue can be fixed without code > changes, and with a patch that only does "chmod -x > scripts/qemu-plugin-symbols.py". Please correct me if I'm wrong though! > > Thanks, > > Paolo > > > Signed-off-by: Peter Foley <pefo...@google.com> > > --- > > block/meson.build | 6 ++---- > > meson.build | 10 +++++----- > > plugins/meson.build | 2 +- > > 3 files changed, 8 insertions(+), 10 deletions(-) > > > > diff --git a/block/meson.build b/block/meson.build > > index > 34b1b2a30630214959630d5543181bc82a54d2b3..67e9bee1210307ff15ca87ba0f5e7f785df15042 > 100644 > > --- a/block/meson.build > > +++ b/block/meson.build > > @@ -139,14 +139,12 @@ if get_option('dmg').allowed() > > endforeach > > endif > > > > -module_block_py = find_program('../scripts/modules/module_block.py') > > module_block_h = custom_target('module_block.h', > > output: 'module_block.h', > > input: modsrc, > > - command: [module_block_py, '@OUTPUT0@', > modsrc]) > > + command: [python, > files('../scripts/modules/module_block.py'), '@OUTPUT0@', modsrc]) > > block_ss.add(module_block_h) > > > > -wrapper_py = find_program('../scripts/block-coroutine-wrapper.py') > > block_gen_c = custom_target('block-gen.c', > > output: 'block-gen.c', > > input: files( > > @@ -158,7 +156,7 @@ block_gen_c = custom_target('block-gen.c', > > > '../include/system/block-backend-io.h', > > 'coroutines.h' > > ), > > - command: [wrapper_py, '@OUTPUT@', '@INPUT@ > ']) > > + command: [python, > files('../scripts/block-coroutine-wrapper.py'), '@OUTPUT@', '@INPUT@']) > > block_ss.add(block_gen_c) > > > > block_ss.add(files('stream.c')) > > diff --git a/meson.build b/meson.build > > index > fa6186db33435c26d06dce2971a9f536250607e0..6e8baf3deb13c172eecd371ea302b1c2539048d0 > 100644 > > --- a/meson.build > > +++ b/meson.build > > @@ -12,8 +12,6 @@ add_test_setup('slow', exclude_suites: ['thorough'], > > add_test_setup('thorough', > > env: ['G_TEST_SLOW=1', 'SPEED=thorough', > 'RUST_BACKTRACE=1']) > > > > > -meson.add_postconf_script(find_program('scripts/symlink-install-tree.py')) > > - > > #################### > > # Global variables # > > #################### > > @@ -76,6 +74,8 @@ have_user = have_linux_user or have_bsd_user > > sh = find_program('sh') > > python = import('python').find_installation() > > > > +meson.add_postconf_script([python, 'scripts/symlink-install-tree.py']) > > + > > cc = meson.get_compiler('c') > > all_languages = ['c'] > > if host_os == 'windows' and add_languages('cpp', required: false, > native: false) > > @@ -3474,7 +3474,7 @@ foreach target : target_dirs > > output: config_devices_mak, > > depfile: config_devices_mak + '.d', > > capture: true, > > - command: [minikconf, > > + command: [python, minikconf, > > get_option('default_devices') ? '--defconfig' : > '--allnoconfig', > > config_devices_mak, '@DEPFILE@', '@INPUT@', > > host_kconfig, target_kconfig]) > > @@ -3545,8 +3545,8 @@ config_host_h = configure_file(output: > 'config-host.h', configuration: config_ho > > genh += config_host_h > > > > hxtool = find_program('scripts/hxtool') > > -shaderinclude = find_program('scripts/shaderinclude.py') > > -qapi_gen = find_program('scripts/qapi-gen.py') > > +shaderinclude = [python, 'scripts/shaderinclude.py'] > > +qapi_gen = [python, 'scripts/qapi-gen.py'] > > qapi_gen_depends = [ meson.current_source_dir() / > 'scripts/qapi/__init__.py', > > meson.current_source_dir() / > 'scripts/qapi/commands.py', > > meson.current_source_dir() / > 'scripts/qapi/common.py', > > diff --git a/plugins/meson.build b/plugins/meson.build > > index > 62c991d87fcdd8bcde8edddcc73909c6133f5460..6bf72a69060414ba1b7c1857515eeceb5a2c7b7c > 100644 > > --- a/plugins/meson.build > > +++ b/plugins/meson.build > > @@ -6,7 +6,7 @@ qemu_plugin_symbols = configure_file( > > input: files('../include/qemu/qemu-plugin.h'), > > output: 'qemu-plugin.symbols', > > capture: true, > > - command: [files('../scripts/qemu-plugin-symbols.py'), '@INPUT@']) > > + command: [python, files('../scripts/qemu-plugin-symbols.py'), '@INPUT@ > ']) > > > > # Modules need more symbols than just those in > plugins/qemu-plugins.symbols > > if not enable_modules > > > > --- > > base-commit: baa79455fa92984ff0f4b9ae94bed66823177a27 > > change-id: 20250904-python-78ccebd0fded > > > > Best regards, > >