mirror of
https://github.com/saymrwulf/uhd.git
synced 2026-05-16 21:10:10 +00:00
cmake: Replace distutils.sysconfig with sysconfig
This commit replaces uses of distutils.sysconfig's get_python_lib()
function with sysconfig's near-equivalent get_path() function to get the
directory for site-specific, platform-specific files. Unfortunately,
get_path() does not have a way to easily modify or strip the prefix
applied to the path like get_python_lib() does, so the code must
manually modify the path to get the same effect:
- First, the platlib path is retrieved from the get_path() call.
- Next, the default base that is used to form the pathlib path is
queried via the get_config_var('base') call.
- Next, the portion of the platlib path that matches the default base is
stripped, and any leading path separator remaining is stripped. This
fundamentally replicates the behavior of get_python_lib() with an empty
prefix (i.e., the prefix positional parameter is specified as '').
- If a different prefix is desired, then the os.path.join() function is
used to combine the new prefix with the stripped pathlib path, ensuring
that the platform-specific path separator is used in crafting the path.
This commit is contained in:
parent
6d746fd296
commit
87bc7c1bde
3 changed files with 21 additions and 12 deletions
|
|
@ -42,7 +42,7 @@ if(WIN32)
|
|||
else()
|
||||
execute_process(
|
||||
COMMAND "${PYTHON_EXECUTABLE}" -c
|
||||
"from distutils.sysconfig import get_config_var; print(get_config_var('EXT_SUFFIX'))"
|
||||
"from sysconfig import get_config_var; print(get_config_var('EXT_SUFFIX'))"
|
||||
OUTPUT_VARIABLE PYTHON_EXTENSION_SUFFIX
|
||||
)
|
||||
string(STRIP ${PYTHON_EXTENSION_SUFFIX} PYTHON_EXTENSION_SUFFIX)
|
||||
|
|
@ -159,7 +159,7 @@ if(HAVE_PYTHON_VIRTUALENV)
|
|||
# In virtualenvs, let setuptools do its thing
|
||||
install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} ${SETUP_PY} -q install --force)")
|
||||
else()
|
||||
# Otherwise, use distutils to determine the correct relative path for Python
|
||||
# Otherwise, use sysconfig to determine the correct relative path for Python
|
||||
# packages, and install to our prefix
|
||||
if(NOT DEFINED UHD_PYTHON_DIR)
|
||||
if(WIN32)
|
||||
|
|
@ -168,14 +168,18 @@ else()
|
|||
# a blank prefix, which returns only the Python library relative
|
||||
# path, and use that in the install step below.
|
||||
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c
|
||||
"from distutils import sysconfig;\
|
||||
print(sysconfig.get_python_lib(plat_specific=True, prefix=''));"
|
||||
"import sysconfig;\
|
||||
platlib = sysconfig.get_path(name='platlib');\
|
||||
base = sysconfig.get_config_var('base');\
|
||||
print(platlib.replace(base, '').lstrip('\\\\'));"
|
||||
OUTPUT_VARIABLE UHD_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
else()
|
||||
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c
|
||||
"from distutils import sysconfig;\
|
||||
print(sysconfig.get_python_lib(plat_specific=True, prefix='${CMAKE_INSTALL_PREFIX}'));"
|
||||
"import sysconfig; import os.path; \
|
||||
platlib = sysconfig.get_path(name='platlib');\
|
||||
base = sysconfig.get_config_var('base');\
|
||||
print(os.path.join('${CMAKE_INSTALL_PREFIX}', platlib.replace(base, '').lstrip('/')));"
|
||||
OUTPUT_VARIABLE UHD_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
endif(WIN32)
|
||||
|
|
@ -184,9 +188,9 @@ else()
|
|||
|
||||
message(STATUS "Utilizing the python install directory: ${UHD_PYTHON_DIR}")
|
||||
# CMake will create an up-to-date copy of the entire Python module within
|
||||
# the build directory. Instead of using setuptools, we use distutils (above)
|
||||
# to figure out the destination path, and then we simply copy this module
|
||||
# recursively into its final destination.
|
||||
# the build directory. Use sysconfig (above) to figure out the destination
|
||||
# path, and then we simply copy this module recursively into its final
|
||||
# destination.
|
||||
install(DIRECTORY
|
||||
${CMAKE_CURRENT_BINARY_DIR}/uhd
|
||||
DESTINATION ${UHD_PYTHON_DIR}
|
||||
|
|
|
|||
|
|
@ -101,7 +101,10 @@ add_custom_command(OUTPUT ${OUTPUT}
|
|||
add_custom_target(usrp_mpm ALL DEPENDS ${OUTPUT} pyusrp_periphs)
|
||||
|
||||
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c
|
||||
"from __future__ import print_function; from distutils import sysconfig; print(sysconfig.get_python_lib(plat_specific=True, prefix=''))"
|
||||
"import sysconfig;\
|
||||
platlib = sysconfig.get_path(name='platlib');\
|
||||
base = sysconfig.get_config_var('base');\
|
||||
print(platlib.replace(base, '').lstrip('/\\\\'))"
|
||||
OUTPUT_VARIABLE USRP_MPM_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/build/lib/usrp_mpm DESTINATION ${USRP_MPM_PYTHON_DIR})
|
||||
|
|
|
|||
|
|
@ -105,8 +105,10 @@ endmacro(GR_PYTHON_CHECK_MODULE)
|
|||
########################################################################
|
||||
if(NOT DEFINED GR_PYTHON_DIR)
|
||||
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
|
||||
from distutils import sysconfig
|
||||
print sysconfig.get_python_lib(plat_specific=True, prefix='')
|
||||
import sysconfig
|
||||
platlib = sysconfig.get_path(name='platlib')
|
||||
base = sysconfig.get_config_var('base')
|
||||
print(platlib.replace(base, '').lstrip('/\\\\'))
|
||||
" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
endif()
|
||||
|
|
|
|||
Loading…
Reference in a new issue