Improve detection of sphinx-build.
authorM. Eric Irrgang <mei2n@virginia.edu>
Thu, 21 Oct 2021 09:32:44 +0000 (09:32 +0000)
committerAndrey Alekseenko <al42and@gmail.com>
Thu, 21 Oct 2021 09:32:44 +0000 (09:32 +0000)
Prioritize the sphinx-build associated with the current Python
interpreter, or as indicated by the user through the SPHINX_DIR
environment variable.

Mitigates problems with multiple Python installations and `autodoc`, or
where the Python installation is hinted to CMake but is not on the PATH.

Fixes #4224

cmake/FindSphinx.cmake

index 13bd5d4edc1e026e37dbeb61205e1e3e15378c32..0d62d36647a8522f9685cced865f469438d069a2 100644 (file)
@@ -1,7 +1,7 @@
 #
 # This file is part of the GROMACS molecular simulation package.
 #
-# Copyright (c) 2015,2018,2019,2020, by the GROMACS development team, led by
+# Copyright (c) 2015,2018,2019,2020,2021, by the GROMACS development team, led by
 # Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
 # and including many others, as listed in the AUTHORS file in the
 # top-level source directory and at http://www.gromacs.org.
 # To help us fund GROMACS development, we humbly ask that you cite
 # the research papers on the package. Check out http://www.gromacs.org.
 
+# Check the Python installation for sphinx-build, even if not on PATH.
+if(Python3_EXECUTABLE)
+    execute_process(
+        COMMAND ${Python3_EXECUTABLE} -c "import sys; print(sys.exec_prefix)"
+        OUTPUT_VARIABLE _python_exec_prefix
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+    )
+    list(APPEND CMAKE_PROGRAM_PATH ${_python_exec_prefix})
+    unset(_python_exec_prefix)
+    execute_process(
+        COMMAND ${Python3_EXECUTABLE} -m site --user-base
+        OUTPUT_VARIABLE _python_user_base
+        ERROR_QUIET
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+    )
+    if (_python_user_base)
+        list(APPEND CMAKE_PROGRAM_PATH ${_python_user_base})
+    endif ()
+    unset(_python_user_base)
+    execute_process(
+        COMMAND ${Python3_EXECUTABLE} -c "import sys; print(sys.base_exec_prefix)"
+        OUTPUT_VARIABLE _python_base_exec_prefix
+        ERROR_QUIET
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+    )
+    if (_python_base_exec_prefix)
+        list(APPEND CMAKE_PROGRAM_PATH ${_python_base_exec_prefix})
+    endif ()
+    unset(_python_base_exec_prefix)
+endif()
+
 find_program(SPHINX_EXECUTABLE NAMES sphinx-build sphinx-build2
-    HINTS
-    $ENV{SPHINX_DIR}
-    PATH_SUFFIXES bin
-    DOC "Sphinx documentation generator"
-)
+             HINTS ENV SPHINX_DIR
+             PATH_SUFFIXES bin
+             DOC "Sphinx documentation generator"
+             )
 mark_as_advanced(SPHINX_EXECUTABLE)
 
 # Detect Sphinx version