From d5dc8a4e54a19470f02f1b7f76da73f4000c0776 Mon Sep 17 00:00:00 2001 From: recht Date: Mon, 8 Dec 2003 21:13:56 +0000 Subject: Update to Python 2.3.2 Changes in Python: Quite a few fixes.. See NEWS for details. Changes in the pkg: - add FreeBSD patches from the FreeBSD port - add fix for a fatal bug in type's GC handling causes segfaults (via FreeBSD port) see http://cvs.sourceforge.net/viewcvs.py/python/python/dist/src/Misc/NEWS?r1=1.831.4.75&r2=1.831.4.76&diff_format=u - always build the db 1.85 module (on all platforms) --- lang/python23/Makefile | 74 ++++++++++---- lang/python23/PLIST.Linux | 8 +- lang/python23/PLIST.NetBSD | 7 +- lang/python23/PLIST.common | 17 +++- lang/python23/PLIST.common_end | 2 +- lang/python23/distinfo | 26 ++--- lang/python23/patches/patch-aa | 81 ---------------- lang/python23/patches/patch-ab | 26 +++++ lang/python23/patches/patch-ac | 13 +++ lang/python23/patches/patch-ad | 23 +++++ lang/python23/patches/patch-ae | 34 +++---- lang/python23/patches/patch-af | 13 +++ lang/python23/patches/patch-ag | 216 +++++++++++++++++++++++++++++++++++++++++ lang/python23/patches/patch-ah | 22 +++++ lang/python23/patches/patch-ai | 39 ++++---- lang/python23/patches/patch-aj | 209 ++++++++++++++++++++++++++++++++++++--- lang/python23/patches/patch-ak | 68 +++++++++++++ lang/python23/patches/patch-al | 62 ++++-------- lang/python23/patches/patch-am | 145 ++++++++++++++++++++++----- lang/python23/patches/patch-bb | 13 --- lang/python23/patches/patch-bc | 21 ---- 21 files changed, 834 insertions(+), 285 deletions(-) delete mode 100644 lang/python23/patches/patch-aa create mode 100644 lang/python23/patches/patch-ab create mode 100644 lang/python23/patches/patch-ac create mode 100644 lang/python23/patches/patch-ad create mode 100644 lang/python23/patches/patch-af create mode 100644 lang/python23/patches/patch-ag create mode 100644 lang/python23/patches/patch-ah create mode 100644 lang/python23/patches/patch-ak delete mode 100644 lang/python23/patches/patch-bb delete mode 100644 lang/python23/patches/patch-bc (limited to 'lang/python23') diff --git a/lang/python23/Makefile b/lang/python23/Makefile index 74f37562f48..79de7d23e09 100644 --- a/lang/python23/Makefile +++ b/lang/python23/Makefile @@ -1,36 +1,30 @@ -# $NetBSD: Makefile,v 1.10 2003/11/17 00:11:44 recht Exp $ +# $NetBSD: Makefile,v 1.11 2003/12/08 21:13:56 recht Exp $ # -DISTNAME= Python-2.3 -PKGNAME= python23-2.3 -PKGREVISION= 3 +DISTNAME= Python-2.3.2 +PKGNAME= python23-2.3.2 CATEGORIES= lang -MASTER_SITES= ftp://ftp.python.org/pub/python/2.3/ +MASTER_SITES= ftp://ftp.python.org/pub/python/2.3.2/ EXTRACT_SUFX= .tgz MAINTAINER= recht@NetBSD.org HOMEPAGE= http://www.python.org/ COMMENT= Interpreted, interactive, object-oriented programming language -USE_BUILDLINK2= YES -GNU_CONFIGURE= YES - +USE_DB185= yes +USE_BUILDLINK2= yes +GNU_CONFIGURE= yes CONFIGURE_ARGS+= --without-threads CONFIGURE_ARGS+= --enable-shared CONFIGURE_ARGS+= OPT="${CFLAGS}" -# XXX configure would pull in libpthread -CONFIGURE_ENV+= ac_cv_search_sem_init=no +UNLIMIT_RESOURCES+= stacksize INSTALL_TARGET= altinstall +TEST_TARGET= test post-extract: ${MV} ${WRKSRC}/Tools/scripts/pydoc ${WRKSRC}/Tools/scripts/pydoc2.3 -# XXX should be done by the Python install process -post-install: - ${LN} -s ${PREFIX}/lib/libpython2.3.so.1.0 \ - ${PREFIX}/lib/libpython2.3.so - .include "../../mk/bsd.prefs.mk" .if ${OPSYS} == "SunOS" @@ -38,10 +32,11 @@ LOWER_OPSYS= sunos .endif .if ${OPSYS} == "Darwin" || ${OPSYS} == "IRIX" -PLIST_SUBST+= PY_PLATNAME=${LOWER_OPSYS} +PY_PLATNAME=${LOWER_OPSYS} .else -PLIST_SUBST+= PY_PLATNAME=${LOWER_OPSYS}${OS_VERSION:C/\..*//} +PY_PLATNAME=${LOWER_OPSYS}${OS_VERSION:C/\..*//} .endif +PLIST_SUBST+= PY_PLATNAME=${PY_PLATNAME} # the dl module isn't built for 64 bit archs and Darwin .if ${MACHINE_ARCH} == "alpha" || ${MACHINE_ARCH} == "amd64" \ @@ -52,12 +47,53 @@ PLIST_SUBST+= DLMODULE="@comment " PLIST_SUBST+= DLMODULE= .endif -.if ${OPSYS} != "NetBSD" +X86_SUBST= "@comment " +OSSAUDIODEV_SUBST= "@comment " +.if ${MACHINE_ARCH} == "i386" +# activate X86_ONLY modules +X86_SUBST= +# ossaudiodev is only available on x86 for the following platforms +.if ${PY_PLATNAME} == "linux2" || ${PY_PLATNAME} == "freebsd4" \ + || ${PY_PLATNAME} == "freebsd5" +OSSAUDIODEV_SUBST= +.endif +.endif +PLIST_SUBST+= X86_ONLY=${X86_SUBST} +PLIST_SUBST+= OSSAUDIODEV=${OSSAUDIODEV_SUBST} + +# ensure that the bsddb185 module is build on all platforms .include "../../databases/db/buildlink2.mk" -CPPFLAGS+= -I${BUILDLINK_PREFIX.db}/include/db2 + +SUBST_CLASSES+= setup +SUBST_MESSAGE.setup= "Fixing paths for db 1.85." +SUBST_STAGE.setup= post-patch +SUBST_FILES.setup= setup.py +SUBST_SED.setup= -e 's,%%DB185_H%%,${DB185_H},g' +SUBST_SED.setup+= -e 's,%%DB185_INCS%%,${DB185_INCS},g' +SUBST_SED.setup+= -e 's,%%DB185_LIBS%%,${DB185_LIBS},g' +SUBST_SED.setup+= -e 's,%%DB185_LIBDIR%%,${DB185_LIBDIR},g' + +DB185_LIBDIR= ${BUILDLINK_PREFIX.db}/lib + +.if !empty(BUILDLINK_CPPFLAGS.db) +LDFLAGS+= ${BUILDLINK_LDFLAGS.db} +DBINCDIR= ${BUILDLINK_CPPFLAGS.db:S/-I//} +DB185_INCS= ${DBINCDIR} +DB185_LIBS= ${BUILDLINK_LIBS.db:S/-l//} + +.if ${_NEED_DB2} == "YES" +DB185_H= ${DBINCDIR}/db_185.h +.else +DB185_H= ${DBINCDIR}/db.h +.endif +.else +DB185_H= /usr/include/db.h +DB185_INCS= /usr/include +DB185_LIBS= .endif .include "../../archivers/bzip2/buildlink2.mk" .include "../../devel/zlib/buildlink2.mk" .include "../../security/openssl/buildlink2.mk" +.include "../../mk/ossaudio.buildlink2.mk" .include "../../mk/bsd.pkg.mk" diff --git a/lang/python23/PLIST.Linux b/lang/python23/PLIST.Linux index 1a60128f0b6..6002dd3a49a 100644 --- a/lang/python23/PLIST.Linux +++ b/lang/python23/PLIST.Linux @@ -1,7 +1,5 @@ -@comment $NetBSD: PLIST.Linux,v 1.1 2003/08/18 20:57:12 recht Exp $ -lib/python2.3/lib-dynload/_bsddb.so +@comment $NetBSD: PLIST.Linux,v 1.2 2003/12/08 21:13:56 recht Exp $ lib/python2.3/lib-dynload/${LOWER_OPSYS}audiodev.so -lib/python2.3/lib-dynload/ossaudiodev.so lib/python2.3/plat-${LOWER_OPSYS}2/CDROM.py lib/python2.3/plat-${LOWER_OPSYS}2/CDROM.pyc lib/python2.3/plat-${LOWER_OPSYS}2/CDROM.pyo @@ -11,7 +9,3 @@ lib/python2.3/plat-${LOWER_OPSYS}2/DLFCN.pyo lib/python2.3/plat-${LOWER_OPSYS}2/TYPES.py lib/python2.3/plat-${LOWER_OPSYS}2/TYPES.pyc lib/python2.3/plat-${LOWER_OPSYS}2/TYPES.pyo -lib/python2.3/test/output/test_${LOWER_OPSYS}audiodev -lib/python2.3/test/test_${LOWER_OPSYS}audiodev.py -lib/python2.3/test/test_${LOWER_OPSYS}audiodev.pyc -lib/python2.3/test/test_${LOWER_OPSYS}audiodev.pyo diff --git a/lang/python23/PLIST.NetBSD b/lang/python23/PLIST.NetBSD index cf4849aeff2..b0dfcf24409 100644 --- a/lang/python23/PLIST.NetBSD +++ b/lang/python23/PLIST.NetBSD @@ -1,6 +1 @@ -@comment $NetBSD: PLIST.NetBSD,v 1.1 2003/08/18 20:57:12 recht Exp $ -lib/python2.3/lib-dynload/bsddb185.so -lib/python2.3/test/output/test_linuxaudiodev -lib/python2.3/test/test_linuxaudiodev.py -lib/python2.3/test/test_linuxaudiodev.pyc -lib/python2.3/test/test_linuxaudiodev.pyo +@comment $NetBSD: PLIST.NetBSD,v 1.2 2003/12/08 21:13:56 recht Exp $ diff --git a/lang/python23/PLIST.common b/lang/python23/PLIST.common index f650c4e86fd..037be53cad9 100644 --- a/lang/python23/PLIST.common +++ b/lang/python23/PLIST.common @@ -1,4 +1,4 @@ -@comment $NetBSD: PLIST.common,v 1.2 2003/11/17 00:11:44 recht Exp $ +@comment $NetBSD: PLIST.common,v 1.3 2003/12/08 21:13:56 recht Exp $ bin/pydoc2.3 bin/python2.3 include/python2.3/Python.h @@ -1125,7 +1125,9 @@ lib/python2.3/lib-dynload/_ssl.so lib/python2.3/lib-dynload/_testcapi.so lib/python2.3/lib-dynload/_weakref.so lib/python2.3/lib-dynload/array.so +${X86_ONLY}lib/python2.3/lib-dynload/audioop.so lib/python2.3/lib-dynload/binascii.so +lib/python2.3/lib-dynload/bsddb185.so lib/python2.3/lib-dynload/bz2.so lib/python2.3/lib-dynload/cPickle.so lib/python2.3/lib-dynload/cStringIO.so @@ -1136,6 +1138,7 @@ lib/python2.3/lib-dynload/dbm.so ${DLMODULE}lib/python2.3/lib-dynload/dl.so lib/python2.3/lib-dynload/fcntl.so lib/python2.3/lib-dynload/grp.so +${X86_ONLY}lib/python2.3/lib-dynload/imageop.so lib/python2.3/lib-dynload/itertools.so lib/python2.3/lib-dynload/math.so lib/python2.3/lib-dynload/md5.so @@ -1147,6 +1150,8 @@ lib/python2.3/lib-dynload/pcre.so lib/python2.3/lib-dynload/pwd.so lib/python2.3/lib-dynload/regex.so lib/python2.3/lib-dynload/resource.so +${X86_ONLY}lib/python2.3/lib-dynload/rgbimg.so +${OSSAUDIODEV}lib/python2.3/lib-dynload/ossaudiodev.so lib/python2.3/lib-dynload/rotor.so lib/python2.3/lib-dynload/select.so lib/python2.3/lib-dynload/sha.so @@ -1361,13 +1366,13 @@ lib/python2.3/pickletools.pyo lib/python2.3/pipes.py lib/python2.3/pipes.pyc lib/python2.3/pipes.pyo +lib/python2.3/pkgutil.py +lib/python2.3/pkgutil.pyc +lib/python2.3/pkgutil.pyo lib/python2.3/plat-${PY_PLATNAME}/IN.py lib/python2.3/plat-${PY_PLATNAME}/IN.pyc lib/python2.3/plat-${PY_PLATNAME}/IN.pyo lib/python2.3/plat-${PY_PLATNAME}/regen -lib/python2.3/pkgutil.py -lib/python2.3/pkgutil.pyc -lib/python2.3/pkgutil.pyo lib/python2.3/platform.py lib/python2.3/platform.pyc lib/python2.3/platform.pyo @@ -1564,6 +1569,7 @@ lib/python2.3/test/output/test_future lib/python2.3/test/output/test_global lib/python2.3/test/output/test_grammar lib/python2.3/test/output/test_httplib +lib/python2.3/test/output/test_linuxaudiodev lib/python2.3/test/output/test_logging lib/python2.3/test/output/test_longexp lib/python2.3/test/output/test_math @@ -1980,6 +1986,9 @@ lib/python2.3/test/test_itertools.pyo lib/python2.3/test/test_largefile.py lib/python2.3/test/test_largefile.pyc lib/python2.3/test/test_largefile.pyo +lib/python2.3/test/test_linuxaudiodev.py +lib/python2.3/test/test_linuxaudiodev.pyc +lib/python2.3/test/test_linuxaudiodev.pyo lib/python2.3/test/test_locale.py lib/python2.3/test/test_locale.pyc lib/python2.3/test/test_locale.pyo diff --git a/lang/python23/PLIST.common_end b/lang/python23/PLIST.common_end index 2614128010b..7a1430bf5c7 100644 --- a/lang/python23/PLIST.common_end +++ b/lang/python23/PLIST.common_end @@ -1,4 +1,4 @@ -@comment $NetBSD: PLIST.common_end,v 1.1 2003/08/18 20:57:12 recht Exp $ +@comment $NetBSD: PLIST.common_end,v 1.2 2003/12/08 21:13:56 recht Exp $ @dirrm lib/python2.3/xml/sax @dirrm lib/python2.3/xml/parsers @dirrm lib/python2.3/xml/dom diff --git a/lang/python23/distinfo b/lang/python23/distinfo index 9a8193a506c..c75a3566e01 100644 --- a/lang/python23/distinfo +++ b/lang/python23/distinfo @@ -1,12 +1,16 @@ -$NetBSD: distinfo,v 1.7 2003/09/14 14:04:31 recht Exp $ +$NetBSD: distinfo,v 1.8 2003/12/08 21:13:56 recht Exp $ -SHA1 (Python-2.3.tgz) = ce5fbde09be17ea5dddd4baa62d2b90e06e7e5c1 -Size (Python-2.3.tgz) = 8436880 bytes -SHA1 (patch-aa) = 235ddba995810bce0291e293f1159d8e1ac94dd1 -SHA1 (patch-ae) = ff045dc1b42ce8a4fe5e64fde72469e1be8dab28 -SHA1 (patch-ai) = 75d30db64343afcf2f0bcfe8e73dc9948acb237e -SHA1 (patch-aj) = 1e3ce4072e90cb7be6d0a5539ec213b56518dcc7 -SHA1 (patch-al) = 5614ef46970b5eea2bfdcfc64d1018aa0f4a6e85 -SHA1 (patch-am) = 20235b2febbc2811ca5f9b54958a4064722431ed -SHA1 (patch-bb) = 1390c5f0bcd75f5f3f1b9949921b555e1021954f -SHA1 (patch-bc) = 0a83a90aea8a1414b43fa3506912ab09aafbc3c0 +SHA1 (Python-2.3.2.tgz) = 2176d1c42802ea2f9d430f23f1d578e00336c6aa +Size (Python-2.3.2.tgz) = 8459427 bytes +SHA1 (patch-ab) = 111d7fa8adbb7001bacad36e3bdbe23ae6ce8b9b +SHA1 (patch-ac) = 30c16b3770fed3324a38c18426d9d7758e8db889 +SHA1 (patch-ad) = c8f6ea08e68dae3bd9ad639c38e74cf654c0b41e +SHA1 (patch-ae) = 544af90b9b7c5eb5cbad0ba0cefa3d9496b5efe3 +SHA1 (patch-af) = 2989a1975c8ea435903eafc9add57cb7c4d7de14 +SHA1 (patch-ag) = e2bf14e5858b4273148f1feaf46d5fbb325640a9 +SHA1 (patch-ah) = 6e44407c89edcee59b1f674783544884e96cf101 +SHA1 (patch-ai) = 6299b36119927e87a9a1ea7ef1859ec5f833d0b1 +SHA1 (patch-aj) = 91c1679f8109922c30e4d25fe6f99c856dc6e3d5 +SHA1 (patch-ak) = cabeb3d84102bd8be8c109986f7afb8fc147cd5a +SHA1 (patch-al) = b0fd18aca1949c65a342ae67c7d3ba012f40398b +SHA1 (patch-am) = 78b10cd547aa929f397abe9d4b554efda851667b diff --git a/lang/python23/patches/patch-aa b/lang/python23/patches/patch-aa deleted file mode 100644 index 17e3704a051..00000000000 --- a/lang/python23/patches/patch-aa +++ /dev/null @@ -1,81 +0,0 @@ -$NetBSD: patch-aa,v 1.2 2003/08/18 20:57:13 recht Exp $ - ---- setup.py.orig 2003-07-10 14:48:39.000000000 +0200 -+++ setup.py 2003-08-18 21:19:14.000000000 +0200 -@@ -15,7 +15,7 @@ - from distutils.command.install_lib import install_lib - - # This global variable is used to hold the list of modules to be disabled. --disabled_module_list = [] -+disabled_module_list = ["_curses", "_curses_panel", "_tkinter", "gdbm", "mpz", "pyexpat", "readline"] - - def add_dir_to_list(dirlist, dir): - """Add the directory 'dir' to the list 'dirlist' (at the front) if -@@ -240,9 +240,15 @@ - return sys.platform - - def detect_modules(self): -- # Ensure that /usr/local is always used -- add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib') -- add_dir_to_list(self.compiler.include_dirs, '/usr/local/include') -+ # Add the buildlink directories for pkgsrc -+ if os.environ.has_key('BUILDLINK_DIR'): -+ dir = os.environ['BUILDLINK_DIR'] -+ libdir = dir + '/lib' -+ incdir = dir + '/include' -+ if libdir not in self.compiler.library_dirs: -+ self.compiler.library_dirs.insert(0, libdir) -+ if incdir not in self.compiler.include_dirs: -+ self.compiler.include_dirs.insert(0, incdir) - - # fink installs lots of goodies in /sw/... - make sure we - # check there -@@ -396,13 +402,13 @@ - # These represent audio samples or images as strings: - - # Disabled on 64-bit platforms -- if sys.maxint != 9223372036854775807L: -+# if sys.maxint != 9223372036854775807L: - # Operations on audio samples -- exts.append( Extension('audioop', ['audioop.c']) ) -+# exts.append( Extension('audioop', ['audioop.c']) ) - # Operations on images -- exts.append( Extension('imageop', ['imageop.c']) ) -+# exts.append( Extension('imageop', ['imageop.c']) ) - # Read SGI RGB image files (but coded portably) -- exts.append( Extension('rgbimg', ['rgbimgmodule.c']) ) -+# exts.append( Extension('rgbimg', ['rgbimgmodule.c']) ) - - # readline - if self.compiler.find_library_file(lib_dirs, 'readline'): -@@ -436,9 +442,7 @@ - depends = ['socketmodule.h']) ) - # Detect SSL support for the socket module (via _ssl) - ssl_incs = find_file('openssl/ssl.h', inc_dirs, -- ['/usr/local/ssl/include', -- '/usr/contrib/ssl/include/' -- ] -+ [] - ) - if ssl_incs is not None: - krb5_h = find_file('krb5.h', inc_dirs, -@@ -446,9 +450,7 @@ - if krb5_h: - ssl_incs += krb5_h - ssl_libs = find_library_file(self.compiler, 'ssl',lib_dirs, -- ['/usr/local/ssl/lib', -- '/usr/contrib/ssl/lib/' -- ] ) -+ [] ) - - if (ssl_incs is not None and - ssl_libs is not None): -@@ -1128,7 +1130,7 @@ - ext_modules=[Extension('struct', ['structmodule.c'])], - - # Scripts to install -- scripts = ['Tools/scripts/pydoc', 'Tools/scripts/idle'] -+ scripts = ['Tools/scripts/pydoc2.3'] - ) - - # --install-platlib diff --git a/lang/python23/patches/patch-ab b/lang/python23/patches/patch-ab new file mode 100644 index 00000000000..b3c51270615 --- /dev/null +++ b/lang/python23/patches/patch-ab @@ -0,0 +1,26 @@ +$NetBSD: patch-ab,v 1.1 2003/12/08 21:13:56 recht Exp $ + +--- Include/py_curses.h.orig 2003-06-29 17:46:21.000000000 +0200 ++++ Include/py_curses.h +@@ -39,6 +39,21 @@ + #endif + #endif + ++#ifdef __NetBSD__ ++/* ++** On NetBSD, [n]curses.h and stdlib.h/wchar.h use different guards ++** against multiple definition of wchar_t and wint_t. ++*/ ++#ifdef _XOPEN_SOURCE_EXTENDED ++#ifndef _WCHAR_T ++#define _WCHAR_T ++#endif ++#ifndef _WINT_T ++#define _WINT_T ++#endif ++#endif ++#endif ++ + #ifdef HAVE_NCURSES_H + #include + #else diff --git a/lang/python23/patches/patch-ac b/lang/python23/patches/patch-ac new file mode 100644 index 00000000000..d062928ce91 --- /dev/null +++ b/lang/python23/patches/patch-ac @@ -0,0 +1,13 @@ +$NetBSD: patch-ac,v 1.1 2003/12/08 21:13:56 recht Exp $ + +--- Include/weakrefobject.h.orig 2002-08-12 09:21:58.000000000 +0200 ++++ Include/weakrefobject.h +@@ -39,6 +39,8 @@ PyAPI_FUNC(PyObject *) PyWeakref_GetObje + + PyAPI_FUNC(long) _PyWeakref_GetWeakrefCount(PyWeakReference *head); + ++PyAPI_FUNC(void) _PyWeakref_ClearRef(PyWeakReference *self); ++ + #define PyWeakref_GET_OBJECT(ref) (((PyWeakReference *)(ref))->wr_object) + + diff --git a/lang/python23/patches/patch-ad b/lang/python23/patches/patch-ad new file mode 100644 index 00000000000..e1730705004 --- /dev/null +++ b/lang/python23/patches/patch-ad @@ -0,0 +1,23 @@ +$NetBSD: patch-ad,v 1.1 2003/12/08 21:13:56 recht Exp $ + +--- Lib/distutils/command/build_ext.py.orig 2002-11-19 14:12:28.000000000 +0100 ++++ Lib/distutils/command/build_ext.py +@@ -475,8 +475,18 @@ class build_ext (Command): + # that go into the mix. + if ext.extra_objects: + objects.extend(ext.extra_objects) ++ ++ # Two possible sources for extra linker arguments: ++ # - 'extra_link_args' in Extension object ++ # - LDFLAGS environment variable ++ # The environment variable should take precedence, and ++ # any sensible compiler will give precedence to later ++ # command line args. Hence we combine them in order: + extra_args = ext.extra_link_args or [] + ++ if os.environ.has_key('LDFLAGS'): ++ extra_args.extend(string.split(os.environ['LDFLAGS'])) ++ + # Detect target language, if not provided + language = ext.language or self.compiler.detect_language(sources) + diff --git a/lang/python23/patches/patch-ae b/lang/python23/patches/patch-ae index 9bd772a6351..e3e2b097710 100644 --- a/lang/python23/patches/patch-ae +++ b/lang/python23/patches/patch-ae @@ -1,23 +1,13 @@ -$NetBSD: patch-ae,v 1.1.1.1 2003/08/04 08:25:23 drochner Exp $ +$NetBSD: patch-ae,v 1.2 2003/12/08 21:13:56 recht Exp $ ---- Lib/distutils/command/build_ext.py.orig 2002-11-19 14:12:28.000000000 +0100 -+++ Lib/distutils/command/build_ext.py 2003-08-03 13:20:35.000000000 +0200 -@@ -475,8 +475,18 @@ - # that go into the mix. - if ext.extra_objects: - objects.extend(ext.extra_objects) -+ -+ # Two possible sources for extra linker arguments: -+ # - 'extra_link_args' in Extension object -+ # - LDFLAGS environment variable -+ # The environment variable should take precedence, and -+ # any sensible compiler will give precedence to later -+ # command line args. Hence we combine them in order: - extra_args = ext.extra_link_args or [] - -+ if os.environ.has_key('LDFLAGS'): -+ extra_args.extend(string.split(os.environ['LDFLAGS'])) -+ - # Detect target language, if not provided - language = ext.language or self.compiler.detect_language(sources) - +--- Lib/distutils/command/build_scripts.py.orig 2003-06-27 21:33:38.000000000 +0200 ++++ Lib/distutils/command/build_scripts.py +@@ -99,7 +99,7 @@ class build_scripts (Command): + outf.write("#!%s%s\n" % + (os.path.join( + sysconfig.get_config_var("BINDIR"), +- "python" + sysconfig.get_config_var("EXE")), ++ "python%s" % sys.version[:3] + sysconfig.get_config_var("EXE")), + post_interp)) + outf.writelines(f.readlines()) + outf.close() diff --git a/lang/python23/patches/patch-af b/lang/python23/patches/patch-af new file mode 100644 index 00000000000..8401fc8422e --- /dev/null +++ b/lang/python23/patches/patch-af @@ -0,0 +1,13 @@ +$NetBSD: patch-af,v 1.1 2003/12/08 21:13:56 recht Exp $ + +--- Lib/test/test_fcntl.py.orig 2002-07-23 21:03:51.000000000 +0200 ++++ Lib/test/test_fcntl.py +@@ -24,7 +24,7 @@ if sys.platform in ('netbsd1', 'Darwin1. + 'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5', + 'bsdos2', 'bsdos3', 'bsdos4', + 'openbsd', 'openbsd2', 'openbsd3'): +- lockdata = struct.pack('lxxxxlxxxxlhh', 0, 0, 0, fcntl.F_WRLCK, 0) ++ lockdata = struct.pack('qqihh', 0, 0, 0, fcntl.F_WRLCK, 0) + elif sys.platform in ['aix3', 'aix4', 'hp-uxB', 'unixware7']: + lockdata = struct.pack('hhlllii', fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0) + elif sys.platform in ['os2emx']: diff --git a/lang/python23/patches/patch-ag b/lang/python23/patches/patch-ag new file mode 100644 index 00000000000..a1cbd0406a6 --- /dev/null +++ b/lang/python23/patches/patch-ag @@ -0,0 +1,216 @@ +$NetBSD: patch-ag,v 1.1 2003/12/08 21:13:56 recht Exp $ + +--- Lib/test/test_weakref.py.orig 2003-07-14 23:37:17.000000000 +0200 ++++ Lib/test/test_weakref.py +@@ -299,6 +299,211 @@ class ReferencesTestCase(TestBase): + self.fail("exception not properly restored") + + ++ def test_callback_in_cycle_1(self): ++ import gc ++ ++ class J(object): ++ pass ++ ++ class II(object): ++ def acallback(self, ignore): ++ self.J ++ ++ I = II() ++ I.J = J ++ I.wr = weakref.ref(J, I.acallback) ++ ++ # Now J and II are each in a self-cycle (as all new-style class ++ # objects are, since their __mro__ points back to them). I holds ++ # both a weak reference (I.wr) and a strong reference (I.J) to class ++ # J. I is also in a cycle (I.wr points to a weakref that references ++ # I.acallback). When we del these three, they all become trash, but ++ # the cycles prevent any of them from getting cleaned up immediately. ++ # Instead they have to wait for cyclic gc to deduce that they're ++ # trash. ++ # ++ # gc used to call tp_clear on all of them, and the order in which ++ # it does that is pretty accidental. The exact order in which we ++ # built up these things manages to provoke gc into running tp_clear ++ # in just the right order (I last). Calling tp_clear on II leaves ++ # behind an insane class object (its __mro__ becomes NULL). Calling ++ # tp_clear on J breaks its self-cycle, but J doesn't get deleted ++ # just then because of the strong reference from I.J. Calling ++ # tp_clear on I starts to clear I's __dict__, and just happens to ++ # clear I.J first -- I.wr is still intact. That removes the last ++ # reference to J, which triggers the weakref callback. The callback ++ # tries to do "self.J", and instances of new-style classes look up ++ # attributes ("J") in the class dict first. The class (II) wants to ++ # search II.__mro__, but that's NULL. The result was a segfault in ++ # a release build, and an assert failure in a debug build. ++ del I, J, II ++ gc.collect() ++ ++ def test_callback_in_cycle_2(self): ++ import gc ++ ++ # This is just like test_callback_in_cycle_1, except that II is an ++ # old-style class. The symptom is different then: an instance of an ++ # old-style class looks in its own __dict__ first. 'J' happens to ++ # get cleared from I.__dict__ before 'wr', and 'J' was never in II's ++ # __dict__, so the attribute isn't found. The difference is that ++ # the old-style II doesn't have a NULL __mro__ (it doesn't have any ++ # __mro__), so no segfault occurs. Instead it got: ++ # test_callback_in_cycle_2 (__main__.ReferencesTestCase) ... ++ # Exception exceptions.AttributeError: ++ # "II instance has no attribute 'J'" in > ignored ++ ++ class J(object): ++ pass ++ ++ class II: ++ def acallback(self, ignore): ++ self.J ++ ++ I = II() ++ I.J = J ++ I.wr = weakref.ref(J, I.acallback) ++ ++ del I, J, II ++ gc.collect() ++ ++ def test_callback_in_cycle_3(self): ++ import gc ++ ++ # This one broke the first patch that fixed the last two. In this ++ # case, the objects reachable from the callback aren't also reachable ++ # from the object (c1) *triggering* the callback: you can get to ++ # c1 from c2, but not vice-versa. The result was that c2's __dict__ ++ # got tp_clear'ed by the time the c2.cb callback got invoked. ++ ++ class C: ++ def cb(self, ignore): ++ self.me ++ self.c1 ++ self.wr ++ ++ c1, c2 = C(), C() ++ ++ c2.me = c2 ++ c2.c1 = c1 ++ c2.wr = weakref.ref(c1, c2.cb) ++ ++ del c1, c2 ++ gc.collect() ++ ++ def test_callback_in_cycle_4(self): ++ import gc ++ ++ # Like test_callback_in_cycle_3, except c2 and c1 have different ++ # classes. c2's class (C) isn't reachable from c1 then, so protecting ++ # objects reachable from the dying object (c1) isn't enough to stop ++ # c2's class (C) from getting tp_clear'ed before c2.cb is invoked. ++ # The result was a segfault (C.__mro__ was NULL when the callback ++ # tried to look up self.me). ++ ++ class C(object): ++ def cb(self, ignore): ++ self.me ++ self.c1 ++ self.wr ++ ++ class D: ++ pass ++ ++ c1, c2 = D(), C() ++ ++ c2.me = c2 ++ c2.c1 = c1 ++ c2.wr = weakref.ref(c1, c2.cb) ++ ++ del c1, c2, C, D ++ gc.collect() ++ ++ def test_callback_in_cycle_resurrection(self): ++ import gc ++ ++ # Do something nasty in a weakref callback: resurrect objects ++ # from dead cycles. For this to be attempted, the weakref and ++ # its callback must also be part of the cyclic trash (else the ++ # objects reachable via the callback couldn't be in cyclic trash ++ # to begin with -- the callback would act like an external root). ++ # But gc clears trash weakrefs with callbacks early now, which ++ # disables the callbacks, so the callbacks shouldn't get called ++ # at all (and so nothing actually gets resurrected). ++ ++ alist = [] ++ class C(object): ++ def __init__(self, value): ++ self.attribute = value ++ ++ def acallback(self, ignore): ++ alist.append(self.c) ++ ++ c1, c2 = C(1), C(2) ++ c1.c = c2 ++ c2.c = c1 ++ c1.wr = weakref.ref(c2, c1.acallback) ++ c2.wr = weakref.ref(c1, c2.acallback) ++ ++ def C_went_away(ignore): ++ alist.append("C went away") ++ wr = weakref.ref(C, C_went_away) ++ ++ del c1, c2, C # make them all trash ++ self.assertEqual(alist, []) # del isn't enough to reclaim anything ++ ++ gc.collect() ++ # c1.wr and c2.wr were part of the cyclic trash, so should have ++ # been cleared without their callbacks executing. OTOH, the weakref ++ # to C is bound to a function local (wr), and wasn't trash, so that ++ # callback should have been invoked when C went away. ++ self.assertEqual(alist, ["C went away"]) ++ # The remaining weakref should be dead now (its callback ran). ++ self.assertEqual(wr(), None) ++ ++ del alist[:] ++ gc.collect() ++ self.assertEqual(alist, []) ++ ++ def test_callbacks_on_callback(self): ++ import gc ++ ++ # Set up weakref callbacks *on* weakref callbacks. ++ alist = [] ++ def safe_callback(ignore): ++ alist.append("safe_callback called") ++ ++ class C(object): ++ def cb(self, ignore): ++ alist.append("cb called") ++ ++ c, d = C(), C() ++ c.other = d ++ d.other = c ++ callback = c.cb ++ c.wr = weakref.ref(d, callback) # this won't trigger ++ d.wr = weakref.ref(callback, d.cb) # ditto ++ external_wr = weakref.ref(callback, safe_callback) # but this will ++ self.assert_(external_wr() is callback) ++ ++ # The weakrefs attached to c and d should get cleared, so that ++ # C.cb is never called. But external_wr isn't part of the cyclic ++ # trash, and no cyclic trash is reachable from it, so safe_callback ++ # should get invoked when the bound method object callback (c.cb) ++ # -- which is itself a callback, and also part of the cyclic trash -- ++ # gets reclaimed at the end of gc. ++ ++ del callback, c, d, C ++ self.assertEqual(alist, []) # del isn't enough to clean up cycles ++ gc.collect() ++ self.assertEqual(alist, ["safe_callback called"]) ++ self.assertEqual(external_wr(), None) ++ ++ del alist[:] ++ gc.collect() ++ self.assertEqual(alist, []) ++ + class Object: + def __init__(self, arg): + self.arg = arg diff --git a/lang/python23/patches/patch-ah b/lang/python23/patches/patch-ah new file mode 100644 index 00000000000..fc71f6a103b --- /dev/null +++ b/lang/python23/patches/patch-ah @@ -0,0 +1,22 @@ +$NetBSD: patch-ah,v 1.1 2003/12/08 21:13:56 recht Exp $ + +--- Makefile.pre.in.orig 2003-09-20 12:50:28.000000000 +0200 ++++ Makefile.pre.in +@@ -56,7 +56,7 @@ MAKESETUP= $(srcdir)/Modules/makese + OPT= @OPT@ + BASECFLAGS= @BASECFLAGS@ + CFLAGS= $(BASECFLAGS) $(OPT) +-CPPFLAGS= -I. -I$(srcdir)/Include ++CPPFLAGS+= -I. -I$(srcdir)/Include + LDFLAGS= @LDFLAGS@ + LDLAST= @LDLAST@ + SGI_ABI= @SGI_ABI@ +@@ -305,7 +305,7 @@ all: $(BUILDPYTHON) oldsharedmods share + $(BUILDPYTHON): Modules/$(MAINOBJ) $(LIBRARY) $(LDLIBRARY) + $(LINKCC) $(LDFLAGS) $(LINKFORSHARED) -o $@ \ + Modules/$(MAINOBJ) \ +- $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST) ++ $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST) ${LINK_ALL_LIBGCC_HACK} + + platform: $(BUILDPYTHON) + $(RUNSHARED) ./$(BUILDPYTHON) -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform diff --git a/lang/python23/patches/patch-ai b/lang/python23/patches/patch-ai index ff91a1097dc..3a38ba3400b 100644 --- a/lang/python23/patches/patch-ai +++ b/lang/python23/patches/patch-ai @@ -1,22 +1,21 @@ -$NetBSD: patch-ai,v 1.2 2003/08/06 11:05:27 drochner Exp $ +$NetBSD: patch-ai,v 1.3 2003/12/08 21:13:56 recht Exp $ ---- Makefile.pre.in.orig 2003-07-13 12:10:42.000000000 +0200 -+++ Makefile.pre.in 2003-08-06 12:53:27.000000000 +0200 -@@ -56,7 +56,7 @@ - OPT= @OPT@ - BASECFLAGS= @BASECFLAGS@ - CFLAGS= $(BASECFLAGS) $(OPT) --CPPFLAGS= -I. -I$(srcdir)/Include -+CPPFLAGS+= -I. -I$(srcdir)/Include - LDFLAGS= @LDFLAGS@ - LDLAST= @LDLAST@ - SGI_ABI= @SGI_ABI@ -@@ -305,7 +305,7 @@ - $(BUILDPYTHON): Modules/$(MAINOBJ) $(LIBRARY) $(LDLIBRARY) - $(LINKCC) $(LDFLAGS) $(LINKFORSHARED) -o $@ \ - Modules/$(MAINOBJ) \ -- $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST) -+ $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST) ${LINK_ALL_LIBGCC_HACK} +--- Modules/_sre.c.orig 2003-06-26 16:41:08.000000000 +0200 ++++ Modules/_sre.c +@@ -71,9 +71,14 @@ static char copyright[] = + Win64 (MS_WIN64), Linux64 (__LP64__), Monterey (64-bit AIX) (_LP64) */ + /* FIXME: maybe the limit should be 40000 / sizeof(void*) ? */ + #define USE_RECURSION_LIMIT 7500 +-#else - platform: $(BUILDPYTHON) - $(RUNSHARED) ./$(BUILDPYTHON) -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform +-#if defined(__GNUC__) && defined(WITH_THREAD) && defined(__FreeBSD__) ++#elif defined(__FreeBSD__) ++/* FreeBSD/amd64 and /sparc64 requires even smaller limit */ ++#if defined(__amd64__) ++#define USE_RECURSION_LIMIT 6000 ++#elif defined(__sparc64__) ++#define USE_RECURSION_LIMIT 3000 ++#elif defined(__GNUC__) && defined(WITH_THREAD) + /* the pthreads library on FreeBSD has a fixed 1MB stack size for the + * initial (or "primary") thread, which is insufficient for the default + * recursion limit. gcc 3.x at the default optimisation diff --git a/lang/python23/patches/patch-aj b/lang/python23/patches/patch-aj index a1f281a79ff..19948262988 100644 --- a/lang/python23/patches/patch-aj +++ b/lang/python23/patches/patch-aj @@ -1,13 +1,198 @@ -$NetBSD: patch-aj,v 1.1.1.1 2003/08/04 08:25:23 drochner Exp $ +$NetBSD: patch-aj,v 1.2 2003/12/08 21:13:56 recht Exp $ ---- Lib/distutils/command/build_scripts.py.orig 2003-08-03 12:32:35.000000000 +0200 -+++ Lib/distutils/command/build_scripts.py 2003-08-03 12:34:50.000000000 +0200 -@@ -99,7 +99,7 @@ - outf.write("#!%s%s\n" % - (os.path.join( - sysconfig.get_config_var("BINDIR"), -- "python" + sysconfig.get_config_var("EXE")), -+ "python2.3" + sysconfig.get_config_var("EXE")), - post_interp)) - outf.writelines(f.readlines()) - outf.close() +--- Modules/gcmodule.c.orig 2003-04-17 19:29:21.000000000 +0200 ++++ Modules/gcmodule.c +@@ -377,13 +377,17 @@ has_finalizer(PyObject *op) + return 0; + } + +-/* Move the objects in unreachable with __del__ methods into finalizers. +- * The objects remaining in unreachable do not have __del__ methods, and +- * gc_refs remains GC_TENTATIVELY_UNREACHABLE for them. The objects +- * moved into finalizers have gc_refs changed to GC_REACHABLE. ++/* Move the objects in unreachable with __del__ methods into finalizers, ++ * and weakrefs with callbacks into wr_callbacks. ++ * The objects remaining in unreachable do not have __del__ methods, and are ++ * not weakrefs with callbacks. ++ * The objects moved have gc_refs changed to GC_REACHABLE; the objects ++ * remaining in unreachable are left at GC_TENTATIVELY_UNREACHABLE. + */ + static void +-move_finalizers(PyGC_Head *unreachable, PyGC_Head *finalizers) ++move_troublemakers(PyGC_Head *unreachable, ++ PyGC_Head *finalizers, ++ PyGC_Head *wr_callbacks) + { + PyGC_Head *gc = unreachable->gc.gc_next; + +@@ -398,6 +402,12 @@ move_finalizers(PyGC_Head *unreachable, + gc_list_append(gc, finalizers); + gc->gc.gc_refs = GC_REACHABLE; + } ++ else if (PyWeakref_Check(op) && ++ ((PyWeakReference *)op)->wr_callback) { ++ gc_list_remove(gc); ++ gc_list_append(gc, wr_callbacks); ++ gc->gc.gc_refs = GC_REACHABLE; ++ } + gc = next; + } + } +@@ -434,6 +444,93 @@ move_finalizer_reachable(PyGC_Head *fina + } + } + ++/* Clear all trash weakrefs with callbacks. This clears weakrefs first, ++ * which has the happy result of disabling the callbacks without executing ++ * them. A nasty technical complication: a weakref callback can itself be ++ * the target of a weakref, in which case decrefing the callback can cause ++ * another callback to trigger. But we can't allow arbitrary Python code to ++ * get executed at this point (the callback on the callback may try to muck ++ * with other cyclic trash we're trying to collect, even resurrecting it ++ * while we're in the middle of doing tp_clear() on the trash). ++ * ++ * The private _PyWeakref_ClearRef() function exists so that we can clear ++ * the reference in a weakref without triggering a callback on the callback. ++ * ++ * We have to save the callback objects and decref them later. But we can't ++ * allocate new memory to save them (if we can't get new memory, we're dead). ++ * So we grab a new reference on the clear'ed weakref, which prevents the ++ * rest of gc from reclaiming it. _PyWeakref_ClearRef() leaves the ++ * weakref's wr_callback member intact. ++ * ++ * In the end, then, wr_callbacks consists of cleared weakrefs that are ++ * immune from collection. Near the end of gc, after collecting all the ++ * cyclic trash, we call release_weakrefs(). That releases our references ++ * to the cleared weakrefs, which in turn may trigger callbacks on their ++ * callbacks. ++ */ ++static void ++clear_weakrefs(PyGC_Head *wr_callbacks) ++{ ++ PyGC_Head *gc = wr_callbacks->gc.gc_next; ++ ++ for (; gc != wr_callbacks; gc = gc->gc.gc_next) { ++ PyObject *op = FROM_GC(gc); ++ PyWeakReference *wr; ++ ++ assert(IS_REACHABLE(op)); ++ assert(PyWeakref_Check(op)); ++ wr = (PyWeakReference *)op; ++ assert(wr->wr_callback != NULL); ++ Py_INCREF(op); ++ _PyWeakref_ClearRef(wr); ++ } ++} ++ ++/* Called near the end of gc. This gives up the references we own to ++ * cleared weakrefs, allowing them to get collected, and in turn decref'ing ++ * their callbacks. ++ * ++ * If a callback object is itself the target of a weakref callback, ++ * decref'ing the callback object may trigger that other callback. If ++ * that other callback was part of the cyclic trash in this generation, ++ * that won't happen, since we cleared *all* trash-weakref callbacks near ++ * the start of gc. If that other callback was not part of the cyclic trash ++ * in this generation, then it acted like an external root to this round ++ * of gc, so all the objects reachable from that callback are still alive. ++ * ++ * Giving up the references to the weakref objects will probably make ++ * them go away too. However, if a weakref is reachable from finalizers, ++ * it won't go away. We move it to the old generation then. Since a ++ * weakref object doesn't have a finalizer, that's the right thing to do (it ++ * doesn't belong in gc.garbage). ++ * ++ * We return the number of weakref objects freed (those not appended to old). ++ */ ++static int ++release_weakrefs(PyGC_Head *wr_callbacks, PyGC_Head *old) ++{ ++ int num_freed = 0; ++ ++ while (! gc_list_is_empty(wr_callbacks)) { ++ PyGC_Head *gc = wr_callbacks->gc.gc_next; ++ PyObject *op = FROM_GC(gc); ++ PyWeakReference *wr = (PyWeakReference *)op; ++ ++ assert(IS_REACHABLE(op)); ++ assert(PyWeakref_Check(op)); ++ assert(wr->wr_callback != NULL); ++ Py_DECREF(op); ++ if (wr_callbacks->gc.gc_next == gc) { ++ /* object is still alive -- move it */ ++ gc_list_remove(gc); ++ gc_list_append(gc, old); ++ } ++ else ++ ++num_freed; ++ } ++ return num_freed; ++} ++ + static void + debug_instance(char *msg, PyInstanceObject *inst) + { +@@ -535,8 +632,9 @@ collect(int generation) + long n = 0; /* # unreachable objects that couldn't be collected */ + PyGC_Head *young; /* the generation we are examining */ + PyGC_Head *old; /* next older generation */ +- PyGC_Head unreachable; +- PyGC_Head finalizers; ++ PyGC_Head unreachable; /* non-problematic unreachable trash */ ++ PyGC_Head finalizers; /* objects with, & reachable from, __del__ */ ++ PyGC_Head wr_callbacks; /* weakrefs with callbacks */ + PyGC_Head *gc; + + if (delstr == NULL) { +@@ -597,20 +695,33 @@ collect(int generation) + /* All objects in unreachable are trash, but objects reachable from + * finalizers can't safely be deleted. Python programmers should take + * care not to create such things. For Python, finalizers means +- * instance objects with __del__ methods. ++ * instance objects with __del__ methods. Weakrefs with callbacks ++ * can call arbitrary Python code, so those are special-cased too. + * +- * Move unreachable objects with finalizers into a different list. ++ * Move unreachable objects with finalizers, and weakrefs with ++ * callbacks, into different lists. + */ + gc_list_init(&finalizers); +- move_finalizers(&unreachable, &finalizers); ++ gc_list_init(&wr_callbacks); ++ move_troublemakers(&unreachable, &finalizers, &wr_callbacks); ++ /* Clear the trash weakrefs with callbacks. This prevents their ++ * callbacks from getting invoked (when a weakref goes away, so does ++ * its callback). ++ * We do this even if the weakrefs are reachable from finalizers. ++ * If we didn't, breaking cycles in unreachable later could trigger ++ * deallocation of objects in finalizers, which could in turn ++ * cause callbacks to trigger. This may not be ideal behavior. ++ */ ++ clear_weakrefs(&wr_callbacks); + /* finalizers contains the unreachable objects with a finalizer; +- * unreachable objects reachable only *from* those are also +- * uncollectable, and we move those into the finalizers list too. ++ * unreachable objects reachable *from* those are also uncollectable, ++ * and we move those into the finalizers list too. + */ + move_finalizer_reachable(&finalizers); + + /* Collect statistics on collectable objects found and print +- * debugging information. */ ++ * debugging information. ++ */ + for (gc = unreachable.gc.gc_next; gc != &unreachable; + gc = gc->gc.gc_next) { + m++; +@@ -624,6 +735,11 @@ collect(int generation) + */ + delete_garbage(&unreachable, old); + ++ /* Now that we're done analyzing stuff and breaking cycles, let ++ * delayed weakref callbacks run. ++ */ ++ m += release_weakrefs(&wr_callbacks, old); ++ + /* Collect statistics on uncollectable objects found and print + * debugging information. */ + for (gc = finalizers.gc.gc_next; diff --git a/lang/python23/patches/patch-ak b/lang/python23/patches/patch-ak new file mode 100644 index 00000000000..57c98d35816 --- /dev/null +++ b/lang/python23/patches/patch-ak @@ -0,0 +1,68 @@ +$NetBSD: patch-ak,v 1.1 2003/12/08 21:13:56 recht Exp $ + +--- Objects/weakrefobject.c.orig 2003-07-14 23:46:23.000000000 +0200 ++++ Objects/weakrefobject.c +@@ -53,17 +53,43 @@ clear_weakref(PyWeakReference *self) + if (*list == self) + *list = self->wr_next; + self->wr_object = Py_None; +- self->wr_callback = NULL; + if (self->wr_prev != NULL) + self->wr_prev->wr_next = self->wr_next; + if (self->wr_next != NULL) + self->wr_next->wr_prev = self->wr_prev; + self->wr_prev = NULL; + self->wr_next = NULL; +- Py_XDECREF(callback); ++ } ++ if (callback != NULL) { ++ Py_DECREF(callback); ++ self->wr_callback = NULL; + } + } + ++/* Cyclic gc uses this to *just* clear the passed-in reference, leaving ++ * the callback intact and uncalled. It must be possible to call self's ++ * tp_dealloc() after calling this, so self has to be left in a sane enough ++ * state for that to work. We expect tp_dealloc to decref the callback ++ * then. The reason for not letting clear_weakref() decref the callback ++ * right now is that if the callback goes away, that may in turn trigger ++ * another callback (if a weak reference to the callback exists) -- running ++ * arbitrary Python code in the middle of gc is a disaster. The convolution ++ * here allows gc to delay triggering such callbacks until the world is in ++ * a sane state again. ++ */ ++void ++_PyWeakref_ClearRef(PyWeakReference *self) ++{ ++ PyObject *callback; ++ ++ assert(self != NULL); ++ assert(PyWeakref_Check(self)); ++ /* Preserve and restore the callback around clear_weakref. */ ++ callback = self->wr_callback; ++ self->wr_callback = NULL; ++ clear_weakref(self); ++ self->wr_callback = callback; ++} + + static void + weakref_dealloc(PyWeakReference *self) +@@ -117,7 +143,7 @@ weakref_hash(PyWeakReference *self) + self->hash = PyObject_Hash(PyWeakref_GET_OBJECT(self)); + return self->hash; + } +- ++ + + static PyObject * + weakref_repr(PyWeakReference *self) +@@ -324,7 +350,7 @@ WRAP_BINARY(proxy_iand, PyNumber_InPlace + WRAP_BINARY(proxy_ixor, PyNumber_InPlaceXor) + WRAP_BINARY(proxy_ior, PyNumber_InPlaceOr) + +-static int ++static int + proxy_nonzero(PyWeakReference *proxy) + { + PyObject *o = PyWeakref_GET_OBJECT(proxy); diff --git a/lang/python23/patches/patch-al b/lang/python23/patches/patch-al index 8c3c21b987d..d7533b5b752 100644 --- a/lang/python23/patches/patch-al +++ b/lang/python23/patches/patch-al @@ -1,45 +1,21 @@ -$NetBSD: patch-al,v 1.3 2003/09/10 00:11:04 recht Exp $ +$NetBSD: patch-al,v 1.4 2003/12/08 21:13:56 recht Exp $ ---- pyconfig.h.in.orig 2003-07-22 17:20:49.000000000 +0200 -+++ pyconfig.h.in 2003-09-10 01:01:29.000000000 +0200 -@@ -835,6 +835,13 @@ - /* Define _OSF_SOURCE to get the makedev macro. */ - #undef _OSF_SOURCE - -+/* These defines disable needed library functions on NetBSD < 1.6T */ -+/* ( _NETBSD_SOURCE doesn't exist prior to 1.6T ) */ -+#if defined(__NetBSD__) -+#include -+#endif -+#if !defined(__NetBSD__) || __NetBSD_Version__ > 106200000 -+ - /* Define to 2 if the system does not provide POSIX.1 features except with - this defined. */ - #undef _POSIX_1_SOURCE -@@ -845,18 +852,20 @@ - /* Define to 1 if you need to in order for `stat' and other things to work. */ - #undef _POSIX_SOURCE - --/* Define if you have POSIX threads, and your system does not define that. */ --#undef _POSIX_THREADS -- --/* Define to force use of thread-safe errno, h_errno, and other functions */ --#undef _REENTRANT -- - /* Define to the level of X/Open that your system supports */ - #undef _XOPEN_SOURCE - - /* Define to activate Unix95-and-earlier features */ - #undef _XOPEN_SOURCE_EXTENDED - -+#endif /* __NetBSD_Version__ */ -+ -+/* Define if you have POSIX threads, and your system does not define that. */ -+#undef _POSIX_THREADS -+ -+/* Define to force use of thread-safe errno, h_errno, and other functions */ -+#undef _REENTRANT -+ - /* Define on FreeBSD to activate all library features */ - #undef __BSD_VISIBLE +--- configure.orig 2003-09-27 10:58:55.000000000 +0200 ++++ configure 2003-12-08 21:34:21.000000000 +0100 +@@ -1440,6 +1440,8 @@ + # Reconfirmed for OpenBSD 3.3 by Zachary Hamm. + OpenBSD/2.* | OpenBSD/3.[0123]) + define_xopen_source=no;; ++ NetBSD/1.5 | NetBSD/1.5.* | NetBSD/1.6 | NetBSD/1.6.* | NetBSD/1.6[A-S]) ++ define_xopen_source=no;; + # On Solaris 2.6, sys/wait.h is inconsistent in the usage + # of union __?sigval. Reported by Stuart Bishop. + SunOS/5.6) +@@ -13837,6 +13839,7 @@ + /* end confdefs.h. */ + #include "confdefs.h" ++#include + #include + #include + #include diff --git a/lang/python23/patches/patch-am b/lang/python23/patches/patch-am index ea98e493948..2accab796b4 100644 --- a/lang/python23/patches/patch-am +++ b/lang/python23/patches/patch-am @@ -1,26 +1,121 @@ -$NetBSD: patch-am,v 1.1 2003/09/14 14:04:31 recht Exp $ +$NetBSD: patch-am,v 1.2 2003/12/08 21:13:56 recht Exp $ ---- Include/py_curses.h.orig 2003-09-14 13:55:07.000000000 +0200 -+++ Include/py_curses.h 2003-09-14 14:10:49.000000000 +0200 -@@ -39,6 +39,21 @@ - #endif - #endif - -+#ifdef __NetBSD__ -+/* -+** On NetBSD, [n]curses.h and stdlib.h/wchar.h use different guards -+** against multiple definition of wchar_t and wint_t. -+*/ -+#ifdef _XOPEN_SOURCE_EXTENDED -+#ifndef _WCHAR_T -+#define _WCHAR_T -+#endif -+#ifndef _WINT_T -+#define _WINT_T -+#endif -+#endif -+#endif -+ - #ifdef HAVE_NCURSES_H - #include - #else +--- setup.py.orig 2003-09-22 03:19:45.000000000 +0200 ++++ setup.py 2003-12-08 21:33:30.000000000 +0100 +@@ -15,7 +15,7 @@ + from distutils.command.install_lib import install_lib + + # This global variable is used to hold the list of modules to be disabled. +-disabled_module_list = [] ++disabled_module_list = ["_bsddb", "_curses", "_curses_panel", "_tkinter", "gdbm", "mpz", "pyexpat", "readline"] + + def add_dir_to_list(dirlist, dir): + """Add the directory 'dir' to the list 'dirlist' (at the front) if +@@ -240,9 +240,15 @@ + return sys.platform + + def detect_modules(self): +- # Ensure that /usr/local is always used +- add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib') +- add_dir_to_list(self.compiler.include_dirs, '/usr/local/include') ++ # Add the buildlink directories for pkgsrc ++ if os.environ.has_key('BUILDLINK_DIR'): ++ dir = os.environ['BUILDLINK_DIR'] ++ libdir = dir + '/lib' ++ incdir = dir + '/include' ++ if libdir not in self.compiler.library_dirs: ++ self.compiler.library_dirs.insert(0, libdir) ++ if incdir not in self.compiler.include_dirs: ++ self.compiler.include_dirs.insert(0, incdir) + + # fink installs lots of goodies in /sw/... - make sure we + # check there +@@ -436,9 +442,7 @@ + depends = ['socketmodule.h']) ) + # Detect SSL support for the socket module (via _ssl) + ssl_incs = find_file('openssl/ssl.h', inc_dirs, +- ['/usr/local/ssl/include', +- '/usr/contrib/ssl/include/' +- ] ++ [] + ) + if ssl_incs is not None: + krb5_h = find_file('krb5.h', inc_dirs, +@@ -446,9 +450,7 @@ + if krb5_h: + ssl_incs += krb5_h + ssl_libs = find_library_file(self.compiler, 'ssl',lib_dirs, +- ['/usr/local/ssl/lib', +- '/usr/contrib/ssl/lib/' +- ] ) ++ [] ) + + if (ssl_incs is not None and + ssl_libs is not None): +@@ -562,9 +564,11 @@ + include_dirs=db_incs, + libraries=dblibs)) + else: +- db_incs = None +- dblibs = [] +- dblib_dir = None ++ db_incs =['%%DB185_INCS%%'] ++ dblibs = ['%%DB185_LIBS%%'] ++ dblib_dir = ['%%DB185_LIBDIR%%'] ++ if len(dblibs) > 0 and dblibs[0] == '': ++ dblibs = [] + + + # Look for Berkeley db 1.85. Note that it is built as a different +@@ -573,21 +577,30 @@ + # accidentally building this module with a later version of the + # underlying db library. May BSD-ish Unixes incorporate db 1.85 + # symbols into libc and place the include file in /usr/include. +- f = "/usr/include/db.h" ++ f = "%%DB185_H%%" + if os.path.exists(f): + data = open(f).read() + m = re.search(r"#s*define\s+HASHVERSION\s+2\s*", data) + if m is not None: ++ bsddb185_define_macros = [] ++ if f.split("/")[-1] == "db_185.h": ++ bsddb185_define_macros=[('HAVE_DB_185_H',1)] + # bingo - old version used hash file format version 2 + ### XXX this should be fixed to not be platform-dependent + ### but I don't have direct access to an osf1 platform and + ### seemed to be muffing the search somehow +- libraries = platform == "osf1" and ['db'] or None ++ #libraries = platform == "osf1" and ['db'] or None ++ libraries = dblibs + if libraries is not None: + exts.append(Extension('bsddb185', ['bsddbmodule.c'], ++ library_dirs=dblib_dir, ++ runtime_library_dirs=dblib_dir, ++ include_dirs=db_incs, ++ define_macros=bsddb185_define_macros, + libraries=libraries)) + else: +- exts.append(Extension('bsddb185', ['bsddbmodule.c'])) ++ exts.append(Extension('bsddb185', ['bsddbmodule.c'], ++ define_macros=bsddb185_define_macros)) + + # The standard Unix dbm module: + if platform not in ['cygwin']: +@@ -765,7 +778,7 @@ + # Linux-specific modules + exts.append( Extension('linuxaudiodev', ['linuxaudiodev.c']) ) + +- if platform in ('linux2', 'freebsd4'): ++ if platform in ('linux2', 'freebsd4', 'freebsd5'): + exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) ) + + if platform == 'sunos5': +@@ -1135,7 +1148,7 @@ + ext_modules=[Extension('struct', ['structmodule.c'])], + + # Scripts to install +- scripts = ['Tools/scripts/pydoc', 'Tools/scripts/idle'] ++ scripts = ['Tools/scripts/pydoc2.3'] + ) + + # --install-platlib diff --git a/lang/python23/patches/patch-bb b/lang/python23/patches/patch-bb deleted file mode 100644 index 793aa6b1789..00000000000 --- a/lang/python23/patches/patch-bb +++ /dev/null @@ -1,13 +0,0 @@ -$NetBSD: patch-bb,v 1.1.1.1 2003/08/04 08:25:23 drochner Exp $ - ---- Lib/test/test_fcntl.py.orig 2002-07-23 21:03:51.000000000 +0200 -+++ Lib/test/test_fcntl.py 2003-08-03 12:50:25.000000000 +0200 -@@ -24,7 +24,7 @@ - 'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5', - 'bsdos2', 'bsdos3', 'bsdos4', - 'openbsd', 'openbsd2', 'openbsd3'): -- lockdata = struct.pack('lxxxxlxxxxlhh', 0, 0, 0, fcntl.F_WRLCK, 0) -+ lockdata = struct.pack('qqihh', 0, 0, 0, fcntl.F_WRLCK, 0) - elif sys.platform in ['aix3', 'aix4', 'hp-uxB', 'unixware7']: - lockdata = struct.pack('hhlllii', fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0) - elif sys.platform in ['os2emx']: diff --git a/lang/python23/patches/patch-bc b/lang/python23/patches/patch-bc deleted file mode 100644 index 5314c647014..00000000000 --- a/lang/python23/patches/patch-bc +++ /dev/null @@ -1,21 +0,0 @@ -$NetBSD: patch-bc,v 1.1 2003/09/10 00:11:04 recht Exp $ - ---- configure.orig Thu Jul 24 00:17:27 2003 -+++ configure -@@ -1365,6 +1365,8 @@ case $ac_sys_system/$ac_sys_release in - # Reconfirmed for OpenBSD 3.3 by Zachary Hamm. - OpenBSD/2.* | OpenBSD/3.[0123]) - define_xopen_source=no;; -+ NetBSD/1.5 | NetBSD/1.5.*) -+ define_xopen_source=no;; - # On Solaris 2.6, sys/wait.h is inconsistent in the usage - # of union __?sigval. Reported by Stuart Bishop. - SunOS/5.6) -@@ -13079,6 +13081,7 @@ cat >conftest.$ac_ext <<_ACEOF - #include "confdefs.h" - - #include "confdefs.h" -+#include - #include - #include - #include -- cgit v1.2.3