sphinx-build is the name of the script entry point from the sphinx package itself. sphinx-build-3 is a pacakging convention in the Fedora distribution of Sphinx. Prefer, where possible, the canonical package name.
In the event that this resolves to a python2 version, test the suitability of the binary early in the configuration process, and continue looking for sphinx-build-3 if necessary. This prioritizes a virtual environment version of sphinx above any distribution versions, if attempting to build out of a virtual python environment, which can ease dependency difficulties on older distributions, as well as allowing easy testing of specific sphinx versions. Signed-off-by: John Snow <js...@redhat.com> --- configure | 66 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/configure b/configure index 0d69c360c0..cda4b022e7 100755 --- a/configure +++ b/configure @@ -929,13 +929,42 @@ do fi done +# If we're making warnings fatal, apply this to Sphinx runs as well +sphinx_werror="" +if test "$werror" = "yes"; then + sphinx_werror="-W" +fi + +# Check we have a new enough version of sphinx-build +test_sphinx_build() { + sphinx=$1 + # This is a bit awkward but works: create a trivial document and + # try to run it with our configuration file (which enforces a + # version requirement). This will fail if either + # sphinx-build doesn't exist at all or if it is too old. + mkdir -p "$TMPDIR1/sphinx" + touch "$TMPDIR1/sphinx/index.rst" + "$sphinx" $sphinx_werror -c "$source_path/docs" \ + -b html "$TMPDIR1/sphinx" \ + "$TMPDIR1/sphinx/out" >> config.log 2>&1 +} + +# We require the python3 version of sphinx, but sphinx-build-3 is a +# distro package. prefer 'sphinx-build' to find the venv version, if +# any, but ensure it is a suitable version. sphinx_build= -for binary in sphinx-build-3 sphinx-build +sphinx_ok= +for binary in sphinx-build sphinx-build-3 do if has "$binary" then - sphinx_build=$(command -v "$binary") - break + sphinx_candidate=$(command -v "$binary") + if test_sphinx_build "$sphinx_candidate" + then + sphinx_build=$sphinx_candidate + sphinx_ok=yes + break + fi fi done @@ -4929,32 +4958,17 @@ if check_include sys/kcov.h ; then kcov=yes fi -# If we're making warnings fatal, apply this to Sphinx runs as well -sphinx_werror="" -if test "$werror" = "yes"; then - sphinx_werror="-W" -fi - -# Check we have a new enough version of sphinx-build -has_sphinx_build() { - # This is a bit awkward but works: create a trivial document and - # try to run it with our configuration file (which enforces a - # version requirement). This will fail if either - # sphinx-build doesn't exist at all or if it is too old. - mkdir -p "$TMPDIR1/sphinx" - touch "$TMPDIR1/sphinx/index.rst" - "$sphinx_build" $sphinx_werror -c "$source_path/docs" \ - -b html "$TMPDIR1/sphinx" \ - "$TMPDIR1/sphinx/out" >> config.log 2>&1 -} - # Check if tools are available to build documentation. if test "$docs" != "no" ; then - if has_sphinx_build; then - sphinx_ok=yes - else - sphinx_ok=no + + if [ "$sphinx_ok" != "yes" ]; then + if test_sphinx_build "$sphinx_build"; then + sphinx_ok=yes + else + sphinx_ok=no + fi fi + if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then docs=yes else -- 2.21.1