On Wed, Feb 22, 2023 at 03:37:46PM +0100, Paolo Bonzini wrote: > If neither --python nor --meson are specified, Meson's generated > build.ninja will invoke Python script using the interpreter *that Meson > itself is running under*; not the one identified by configure. > > This is only an issue if Meson's Python interpreter is not "the first > one in the path", which is the one that is used if --python is not > specified. A common case where this happen is when the "python3" binary > comes from a virtual environment but Meson is not installed (with pip) > in the virtual environment. In this case (presumably) whoever set up > the venv wanted to use the venv's Python interpreter to build QEMU, > while Meson might use a different one, for example an enterprise > distro's older runtime. > > So, detect whether a virtual environment is setup, and if the virtual > environment does not have Meson, use the meson submodule. Meson will > then run under the virtual environment's Python interpreter.
I fear this could be somewhat confusing to contributors. If I have meson in my $PATH, at a sufficient version, it would be surprising to find QEMU had been using a different version instead. I can understand wanting to make it "just work", but should we perhaps issue a warning from configure when we're intentionally ignoring an otherwise valid meson installation ? > > Reported-by: John Snow <js...@redhat.com> > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > --- > configure | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/configure b/configure > index 00415f0b48d7..4d66a958023e 100755 > --- a/configure > +++ b/configure > @@ -1047,8 +1047,18 @@ fi > # Suppress writing compiled files > python="$python -B" > > +has_meson() { > + if test "${VIRTUAL_ENV:+set}" = set; then > + # Ensure that Meson and Python come from the same virtual environment > + test -x "${VIRTUAL_ENV}/bin/meson" && > + test "$(command -v meson)" -ef "${VIRTUAL_ENV}/bin/meson" > + else > + has meson > + fi > +} > + > if test -z "$meson"; then > - if test "$explicit_python" = no && has meson && version_ge "$(meson > --version)" 0.61.5; then > + if test "$explicit_python" = no && has_meson && version_ge "$(meson > --version)" 0.61.5; then > meson=meson > elif test "$git_submodules_action" != 'ignore' ; then > meson=git > -- > 2.39.1 > 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 :|