From 0bf3201d5f996b2797da5cde9f40bd80b700cc39 Mon Sep 17 00:00:00 2001 From: Stefan Wunsch <stefan.wunsch@student.kit.edu> Date: Thu, 13 Oct 2016 23:06:26 +0200 Subject: [PATCH] Fix in `find_python_module` cmake function `REQUIRED` flag; adapt function so that it prints cause of error --- cmake/modules/RootNewMacros.cmake | 40 +++++++++++++++++-------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/cmake/modules/RootNewMacros.cmake b/cmake/modules/RootNewMacros.cmake index 7c481523eb8..f3526e27421 100644 --- a/cmake/modules/RootNewMacros.cmake +++ b/cmake/modules/RootNewMacros.cmake @@ -955,24 +955,28 @@ endfunction() # find_python_module(module [REQUIRED]) #---------------------------------------------------------------------------- function(find_python_module module) - string(TOUPPER ${module} module_upper) - if(NOT PY_${module_upper}) - if(ARGC GREATER 1 AND ARGV1 STREQUAL "REQUIRED") - set(${module}_FIND_REQUIRED TRUE) - endif() - # 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) - if(NOT _${module}_status) - set(PY_${module_upper} ${_${module}_location} CACHE STRING "Location of Python module ${module}") - endif() - endif() - find_package_handle_standard_args(PY_${module} DEFAULT_MSG PY_${module_upper}) - set(PY_${module_upper}_FOUND ${PY_${module_upper}_FOUND} PARENT_SCOPE) + string(TOUPPER ${module} module_upper) + if(NOT PY_${module_upper}) + if(ARGC GREATER 1 AND ARGV1 STREQUAL "REQUIRED") + set(py_${module}_FIND_REQUIRED TRUE) + endif() + # 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_VARIABLE _${module}_error + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_STRIP_TRAILING_WHITESPACE) + if(NOT _${module}_status) + set(PY_${module_upper} ${_${module}_location} CACHE STRING "Location of Python module ${module}") + else(NOT _${module}_status) + message(STATUS "Failed to find Python module ${module}: ${_${module}_error}") + endif() + endif() + find_package_handle_standard_args(py_${module} DEFAULT_MSG PY_${module_upper}) + set(PY_${module_upper}_FOUND ${PY_${module_upper}_FOUND} PARENT_SCOPE) endfunction() -- GitLab