diff options
author | kamil <kamil> | 2016-09-18 12:44:49 +0000 |
---|---|---|
committer | kamil <kamil> | 2016-09-18 12:44:49 +0000 |
commit | 31ae0cabd6e6a0a43ddb35c3780557848a4c40c2 (patch) | |
tree | a574c67c2be4184a6036cf3f08ddea652c150b8f /lang/python35 | |
parent | 60e2a43161626d274f952658896bb80fb3638489 (diff) | |
download | pkgsrc-31ae0cabd6e6a0a43ddb35c3780557848a4c40c2.tar.gz |
Forward port patches from python27 for dlopen(3)
Original changes in python27/Makefile r1.62-r1.67
=================================================
Add an option for Python: x11
Fix dlopen(3) calls in _ctypes.so for X11BASE libraries
A Python code can dynamically load shared libraries and it's wrapped with
a plain dlopen(3) call. The holder of this interface (_ctypes module)
without rpath set to X11BASE cannot detect libs like 'GL'.
Fixing find_library() on POSIX-like (excluding Darwin) systems.
This isn't addressing Python's wrapper for dlopen(3).
This possibily addresses mostly NetBSD as other popular OSes have ldconfig.
Testing commands:
- before applying the patch
>>> from ctypes.util import find_library
>>> find_library("m")
'libm.so.0'
>>> find_library("crypto")
'libcrypto.so.11'
>>> find_library("GL")
>>> find_library("curl")
- after applying the patch
>>> from ctypes.util import find_library
>>> find_library("m")
'libm.so.0'
>>> find_library("crypto")
'libcrypto.so.11'
>>> find_library("GL")
'libGL.so.2'
>>> find_library("curl")
'libcurl.so.4'
This patch doesn't solve the case of custom dirs like $PREFIX/qt5/lib.
However it's solving most common cases of using this call.
A possible solution is to parse the output "pkg_info -La"... however it's
very slow. In other words a cache with libraries might be needed to handle
it efficiently.
Diffstat (limited to 'lang/python35')
-rw-r--r-- | lang/python35/Makefile | 23 | ||||
-rw-r--r-- | lang/python35/options.mk | 28 |
2 files changed, 50 insertions, 1 deletions
diff --git a/lang/python35/Makefile b/lang/python35/Makefile index 2d5d0a0837e..95d3b506763 100644 --- a/lang/python35/Makefile +++ b/lang/python35/Makefile @@ -1,8 +1,9 @@ -# $NetBSD: Makefile,v 1.5 2016/07/02 15:07:47 adam Exp $ +# $NetBSD: Makefile,v 1.6 2016/09/18 12:44:49 kamil Exp $ .include "dist.mk" PKGNAME= python35-${PY_DISTVERSION} +PKGREVISION= 1 CATEGORIES= lang python MAINTAINER= pkgsrc-users@NetBSD.org @@ -122,6 +123,26 @@ SUBST_STAGE.findlib= pre-configure SUBST_FILES.findlib= Lib/distutils/unixccompiler.py SUBST_SED.findlib= -e 's,/usr/local,${PREFIX},' +# XXX: It might be needed to add manually more paths like ${PREFIX}/qt5/lib +# Testing: +# >>> from ctypes.util import find_library +# >>> find_library("m") +# 'libm.so.0' +# >>> find_library("crypto") +# 'libcrypto.so.11' +# >>> find_library("GL") +# 'libGL.so.2' +# >>> find_library("curl") +# 'libcurl.so.4' + +SUBST_CLASSES+= pfindlib +SUBST_MESSAGE.pfindlib= Fixing find_library() on POSIX-like (excluding Darwin) systems. +SUBST_STAGE.pfindlib= pre-configure +SUBST_FILES.pfindlib= Lib/ctypes/util.py +SUBST_SED.pfindlib= -e 's!\(-Wl,-t -o\)!${COMPILER_RPATH_FLAG}${PREFIX}/lib -L${PREFIX}/lib \1!' + +.include "options.mk" + SUBST_CLASSES+= sslbase SUBST_MESSAGE.sslbase= Fixing OpenSSL base directory to find header file. SUBST_STAGE.sslbase= pre-configure diff --git a/lang/python35/options.mk b/lang/python35/options.mk new file mode 100644 index 00000000000..1beb2fc695e --- /dev/null +++ b/lang/python35/options.mk @@ -0,0 +1,28 @@ +# $NetBSD: options.mk,v 1.1 2016/09/18 12:44:49 kamil Exp $ + +PKG_OPTIONS_VAR= PKG_OPTIONS.python27 +PKG_SUPPORTED_OPTIONS+= x11 +PKG_SUGGESTED_OPTIONS= x11 + +.include "../../mk/bsd.prefs.mk" +.include "../../mk/bsd.options.mk" + +.if !empty(PKG_OPTIONS:Mx11) +# Support for native X11 paths as an option +# This code is no-op for modular X11, however for simplicity don't make it conditional. +SUBST_CLASSES+= x11findlib +SUBST_MESSAGE.x11findlib= Fixing find_library() for native X11. +SUBST_STAGE.x11findlib= pre-configure +SUBST_FILES.x11findlib= Lib/ctypes/util.py +SUBST_SED.x11findlib= -e 's!\(-Wl,-t -o\)!${COMPILER_RPATH_FLAG}${X11BASE}/lib -L${X11BASE}/lib \1!' + +# Required to get definition of X11BASE and retain X11 rpath paths for linker +# We need to pass rpath to _ctypes.so to get functional dlopen(3) for X11 libs +USE_X11= yes + +SUBST_CLASSES+= cdlopen +SUBST_MESSAGE.cdlopen= Handle X11BASE paths in dlopen(3) calls of _ctypes.so +SUBST_STAGE.cdlopen= pre-configure +SUBST_FILES.cdlopen= setup.py +SUBST_SED.cdlopen= -e "s!\(libraries=\[\],\)!\1 runtime_library_dirs=\['${X11BASE}/lib'\],!" +.endif |