Tue Jul 26 16:44:28 2016 UTC ()
Add an option for Python: x11

Fix build on systems with disabled X11

Reported by <schmonz>, Andreas Kusalananda Kahari
Tested by Andreas Kusalananda Kahari

Possible direction is to make this switch by default disabled on Darwin.


(kamil)
diff -r1.65 -r1.66 pkgsrc/lang/python27/Makefile
diff -r1.57 -r1.58 pkgsrc/lang/python27/distinfo
diff -r0 -r1.1 pkgsrc/lang/python27/options.mk
diff -r1.20 -r1.21 pkgsrc/lang/python27/patches/patch-am

cvs diff -r1.65 -r1.66 pkgsrc/lang/python27/Makefile (expand / switch to unified diff)

--- pkgsrc/lang/python27/Makefile 2016/07/23 21:12:48 1.65
+++ pkgsrc/lang/python27/Makefile 2016/07/26 16:44:28 1.66
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1# $NetBSD: Makefile,v 1.65 2016/07/23 21:12:48 kamil Exp $ 1# $NetBSD: Makefile,v 1.66 2016/07/26 16:44:28 kamil Exp $
2 2
3.include "dist.mk" 3.include "dist.mk"
4 4
5PKGNAME= python27-${PY_DISTVERSION} 5PKGNAME= python27-${PY_DISTVERSION}
6PKGREVISION= 3 6PKGREVISION= 3
7CATEGORIES= lang python 7CATEGORIES= lang python
8 8
9MAINTAINER= pkgsrc-users@NetBSD.org 9MAINTAINER= pkgsrc-users@NetBSD.org
10HOMEPAGE= http://www.python.org/ 10HOMEPAGE= http://www.python.org/
11COMMENT= Interpreted, interactive, object-oriented programming language 11COMMENT= Interpreted, interactive, object-oriented programming language
12LICENSE= python-software-foundation 12LICENSE= python-software-foundation
13 13
14DEPENDS= mozilla-rootcerts>=1.0.20150804nb1:../../security/mozilla-rootcerts 14DEPENDS= mozilla-rootcerts>=1.0.20150804nb1:../../security/mozilla-rootcerts
@@ -168,36 +168,29 @@ SUBST_SED.findlib= -e 's,/usr/local,${PR @@ -168,36 +168,29 @@ SUBST_SED.findlib= -e 's,/usr/local,${PR
168# >>> find_library("m") 168# >>> find_library("m")
169# 'libm.so.0' 169# 'libm.so.0'
170# >>> find_library("crypto") 170# >>> find_library("crypto")
171# 'libcrypto.so.11' 171# 'libcrypto.so.11'
172# >>> find_library("GL") 172# >>> find_library("GL")
173# 'libGL.so.2' 173# 'libGL.so.2'
174# >>> find_library("curl") 174# >>> find_library("curl")
175# 'libcurl.so.4' 175# 'libcurl.so.4'
176 176
177SUBST_CLASSES+= pfindlib 177SUBST_CLASSES+= pfindlib
178SUBST_MESSAGE.pfindlib= Fixing find_library() on POSIX-like (excluding Darwin) systems. 178SUBST_MESSAGE.pfindlib= Fixing find_library() on POSIX-like (excluding Darwin) systems.
179SUBST_STAGE.pfindlib= pre-configure 179SUBST_STAGE.pfindlib= pre-configure
180SUBST_FILES.pfindlib= Lib/ctypes/util.py 180SUBST_FILES.pfindlib= Lib/ctypes/util.py
181SUBST_SED.pfindlib= -e 's!\(-Wl,-t -o\)!${COMPILER_RPATH_FLAG}${X11BASE}/lib -L${X11BASE}/lib ${COMPILER_RPATH_FLAG}${PREFIX}/lib -L${PREFIX}/lib \1!' 181SUBST_SED.pfindlib= -e 's!\(-Wl,-t -o\)!${COMPILER_RPATH_FLAG}${PREFIX}/lib -L${PREFIX}/lib \1!'
182 182
183SUBST_CLASSES+= cdlopen 183.include "options.mk"
184SUBST_MESSAGE.cdlopen= Handle X11BASE paths in dlopen(3) calls of _ctypes.so 
185SUBST_STAGE.cdlopen= pre-configure 
186SUBST_FILES.cdlopen= setup.py 
187SUBST_VARS.cdlopen= X11BASE 
188 
189# Required to detect X11BASE paths in dlopen(3) calls of _ctypes.so 
190USE_X11= yes 
191 184
192SUBST_CLASSES+= sslbase 185SUBST_CLASSES+= sslbase
193SUBST_MESSAGE.sslbase= Fixing find-file for openssl with SSLBASE. 186SUBST_MESSAGE.sslbase= Fixing find-file for openssl with SSLBASE.
194SUBST_STAGE.sslbase= pre-configure 187SUBST_STAGE.sslbase= pre-configure
195SUBST_FILES.sslbase= setup.py 188SUBST_FILES.sslbase= setup.py
196SUBST_VARS.sslbase= SSLBASE 189SUBST_VARS.sslbase= SSLBASE
197 190
198SUBST_CLASSES+= cacert 191SUBST_CLASSES+= cacert
199SUBST_MESSAGE.cacert= Configuring location of default CA certificate file. 192SUBST_MESSAGE.cacert= Configuring location of default CA certificate file.
200SUBST_STAGE.cacert= pre-configure 193SUBST_STAGE.cacert= pre-configure
201SUBST_FILES.cacert= Modules/_ssl.c 194SUBST_FILES.cacert= Modules/_ssl.c
202SUBST_SED.cacert= -e 's,@PREFIX@,${PREFIX},' 195SUBST_SED.cacert= -e 's,@PREFIX@,${PREFIX},'
203 196

cvs diff -r1.57 -r1.58 pkgsrc/lang/python27/distinfo (expand / switch to unified diff)

--- pkgsrc/lang/python27/distinfo 2016/07/23 18:28:26 1.57
+++ pkgsrc/lang/python27/distinfo 2016/07/26 16:44:28 1.58
@@ -1,32 +1,32 @@ @@ -1,32 +1,32 @@
1$NetBSD: distinfo,v 1.57 2016/07/23 18:28:26 kamil Exp $ 1$NetBSD: distinfo,v 1.58 2016/07/26 16:44:28 kamil Exp $
2 2
3SHA1 (Python-2.7.12.tar.xz) = 05360b8ade117b35e266b2004a7f1f11250c6dcd 3SHA1 (Python-2.7.12.tar.xz) = 05360b8ade117b35e266b2004a7f1f11250c6dcd
4RMD160 (Python-2.7.12.tar.xz) = c330f6ac08ed67f307de0e726a288bab16c832d5 4RMD160 (Python-2.7.12.tar.xz) = c330f6ac08ed67f307de0e726a288bab16c832d5
5SHA512 (Python-2.7.12.tar.xz) = 6ddbbce47cc49597433d98ca05c2f62f07ed1070807b645602a8e9e9b996adc6fa66fa20a33cd7d23d4e7e925e25071d7301d288149fbe4e8c5f06d5438dda1f 5SHA512 (Python-2.7.12.tar.xz) = 6ddbbce47cc49597433d98ca05c2f62f07ed1070807b645602a8e9e9b996adc6fa66fa20a33cd7d23d4e7e925e25071d7301d288149fbe4e8c5f06d5438dda1f
6Size (Python-2.7.12.tar.xz) = 12390820 bytes 6Size (Python-2.7.12.tar.xz) = 12390820 bytes
7SHA1 (patch-Include_pyerrors.h) = 0d2cd52d18cc719b895fa32ed7e11c6cb15bae54 7SHA1 (patch-Include_pyerrors.h) = 0d2cd52d18cc719b895fa32ed7e11c6cb15bae54
8SHA1 (patch-Include_pyport.h) = f3e4ddbc954425a65301465410911222ca471320 8SHA1 (patch-Include_pyport.h) = f3e4ddbc954425a65301465410911222ca471320
9SHA1 (patch-Lib_distutils_unixccompiler.py) = db16c9aca2f29730945f28247b88b18828739bbb 9SHA1 (patch-Lib_distutils_unixccompiler.py) = db16c9aca2f29730945f28247b88b18828739bbb
10SHA1 (patch-Lib_multiprocessing_process.py) = 15699bd8ec822bf54a0631102e00e0a34f882803 10SHA1 (patch-Lib_multiprocessing_process.py) = 15699bd8ec822bf54a0631102e00e0a34f882803
11SHA1 (patch-Modules___multiprocessing_semaphore.c) = 03b9c33ef38da383d5f7c2c84c17fe38cdd2911e 11SHA1 (patch-Modules___multiprocessing_semaphore.c) = 03b9c33ef38da383d5f7c2c84c17fe38cdd2911e
12SHA1 (patch-Modules__ssl.c) = 6e68f88ad205106691900f091a897ffe0a4c363c 12SHA1 (patch-Modules__ssl.c) = 6e68f88ad205106691900f091a897ffe0a4c363c
13SHA1 (patch-Modules_getaddrinfo.c) = aa699d257f1bc98b9a3183a21324053e134409d1 13SHA1 (patch-Modules_getaddrinfo.c) = aa699d257f1bc98b9a3183a21324053e134409d1
14SHA1 (patch-Modules_getpath.c) = 9bb2c040895ad6bbe4d0b5807803723b5437d47b 14SHA1 (patch-Modules_getpath.c) = 9bb2c040895ad6bbe4d0b5807803723b5437d47b
15SHA1 (patch-Modules_posixmodule.c) = 5105d380cd49bf49b8adbd9aa5ffb245195728ed 15SHA1 (patch-Modules_posixmodule.c) = 5105d380cd49bf49b8adbd9aa5ffb245195728ed
16SHA1 (patch-Modules_socketmodule.c) = 16848d90947b3de1f921a0813fa5c317f76961d4 16SHA1 (patch-Modules_socketmodule.c) = 16848d90947b3de1f921a0813fa5c317f76961d4
17SHA1 (patch-aa) = d9626c1648d7ff2a7da7352665bcb05f4ab0412a 17SHA1 (patch-aa) = d9626c1648d7ff2a7da7352665bcb05f4ab0412a
18SHA1 (patch-ab) = ea4feba4e93dbcff07050c82a00d591bb650e934 18SHA1 (patch-ab) = ea4feba4e93dbcff07050c82a00d591bb650e934
19SHA1 (patch-ad) = 96ae702995d434e2d7ec0ac62e37427a90b61d13 19SHA1 (patch-ad) = 96ae702995d434e2d7ec0ac62e37427a90b61d13
20SHA1 (patch-ae) = d836d77854a2b3d79fa34a06a8e2493bf0a503e6 20SHA1 (patch-ae) = d836d77854a2b3d79fa34a06a8e2493bf0a503e6
21SHA1 (patch-ah) = 90b19239d8a7c8abc3bbc05d49408a2c5da6174d 21SHA1 (patch-ah) = 90b19239d8a7c8abc3bbc05d49408a2c5da6174d
22SHA1 (patch-al) = 541936b79f281db06761f4fa6a65a04e852b02b4 22SHA1 (patch-al) = 541936b79f281db06761f4fa6a65a04e852b02b4
23SHA1 (patch-am) = 5e763a0fe26be562cf5e49e6313a9f18d9ee9908 23SHA1 (patch-am) = cf82bd1996aea8a8536bd37a74563bb85817c968
24SHA1 (patch-an) = 9aad78714c4fe1a21cf66a6627d97d164ecea196 24SHA1 (patch-an) = 9aad78714c4fe1a21cf66a6627d97d164ecea196
25SHA1 (patch-ao) = 5bcfad96f8e490351160f1a7c1f4ece7706a33fa 25SHA1 (patch-ao) = 5bcfad96f8e490351160f1a7c1f4ece7706a33fa
26SHA1 (patch-au) = 0ecdb937cbd58e3dbfa6fb94d1af5838619c77fd 26SHA1 (patch-au) = 0ecdb937cbd58e3dbfa6fb94d1af5838619c77fd
27SHA1 (patch-av) = e6aef090b444b455fe351308d251e670329b7dc3 27SHA1 (patch-av) = e6aef090b444b455fe351308d251e670329b7dc3
28SHA1 (patch-aw) = d07129531ec1427669092c504c12247206408c2d 28SHA1 (patch-aw) = d07129531ec1427669092c504c12247206408c2d
29SHA1 (patch-ax) = 8a7a0e5cbfec279a05945dffafea1b1131a76f0e 29SHA1 (patch-ax) = 8a7a0e5cbfec279a05945dffafea1b1131a76f0e
30SHA1 (patch-az) = 01e113b0bd251978b555caaaa60b79c372edebce 30SHA1 (patch-az) = 01e113b0bd251978b555caaaa60b79c372edebce
31SHA1 (patch-pyconfig.h.in) = a0143ecdc2a3fb10220d0e3ee94fb9779a45e9e1 31SHA1 (patch-pyconfig.h.in) = a0143ecdc2a3fb10220d0e3ee94fb9779a45e9e1
32SHA1 (patch-xa) = 517cfefc2f2e13631d22bad28c327513cdf17c10 32SHA1 (patch-xa) = 517cfefc2f2e13631d22bad28c327513cdf17c10

File Added: pkgsrc/lang/python27/options.mk
# $NetBSD: options.mk,v 1.1 2016/07/26 16:44:28 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

cvs diff -r1.20 -r1.21 pkgsrc/lang/python27/patches/Attic/patch-am (expand / switch to unified diff)

--- pkgsrc/lang/python27/patches/Attic/patch-am 2016/07/23 18:28:26 1.20
+++ pkgsrc/lang/python27/patches/Attic/patch-am 2016/07/26 16:44:28 1.21
@@ -1,41 +1,38 @@ @@ -1,41 +1,38 @@
1$NetBSD: patch-am,v 1.20 2016/07/23 18:28:26 kamil Exp $ 1$NetBSD: patch-am,v 1.21 2016/07/26 16:44:28 kamil Exp $
2 2
3Disabled modules for normal build: 3Disabled modules for normal build:
4bsddb 4bsddb
5curses 5curses
6curses_panel 6curses_panel
7elementtree 7elementtree
8sqlite3 8sqlite3
9tkinter 9tkinter
10gdbm 10gdbm
11pyexpat 11pyexpat
12readline 12readline
13{linux,oss,sun}audiodev 13{linux,oss,sun}audiodev
14spwd 14spwd
15Those have separate packages where needed. 15Those have separate packages where needed.
16 16
17Only check the BUILDLINK_DIR for libraries etc, do not pick up random 17Only check the BUILDLINK_DIR for libraries etc, do not pick up random
18headers and libraries from the system. 18headers and libraries from the system.
19 19
20Build the _ssl module with pkgsrc choiced OpenSSL. 20Build the _ssl module with pkgsrc choiced OpenSSL.
21 21
22Build the 1.85 compat module all the time against the BDB version of choice. 22Build the 1.85 compat module all the time against the BDB version of choice.
23 23
24cygwin 2.7.3-no-libm.patch 24cygwin 2.7.3-no-libm.patch
25 25
26Set X11BASE rpath value for _ctypes.so, it's required as it calls dlopen(3) 
27and dynamic linker cannot find without it X11 libraries. 
28 
29--- setup.py.orig 2016-06-25 21:49:32.000000000 +0000 26--- setup.py.orig 2016-06-25 21:49:32.000000000 +0000
30+++ setup.py 27+++ setup.py
31@@ -33,7 +33,7 @@ host_platform = get_platform() 28@@ -33,7 +33,7 @@ host_platform = get_platform()
32 COMPILED_WITH_PYDEBUG = ('--with-pydebug' in sysconfig.get_config_var("CONFIG_ARGS")) 29 COMPILED_WITH_PYDEBUG = ('--with-pydebug' in sysconfig.get_config_var("CONFIG_ARGS"))
33  30
34 # This global variable is used to hold the list of modules to be disabled. 31 # This global variable is used to hold the list of modules to be disabled.
35-disabled_module_list = [] 32-disabled_module_list = []
36+disabled_module_list = ["_bsddb", "_curses", "_curses_panel", "_elementtree", "_sqlite3", "_tkinter", "gdbm", "pyexpat", "readline", "linuxaudiodev", "ossaudiodev", "spwd", "sunaudiodev"] 33+disabled_module_list = ["_bsddb", "_curses", "_curses_panel", "_elementtree", "_sqlite3", "_tkinter", "gdbm", "pyexpat", "readline", "linuxaudiodev", "ossaudiodev", "spwd", "sunaudiodev"]
37  34
38 def add_dir_to_list(dirlist, dir): 35 def add_dir_to_list(dirlist, dir):
39 """Add the directory 'dir' to the list 'dirlist' (at the front) if 36 """Add the directory 'dir' to the list 'dirlist' (at the front) if
40@@ -454,10 +454,15 @@ class PyBuildExt(build_ext): 37@@ -454,10 +454,15 @@ class PyBuildExt(build_ext):
41 os.unlink(tmpfile) 38 os.unlink(tmpfile)
@@ -367,34 +364,26 @@ and dynamic linker cannot find without i @@ -367,34 +364,26 @@ and dynamic linker cannot find without i
367- libraries=dblibs) 364- libraries=dblibs)
368- break 365- break
369+ print "building dbm using bdb" 366+ print "building dbm using bdb"
370+ dbmext = Extension('dbm', ['dbmmodule.c'], 367+ dbmext = Extension('dbm', ['dbmmodule.c'],
371+ define_macros=[ 368+ define_macros=[
372+ ('HAVE_BERKDB_H', None), 369+ ('HAVE_BERKDB_H', None),
373+ ('DB_DBM_HSEARCH', None), 370+ ('DB_DBM_HSEARCH', None),
374+ ], 371+ ],
375+ libraries=["db"]) 372+ libraries=["db"])
376+ break 373+ break
377 if dbmext is not None: 374 if dbmext is not None:
378 exts.append(dbmext) 375 exts.append(dbmext)
379 else: 376 else:
380@@ -2113,6 +1946,7 @@ class PyBuildExt(build_ext): 377@@ -2250,9 +2083,9 @@ def main():
381 extra_compile_args=extra_compile_args, 
382 extra_link_args=extra_link_args, 
383 libraries=[], 
384+ runtime_library_dirs=['@X11BASE@/lib'], 
385 sources=sources, 
386 depends=depends) 
387 ext_test = Extension('_ctypes_test', 
388@@ -2250,9 +2084,9 @@ def main(): 
389 ext_modules=[Extension('_struct', ['_struct.c'])], 378 ext_modules=[Extension('_struct', ['_struct.c'])],
390  379
391 # Scripts to install 380 # Scripts to install
392- scripts = ['Tools/scripts/pydoc', 'Tools/scripts/idle', 381- scripts = ['Tools/scripts/pydoc', 'Tools/scripts/idle',
393- 'Tools/scripts/2to3', 382- 'Tools/scripts/2to3',
394- 'Lib/smtpd.py'] 383- 'Lib/smtpd.py']
395+ scripts = ['Tools/scripts/pydoc2.7', 384+ scripts = ['Tools/scripts/pydoc2.7',
396+ 'Tools/scripts/2to3-2.7', 385+ 'Tools/scripts/2to3-2.7',
397+ 'Tools/scripts/smtpd2.7.py'] 386+ 'Tools/scripts/smtpd2.7.py']
398 ) 387 )
399  388
400 # --install-platlib 389 # --install-platlib