Remove status messages about Sphinx detection
authorTeemu Murtola <teemu.murtola@gmail.com>
Wed, 1 Jul 2015 03:21:41 +0000 (06:21 +0300)
committerGerrit Code Review <gerrit@gerrit.gromacs.org>
Thu, 2 Jul 2015 10:04:27 +0000 (12:04 +0200)
Make FindSphinx.cmake and FindPythonModule.cmake respect the QUIET
option, and pass that to find_package() to not print out information on
every CMake run.  Most people will not care whether these are found or
not, and being silent in all cases is the same approach as is used for
Doxygen.

In master, it could be useful to change at least some of the documentation
build rules such that they require GMX_DEVELOPER_BUILD to be set, and
that could also enable messages about not finding the components needed
for the documentation build, but that is outside the scope of this
change.

Fixes part of #1761 and #1764.

Change-Id: I196f5e66c94fe4247ae28bd230a469acbaad939a

cmake/FindPythonModule.cmake
cmake/FindSphinx.cmake
docs/CMakeLists.txt

index b8e965d1e69ee6955f6faa7d900b6214c8e68758..02773c643f44ee705b0b1ee974cf8f56ad08157b 100644 (file)
 # To help us fund GROMACS development, we humbly ask that you cite
 # the research papers on the package. Check out http://www.gromacs.org.
 
-# Adapted from code posted on cmake-users by Mark Moll
+# Adapted from code posted on cmake-users by Mark Moll (the execute_process()
+# call remains, but other things have been rewritten for nicer behavior).
 find_package(PythonInterp)
