pkgsrc-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: pkgsrc/devel/py-game



Module Name:    pkgsrc
Committed By:   wiz
Date:           Tue Oct 13 09:06:48 UTC 2026

Modified Files:
        pkgsrc/devel/py-game: Makefile distinfo
Added Files:
        pkgsrc/devel/py-game/patches: patch-setup.py
            patch-src__c_cython_pygame___sprite.pyx patch-src__c_pgcompat.h
            patch-src__c_surface.c patch-src__c_surflock.c

Log Message:
py-game: fix build with Python 3.15

>From upstream bug report.

Bump PKGREVISION.


To generate a diff of this commit:
cvs rdiff -u -r1.61 -r1.62 pkgsrc/devel/py-game/Makefile
cvs rdiff -u -r1.19 -r1.20 pkgsrc/devel/py-game/distinfo
cvs rdiff -u -r0 -r1.1 pkgsrc/devel/py-game/patches/patch-setup.py \
    pkgsrc/devel/py-game/patches/patch-src__c_cython_pygame___sprite.pyx \
    pkgsrc/devel/py-game/patches/patch-src__c_pgcompat.h \
    pkgsrc/devel/py-game/patches/patch-src__c_surface.c \
    pkgsrc/devel/py-game/patches/patch-src__c_surflock.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: pkgsrc/devel/py-game/Makefile
