On Fri, Feb 10, 2023, 5:46 AM Paolo Bonzini <pbonz...@redhat.com> wrote:
> On 2/10/23 01:31, John Snow wrote: > > At the moment, we look for just "python3" and "python", which is good > > enough almost all of the time. But ... if you are on a platform that > > uses an older Python by default and only offers a newer Python as an > > option, you'll have to specify --python=/usr/bin/foo every time. > > > > We can be kind and instead make a cursory attempt to locate a suitable > > Python binary ourselves, looking for the remaining well-known binaries. > > > > This configure loop will prefer, in order: > > > > 1. Whatever is specified in $PYTHON > > 2. python3 > > 3. python > > 4. python3.11 down through python3.6 > > > > Notes: > > > > - Python virtual environment provides binaries for "python3", "python", > > and whichever version you used to create the venv, > > e.g. "python3.8". If configure is invoked from inside of a venv, this > > configure loop will not "break out" of that venv unless that venv is > > created using an explicitly non-suitable version of Python that we > > cannot use. > > > > - In the event that no suitable python is found, the first python found > > is the version used to generate the human-readable error message. > > > > - The error message isn't printed right away to allow later > > configuration code to pick up an explicitly configured python. > > > > Signed-off-by: John Snow <js...@redhat.com> > > --- > > configure | 33 +++++++++++++++++++++++++-------- > > 1 file changed, 25 insertions(+), 8 deletions(-) > > > > diff --git a/configure b/configure > > index 64960c6000f..ea8c973d13b 100755 > > --- a/configure > > +++ b/configure > > @@ -592,20 +592,39 @@ esac > > > > : ${make=${MAKE-make}} > > > > -# We prefer python 3.x. A bare 'python' is traditionally > > -# python 2.x, but some distros have it as python 3.x, so > > -# we check that too > > + > > +check_py_version() { > > + # We require python >= 3.6. > > + # NB: a True python conditional creates a non-zero return code > (Failure) > > + "$1" -c 'import sys; sys.exit(sys.version_info < (3,6))' > > +} > > + > > python= > > +first_python= > > explicit_python=no > > -for binary in "${PYTHON-python3}" python > > +# A bare 'python' is traditionally python 2.x, but some distros > > +# have it as python 3.x, so check in both places. > > +for binary in "${PYTHON-python3}" python python3.{11..6} > > This is not available in e.g. dash, so we need to use {11,10,9,8,7,6}. > Just a nit, I can fix it myself. > What platforms use dash by default? Did I not see a failure because nothing that uses dash iterated that far down in the list? Anyway, you've got my blessing to change it, of course. > Paolo > PS, while you're here, how does this new loop interfere with your "custom python specified" flag for meson? I think meson uses the version of python *it* detects and not the configure script identified one, right? Does that mean that e.g. the qapi generator gets run with the system default/meson version and not the config version? Do I need to adjust this loop to consider more binaries as "explicitly specified"? (PPS: English needs "paraphrasing quotes" as punctuation. Maybe like double quotes except they're wiggly.) --js >