Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-qt5-sip for openSUSE:Factory 
checked in at 2026-10-01 16:59:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-qt5-sip (Old)
 and      /work/SRC/openSUSE:Factory/.python-qt5-sip.new.1253 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-qt5-sip"

Thu Oct  1 16:59:57 2026 rev:15 rq:1381694 version:12.19.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-qt5-sip/python-qt5-sip.changes    
2025-07-06 17:05:30.484987876 +0200
+++ /work/SRC/openSUSE:Factory/.python-qt5-sip.new.1253/python-qt5-sip.changes  
2026-10-01 17:00:15.939238541 +0200
@@ -1,0 +2,22 @@
+Sat Sep 26 15:50:42 UTC 2026 - Andrea Manzini <[email protected]>
+
+- Update to 12.19.0 (crosses 12.17.0, 12.17.1, 12.17.2, 12.18.0):
+  * Added support for Python v3.14 and v3.15.
+  * Added SIP_ABI_VERSION as a module attribute.
+  * Changed the type/enum pickle format to be more robust and
+    faster; still reads the legacy format.
+  * Fixed a potential buffer overflow in sipDeprecated() with long
+    deprecation messages.
+  * Fixed a missing early return on an array-to-list conversion
+    error path.
+  * Setting a read-only class attribute to None now raises
+    AttributeError instead of undefined behaviour.
+- Drop fix-license-in-setup_py.patch: upstream's own setup.py and
+  PKG-INFO now natively declare BSD-2-Clause (previously "SIP").
+- Rebase support-python3.6.patch onto upstream's new Python 3.10
+  floor (previously 3.9); still overrides down to 3.6 for Leap.
+- Raise python-setuptools BuildRequires floor to >= 75.8.1,
+  matching upstream's pyproject.toml build-system requirement
+  (previously an unrelated stale >= 30.3).
+
+-------------------------------------------------------------------

Old:
----
  fix-license-in-setup_py.patch
  pyqt5_sip-12.16.1.tar.gz

New:
----
  pyqt5_sip-12.19.0.tar.gz

----------(Old B)----------
  Old:    AttributeError instead of undefined behaviour.
- Drop fix-license-in-setup_py.patch: upstream's own setup.py and
  PKG-INFO now natively declare BSD-2-Clause (previously "SIP").
----------(Old E)----------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-qt5-sip.spec ++++++
--- /var/tmp/diff_new_pack.jwXDOB/_old  2026-10-01 17:00:17.022283909 +0200
+++ /var/tmp/diff_new_pack.jwXDOB/_new  2026-10-01 17:00:17.024283992 +0200
@@ -18,24 +18,21 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-qt5-sip
-Version:        12.16.1
+Version:        12.19.0
 Release:        0
-License:        BSD-2-Clause
 Summary:        The sip module support for PyQt5
+License:        BSD-2-Clause
 URL:            https://github.com/Python-SIP/sip
-Group:          Development/Languages/Python
-Source0:        
https://files.pythonhosted.org/packages/source/P/PyQt5-sip/pyqt5_sip-%{version}.tar.gz
-Patch0:         fix-license-in-setup_py.patch
+Source0:        
https://files.pythonhosted.org/packages/source/p/pyqt5_sip/pyqt5_sip-%{version}.tar.gz
 # PATCH-FIX-OPENSUSE Set minimum python version to 3.6 to support Leap 
distribution
 Patch100:       support-python3.6.patch
 BuildRequires:  %{python_module devel >= 3.6}
-BuildRequires:  %{python_module setuptools >= 30.3}
 BuildRequires:  %{python_module pip}
+BuildRequires:  %{python_module setuptools >= 75.8.1}
 BuildRequires:  %{python_module wheel}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
 Provides:       python-PyQt5-sip = %{version}-%{release}
-
 %python_subpackages
 
 %description

++++++ pyqt5_sip-12.16.1.tar.gz -> pyqt5_sip-12.19.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt5_sip-12.16.1/LICENSE 
new/pyqt5_sip-12.19.0/LICENSE
--- old/pyqt5_sip-12.16.1/LICENSE       2024-12-12 11:01:35.000000000 +0100
+++ new/pyqt5_sip-12.19.0/LICENSE       2026-08-02 13:20:00.000000000 +0200
@@ -1,4 +1,4 @@
-Copyright 2024 Phil Thompson <[email protected]>
+Copyright (c) 2025 Phil Thompson <[email protected]>
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt5_sip-12.16.1/PKG-INFO 
new/pyqt5_sip-12.19.0/PKG-INFO
--- old/pyqt5_sip-12.16.1/PKG-INFO      2024-12-12 11:01:36.048525000 +0100
+++ new/pyqt5_sip-12.19.0/PKG-INFO      2026-08-02 13:20:00.472665800 +0200
@@ -1,16 +1,19 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
 Name: PyQt5_sip
