From 0dbf5ddb73c00684221626c57b200416bfc3ceed Mon Sep 17 00:00:00 2001 From: Teemu Murtola Date: Wed, 1 Jul 2015 06:21:41 +0300 Subject: [PATCH] Remove status messages about Sphinx detection 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 | 63 +++++++++++++++++++++++------------- cmake/FindSphinx.cmake | 14 ++++---- docs/CMakeLists.txt | 6 +++- 3 files changed, 54 insertions(+), 29 deletions(-) diff --git a/cmake/FindPythonModule.cmake b/cmake/FindPythonModule.cmake index b8e965d1e6..02773c643f 100644 --- a/cmake/FindPythonModule.cmake +++ b/cmake/FindPythonModule.cmake @@ -32,29 +32,48 @@ # 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() diff --git a/cmake/FindSphinx.cmake b/cmake/FindSphinx.cmake index 46bf447abd..6eae513025 100644 --- a/cmake/FindSphinx.cmake +++ b/cmake/FindSphinx.cmake @@ -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() diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt index d3f190a635..17a7681c8b 100644 --- a/docs/CMakeLists.txt +++ b/docs/CMakeLists.txt @@ -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" -- 2.22.0