From e50569440622b7a3a53ff3a68193de584e01337f Mon Sep 17 00:00:00 2001 From: Nicolas Iooss Date: Fri, 1 May 2020 11:29:28 +0200 Subject: [PATCH] scripts/env_use_destdir: fix Fedora support libselinux and libsemanage use: PYTHONLIBDIR ?= $(shell $(PYTHON) -c "from distutils.sysconfig import *; print(get_python_lib(plat_specific=1, prefix='$(PREFIX)'))") while python/semanage and python/sepolgen/src/sepolgen use: PYTHONLIBDIR ?= $(shell $(PYTHON) -c "from distutils.sysconfig import *; print(get_python_lib(prefix='$(PREFIX)'))") This is right: libselinux and libsemanage's Python bindings use native code (thus "plat_specific=1") while the others only install Python files. Nevertheless `scripts/env_use_destdir` only runs the second command when computing `$PYTHONPATH`. When using this script to run `make test` in a minimal Fedora 31 environment, this leads to an error such as: make[2]: Entering directory '/code/python/sepolicy' Traceback (most recent call last): File "test_sepolicy.py", line 117, in import selinux ModuleNotFoundError: No module named 'selinux' Fix this by also adding `get_python_lib(plat_specific=1)` to the computed `$PYTHONPATH`. While at it, preserve `$PYTHONPATH` instead of resetting it. This makes it easier to work with Python virtual environments. Signed-off-by: Nicolas Iooss --- scripts/env_use_destdir | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/scripts/env_use_destdir b/scripts/env_use_destdir index 251987c2..491da58f 100755 --- a/scripts/env_use_destdir +++ b/scripts/env_use_destdir @@ -24,8 +24,14 @@ fi export LD_LIBRARY_PATH="$DESTDIR/usr/lib:$DESTDIR/lib" export PATH="$DESTDIR/usr/sbin:$DESTDIR/usr/bin:$DESTDIR/sbin:$DESTDIR/bin:$PATH" -# shellcheck disable=SC2155 -export PYTHONPATH="$DESTDIR$(${PYTHON:-python3} -c "from distutils.sysconfig import *;print(get_python_lib(prefix='/usr'))")" +NEW_PYTHONPATH="$DESTDIR$(${PYTHON:-python3} -c "from distutils.sysconfig import *;print(get_python_lib(plat_specific=1, prefix='/usr'))"):$DESTDIR$(${PYTHON:-python3} -c "from distutils.sysconfig import *;print(get_python_lib(prefix='/usr'))")" +if [ -n "${PYTHONPATH:-}" ] ; then + # Prefix the PYTHONPATH with the new directories + export PYTHONPATH="$NEW_PYTHONPATH:$PYTHONPATH" +else + # Define PYTHONPATH + export PYTHONPATH="$NEW_PYTHONPATH" +fi # shellcheck disable=SC2155 export RUBYLIB="$DESTDIR/$(${RUBY:-ruby} -e 'puts RbConfig::CONFIG["vendorlibdir"]'):$DESTDIR/$(${RUBY:-ruby} -e 'puts RbConfig::CONFIG["vendorarchdir"]')"