[PATCH 1/1] configure: prefer python's sphinx module

John Snow jsnow at redhat.com
Tue Jun 16 19:09:42 UTC 2020

Using an explicit entry path script for sphinx can lead to confusing
results: If the python binary belongs to a virtual environment, our
configure script may still select a sphinx script that belongs to the
system distribution packages.

It is likely best to use python itself (whichever one the user provides)
to resolve the sphinx script. This has a few benefits:

1. It will always be Python 3. Script entry points like 'sphinx-build'
might attempt to invoke python2 -- or indeed, any version of python that
the user did not specify with --python.

2. When using a user installation of sphinx, it will naturally prefer
that version.

3. When using a virtual environment, it will naturally prefer that

4. Removing explicit python script entry points gives us greater control
within the QEMU build ecosystem; we can be confident we are respecting
the user's --python configuration, if any.

It's my hope that this will make it simpler to integrate some optional
pipenv functionality into the build for adding regression testing to our
python module -- by offloading more of the python environment
configuration and testing directly to the python tooling ecosystem.

This would, ideally, free us up to use more modern python packages not
always offered in older system distributions. (For instance, we already
violate this requirement with sphinx, which does not have the necessary
versions in our oldest build platforms.)

Signed-off-by: John Snow <jsnow at redhat.com>
 docs/system/deprecated.rst | 19 +++++++++++++++++++
 configure                  | 20 +++++++++-----------
 2 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/docs/system/deprecated.rst b/docs/system/deprecated.rst
index 544ece0a45e..a762a8c8043 100644
--- a/docs/system/deprecated.rst
+++ b/docs/system/deprecated.rst
@@ -17,6 +17,25 @@ they were first deprecated in the 2.10.0 release.
 What follows is a list of all features currently marked as
+Configure script options
+``--sphinx-build=`` (since 5.1)
+The ``--sphinx-build`` option to select a specific sphinx-build entry
+point is replaced by configuring Python accordingly. QEMU will now
+default to using ``$python -m sphinx`` to use Python's preferred version
+of sphinx.
+Python will generally default to preferring user packages installed with
+``pip install --user`` first, and system distribution packages
+second. By specifying a custom Python binary or activating a virtual
+environment, Python will alter its module search behavior. As a last
+resort, the PYTHONPATH environment variable can be modified to specify
+an explicit directory.
 System emulator command line arguments
diff --git a/configure b/configure
index b01b5e3bed0..e04b9d836ee 100755
--- a/configure
+++ b/configure
@@ -932,16 +932,6 @@ do
-for binary in sphinx-build-3 sphinx-build
-    if has "$binary"
-    then
-        sphinx_build=$(command -v "$binary")
-        break
-    fi
 # Check for ancillary tools used in testing
 for binary in genisoimage mkisofs
@@ -1014,7 +1004,9 @@ for opt do
   --python=*) python="$optarg"
-  --sphinx-build=*) sphinx_build="$optarg"
+  --sphinx-build=*)
+      sphinx_build="$optarg"
+      echo "--sphinx-build is deprecated. QEMU uses the specified python's sphinx module."
   --gcov=*) gcov_tool="$optarg"
@@ -4996,6 +4988,12 @@ has_sphinx_build() {
                     "$TMPDIR1/sphinx/out"  >> config.log 2>&1
+# While we support --sphinx-build, defer to that.
+# Otherwise, use the module execution feature of Python.
+if ! has $sphinx_build; then
+    sphinx_build="$python -m sphinx"
 # Check if tools are available to build documentation.
 if test "$docs" != "no" ; then
   if has_sphinx_build; then

More information about the libvir-list mailing list