-Version: 12.16.1
+Version: 12.19.0
 Summary: The sip module support for PyQt5
 Home-page: https://github.com/Python-SIP/sip
 Author: Phil Thompson
 Author-email: [email protected]
-License: SIP
+License: BSD-2-Clause
 Platform: X11
 Platform: macOS
 Platform: Windows
-Requires-Python: >=3.9
+Requires-Python: >=3.10
 License-File: LICENSE
+Dynamic: license
+Dynamic: license-file
+Dynamic: requires-python
 
 sip Extension Module
 ====================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt5_sip-12.16.1/PyQt5_sip.egg-info/PKG-INFO 
new/pyqt5_sip-12.19.0/PyQt5_sip.egg-info/PKG-INFO
--- old/pyqt5_sip-12.16.1/PyQt5_sip.egg-info/PKG-INFO   2024-12-12 
11:01:35.000000000 +0100
+++ new/pyqt5_sip-12.19.0/PyQt5_sip.egg-info/PKG-INFO   2026-08-02 
13:20:00.000000000 +0200
@@ -1,16 +1,19 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
 Name: PyQt5_sip
-Version: 12.16.1
+Version: 12.19.0
 Summary: The sip module support for PyQt5
 Home-page: https://github.com/Python-SIP/sip
 Author: Phil Thompson
 Author-email: [email protected]
-License: SIP
+License: BSD-2-Clause
 Platform: X11
 Platform: macOS
 Platform: Windows
-Requires-Python: >=3.9
+Requires-Python: >=3.10
 License-File: LICENSE
+Dynamic: license
+Dynamic: license-file
+Dynamic: requires-python
 
 sip Extension Module
 ====================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt5_sip-12.16.1/apiversions.c 
new/pyqt5_sip-12.19.0/apiversions.c
--- old/pyqt5_sip-12.16.1/apiversions.c 2024-12-12 11:01:35.000000000 +0100
+++ new/pyqt5_sip-12.19.0/apiversions.c 2026-08-02 13:20:00.000000000 +0200
@@ -3,7 +3,7 @@
 /*
  * The implementation of the supprt for setting API versions.
  *
- * Copyright (c) 2024 Phil Thompson <[email protected]>
+ * Copyright (c) 2025 Phil Thompson <[email protected]>
  */
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt5_sip-12.16.1/descriptors.c 
new/pyqt5_sip-12.19.0/descriptors.c
--- old/pyqt5_sip-12.16.1/descriptors.c 2024-12-12 11:01:35.000000000 +0100
+++ new/pyqt5_sip-12.19.0/descriptors.c 2026-08-02 13:20:00.000000000 +0200
@@ -3,7 +3,7 @@
 /*
  * The implementation of the different descriptors.
  *
- * Copyright (c) 2024 Phil Thompson <[email protected]>
+ * Copyright (c) 2025 Phil Thompson <[email protected]>
  */
 
 
@@ -371,6 +371,16 @@
     sipVariableDescr *vd = (sipVariableDescr *)self;
     void *addr;
 
