Obtain library path as concatenation of LIBDIR and LDLIBRARY config
variables (from sysconfig module) rather than hardcoding it in the
eclass. This improves maintainability and fixes compatibility with
ABIFLAGS-enabled Python 3.3+.
---
 eclass/python-utils-r1.eclass   | 21 +++++++--------------
 eclass/tests/python-utils-r1.sh |  4 ++--
 2 files changed, 9 insertions(+), 16 deletions(-)

diff --git a/eclass/python-utils-r1.eclass b/eclass/python-utils-r1.eclass
index a0274f6..ec85d8a 100644
--- a/eclass/python-utils-r1.eclass
+++ b/eclass/python-utils-r1.eclass
@@ -151,7 +151,8 @@ _python_impl_supported() {
 # The path to Python library.
 #
 # Set and exported on request using python_export().
-# Valid only for CPython.
+# Valid only for CPython. Requires a proper build-time dependency
+# on the Python implementation.
 #
 # Example value:
 # @CODE
@@ -289,20 +290,12 @@ python_export() {
                                fi
                                ;;
                        PYTHON_LIBPATH)
-                               local libname
-                               case "${impl}" in
-                                       python*)
-                                               libname=lib${impl}
-                                               ;;
-                                       *)
-                                               die "${impl} lacks a dynamic 
library"
-                                               ;;
-                               esac
-
-                               local path=${EPREFIX}/usr/$(get_libdir)
-
-                               export 
PYTHON_LIBPATH=${path}/${libname}$(get_libname)
+                               export PYTHON_LIBPATH=$("${PYTHON}" -c 'import 
os.path, sysconfig; print(os.path.join(sysconfig.get_config_var("LIBDIR"), 
sysconfig.get_config_var("LDLIBRARY")) if sysconfig.get_config_var("LDLIBRARY") 
else "")')
                                debug-print "${FUNCNAME}: PYTHON_LIBPATH = 
${PYTHON_LIBPATH}"
+
+                               if [[ ! ${PYTHON_LIBPATH} ]]; then
+                                       die "${impl} lacks a (usable) dynamic 
library"
+                               fi
                                ;;
                        PYTHON_CFLAGS)
                                local val
diff --git a/eclass/tests/python-utils-r1.sh b/eclass/tests/python-utils-r1.sh
index dc6676b..e54550d 100755
--- a/eclass/tests/python-utils-r1.sh
+++ b/eclass/tests/python-utils-r1.sh
@@ -66,8 +66,8 @@ test_var PYTHON python2_7 /usr/bin/python2.7
 test_var PYTHON_SITEDIR python2_7 /usr/lib/python2.7/site-packages
 if [[ -x /usr/bin/python2.7 ]]; then
        test_var PYTHON_INCLUDEDIR python2_7 /usr/include/python2.7
+       test_var PYTHON_LIBPATH python2_7 "/usr/lib*/libpython2.7$(get_libname)"
 fi
-test_var PYTHON_LIBPATH python2_7 /usr/lib/libpython2.7$(get_libname)
 test_var PYTHON_PKG_DEP python2_7 '*dev-lang/python*:2.7'
 test_var PYTHON_SCRIPTDIR python2_7 /usr/lib/python-exec/python2.7
 
@@ -77,8 +77,8 @@ test_var PYTHON_SITEDIR python3_4 
/usr/lib/python3.4/site-packages
 if [[ -x /usr/bin/python3.4 ]]; then
        abiflags=$(/usr/bin/python3.4 -c 'import sysconfig; 
print(sysconfig.get_config_var("ABIFLAGS"))')
        test_var PYTHON_INCLUDEDIR python3_4 "/usr/include/python3.4${abiflags}"
+       test_var PYTHON_LIBPATH python3_4 
"/usr/lib*/libpython3.4${abiflags}$(get_libname)"
 fi
-test_var PYTHON_LIBPATH python3_4 /usr/lib/libpython3.4$(get_libname)
 test_var PYTHON_PKG_DEP python3_4 '*dev-lang/python*:3.4'
 test_var PYTHON_SCRIPTDIR python3_4 /usr/lib/python-exec/python3.4
 
-- 
2.6.3


Reply via email to