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-18 19:22:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-qt5-sip (Old)
and /work/SRC/openSUSE:Factory/.python-qt5-sip.new.3698736 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-qt5-sip"
Sun Oct 18 19:22:18 2026 rev:16 rq:1385950 version:12.20.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-qt5-sip/python-qt5-sip.changes
2026-10-01 17:00:15.939238541 +0200
+++
/work/SRC/openSUSE:Factory/.python-qt5-sip.new.3698736/python-qt5-sip.changes
2026-10-18 19:22:29.436687201 +0200
@@ -1,0 +2,11 @@
+Sun Oct 18 09:03:43 UTC 2026 - Ben Greiner <[email protected]>
+
+- Update to ABI 12.20
+ * A new plugin API has been added. This allows bindings authors
+ to extend SIP, for example by adding new directives and
+ annotations.
+ * As a consequence all hard-coded support for PyQt has been
+ removed.
+ * See also python-sip6 package
+
+-------------------------------------------------------------------
Old:
----
pyqt5_sip-12.19.0.tar.gz
New:
----
pyqt5_sip-12.20.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-qt5-sip.spec ++++++
--- /var/tmp/diff_new_pack.XEWovv/_old 2026-10-18 19:22:30.188718379 +0200
+++ /var/tmp/diff_new_pack.XEWovv/_new 2026-10-18 19:22:30.190718462 +0200
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-qt5-sip
-Version: 12.19.0
+Version: 12.20.0
Release: 0
Summary: The sip module support for PyQt5
License: BSD-2-Clause
++++++ pyqt5_sip-12.19.0.tar.gz -> pyqt5_sip-12.20.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyqt5_sip-12.19.0/PKG-INFO
new/pyqt5_sip-12.20.0/PKG-INFO
--- old/pyqt5_sip-12.19.0/PKG-INFO 2026-08-02 13:20:00.472665800 +0200
+++ new/pyqt5_sip-12.20.0/PKG-INFO 2026-10-04 13:59:12.935244000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: PyQt5_sip
-Version: 12.19.0
+Version: 12.20.0
Summary: The sip module support for PyQt5
Home-page: https://github.com/Python-SIP/sip
Author: Phil Thompson
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyqt5_sip-12.19.0/PyQt5_sip.egg-info/PKG-INFO
new/pyqt5_sip-12.20.0/PyQt5_sip.egg-info/PKG-INFO
--- old/pyqt5_sip-12.19.0/PyQt5_sip.egg-info/PKG-INFO 2026-08-02
13:20:00.000000000 +0200
+++ new/pyqt5_sip-12.20.0/PyQt5_sip.egg-info/PKG-INFO 2026-10-04
13:59:12.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: PyQt5_sip
-Version: 12.19.0
+Version: 12.20.0
Summary: The sip module support for PyQt5
Home-page: https://github.com/Python-SIP/sip
Author: Phil Thompson
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyqt5_sip-12.19.0/setup.py
new/pyqt5_sip-12.20.0/setup.py
--- old/pyqt5_sip-12.19.0/setup.py 2026-08-02 13:20:00.000000000 +0200
+++ new/pyqt5_sip-12.20.0/setup.py 2026-10-04 13:59:12.000000000 +0200
@@ -16,7 +16,7 @@
# Do the setup.
setup(
name='PyQt5_sip',
- version='12.19.0',
+ version='12.20.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.19.0/sip.h new/pyqt5_sip-12.20.0/sip.h
--- old/pyqt5_sip-12.19.0/sip.h 2026-08-02 13:20:00.000000000 +0200
+++ new/pyqt5_sip-12.20.0/sip.h 2026-10-04 13:59:12.000000000 +0200
@@ -38,13 +38,25 @@
/* The version of the ABI. */
#define SIP_ABI_MAJOR_VERSION 12
-#define SIP_ABI_MINOR_VERSION 19
+#define SIP_ABI_MINOR_VERSION 20
#define SIP_MODULE_PATCH_VERSION 0
/*
* The change history of the ABI.
*
+ * v12.20
+ * - Added sipGetAssignmentFunction().
+ * - Added sipGetPyTypeRef() and deprecated sipTypeAsPyTypeObject().
+ * - Added sipGetFrameRef() and deprecated sipGetFrame().
+ * - Added sipObjectGuard, sipObjectGuard_New(),
+ * sipObjectGuard_GetModuleState(), sipObjectGuard_GetRef() and
+ * sipObjectGuard_Release().
+ * - Exposed sipParseResultEx() as sipParseResultObject().
+ * - Added definitions of sipGetModuleState(), sipGetModuleStateByType(),
+ * sipGetVoidPtrType(), sipMakeAbsolute() and sipModuleState to aid porting
+ * to ABI v14.
+ *
* v12.19
* - Added support for Python v3.15.
* - The format use to pickle wrapped types has changed so that it is more
@@ -100,8 +112,8 @@
/* The version of the code generator. */
-#define SIP_VERSION 0x61000
-#define SIP_VERSION_STR "6.16.0"
+#define SIP_VERSION 0x61100
+#define SIP_VERSION_STR "6.17.0"
/* These are all dependent on the user-specified name of the sip module. */
#define _SIP_MODULE_FQ_NAME "PyQt5.sip"
@@ -196,6 +208,10 @@
#define SIP_UNBLOCK_THREADS PyGILState_Release(sipGIL);}
+/* The sipObjectGuard implementation is actually the object itself. */
+typedef PyObject sipObjectGuard;
+
+
/*
* Forward declarations of types.
*/
@@ -234,9 +250,16 @@
/*
- * The following make it easier to write code that supports ABI v14.
+ * The following make it easier to write code that supports ABI v14. Note that
+ * sipVoidPtr_Type is just used as a convenient non-NULL pointer.
*/
-#define sipType_Invalid NULL
+#define sipGetModuleState() ((sipModuleState *)sipVoidPtr_Type)
+#define sipGetModuleStateByType(type) ((sipModuleState *)sipVoidPtr_Type)
+#define sipGetVoidPtrType() sipVoidPtr_Type
+#define sipMakeAbsolute(id) id
+#define sipObjectGuard_GetModuleState(g) ((sipModuleState *)sipVoidPtr_Type)
+#define sipType_Invalid NULL
+struct sipModuleState;
typedef const sipTypeDef *sipTypeID;
@@ -304,6 +327,9 @@
typedef int (*sipNewUserTypeFunc)(sipWrapperType *);
typedef void (*sipWrapperVisitorFunc)(sipSimpleWrapper *, void *);
+/* In this ABI an error handler is the function pointer. */
+typedef sipVirtErrorHandlerFunc sipVirtErrorHandler;
+
#if !defined(Py_LIMITED_API)
/*
@@ -790,8 +816,8 @@
/* The Python type object. */
PyTypeObject *td_py_type;
- /* Any additional fixed data generated by a plugin. */
- void *td_plugin_data;
+ /* Any additional immutable data generated by a plugin. */
+ const void *td_plugin_data;
};
@@ -1126,7 +1152,10 @@
/* The imported modules. */
sipImportedModuleDef *em_imports;
- /* The optional Qt support API. */
+ /*
+ * The optional Qt support API. This will be an unused 'void *' in SIP
+ * v7.
+ */
struct _sipQtAPI *em_qt_api;
/* The number of types. */
@@ -1443,7 +1472,7 @@
PyObject *(*api_build_result)(int *isErr, const char *fmt, ...);
PyObject *(*api_call_method)(int *isErr, PyObject *method, const char *fmt,
...);
- void (*api_call_procedure_method)(sip_gilstate_t, sipVirtErrorHandlerFunc,
+ void (*api_call_procedure_method)(sip_gilstate_t, sipVirtErrorHandler,
sipSimpleWrapper *, PyObject *, const char *, ...);
PyObject *(*api_connect_rx)(PyObject *txObj, const char *sig,
PyObject *rxObj, const char *slot, int type);
@@ -1531,7 +1560,7 @@
int (*api_get_time)(PyObject *, sipTimeDef *);
PyObject *(*api_from_time)(const sipTimeDef *);
int (*api_is_user_type)(const sipWrapperType *);
- struct _frame *(*api_get_frame)(int);
+ PyFrameObject *(*api_get_frame)(int);
int (*api_check_plugin_for_type)(const sipTypeDef *, const char *);
PyObject *(*api_unicode_new)(Py_ssize_t, unsigned, int *, void **);
void (*api_unicode_write)(int, void *, int, unsigned);
@@ -1600,10 +1629,10 @@
PyObject *sipKwdArgs, const char **kwdlist, PyObject **unused,
const char *fmt, ...);
void (*api_add_exception)(sipErrorState es, PyObject **parseErrp);
- int (*api_parse_result_ex)(sip_gilstate_t, sipVirtErrorHandlerFunc,
+ int (*api_parse_result_ex)(sip_gilstate_t, sipVirtErrorHandler,
sipSimpleWrapper *, PyObject *method, PyObject *res,
const char *fmt, ...);
- void (*api_call_error_handler)(sipVirtErrorHandlerFunc,
+ void (*api_call_error_handler)(sipVirtErrorHandler,
sipSimpleWrapper *, sip_gilstate_t);
int (*api_init_mixin)(PyObject *self, PyObject *args, PyObject *kwds,
const sipClassTypeDef *ctd);
@@ -1704,13 +1733,24 @@
*/
int (*api_deprecated_12_16)(const char *classname, const char *method,
const char *message);
+ /*
+ * The following are part of the public API.
+ */
+ PyFrameObject *(*api_get_frame_ref)(int);
+ PyTypeObject *(*api_get_py_type_ref)(const sipTypeDef *td);
+ sipAssignFunc (*api_get_assignment_function)(const sipTypeDef *td);
+ sipObjectGuard *(*api_object_guard_new)(PyObject *obj);
+ PyObject *(*api_object_guard_get_ref)(sipObjectGuard *obj_guard,
+ sip_gilstate_t *gs_p);
+ void (*api_object_guard_release)(sipObjectGuard *obj_guard);
} sipAPIDef;
const sipAPIDef *sip_init_library(PyObject *mod_dict);
/*
- * The API implementing the optional Qt support.
+ * The API implementing the optional Qt support. This will be removed in SIP
+ * v7.
*/
typedef struct _sipQtAPI {
sipTypeDef **qt_qobject;
@@ -1853,8 +1893,8 @@
/*
- * The following are PyQt4-specific extensions. In SIP v5 they will be pushed
- * out to a plugin supplied by PyQt4.
+ * The following are PyQt4-specific extensions. They will be removed in SIP
+ * v7.
*/
/*
@@ -1907,8 +1947,8 @@
/*
- * The following are PyQt5-specific extensions. In SIP v5 they will be pushed
- * out to a plugin supplied by PyQt5.
+ * The following are PyQt5-specific extensions. They will be removed in SIP
+ * v7.
*/
/*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyqt5_sip-12.19.0/siplib.c
new/pyqt5_sip-12.20.0/siplib.c
--- old/pyqt5_sip-12.19.0/siplib.c 2026-08-02 13:20:00.000000000 +0200
+++ new/pyqt5_sip-12.20.0/siplib.c 2026-10-04 13:59:12.000000000 +0200
@@ -244,7 +244,7 @@
static PyObject *sip_api_call_method(int *isErr, PyObject *method,
const char *fmt, ...);
static void sip_api_call_procedure_method(sip_gilstate_t gil_state,
- sipVirtErrorHandlerFunc error_handler, sipSimpleWrapper *py_self,
+ sipVirtErrorHandler error_handler, sipSimpleWrapper *py_self,
PyObject *method, const char *fmt, ...);
static Py_ssize_t sip_api_convert_from_sequence_index(Py_ssize_t idx,
Py_ssize_t len);
@@ -267,11 +267,11 @@
static sipWrapperType *sip_api_map_string_to_class(const char *typeString,
const sipStringTypeClassMap *map, int maplen);
static int sip_api_parse_result_ex(sip_gilstate_t gil_state,
- sipVirtErrorHandlerFunc error_handler, sipSimpleWrapper *py_self,
+ sipVirtErrorHandler error_handler, sipSimpleWrapper *py_self,
PyObject *method, PyObject *res, const char *fmt, ...);
static int sip_api_parse_result(int *isErr, PyObject *method, PyObject *res,
const char *fmt, ...);
-static void sip_api_call_error_handler(sipVirtErrorHandlerFunc error_handler,
+static void sip_api_call_error_handler(sipVirtErrorHandler error_handler,
sipSimpleWrapper *py_self, sip_gilstate_t gil_state);
static void sip_api_trace(unsigned mask,const char *fmt,...);
static void sip_api_transfer_back(PyObject *self);
@@ -374,7 +374,8 @@
static int sip_api_get_time(PyObject *obj, sipTimeDef *time);
static PyObject *sip_api_from_time(const sipTimeDef *time);
static int sip_api_is_user_type(const sipWrapperType *wt);
-static struct _frame *sip_api_get_frame(int);
+static PyFrameObject *sip_api_get_frame(int depth);
+static PyFrameObject *sip_api_get_frame_ref(int depth);
static int sip_api_check_plugin_for_type(const sipTypeDef *td,
const char *name);
static PyObject *sip_api_unicode_new(Py_ssize_t len, unsigned maxchar,
@@ -396,6 +397,12 @@
void *closure);
static int sip_api_register_exit_notifier(PyMethodDef *md);
static sipExceptionHandler sip_api_next_exception_handler(void **statep);
+static PyTypeObject *sip_api_get_py_type_ref(const sipTypeDef *td);
+static sipAssignFunc sip_api_get_assignment_function(const sipTypeDef *td);
+static sipObjectGuard *sip_api_object_guard_new(PyObject *obj);
+static PyObject *sip_api_object_guard_get_ref(sipObjectGuard *obj_guard,
+ sip_gilstate_t *gs_p);
+static void sip_api_object_guard_release(sipObjectGuard *obj_guard);
/*
@@ -608,6 +615,15 @@
* The following are part of the private API.
*/
sip_api_deprecated_12_16,
+ /*
+ * The following are part of the public API.
+ */
+ sip_api_get_frame_ref,
+ sip_api_get_py_type_ref,
+ sip_api_get_assignment_function,
+ sip_api_object_guard_new,
+ sip_api_object_guard_get_ref,
+ sip_api_object_guard_release,
};
@@ -2240,7 +2256,7 @@
* value and handle the result..
*/
static void sip_api_call_procedure_method(sip_gilstate_t gil_state,
- sipVirtErrorHandlerFunc error_handler, sipSimpleWrapper *py_self,
+ sipVirtErrorHandler error_handler, sipSimpleWrapper *py_self,
PyObject *method, const char *fmt, ...)
{
PyObject *res;
@@ -2696,7 +2712,7 @@
* Parse a result object based on a format string.
*/
static int sip_api_parse_result_ex(sip_gilstate_t gil_state,
- sipVirtErrorHandlerFunc error_handler, sipSimpleWrapper *py_self,
+ sipVirtErrorHandler error_handler, sipSimpleWrapper *py_self,
PyObject *method, PyObject *res, const char *fmt, ...)
{
int rc;
@@ -2731,7 +2747,7 @@
* Call a virtual error handler. This is called with the GIL and from the
* thread that raised the error.
*/
-static void sip_api_call_error_handler(sipVirtErrorHandlerFunc error_handler,
+static void sip_api_call_error_handler(sipVirtErrorHandler error_handler,
sipSimpleWrapper *py_self, sip_gilstate_t sipGILState)
{
if (error_handler != NULL)
@@ -7290,6 +7306,20 @@
/*
+ * Return a new reference to the Python type object for a generated type or
+ * NULL if there was an error.
+ */
+static PyTypeObject *sip_api_get_py_type_ref(const sipTypeDef *td)
+{
+ PyTypeObject *py_type = td->td_py_type;
+
+ Py_INCREF(py_type);
+
+ return py_type;
+}
+
+
+/*
* Return the generated type structure corresponding to the scope of the given
* type.
*/
@@ -7439,6 +7469,22 @@
/*
+ * Return the assignment helper function for a type or NULL if it doesn't have
+ * one.
+ */
+static sipAssignFunc sip_api_get_assignment_function(const sipTypeDef *td)
+{
+ if (sipTypeIsClass(td))
+ return ((sipClassTypeDef *)td)->ctd_assign;
+
+ if (sipTypeIsMapped(td))
+ return ((sipMappedTypeDef *)td)->mtd_assign;
+
+ return NULL;
+}
+
+
+/*
* Register a getter for unknown attributes.
*/
static int sip_api_register_attribute_getter(const sipTypeDef *td,
@@ -7952,7 +7998,12 @@
if (owner == NULL)
{
- /* There is no owner. */
+ /*
+ * There is no owner. This code implements
+ * 'sip.transferto(obj, None)' but it's likely that the correct
+ * implementation is that in the following block. We choose to
+ * leave this as it is to avoid breaking user code.
+ */
if (sipCppHasRef(sw))
{
@@ -7972,9 +8023,8 @@
/*
* The owner is a C++ instance and not a Python object (ie. there
* is no parent) so there is an explicit extra reference to keep
- * this Python object alive. Note that there is no way to
- * specify this from a .sip file - it is useful when embedding in
- * C/C++ applications.
+ * this Python object alive. This code implements the
+ * '/TransferThis/' function annotation.
*/
if (!sipCppHasRef(sw))
@@ -9113,6 +9163,7 @@
{
sipWrapper *owner;
sipConvertFromFunc cfrom;
+ PyObject *res;
/* Handle None. */
if (cpp == NULL)
@@ -9127,9 +9178,7 @@
if (cfrom != NULL)
{
- PyObject *res = cfrom(cpp, transferObj);
-
- if (res != NULL)
+ if ((res = cfrom(cpp, transferObj)) != NULL)
{
/*
* We no longer need the C/C++ instance so we release it (unless
@@ -9144,6 +9193,25 @@
return res;
}
+ /*
+ * Check to see if we already have a wrapper. Although the context that
+ * this called is expecting a new C++ instance, the instance may have been
+ * created by a Python reimplementation of a C++ virtual, ie. there is
+ * already a wrapper and it may have Python-only attributes that we want to
+ * preserve.
+ */
+ if ((res = sip_api_get_pyobject(cpp, td)) != NULL)
+ {
+ Py_INCREF(res);
+
+ if (transferObj == NULL || transferObj == Py_None)
+ sip_api_transfer_back(res);
+ else
+ sip_api_transfer_to(res, transferObj);
+
+ return res;
+ }
+
/* Apply any sub-class convertor. */
if (sipTypeHasSCC(td))
td = convertSubClass(td, &cpp);
@@ -12622,7 +12690,7 @@
/*
- * Get the name of a Python type (on behalf of the limited API).
+ * Get the unqualified name of a Python type.
*/
static const char *sip_api_py_type_name(const PyTypeObject *py_type)
{
@@ -12829,6 +12897,31 @@
/*
+ * Return a strong reference to a frame from the execution stack.
+ */
+PyFrameObject *sip_api_get_frame_ref(int depth)
+{
+#if defined(PYPY_VERSION)
+ /* PyPy only supports a depth of 0. */
+ return NULL;
+#else
+ PyFrameObject *frame = (PyFrameObject *)Py_XNewRef(PyEval_GetFrame());
+
+ while (frame != NULL && depth > 0)
+ {
+ PyFrameObject *back_frame = PyFrame_GetBack(frame);
+ Py_DECREF(frame);
+ frame = back_frame;
+
+ --depth;
+ }
+
+ return frame;
+#endif
+}
+
+
+/*
* Check if a type was generated using the given plugin. Note that, although
* this is part of the public API it is undocumented on purpose.
*/
@@ -13358,3 +13451,38 @@
return em->em_exception_handler;
}
+
+
+/*
+ * Create a new guard for an object. Returns NULL with an exception raised if
+ * there was an error.
+ */
+static sipObjectGuard *sip_api_object_guard_new(PyObject *obj)
+{
+ /* In this implementation the guard is the object. */
+ return Py_NewRef(obj);
+}
+
+
+/*
+ * Return a new reference to a guarded object and a sip_gilstate_t for the
+ * (now attached) thread state. The token must be passed to SIP_RELEASE_GIL()
+ * once the reference to the guarded object has been released. This may be
+ * called without an attached thread state.
+ */
+static PyObject *sip_api_object_guard_get_ref(sipObjectGuard *obj_guard,
+ sip_gilstate_t *gs_p)
+{
+ *gs_p = PyGILState_Ensure();
+
+ return Py_NewRef(obj_guard);
+}
+
+
+/*
+ * Release a guarded object.
+ */
+static void sip_api_object_guard_release(sipObjectGuard *obj_guard)
+{
+ Py_DECREF(obj_guard);
+}
++++++ support-python3.6.patch ++++++
--- /var/tmp/diff_new_pack.XEWovv/_old 2026-10-18 19:22:30.287722484 +0200
+++ /var/tmp/diff_new_pack.XEWovv/_new 2026-10-18 19:22:30.290722608 +0200
@@ -1,7 +1,8 @@
-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 @@
+Index: pyqt5_sip-12.20.0/PKG-INFO
+===================================================================
+--- pyqt5_sip-12.20.0.orig/PKG-INFO
++++ pyqt5_sip-12.20.0/PKG-INFO
+@@ -9,7 +9,7 @@ License: BSD-2-Clause
Platform: X11
Platform: macOS
Platform: Windows
@@ -10,10 +11,11 @@
License-File: LICENSE
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 @@
+Index: pyqt5_sip-12.20.0/PyQt5_sip.egg-info/PKG-INFO
+===================================================================
+--- pyqt5_sip-12.20.0.orig/PyQt5_sip.egg-info/PKG-INFO
++++ pyqt5_sip-12.20.0/PyQt5_sip.egg-info/PKG-INFO
+@@ -9,7 +9,7 @@ License: BSD-2-Clause
Platform: X11
Platform: macOS
Platform: Windows
@@ -22,20 +24,22 @@
License-File: LICENSE
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 @@
+Index: pyqt5_sip-12.20.0/setup.py
+===================================================================
+--- pyqt5_sip-12.20.0.orig/setup.py
++++ pyqt5_sip-12.20.0/setup.py
+@@ -18,6 +18,6 @@ setup(
name='PyQt5_sip',
- version='12.19.0',
+ version='12.20.0',
license='BSD-2-Clause',
- python_requires='>=3.10',
+ python_requires='>=3.6',
ext_modules=[module]
)
-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
+Index: pyqt5_sip-12.20.0/sip.h
+===================================================================
+--- pyqt5_sip-12.20.0.orig/sip.h
++++ pyqt5_sip-12.20.0/sip.h
@@ -14,8 +14,8 @@
#include <Python.h>
@@ -47,10 +51,11 @@
#endif
-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 @@
+Index: pyqt5_sip-12.20.0/siplib.c
+===================================================================
+--- pyqt5_sip-12.20.0.orig/siplib.c
++++ pyqt5_sip-12.20.0/siplib.c
+@@ -1038,6 +1038,10 @@ const sipAPIDef *sip_init_library(PyObje
PyObject *obj;
PyMethodDef *md;
@@ -61,7 +66,7 @@
/* Add the SIP version number. */
obj = PyLong_FromLong(SIP_VERSION);
-@@ -13305,12 +13309,16 @@
+@@ -13398,12 +13402,16 @@ int sip_api_convert_from_slice_object(Py
Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step,
Py_ssize_t *slicelength)
{