-function(find_python_module module)
-    string(TOUPPER ${module} module_upper)
-    if(NOT PYTHONMODULE_${module_upper})
-        if(ARGC GREATER 1 AND ARGV1 STREQUAL "REQUIRED")
-           set(${module}_FIND_REQUIRED TRUE)
-       endif()
-        if (NOT PYTHON_EXECUTABLE)
-            message(STATUS "Cannot find python module ${module} because no python executable is known")
-        else()
-           # A module's location is usually a directory, but for binary modules
-           # it's a .so file.
-           execute_process(COMMAND "${PYTHON_EXECUTABLE}" "-c"
-               "import re, ${module}; print re.compile('/__init__.py.*').sub('',${module}.__file__)"
-               RESULT_VARIABLE _${module}_status 
-               OUTPUT_VARIABLE _${module}_location
-               ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+function (find_python_module module)
+    string(TOUPPER ${module} _module_upper)
+    set(_find_package_module ${module})
+    set(_out_var PYTHONMODULE_${_module_upper})
+
+    include(CMakeParseArguments)
+    set(_options QUIET REQUIRED)
+    cmake_parse_arguments(ARG "${_options}" "" "" ${ARGN})
+    if (ARG_UNPARSED_ARGUMENTS)
+        message(FATAL_ERROR "Unknown arguments: ${ARG_UNPARSED_ARGUMENTS}")
+    endif()
+    if (ARG_REQUIRED)
+        set(${_find_package_module}_FIND_REQUIRED TRUE)
+    endif()
+    if (ARG_QUIET)
+        set(${_find_package_module}_FIND_QUIETLY TRUE)
+    endif()
+
+    if (NOT ${_out_var})
+        set(_status 1)
+        if (PYTHON_EXECUTABLE)
+            # A module's location is usually a directory, but for binary modules
+            # it's a .so file.
+            execute_process(COMMAND "${PYTHON_EXECUTABLE}" "-c"
+                "import re, ${module}; print re.compile('/__init__.py.*').sub('',${module}.__file__)"
+                RESULT_VARIABLE _status
+                OUTPUT_VARIABLE _location
+                ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
+        endif()
+        if(_status)
+            set(_location ${_find_package_module}-NOTFOUND)
         endif()
-       if(NOT _${module}_status)
-           set(PYTHONMODULE_${module_upper} ${_${module}_location} CACHE STRING 
-               "Location of Python module ${module}")
-       endif()
+        set(${_out_var} ${_location} CACHE STRING
+            "Location of Python module ${module}" FORCE)
+        mark_as_advanced(${_out_var})
     endif()
-    find_package_handle_standard_args(PYTHONMODULE_${module} DEFAULT_MSG PYTHONMODULE_${module_upper})
+    include(FindPackageHandleStandardArgs)
+    find_package_handle_standard_args(
+        ${_find_package_module} DEFAULT_MSG
+        ${_out_var} PYTHON_EXECUTABLE)
 endfunction()
index 46bf447abd082c53b535767578c6650ededb3eee..6eae5130251ce42f8c45fa5af582348e39986d9c 100644 (file)
@@ -41,8 +41,7 @@ find_program(SPHINX_EXECUTABLE NAMES sphinx-build
 mark_as_advanced(SPHINX_EXECUTABLE)
 
 # Detect Sphinx version
-
-if(SPHINX_FOUND AND NOT DEFINED SPHINX_EXECUTABLE_VERSION)
+if (SPHINX_EXECUTABLE AND NOT DEFINED SPHINX_EXECUTABLE_VERSION)
     execute_process(
         COMMAND ${SPHINX_EXECUTABLE} --version
         OUTPUT_VARIABLE SPHINX_VERSION_OUTPUT_VARIABLE
@@ -50,14 +49,17 @@ if(SPHINX_FOUND AND NOT DEFINED SPHINX_EXECUTABLE_VERSION)
         ERROR_QUIET
         OUTPUT_STRIP_TRAILING_WHITESPACE
         )
-    string(REGEX REPLACE "Sphinx \\(${SPHINX_EXECUTABLE}\\) ([^ ]+)" "\\1" SPHINX_EXECUTABLE_VERSION ${SPHINX_VERSION_OUTPUT_VARIABLE})
+    string(REGEX REPLACE "Sphinx \\([^)]*\\) ([^ ]+)" "\\1" SPHINX_EXECUTABLE_VERSION ${SPHINX_VERSION_OUTPUT_VARIABLE})
     set(SPHINX_EXECUTABLE_VERSION "${SPHINX_EXECUTABLE_VERSION}" CACHE INTERNAL "Version of ${SPHINX_EXECUTABLE}")
 endif()
 
+set(_find_deps_options)
+if (Sphinx_FIND_QUIETLY)
+    set(_find_deps_options QUIET)
+endif()
 include(FindPythonModule)
-find_python_module(pygments)
-
-if(PYTHONMODULE_PYGMENTS)
+find_python_module(pygments ${_find_deps_options})
+if (PYTHONMODULE_PYGMENTS)
     set(Sphinx_pygments_FOUND 1)
 endif()
 
index d3f190a6358ced923edfa66d449cd76e5acfb4d6..17a7681c8bb774afdaa4c57e95b6b5c4dcf7553c 100644 (file)
@@ -59,7 +59,7 @@ mark_as_advanced(SOURCE_MD5SUM)
 set(EXPECTED_DOXYGEN_VERSION 1.8.5)
 
 find_package(PythonInterp)
-find_package(Sphinx 1.2.3 COMPONENTS pygments)
+find_package(Sphinx 1.2.3 QUIET COMPONENTS pygments)
 
 # Even if we aren't going to make the full webpage, set up to put all
 # the documentation output in the same place, for convenience
@@ -250,6 +250,10 @@ else()
         COMMAND ${CMAKE_COMMAND} -E echo
             "HTML pages cannot be built because Sphinx is not available"
         VERBATIM)
+    add_custom_target(install-guide
+        COMMAND ${CMAKE_COMMAND} -E echo
+            "INSTALL cannot be built because Sphinx is not available"
+        VERBATIM)
     add_custom_target(man
         COMMAND ${CMAKE_COMMAND} -E echo
             "man pages cannot be built because Sphinx is not available"