Check if module file extension could be queried correctly (#2538)

On very incomplete python installations (e.g. within Docker), it's
possible that distutils is not installed. In that case, the
``execute_command`` statement that queries distutils for the Python
module extension fails, and pybind11 uses the empty string. This commit
adds an extra check that causes a CMake failure with more actionable
information (just spent a lot of time trying to track down this problem :))
This commit is contained in:
Wenzel Jakob 2020-09-30 23:49:11 +02:00 committed by GitHub
parent 01ad89209a
commit 3232e59b83
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -91,7 +91,13 @@ execute_process(
COMMAND "${${_Python}_EXECUTABLE}" "-c" COMMAND "${${_Python}_EXECUTABLE}" "-c"
"from distutils import sysconfig; print(sysconfig.get_config_var('SO'))" "from distutils import sysconfig; print(sysconfig.get_config_var('SO'))"
OUTPUT_VARIABLE _PYTHON_MODULE_EXTENSION OUTPUT_VARIABLE _PYTHON_MODULE_EXTENSION
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) ERROR_VARIABLE _PYTHON_MODULE_EXTENSION_ERR
OUTPUT_STRIP_TRAILING_WHITESPACE)
if (_PYTHON_MODULE_EXTENSION STREQUAL "")
message(FATAL_ERROR "pybind11 could not query the module file extension, likely the 'distutils'"
"package is not installed. Full error message:\n${_PYTHON_MODULE_EXTENSION_ERR}")
endif()
# This needs to be available for the pybind11_extension function # This needs to be available for the pybind11_extension function
set(PYTHON_MODULE_EXTENSION set(PYTHON_MODULE_EXTENSION