diff -u pkgsrc/devel/py-game/Makefile:1.61 pkgsrc/devel/py-game/Makefile:1.62
--- pkgsrc/devel/py-game/Makefile:1.61  Tue Sep 29 06:04:40 2026
+++ pkgsrc/devel/py-game/Makefile       Tue Oct 13 09:06:47 2026
@@ -1,8 +1,8 @@
-# $NetBSD: Makefile,v 1.61 2026/09/29 06:04:40 wiz Exp $
+# $NetBSD: Makefile,v 1.62 2026/10/13 09:06:47 wiz Exp $
 
 DISTNAME=      pygame-2.6.1
 PKGNAME=       ${PYPKGPREFIX}-${DISTNAME:S/py//}
-PKGREVISION=   10
+PKGREVISION=   11
 CATEGORIES=    devel games python
 MASTER_SITES=  ${MASTER_SITE_PYPI:=P/Pygame/}
 

Index: pkgsrc/devel/py-game/distinfo
diff -u pkgsrc/devel/py-game/distinfo:1.19 pkgsrc/devel/py-game/distinfo:1.20
--- pkgsrc/devel/py-game/distinfo:1.19  Tue May 26 02:13:09 2026
+++ pkgsrc/devel/py-game/distinfo       Tue Oct 13 09:06:47 2026
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.19 2026/05/26 02:13:09 gutteridge Exp $
+$NetBSD: distinfo,v 1.20 2026/10/13 09:06:47 wiz Exp $
 
 BLAKE2s (pygame-2.6.1.tar.gz) = 5fb7778df59528ffacb144c93c8f072add0a298922993a1394fae898b780e067
 SHA512 (pygame-2.6.1.tar.gz) = 67ae07be50822dac5b2ce4b04a04920dc22ac4d43c348e2a95646c7646ca82b822a1fd7b89a295406581969303235831e00aeec4ea29e975a80f8013170eee5d
@@ -6,5 +6,10 @@ Size (pygame-2.6.1.tar.gz) = 14808125 by
 SHA1 (patch-buildconfig_Setup.SDL2.in) = 300e7ce4d5442955edc724c3d052c7738780e038
 SHA1 (patch-buildconfig_config__darwin.py) = 6ab81ce5cc5c9ce1923f4c4702a0faff9f22e184
 SHA1 (patch-buildconfig_config__unix.py) = cdd34d2dcec18f802e346c0a058612821ff23ee0
+SHA1 (patch-setup.py) = e0f863ef97e0e0b387517fb0c0f14754d3b2945f
 SHA1 (patch-src__c_base.c) = d94f491a1014cebe74b42f970bbd46826d533339
 SHA1 (patch-src__c_color.c) = 3d51f31250cf69d2b1f352683f1f0ba75390061d
+SHA1 (patch-src__c_cython_pygame___sprite.pyx) = 67ff539acbf6b4f03598485cac0478c6151e8088
+SHA1 (patch-src__c_pgcompat.h) = 5f5086972fe42d3a8d5a0e6d3f1d752331db0729
+SHA1 (patch-src__c_surface.c) = 9c860a4225cd2d9caf36650ac42ccd8e689c86a6
+SHA1 (patch-src__c_surflock.c) = 846cc206819a39eba96b958fe81eac4bbe0bcfc9

Added files:

Index: pkgsrc/devel/py-game/patches/patch-setup.py
diff -u /dev/null pkgsrc/devel/py-game/patches/patch-setup.py:1.1
--- /dev/null   Tue Oct 13 09:06:48 2026
+++ pkgsrc/devel/py-game/patches/patch-setup.py Tue Oct 13 09:06:47 2026
@@ -0,0 +1,24 @@
+$NetBSD: patch-setup.py,v 1.1 2026/10/13 09:06:47 wiz Exp $
+
+Pass compiler flags properly.
+https://github.com/pygame/pygame/issues/4716
+
+--- setup.py.orig      2024-09-29 12:15:28.001112000 +0000
++++ setup.py
+@@ -123,10 +123,13 @@ if os.environ.get('PYGAME_DETECT_AVX2', '') != '':
+                     # filename is found, no need to search any further
+                     break
+ 
+-        distutils.ccompiler.spawn(cmd, dry_run=self.dry_run, **kwargs)
++        compile_cmd(self, cmd, **kwargs)
+ 
+-    distutils.ccompiler.CCompiler.__spawn = distutils.ccompiler.CCompiler.spawn
+-    distutils.ccompiler.CCompiler.spawn = spawn
++    # setuptools' bundled distutils runs the compiler through Compiler.call();
++    # older distutils used spawn(). Hook whichever one compiles.
++    hook_name = 'call' if hasattr(distutils.ccompiler.CCompiler, 'call') else 'spawn'
++    compile_cmd = getattr(distutils.ccompiler.CCompiler, hook_name)
++    setattr(distutils.ccompiler.CCompiler, hook_name, spawn)
+ 
+ # A (bit hacky) fix for https://github.com/pygame/pygame/issues/2613
+ # This is due to the fact that distutils uses command line args to
Index: pkgsrc/devel/py-game/patches/patch-src__c_cython_pygame___sprite.pyx
diff -u /dev/null pkgsrc/devel/py-game/patches/patch-src__c_cython_pygame___sprite.pyx:1.1
--- /dev/null   Tue Oct 13 09:06:48 2026
+++ pkgsrc/devel/py-game/patches/patch-src__c_cython_pygame___sprite.pyx        Tue Oct 13 09:06:47 2026
@@ -0,0 +1,15 @@
+$NetBSD: patch-src__c_cython_pygame___sprite.pyx,v 1.1 2026/10/13 09:06:47 wiz Exp $
+
+Python 3.15 support.
+https://github.com/pygame/pygame/issues/4716
+
+--- src_c/cython/pygame/_sprite.pyx.orig       2024-09-29 12:15:28.005112000 +0000
++++ src_c/cython/pygame/_sprite.pyx
+@@ -145,7 +145,6 @@ cdef class Sprite:
+     cdef dict __dict__
+ 
+     def __cinit__(self):
+-        self.__dict__ = {}
+         self.__g = set() # The groups the sprite is in
+ 
+     def __init__(self, *groups):
Index: pkgsrc/devel/py-game/patches/patch-src__c_pgcompat.h
diff -u /dev/null pkgsrc/devel/py-game/patches/patch-src__c_pgcompat.h:1.1
--- /dev/null   Tue Oct 13 09:06:48 2026
+++ pkgsrc/devel/py-game/patches/patch-src__c_pgcompat.h        Tue Oct 13 09:06:47 2026
@@ -0,0 +1,34 @@
+$NetBSD: patch-src__c_pgcompat.h,v 1.1 2026/10/13 09:06:47 wiz Exp $
+
+Python 3.15 support.
+https://github.com/pygame/pygame/issues/4716
+
+--- src_c/pgcompat.h.orig      2024-09-29 12:15:28.012112000 +0000
++++ src_c/pgcompat.h
+@@ -24,4 +24,26 @@
+ #define Slice_GET_INDICES_EX(slice, length, start, stop, step, slicelength) \
+     PySlice_GetIndicesEx(slice, length, start, stop, step, slicelength)
+ 
++/* PyWeakref_GetObject() was removed in Python 3.15. PyWeakref_GetRef()
++ * (Python 3.13+) replaces it: returns 1 and a new reference if the referent
++ * is alive, 0 and NULL if it is dead, -1 and NULL on error. */
++#if PY_VERSION_HEX < 0x030D0000
++static inline int
++PyWeakref_GetRef(PyObject *ref, PyObject **pobj)
++{
++    PyObject *obj = PyWeakref_GetObject(ref);
++    if (obj == NULL) {
++        *pobj = NULL;
++        return -1;
++    }
++    if (obj == Py_None) {
++        *pobj = NULL;
++        return 0;
++    }
++    Py_INCREF(obj);
++    *pobj = obj;
++    return 1;
++}
++#endif
++
+ #endif /* ~PGCOMPAT_INTERNAL_H */
Index: pkgsrc/devel/py-game/patches/patch-src__c_surface.c
diff -u /dev/null pkgsrc/devel/py-game/patches/patch-src__c_surface.c:1.1
--- /dev/null   Tue Oct 13 09:06:48 2026
+++ pkgsrc/devel/py-game/patches/patch-src__c_surface.c Tue Oct 13 09:06:48 2026
@@ -0,0 +1,45 @@
+$NetBSD: patch-src__c_surface.c,v 1.1 2026/10/13 09:06:48 wiz Exp $
+
+Python 3.15 support.
+https://github.com/pygame/pygame/issues/4716
+
+--- src_c/surface.c.orig       2024-09-29 12:15:28.016111900 +0000
++++ src_c/surface.c
+@@ -1020,8 +1020,14 @@ surf_get_locks(PyObject *self, PyObject *_null)
+         return NULL;
+ 
+     for (i = 0; i < len; i++) {
+-        tmp = PyWeakref_GetObject(PyList_GetItem(surf->locklist, i));
+-        Py_INCREF(tmp);
++        if (PyWeakref_GetRef(PyList_GetItem(surf->locklist, i), &tmp) < 0) {
++            Py_DECREF(tuple);
++            return NULL;
++        }
++        if (tmp == NULL) { /* dead lock owner: report None, as before */
++            tmp = Py_None;
++            Py_INCREF(tmp);
++        }
+         PyTuple_SetItem(tuple, i, tmp);
+     }
+     return tuple;
+@@ -3443,11 +3449,17 @@ _release_buffer(Py_buffer *view_p)
+     internal = (pg_bufferinternal *)view_p->internal;
+     consumer_ref = internal->consumer_ref;
+     assert(consumer_ref && PyWeakref_CheckRef(consumer_ref));
+-    consumer = PyWeakref_GetObject(consumer_ref);
+-    if (consumer) {
+-        if (!pgSurface_UnlockBy((pgSurfaceObject *)view_p->obj, consumer)) {
++    if (PyWeakref_GetRef(consumer_ref, &consumer) < 0) {
++        PyErr_Clear();
++    }
++    else {
++        /* A dead consumer is passed as None, as PyWeakref_GetObject() did,
++         * so UnlockBy still purges its dead lock entry. */
++        if (!pgSurface_UnlockBy((pgSurfaceObject *)view_p->obj,
++                                consumer ? consumer : Py_None)) {
+             PyErr_Clear();
+         }
++        Py_XDECREF(consumer);
+     }
+     Py_DECREF(consumer_ref);
+     PyMem_Free(internal);
Index: pkgsrc/devel/py-game/patches/patch-src__c_surflock.c
diff -u /dev/null pkgsrc/devel/py-game/patches/patch-src__c_surflock.c:1.1
--- /dev/null   Tue Oct 13 09:06:48 2026
+++ pkgsrc/devel/py-game/patches/patch-src__c_surflock.c        Tue Oct 13 09:06:48 2026
@@ -0,0 +1,42 @@
+$NetBSD: patch-src__c_surflock.c,v 1.1 2026/10/13 09:06:48 wiz Exp $
+
+Python 3.15 support.
+https://github.com/pygame/pygame/issues/4716
+
+--- src_c/surflock.c.orig      2024-09-29 12:15:28.016111900 +0000
++++ src_c/surflock.c
+@@ -121,11 +121,16 @@ pgSurface_UnlockBy(pgSurfaceObject *surfobj, PyObject 
+ 
+     if (surf->locklist != NULL) {
+         PyObject *item, *ref;
++        int alive, match;
+         Py_ssize_t len = PyList_Size(surf->locklist);
+         while (--len >= 0 && !found) {
+             item = PyList_GetItem(surf->locklist, len);
+-            ref = PyWeakref_GetObject(item);
+-            if (ref == lockobj) {
++            if (PyWeakref_GetRef(item, &ref) < 0) {
++                return 0;
++            }
++            match = (ref == lockobj);
++            Py_XDECREF(ref);
++            if (match) {
+                 if (PySequence_DelItem(surf->locklist, len) == -1) {
+                     return 0;
+                 }
+@@ -139,8 +144,13 @@ pgSurface_UnlockBy(pgSurfaceObject *surfobj, PyObject 
+         len = PyList_Size(surf->locklist);
+         while (--len >= 0) {
+             item = PyList_GetItem(surf->locklist, len);
+-            ref = PyWeakref_GetObject(item);
+-            if (ref == Py_None) {
++            alive = PyWeakref_GetRef(item, &ref);
++            if (alive < 0) {
++                noerror = 0;
++                continue;
++            }
++            Py_XDECREF(ref);
++            if (!alive) {
+                 if (PySequence_DelItem(surf->locklist, len) == -1) {
+                     noerror = 0;
+                 }



Home | Main Index | Thread Index | Old Index