From: John Snow <jsnow@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Hanna Reitz" <hreitz@redhat.com>,
"Kevin Wolf" <kwolf@redhat.com>,
"Peter Maydell" <peter.maydell@linaro.org>,
"Thomas Huth" <thuth@redhat.com>,
qemu-block@nongnu.org,
"Wainer dos Santos Moschetta" <wainersm@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Markus Armbruster" <armbru@redhat.com>,
"Daniel Berrange" <berrange@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Michael Roth" <michael.roth@amd.com>,
"Cleber Rosa" <crosa@redhat.com>,
"Beraldo Leal" <bleal@redhat.com>, "John Snow" <jsnow@redhat.com>,
"Alex Bennée" <alex.bennee@linaro.org>
Subject: [PATCH 3/7] configure: Look for auxiliary Python installations
Date: Thu, 9 Feb 2023 10:40:30 -0500 [thread overview]
Message-ID: <20230209154034.983044-4-jsnow@redhat.com> (raw)
In-Reply-To: <20230209154034.983044-1-jsnow@redhat.com>
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 <jsnow@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}
do
if has "$binary"
then
python=$(command -v "$binary")
- break
+ if test -z "$first_python"; then
+ first_python=$python
+ fi
+ if check_py_version "$python"; then
+ # This one is good.
+ first_python=
+ break
+ fi
fi
done
+# If first_python is set, we didn't find a suitable binary.
+# Use this one for possible future error messages.
+if test -n "$first_python"; then
+ python="$first_python"
+fi
# Check for ancillary tools used in testing
genisoimage=
@@ -1037,9 +1056,7 @@ then
error_exit "GNU make ($make) not found"
fi
-# Note that if the Python conditional here evaluates True we will exit
-# with status 1 which is a shell 'false' value.
-if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
+if ! check_py_version "$python"; then
error_exit "Cannot use '$python', Python >= 3.6 is required." \
"Use --python=/path/to/python to specify a supported Python."
fi
--
2.39.0
next prev parent reply other threads:[~2023-02-09 15:42 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-09 15:40 [PATCH 0/7] Python: Drop support for Python 3.6 John Snow
2023-02-09 15:40 ` [PATCH 1/7] python: support pylint 2.16 John Snow
2023-02-09 16:01 ` Philippe Mathieu-Daudé
2023-02-09 17:49 ` Beraldo Leal
2023-02-09 15:40 ` [PATCH 2/7] Python: drop pipenv John Snow
2023-02-09 15:40 ` John Snow [this message]
2023-02-10 19:45 ` [PATCH 3/7] configure: Look for auxiliary Python installations Eric Blake
2023-02-15 20:10 ` John Snow
2023-02-09 15:40 ` [PATCH 4/7] configure: Add nice hint to Python failure message John Snow
2023-02-09 15:40 ` [PATCH 5/7] testing: Add Python >= 3.7 to Centos, OpenSuSE John Snow
2023-02-09 15:56 ` Thomas Huth
2023-02-09 16:10 ` John Snow
2023-02-10 10:38 ` Daniel P. Berrangé
2023-02-15 20:25 ` John Snow
2023-02-09 15:40 ` [PATCH 6/7] CI: Stop building docs on centos8 John Snow
2023-02-09 15:57 ` Thomas Huth
2023-02-09 16:05 ` Philippe Mathieu-Daudé
2023-02-09 22:43 ` Paolo Bonzini
2023-02-09 23:32 ` John Snow
2023-02-10 10:30 ` Paolo Bonzini
2023-02-15 20:31 ` John Snow
2023-02-09 15:40 ` [PATCH 7/7] Python: Drop support for Python 3.6 John Snow
2023-02-09 16:27 ` Daniel P. Berrangé
2023-02-09 16:40 ` John Snow
2023-02-09 18:03 ` Daniel P. Berrangé
2023-02-09 21:15 ` John Snow
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230209154034.983044-4-jsnow@redhat.com \
--to=jsnow@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=bleal@redhat.com \
--cc=crosa@redhat.com \
--cc=hreitz@redhat.com \
--cc=kwolf@redhat.com \
--cc=michael.roth@amd.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=philmd@linaro.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=thuth@redhat.com \
--cc=wainersm@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.