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

>

Reply via email to