From 39e4e4167cd0695723b1d3800460da7cfd1f0e87 Mon Sep 17 00:00:00 2001 From: rdb Date: Sun, 15 Oct 2023 11:43:42 +0200 Subject: [PATCH] CMake: Switch use of distutils.sysconfig to sysconfig in Python 3.12 Part of #1395 --- dtool/Package.cmake | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/dtool/Package.cmake b/dtool/Package.cmake index 0a0fb8ea39..29cf844274 100644 --- a/dtool/Package.cmake +++ b/dtool/Package.cmake @@ -257,16 +257,32 @@ if(HAVE_PYTHON) set(_ARCH_DIR ".") elseif(PYTHON_EXECUTABLE) - execute_process( - COMMAND ${PYTHON_EXECUTABLE} - -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(False))" - OUTPUT_VARIABLE _LIB_DIR - OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process( - COMMAND ${PYTHON_EXECUTABLE} - -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(True))" - OUTPUT_VARIABLE _ARCH_DIR - OUTPUT_STRIP_TRAILING_WHITESPACE) + # Python 3.12 drops the distutils module, so we have to use the newer + # sysconfig module instead. Earlier versions of Python had the newer + # module too, but it was broken in Debian/Ubuntu, see #1230 + if(PYTHON_VERSION_STRING VERSION_LESS "3.12") + execute_process( + COMMAND ${PYTHON_EXECUTABLE} + -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(False))" + OUTPUT_VARIABLE _LIB_DIR + OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process( + COMMAND ${PYTHON_EXECUTABLE} + -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(True))" + OUTPUT_VARIABLE _ARCH_DIR + OUTPUT_STRIP_TRAILING_WHITESPACE) + else() + execute_process( + COMMAND ${PYTHON_EXECUTABLE} + -c "import sysconfig; print(sysconfig.get_path('purelib'))" + OUTPUT_VARIABLE _LIB_DIR + OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process( + COMMAND ${PYTHON_EXECUTABLE} + -c "import sysconfig; print(sysconfig.get_path('platlib'))" + OUTPUT_VARIABLE _ARCH_DIR + OUTPUT_STRIP_TRAILING_WHITESPACE) + endif() else() set(_LIB_DIR "")