+    /* Check that the value isn't being deleted. */
+    if (value == NULL)
+    {
+        PyErr_Format(PyExc_AttributeError,
+                "'%s' object attribute '%s' cannot be deleted",
+                sipPyNameOfContainer(vd->cod, vd->td), vd->vd->vd_name);
+
+        return -1;
+    }
+
     /* Check that the value isn't const. */
     if (vd->vd->vd_setter == NULL)
     {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt5_sip-12.16.1/int_convertors.c 
new/pyqt5_sip-12.19.0/int_convertors.c
--- old/pyqt5_sip-12.16.1/int_convertors.c      2024-12-12 11:01:35.000000000 
+0100
+++ new/pyqt5_sip-12.19.0/int_convertors.c      2026-08-02 13:20:00.000000000 
+0200
@@ -3,7 +3,7 @@
 /*
  * The implementation of the Python object to C/C++ integer convertors.
  *
- * Copyright (c) 2024 Phil Thompson <[email protected]>
+ * Copyright (c) 2025 Phil Thompson <[email protected]>
  */
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt5_sip-12.16.1/objmap.c 
new/pyqt5_sip-12.19.0/objmap.c
--- old/pyqt5_sip-12.16.1/objmap.c      2024-12-12 11:01:35.000000000 +0100
+++ new/pyqt5_sip-12.19.0/objmap.c      2026-08-02 13:20:00.000000000 +0200
@@ -4,7 +4,7 @@
  * This module implements a hash table class for mapping C/C++ addresses to the
  * corresponding wrapped Python object.
  *
- * Copyright (c) 2024 Phil Thompson <[email protected]>
+ * Copyright (c) 2025 Phil Thompson <[email protected]>
  */
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt5_sip-12.16.1/pyproject.toml 
new/pyqt5_sip-12.19.0/pyproject.toml
--- old/pyqt5_sip-12.16.1/pyproject.toml        2024-12-12 11:01:35.000000000 
+0100
+++ new/pyqt5_sip-12.19.0/pyproject.toml        2026-08-02 13:20:00.000000000 
+0200
@@ -1,2 +1,2 @@
 [build-system]
-requires = ["setuptools >=69.5"]
+requires = ["setuptools >=75.8.1"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt5_sip-12.16.1/qtlib.c 
new/pyqt5_sip-12.19.0/qtlib.c
--- old/pyqt5_sip-12.16.1/qtlib.c       2024-12-12 11:01:35.000000000 +0100
+++ new/pyqt5_sip-12.19.0/qtlib.c       2026-08-02 13:20:00.000000000 +0200
@@ -4,7 +4,7 @@
  * The SIP library code that implements the interface to the optional module
  * supplied Qt support.
  *
- * Copyright (c) 2024 Phil Thompson <[email protected]>
+ * Copyright (c) 2025 Phil Thompson <[email protected]>
  */
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt5_sip-12.16.1/setup.py 
new/pyqt5_sip-12.19.0/setup.py
--- old/pyqt5_sip-12.16.1/setup.py      2024-12-12 11:01:35.000000000 +0100
+++ new/pyqt5_sip-12.19.0/setup.py      2026-08-02 13:20:00.000000000 +0200
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: BSD-2-Clause
 
-# Copyright (c) 2024 Phil Thompson <[email protected]>
+# Copyright (c) 2025 Phil Thompson <[email protected]>
 
 
 import glob
@@ -16,8 +16,8 @@
 # Do the setup.
 setup(
         name='PyQt5_sip',
-        version='12.16.1',
-        license='SIP',
-        python_requires='>=3.9',
+        version='12.19.0',
+        license='BSD-2-Clause',
+        python_requires='>=3.10',
         ext_modules=[module]
      )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt5_sip-12.16.1/sip.h new/pyqt5_sip-12.19.0/sip.h
--- old/pyqt5_sip-12.16.1/sip.h 2024-12-12 11:01:35.000000000 +0100
+++ new/pyqt5_sip-12.19.0/sip.h 2026-08-02 13:20:00.000000000 +0200
@@ -3,7 +3,7 @@
 /*
  * The SIP module interface.
  *
- * Copyright (c) 2024 Phil Thompson <[email protected]>
+ * Copyright (c) 2026 Phil Thompson <[email protected]>
  */
 
 
@@ -14,11 +14,14 @@
 #include <Python.h>
 
 /* Sanity check on the Python version. */
-#if PY_VERSION_HEX < 0x03090000
-#error "This version of PyQt5.sip requires Python v3.9 or later"
+#if PY_VERSION_HEX < 0x030a0000
+#error "This version of PyQt5.sip requires Python v3.10 or later"
 #endif
 
 
+#include <stdbool.h>
+
+
 #ifdef __cplusplus
 #include <exception>
 
@@ -35,13 +38,29 @@
 
 /* The version of the ABI. */
 #define SIP_ABI_MAJOR_VERSION       12
-#define SIP_ABI_MINOR_VERSION       16
-#define SIP_MODULE_PATCH_VERSION    1
+#define SIP_ABI_MINOR_VERSION       19
+#define SIP_MODULE_PATCH_VERSION    0
 
 
 /*
  * The change history of the ABI.
  *
+ * v12.19
+ *  - Added support for Python v3.15.
+ *  - The format use to pickle wrapped types has changed so that it is more
+ *    robust and faster.  The legacy format can still be read and will be
+ *    converted to the new format when written.  Older versions of the sip
+ *    module can already read the new format.
+ *  - Added definitions of sipTypeID and sipType_Invalid to aid porting to ABI
+ *    v14.
+ *
+ * v12.18
+ *  - Added support for Python v3.14.
+ *  - Python v3.10 or later is required.
+ *
+ * v12.17
+ *  - Added SIP_ABI_VERSION as a module attribute.
+ *
  * v12.16
  *  - Python v3.9 or later is required.
  *  - Added a new implementation of sipDeprecated() that takes an optional
@@ -81,8 +100,8 @@
 
 
 /* The version of the code generator. */
-#define SIP_VERSION                 0x60901
-#define SIP_VERSION_STR             "6.9.1"
+#define SIP_VERSION                 0x61000
+#define SIP_VERSION_STR             "6.16.0"
 
 /* These are all dependent on the user-specified name of the sip module. */
 #define _SIP_MODULE_FQ_NAME         "PyQt5.sip"
@@ -170,20 +189,11 @@
 #define SIP_TRACE_METHODS   0x0020
 
 
-/*
- * Hide some thread dependent stuff.
- */
-#ifdef WITH_THREAD
+/* Hide some thread related stuff. */
 typedef PyGILState_STATE sip_gilstate_t;
 #define SIP_RELEASE_GIL(gs) PyGILState_Release(gs);
 #define SIP_BLOCK_THREADS   {PyGILState_STATE sipGIL = PyGILState_Ensure();
 #define SIP_UNBLOCK_THREADS PyGILState_Release(sipGIL);}
-#else
-typedef int sip_gilstate_t;
-#define SIP_RELEASE_GIL(gs)
-#define SIP_BLOCK_THREADS
-#define SIP_UNBLOCK_THREADS
-#endif
 
 
 /*
@@ -224,6 +234,13 @@
 
 
 /*
+ * The following make it easier to write code that supports ABI v14.
+ */
+#define sipType_Invalid NULL
+typedef const sipTypeDef *sipTypeID;
+
+
+/*
  * The different events a handler can be registered for.
  */
 typedef enum
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt5_sip-12.16.1/sip_array.c 
new/pyqt5_sip-12.19.0/sip_array.c
--- old/pyqt5_sip-12.16.1/sip_array.c   2024-12-12 11:01:35.000000000 +0100
+++ new/pyqt5_sip-12.19.0/sip_array.c   2026-08-02 13:20:00.000000000 +0200
@@ -3,7 +3,7 @@
 /*
  * This file implements the API for the array type.
  *
- * Copyright (c) 2024 Phil Thompson <[email protected]>
+ * Copyright (c) 2025 Phil Thompson <[email protected]>
  */
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt5_sip-12.16.1/sip_array.h 
new/pyqt5_sip-12.19.0/sip_array.h
--- old/pyqt5_sip-12.16.1/sip_array.h   2024-12-12 11:01:35.000000000 +0100
+++ new/pyqt5_sip-12.19.0/sip_array.h   2026-08-02 13:20:00.000000000 +0200
@@ -3,7 +3,7 @@
 /*
  * This file defines the API for the array type.
  *
- * Copyright (c) 2024 Phil Thompson <[email protected]>
+ * Copyright (c) 2025 Phil Thompson <[email protected]>
  */
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt5_sip-12.16.1/sipint.h 
new/pyqt5_sip-12.19.0/sipint.h
--- old/pyqt5_sip-12.16.1/sipint.h      2024-12-12 11:01:35.000000000 +0100
+++ new/pyqt5_sip-12.19.0/sipint.h      2026-08-02 13:20:00.000000000 +0200
@@ -3,7 +3,7 @@
 /*
  * This file defines the SIP library internal interfaces.
  *
- * Copyright (c) 2024 Phil Thompson <[email protected]>
+ * Copyright (c) 2025 Phil Thompson <[email protected]>
  */
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt5_sip-12.16.1/siplib.c 
new/pyqt5_sip-12.19.0/siplib.c
--- old/pyqt5_sip-12.16.1/siplib.c      2024-12-12 11:01:35.000000000 +0100
+++ new/pyqt5_sip-12.19.0/siplib.c      2026-08-02 13:20:00.000000000 +0200
@@ -3,7 +3,7 @@
 /*
  * SIP library code.
  *
- * Copyright (c) 2024 Phil Thompson <[email protected]>
+ * Copyright (c) 2025 Phil Thompson <[email protected]>
  */
 
 
@@ -798,8 +798,6 @@
 
 static PyObject *init_name = NULL;      /* '__init__'. */
 static PyObject *empty_tuple;           /* The empty tuple. */
-static PyObject *type_unpickler;        /* The type unpickler function. */
-static PyObject *enum_unpickler;        /* The enum unpickler function. */
 static sipSymbol *sipSymbolList = NULL; /* The list of published symbols. */
 static sipAttrGetter *sipAttrGetters = NULL;  /* The list of attribute 
getters. */
 static sipProxyResolver *proxyResolvers = NULL; /* The list of proxy 
resolvers. */
@@ -859,7 +857,6 @@
 static sipExportedModuleDef *getModule(PyObject *mname_obj);
 static PyObject *pickle_type(PyObject *obj, PyObject *args);
 static PyObject *unpickle_type(PyObject *obj, PyObject *args);
-static PyObject *pickle_enum(PyObject *obj, PyObject *args);
 static PyObject *unpickle_enum(PyObject *obj, PyObject *args);
 static int setReduce(PyTypeObject *type, PyMethodDef *pickler);
 static int createEnum(sipExportedModuleDef *client, sipEnumTypeDef *etd,
@@ -995,9 +992,7 @@
 const sipAPIDef *sip_init_library(PyObject *mod_dict)
 {
     static PyMethodDef methods[] = {
-        /* This must be first. */
         {"_unpickle_enum", unpickle_enum, METH_VARARGS, NULL},
-        /* This must be second. */
         {"_unpickle_type", unpickle_type, METH_VARARGS, NULL},
         {"assign", assign, METH_VARARGS, NULL},
         {"cast", cast, METH_VARARGS, NULL},
@@ -1038,6 +1033,14 @@
     if (dict_set_and_discard(mod_dict, "SIP_VERSION_STR", obj) < 0)
         return NULL;
 
+    /* Add the SIP ABI version number. */
+    obj = PyLong_FromLong((SIP_ABI_MAJOR_VERSION << 16) +
+            (SIP_ABI_MINOR_VERSION << 8) +
+            SIP_MODULE_PATCH_VERSION);
+
+    if (dict_set_and_discard(mod_dict, "SIP_ABI_VERSION", obj) < 0)
+        return NULL;
+
     /* Add the methods. */
     for (md = methods; md->ml_name != NULL; ++md)
     {
@@ -1045,17 +1048,6 @@
 
         if (dict_set_and_discard(mod_dict, md->ml_name, meth) < 0)
             return NULL;
-
-        if (md == &methods[0])
-        {
-            Py_INCREF(meth);
-            enum_unpickler = meth;
-        }
-        else if (md == &methods[1])
-        {
-            Py_INCREF(meth);
-            type_unpickler = meth;
-        }
     }
 
     /* Initialise the types. */
@@ -1823,20 +1815,6 @@
             if (td->td_version < 0 || sipIsRangeEnabled(client, 
td->td_version))
                 if (createEnum(client, etd, i, mod_dict) < 0)
                     return -1;
-
-            /*
-             * Register the enum pickler for nested enums (non-nested enums
-             * don't need special treatment).
-             */
-            if (sipTypeIsEnum(td) && etd->etd_scope >= 0)
-            {
-                static PyMethodDef md = {
-                    "_pickle_enum", pickle_enum, METH_NOARGS, NULL
-                };
-
-                if (setReduce(sipTypeAsPyTypeObject(td), &md) < 0)
-                    return -1;
-            }
         }
         else if (sipTypeIsMapped(td))
         {
@@ -5992,6 +5970,7 @@
         {
             release(el, td, 0);
             Py_DECREF(seq);
+            return NULL;
         }
 
         PyTuple_SET_ITEM(seq, i, el_obj);
@@ -6575,7 +6554,7 @@
 
 
 /*
- * The type unpickler.
+ * The legacy type unpickler.
  */
 static PyObject *unpickle_type(PyObject *obj, PyObject *args)
 {
@@ -6657,8 +6636,7 @@
                         return NULL;
                     }
 
-                    return Py_BuildValue("O(OsN)", type_unpickler,
-                            em->em_nameobj, pyname, init_args);
+                    return Py_BuildValue("ON", Py_TYPE(obj), init_args);
                 }
         }
     }
@@ -6672,7 +6650,7 @@
 
 
 /*
- * The enum unpickler.
+ * The legacy enum unpickler.
  */
 static PyObject *unpickle_enum(PyObject *obj, PyObject *args)
 {
@@ -6707,20 +6685,6 @@
 
 
 /*
- * The enum pickler.
- */
-static PyObject *pickle_enum(PyObject *obj, PyObject *args)
-{
-    sipTypeDef *td = ((sipEnumTypeObject *)Py_TYPE(obj))->type;
-
-    (void)args;
-
-    return Py_BuildValue("O(Osi)", enum_unpickler, td->td_module->em_nameobj,
-            sipPyNameOfEnum((sipEnumTypeDef *)td), (int)PyLong_AS_LONG(obj));
-}
-
-
-/*
  * Set the __reduce__method for a type.
  */
 static int setReduce(PyTypeObject *type, PyMethodDef *pickler)
@@ -7792,21 +7756,25 @@
 int sip_api_deprecated_12_16(const char *classname, const char *method,
         const char *message)
 {
-    char buf[100];
+    const unsigned int bufsize = 100 + ( message ? strlen(message) : 0 );
+    char *buf = (char*)sip_api_malloc(bufsize * sizeof(char));
+    unsigned int written = 0;
 
     if (classname == NULL)
-        PyOS_snprintf(buf, sizeof (buf), "%s() is deprecated", method);
+        written = PyOS_snprintf(buf, bufsize, "%s() is deprecated", method);
     else if (method == NULL)
-        PyOS_snprintf(buf, sizeof (buf), "%s constructor is deprecated",
-                classname);
+        written = PyOS_snprintf(buf, bufsize, "%s constructor is deprecated",
+                               classname);
     else
-        PyOS_snprintf(buf, sizeof (buf), "%s.%s() is deprecated", classname,
-                method);
+        written = PyOS_snprintf(buf, bufsize, "%s.%s() is deprecated", 
classname,
+                               method );
 
     if (message != NULL)
-        PyOS_snprintf(&buf[strlen(buf)], sizeof (buf), ": %s", message);
+        PyOS_snprintf(buf+written, bufsize-written, ": %s", message);
 
-    return PyErr_WarnEx(PyExc_DeprecationWarning, buf, 1);
+    const int res = PyErr_WarnEx(PyExc_DeprecationWarning, buf, 1);
+    sip_api_free(buf); 
+    return res;
 }
 
 
@@ -8205,43 +8173,51 @@
     {
         PyObject *w;
 
-        switch (si->si_encoding)
+        if (si->si_val == NULL)
         {
-        case 'A':
-            w = PyUnicode_DecodeASCII(si->si_val, strlen(si->si_val), NULL);
-            break;
+            w = Py_None;
+            Py_INCREF(w);
+        }
+        else
+        {
+            switch (si->si_encoding)
+            {
+            case 'A':
+                w = PyUnicode_DecodeASCII(si->si_val, strlen(si->si_val), 
NULL);
+                break;
 
-        case 'L':
-            w = PyUnicode_DecodeLatin1(si->si_val, strlen(si->si_val), NULL);
-            break;
+            case 'L':
+                w = PyUnicode_DecodeLatin1(si->si_val, strlen(si->si_val), 
NULL);
+                break;
 
-        case '8':
-            w = PyUnicode_FromString(si->si_val);
-            break;
+            case '8':
+                w = PyUnicode_FromString(si->si_val);
+                break;
 
-        case 'w':
-            /* The hack for wchar_t. */
+            case 'w':
+                /* The hack for wchar_t. */
 #if defined(HAVE_WCHAR_H)
-            w = PyUnicode_FromWideChar((const wchar_t *)si->si_val, 1);
-            break;
+                w = PyUnicode_FromWideChar((const wchar_t *)si->si_val, 1);
+                break;
 #else
-            raiseNoWChar();
-            return -1;
+                raiseNoWChar();
+                return -1;
 #endif
 
-        case 'W':
-            /* The hack for wchar_t*. */
+            case 'W':
+                /* The hack for wchar_t*. */
 #if defined(HAVE_WCHAR_H)
-            w = PyUnicode_FromWideChar((const wchar_t *)si->si_val,
-                    wcslen((const wchar_t *)si->si_val));
-            break;
+                w = PyUnicode_FromWideChar((const wchar_t *)si->si_val,
+                        wcslen((const wchar_t *)si->si_val));
+                break;
 #else
-            raiseNoWChar();
-            return -1;
+                raiseNoWChar();
+                return -1;
 #endif
 
-        default:
-            w = PyBytes_FromString(si->si_val);
+            default:
+                w = PyBytes_FromString(si->si_val);
+            }
         }
 
         if (dict_set_and_discard(dict, si->si_name, w) < 0)
@@ -8484,9 +8460,7 @@
     if (sipInterpreter == NULL)
         return NULL;
 
-#ifdef WITH_THREAD
     *gil = PyGILState_Ensure();
-#endif
 
     /* Only read this when we have the GIL. */
     sipSelf = *sipSelfp;
@@ -8618,17 +8592,13 @@
             PyErr_Print();
         }
 
-#ifdef WITH_THREAD
         PyGILState_Release(*gil);
-#endif
     }
 
     return reimp;
 
 release_gil:
-#ifdef WITH_THREAD
     PyGILState_Release(*gil);
-#endif
     return NULL;
 }
 
@@ -9817,7 +9787,7 @@
 
         ((sipWrapperType *)o)->wt_td = currentType;
 
-        if (sipTypeIsClass(currentType))
+        if (sipTypeIsClass(currentType) || sipTypeIsNamespace(currentType))
         {
             const sipClassTypeDef *ctd = (const sipClassTypeDef *)currentType;
             const char *docstring = ctd->ctd_docstring;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt5_sip-12.16.1/threads.c 
new/pyqt5_sip-12.19.0/threads.c
--- old/pyqt5_sip-12.16.1/threads.c     2024-12-12 11:01:35.000000000 +0100
+++ new/pyqt5_sip-12.19.0/threads.c     2026-08-02 13:20:00.000000000 +0200
@@ -5,7 +5,7 @@
  * C++ classes that provide a thread interface to interact properly with the
  * Python threading infrastructure.
  *
- * Copyright (c) 2024 Phil Thompson <[email protected]>
+ * Copyright (c) 2025 Phil Thompson <[email protected]>
  */
 
 
@@ -22,14 +22,11 @@
 } pendingDef;
 
 
-#ifdef WITH_THREAD
-
-#include <pythread.h>
-
-
 /*
  * The per thread data we need to maintain.
  */
+#include <pythread.h>
+
 typedef struct _threadDef {
     long thr_ident;                 /* The thread identifier. */
     pendingDef pending;             /* An object waiting to be wrapped. */
@@ -40,9 +37,6 @@
 
 static threadDef *currentThreadDef(int auto_alloc);
 
-#endif
-
-
 static pendingDef *get_pending(int auto_alloc);
 
 
@@ -124,7 +118,6 @@
  */
 void sip_api_end_thread(void)
 {
-#ifdef WITH_THREAD
     threadDef *thread;
     PyGILState_STATE gil = PyGILState_Ensure();
 
@@ -132,7 +125,6 @@
         thread->thr_ident = 0;
 
     PyGILState_Release(gil);
-#endif
 }
 
 
@@ -142,23 +134,15 @@
  */
 static pendingDef *get_pending(int auto_alloc)
 {
-#ifdef WITH_THREAD
     threadDef *thread;
 
     if ((thread = currentThreadDef(auto_alloc)) == NULL)
         return NULL;
 
     return &thread->pending;
-#else
-    static pendingDef pending;
-
-    return &pending;
-#endif
 }
 
 
-#ifdef WITH_THREAD
-
 /*
  * Return the thread data for the current thread, allocating it if necessary,
  * or NULL if there was an error.
@@ -204,5 +188,3 @@
 
     return thread;
 }
-
-#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt5_sip-12.16.1/voidptr.c 
new/pyqt5_sip-12.19.0/voidptr.c
--- old/pyqt5_sip-12.16.1/voidptr.c     2024-12-12 11:01:35.000000000 +0100
+++ new/pyqt5_sip-12.19.0/voidptr.c     2026-08-02 13:20:00.000000000 +0200
@@ -3,7 +3,7 @@
 /*
  * This file implements the API for the voidptr type.
  *
- * Copyright (c) 2024 Phil Thompson <[email protected]>
+ * Copyright (c) 2025 Phil Thompson <[email protected]>
  */
 
 

++++++ support-python3.6.patch ++++++
--- /var/tmp/diff_new_pack.jwXDOB/_old  2026-10-01 17:00:17.247293334 +0200
+++ /var/tmp/diff_new_pack.jwXDOB/_new  2026-10-01 17:00:17.256293711 +0200
@@ -1,56 +1,56 @@
-diff -ur pyqt5_sip-12.16.1/PKG-INFO pyqt5_sip-12.16.1_fix/PKG-INFO
---- pyqt5_sip-12.16.1/PKG-INFO 2024-12-12 11:01:36.048525000 +0100
-+++ pyqt5_sip-12.16.1_fix/PKG-INFO     2025-01-21 12:59:58.918060996 +0100
+diff -ur pyqt5_sip-12.19.0/PKG-INFO pyqt5_sip-12.19.0_fix/PKG-INFO
+--- pyqt5_sip-12.19.0/PKG-INFO 2026-08-02 13:20:00.472665800 +0200
++++ pyqt5_sip-12.19.0_fix/PKG-INFO     2026-09-26 17:48:51.297267271 +0200
 @@ -9,7 +9,7 @@
  Platform: X11
  Platform: macOS
  Platform: Windows
--Requires-Python: >=3.9
+-Requires-Python: >=3.10
 +Requires-Python: >=3.6
  License-File: LICENSE
- 
- sip Extension Module
-diff -ur pyqt5_sip-12.16.1/PyQt5_sip.egg-info/PKG-INFO 
pyqt5_sip-12.16.1_fix/PyQt5_sip.egg-info/PKG-INFO
---- pyqt5_sip-12.16.1/PyQt5_sip.egg-info/PKG-INFO      2024-12-12 
11:01:35.000000000 +0100
-+++ pyqt5_sip-12.16.1_fix/PyQt5_sip.egg-info/PKG-INFO  2025-01-21 
13:00:02.294780054 +0100
+ Dynamic: license
+ Dynamic: license-file
+diff -ur pyqt5_sip-12.19.0/PyQt5_sip.egg-info/PKG-INFO 
pyqt5_sip-12.19.0_fix/PyQt5_sip.egg-info/PKG-INFO
+--- pyqt5_sip-12.19.0/PyQt5_sip.egg-info/PKG-INFO      2026-08-02 
13:20:00.000000000 +0200
++++ pyqt5_sip-12.19.0_fix/PyQt5_sip.egg-info/PKG-INFO  2026-09-26 
17:48:51.297319972 +0200
 @@ -9,7 +9,7 @@
  Platform: X11
  Platform: macOS
  Platform: Windows
--Requires-Python: >=3.9
+-Requires-Python: >=3.10
 +Requires-Python: >=3.6
  License-File: LICENSE
- 
- sip Extension Module
-diff -ur pyqt5_sip-12.16.1/setup.py pyqt5_sip-12.16.1_fix/setup.py
---- pyqt5_sip-12.16.1/setup.py 2024-12-12 11:01:35.000000000 +0100
-+++ pyqt5_sip-12.16.1_fix/setup.py     2025-01-21 13:01:46.169725120 +0100
+ Dynamic: license
+ Dynamic: license-file
+diff -ur pyqt5_sip-12.19.0/setup.py pyqt5_sip-12.19.0_fix/setup.py
+--- pyqt5_sip-12.19.0/setup.py 2026-08-02 13:20:00.000000000 +0200
++++ pyqt5_sip-12.19.0_fix/setup.py     2026-09-26 17:48:51.297488860 +0200
 @@ -18,6 +18,6 @@
          name='PyQt5_sip',
-         version='12.16.1',
+         version='12.19.0',
          license='BSD-2-Clause',
--        python_requires='>=3.9',
+-        python_requires='>=3.10',
 +        python_requires='>=3.6',
          ext_modules=[module]
       )
-diff -ur pyqt5_sip-12.16.1/sip.h pyqt5_sip-12.16.1_fix/sip.h
---- pyqt5_sip-12.16.1/sip.h    2024-12-12 11:01:35.000000000 +0100
-+++ pyqt5_sip-12.16.1_fix/sip.h        2025-01-21 13:01:46.169725120 +0100
+diff -ur pyqt5_sip-12.19.0/sip.h pyqt5_sip-12.19.0_fix/sip.h
+--- pyqt5_sip-12.19.0/sip.h    2026-08-02 13:20:00.000000000 +0200
++++ pyqt5_sip-12.19.0_fix/sip.h        2026-09-26 17:48:51.300637452 +0200
 @@ -14,8 +14,8 @@
  #include <Python.h>
  
  /* Sanity check on the Python version. */
--#if PY_VERSION_HEX < 0x03090000
--#error "This version of PyQt5.sip requires Python v3.9 or later"
+-#if PY_VERSION_HEX < 0x030a0000
+-#error "This version of PyQt5.sip requires Python v3.10 or later"
 +#if PY_VERSION_HEX < 0x03060000
 +#error "This version of PyQt5.sip requires Python v3.6 or later"
  #endif
  
  
-diff -ur pyqt5_sip-12.16.1/siplib.c pyqt5_sip-12.16.1_fix/siplib.c
---- pyqt5_sip-12.16.1/siplib.c 2024-12-12 11:01:35.000000000 +0100
-+++ pyqt5_sip-12.16.1_fix/siplib.c     2025-01-21 13:01:46.173058506 +0100
-@@ -1027,6 +1027,10 @@
+diff -ur pyqt5_sip-12.19.0/siplib.c pyqt5_sip-12.19.0_fix/siplib.c
+--- pyqt5_sip-12.19.0/siplib.c 2026-08-02 13:20:00.000000000 +0200
++++ pyqt5_sip-12.19.0_fix/siplib.c     2026-09-26 17:49:17.398305059 +0200
+@@ -1022,6 +1022,10 @@
      PyObject *obj;
      PyMethodDef *md;
  
@@ -61,7 +61,7 @@
      /* Add the SIP version number. */
      obj = PyLong_FromLong(SIP_VERSION);
  
-@@ -13335,12 +13339,16 @@
+@@ -13305,12 +13309,16 @@
          Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step,
          Py_ssize_t *slicelength)
  {

Reply via email to