On Mon, Sep 15, 2025 at 07:02:24PM -0300, Gustavo Romero wrote:
> Hi Thomas,
> 
> On 9/15/25 09:42, Thomas Huth wrote:
> > From: Gustavo Romero <gustavo.rom...@linaro.org>
> > 
> > The probe of gdb is done in 'configure' and the full path is passed
> > to meson.build via the -Dgdb=option.
> > 
> > meson then can pass the location of gdb to the test via an environment
> > variable.
> > 
> > This patch is based on an earlier patch ("Support tests that require a
> > runner") by Gustavo Romero.
> > 
> > Signed-off-by: Thomas Huth <th...@redhat.com>
> > ---
> >   configure                     | 2 ++
> >   meson.build                   | 4 ++++
> >   meson_options.txt             | 2 ++
> >   scripts/meson-buildoptions.sh | 2 ++
> >   tests/functional/meson.build  | 7 +++++++
> >   5 files changed, 17 insertions(+)
> > 
> > diff --git a/configure b/configure
> > index 274a7787642..8e2e2cd562a 100755
> > --- a/configure
> > +++ b/configure
> > @@ -1978,6 +1978,8 @@ if test "$skip_meson" = no; then
> >     test -n "${LIB_FUZZING_ENGINE+xxx}" && meson_option_add 
> > "-Dfuzzing_engine=$LIB_FUZZING_ENGINE"
> >     test "$plugins" = yes && meson_option_add "-Dplugins=true"
> >     test "$tcg" != enabled && meson_option_add "-Dtcg=$tcg"
> > +  test -n "$gdb_bin" && meson_option_add "-Dgdb=$gdb_bin"
> > +
> >     run_meson() {
> >       NINJA=$ninja $meson setup "$@" "$PWD" "$source_path"
> >     }
> > diff --git a/meson.build b/meson.build
> > index 3d738733566..4cbc3c8ac65 100644
> > --- a/meson.build
> > +++ b/meson.build
> > @@ -75,6 +75,10 @@ have_user = have_linux_user or have_bsd_user
> >   sh = find_program('sh')
> >   python = import('python').find_installation()
> > +# Meson python.get_path() on 'purelib' or 'platlib' doesn't properly 
> > return the
> > +# site-packages dir in pyvenv, so it is built manually.
> > +python_ver = python.language_version()
> > +python_site_packages = meson.build_root() / 'pyvenv/lib/python' + 
> > python_ver / 'site-packages'
> >   cc = meson.get_compiler('c')
> >   all_languages = ['c']
> > diff --git a/meson_options.txt b/meson_options.txt
> > index fff1521e580..5bb41bcbc43 100644
> > --- a/meson_options.txt
> > +++ b/meson_options.txt
> > @@ -36,6 +36,8 @@ option('trace_file', type: 'string', value: 'trace',
> >   option('coroutine_backend', type: 'combo',
> >          choices: ['ucontext', 'sigaltstack', 'windows', 'wasm', 'auto'],
> >          value: 'auto', description: 'coroutine backend to use')
> > +option('gdb', type: 'string', value: '',
> > +       description: 'Path to GDB')
> >   # Everything else can be set via --enable/--disable-* option
> >   # on the configure script command line.  After adding an option
> > diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
> > index 0ebe6bc52a6..f4bd21220ee 100644
> > --- a/scripts/meson-buildoptions.sh
> > +++ b/scripts/meson-buildoptions.sh
> > @@ -58,6 +58,7 @@ meson_options_help() {
> >     printf "%s\n" '  --enable-ubsan           enable undefined behaviour 
> > sanitizer'
> >     printf "%s\n" '  --firmwarepath=VALUES    search PATH for firmware 
> > files [share/qemu-'
> >     printf "%s\n" '                           firmware]'
> > +  printf "%s\n" '  --gdb=VALUE              Path to GDB'
> >     printf "%s\n" '  --iasl=VALUE             Path to ACPI disassembler'
> >     printf "%s\n" '  --includedir=VALUE       Header file directory 
> > [include]'
> >     printf "%s\n" '  --interp-prefix=VALUE    where to find shared 
> > libraries etc., use %M for'
> > @@ -323,6 +324,7 @@ _meson_option_parse() {
> >       --disable-fuzzing) printf "%s" -Dfuzzing=false ;;
> >       --enable-gcrypt) printf "%s" -Dgcrypt=enabled ;;
> >       --disable-gcrypt) printf "%s" -Dgcrypt=disabled ;;
> > +    --gdb=*) quote_sh "-Dgdb=$2" ;;
> >       --enable-gettext) printf "%s" -Dgettext=enabled ;;
> >       --disable-gettext) printf "%s" -Dgettext=disabled ;;
> >       --enable-gio) printf "%s" -Dgio=enabled ;;
> > diff --git a/tests/functional/meson.build b/tests/functional/meson.build
> > index 2a0c5aa1418..c822eb66309 100644
> > --- a/tests/functional/meson.build
> > +++ b/tests/functional/meson.build
> > @@ -77,6 +77,12 @@ foreach speed : ['quick', 'thorough']
> >       test_env.set('PYTHONPATH', meson.project_source_root() / 'python:' +
> >                                  meson.current_source_dir())
> 
> It's necessary to add the Python modules from pyvenv to the PYTHONPATH, 
> otherwise
> when libpython from GDB looks for pycotap it cannot find it. We already have
> it in python_site_packages in Meson (introduced with this series) so adding
> python_site_packages to test_env.set() above, like:

This dovetails to the point I made on the cover letter.

The pyvenv is populated wrt the python version we selected for QEMU.
This cannot be assumed to be the same as the version that GDB was
built against. Pointing GDB to a venv for a different python version
is not a good idea.


With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|


Reply via email to