Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-PyQt6-sip for 
openSUSE:Factory checked in at 2026-10-18 19:22:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-PyQt6-sip (Old)
 and      /work/SRC/openSUSE:Factory/.python-PyQt6-sip.new.3698736 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-PyQt6-sip"

Sun Oct 18 19:22:17 2026 rev:20 rq:1385949 version:13.13.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-PyQt6-sip/python-PyQt6-sip.changes        
2026-08-31 15:56:29.260530760 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-PyQt6-sip.new.3698736/python-PyQt6-sip.changes
   2026-10-18 19:22:28.018628411 +0200
@@ -1,0 +2,11 @@
+Sun Oct 18 09:02:11 UTC 2026 - Ben Greiner <[email protected]>
+
+- Update to ABI 13.13
+  * 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:
----
  pyqt6_sip-13.12.0.tar.gz

New:
----
  pyqt6_sip-13.13.0.tar.gz

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

Other differences:
------------------
++++++ python-PyQt6-sip.spec ++++++
--- /var/tmp/diff_new_pack.E9jQPa/_old  2026-10-18 19:22:28.810661247 +0200
+++ /var/tmp/diff_new_pack.E9jQPa/_new  2026-10-18 19:22:28.812661330 +0200
@@ -19,7 +19,7 @@
 %{?sle15_python_module_pythons}
 # Check PyPI for version: https://pypi.org/project/PyQt6-sip/
 Name:           python-PyQt6-sip
-Version:        13.12.0
+Version:        13.13.0
 Release:        0
 Summary:        The sip module support for PyQt6
 License:        BSD-2-Clause

++++++ pyqt6_sip-13.12.0.tar.gz -> pyqt6_sip-13.13.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt6_sip-13.12.0/PKG-INFO 
new/pyqt6_sip-13.13.0/PKG-INFO
--- old/pyqt6_sip-13.12.0/PKG-INFO      2026-08-02 13:19:27.509712700 +0200
+++ new/pyqt6_sip-13.13.0/PKG-INFO      2026-10-04 14:02:03.335994700 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: PyQt6_sip
-Version: 13.12.0
+Version: 13.13.0
 Summary: The sip module support for PyQt6
 Home-page: https://github.com/Python-SIP/sip
 Author: Phil Thompson
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt6_sip-13.12.0/PyQt6_sip.egg-info/PKG-INFO 
new/pyqt6_sip-13.13.0/PyQt6_sip.egg-info/PKG-INFO
--- old/pyqt6_sip-13.12.0/PyQt6_sip.egg-info/PKG-INFO   2026-08-02 
13:19:27.000000000 +0200
+++ new/pyqt6_sip-13.13.0/PyQt6_sip.egg-info/PKG-INFO   2026-10-04 
14:02:03.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: PyQt6_sip
-Version: 13.12.0
+Version: 13.13.0
 Summary: The sip module support for PyQt6
 Home-page: https://github.com/Python-SIP/sip
 Author: Phil Thompson
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt6_sip-13.12.0/setup.py 
new/pyqt6_sip-13.13.0/setup.py
--- old/pyqt6_sip-13.12.0/setup.py      2026-08-02 13:19:27.000000000 +0200
+++ new/pyqt6_sip-13.13.0/setup.py      2026-10-04 14:02:03.000000000 +0200
@@ -16,7 +16,7 @@
 # Do the setup.
 setup(
         name='PyQt6_sip',
-        version='13.12.0',
+        version='13.13.0',
         license='BSD-2-Clause',
         python_requires='>=3.10',
         ext_modules=[module]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt6_sip-13.12.0/sip.h new/pyqt6_sip-13.13.0/sip.h
--- old/pyqt6_sip-13.12.0/sip.h 2026-08-02 13:19:27.000000000 +0200
+++ new/pyqt6_sip-13.13.0/sip.h 2026-10-04 14:02:03.000000000 +0200
@@ -3,7 +3,7 @@
 /*
  * The SIP module interface.
  *
- * Copyright (c) 2025 Phil Thompson <[email protected]>
+ * Copyright (c) 2026 Phil Thompson <[email protected]>
  */
 
 
@@ -38,13 +38,24 @@
 
 /* The version of the ABI. */
 #define SIP_ABI_MAJOR_VERSION       13
-#define SIP_ABI_MINOR_VERSION       12
+#define SIP_ABI_MINOR_VERSION       13
 #define SIP_MODULE_PATCH_VERSION    0
 
 
 /*
  * The change history of the ABI.
  *
+ * v13.13
+ *  - Added sipGetAssignmentFunction().
+ *  - Added sipGetPyTypeRef() and deprecated sipTypeAsPyTypeObject().
+ *  - 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.
+ *
  * v13.12
  *  - Added support for Python v3.15.
  *  - The format use to pickle wrapped types has changed so that it is more
@@ -101,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         "PyQt6.sip"
@@ -174,6 +185,10 @@
 #define SIP_UNBLOCK_THREADS PyGILState_Release(sipGIL);}
 
 
+/* The sipObjectGuard implementation is actually the object itself. */
+typedef PyObject sipObjectGuard;
+
+
 /*
  * Forward declarations of types.
  */
@@ -209,9 +224,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;
 
 
@@ -280,6 +302,9 @@
 typedef void *(*sipProxyResolverFunc)(void *);
 typedef void (*sipWrapperVisitorFunc)(sipSimpleWrapper *, void *);
 
+/* In this ABI an error handler is the function pointer. */
+typedef sipVirtErrorHandlerFunc sipVirtErrorHandler;
+
 
 #if !defined(Py_LIMITED_API)
 /*
@@ -729,8 +754,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;
 };
 
 
@@ -1266,7 +1291,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 *, ...);
     Py_ssize_t (*api_convert_from_sequence_index)(Py_ssize_t idx,
             Py_ssize_t len);
@@ -1378,8 +1403,8 @@
     int (*api_register_exit_notifier)(PyMethodDef *md);
     int (*api_is_enum_flag)(PyObject *o);
     PyObject *(*api_py_type_dict_ref)(PyTypeObject *);
-    void (*unused_public_2)(void);
-    void (*unused_public_3)(void);
+    PyTypeObject *(*api_get_py_type_ref)(const sipTypeDef *td);
+    sipAssignFunc (*api_get_assignment_function)(const sipTypeDef *td);
     void (*unused_public_4)(void);
     void (*unused_public_5)(void);
 
@@ -1433,10 +1458,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);
@@ -1450,6 +1475,14 @@
     void (*unused_private_3)(void);
     void (*unused_private_4)(void);
     void (*unused_private_5)(void);
+
+    /*
+     * The following are part of the public API.
+     */
+    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);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt6_sip-13.12.0/sip_core.c 
new/pyqt6_sip-13.13.0/sip_core.c
--- old/pyqt6_sip-13.12.0/sip_core.c    2026-08-02 13:19:27.000000000 +0200
+++ new/pyqt6_sip-13.13.0/sip_core.c    2026-10-04 14:02:03.000000000 +0200
@@ -3,7 +3,7 @@
 /*
  * The core sip module code.
  *
- * Copyright (c) 2025 Phil Thompson <[email protected]>
+ * Copyright (c) 2026 Phil Thompson <[email protected]>
  */
 
 
@@ -246,7 +246,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);
@@ -271,11 +271,11 @@
 static int sip_api_get_state(PyObject *transferObj);
 static PyObject *sip_api_get_pyobject(void *cppPtr, const sipTypeDef *td);
 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);
@@ -388,6 +388,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);
 
 
 /*
@@ -496,8 +502,8 @@
     sip_api_register_exit_notifier,
     sip_api_is_enum_flag,
     sip_api_py_type_dict_ref,
-    NULL,
-    NULL,
+    sip_api_get_py_type_ref,
+    sip_api_get_assignment_function,
     NULL,
     NULL,
     /*
@@ -547,6 +553,12 @@
     NULL,
     NULL,
     NULL,
+    /*
+     * The following are part of the public API.
+     */
+    sip_api_object_guard_new,
+    sip_api_object_guard_get_ref,
+    sip_api_object_guard_release,
 };
 
 
@@ -1993,7 +2005,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;
@@ -2408,7 +2420,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;
@@ -2443,7 +2455,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)
@@ -6315,6 +6327,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;
+}
+
+
+/*
  * Return the generated type structure corresponding to the given Python type
  * object.
  */
@@ -6328,6 +6356,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.
  */
@@ -6848,7 +6890,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))
             {
@@ -6868,9 +6915,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))
@@ -8056,6 +8102,7 @@
 {
     sipWrapper *owner;
     sipConvertFromFunc cfrom;
+    PyObject *res;
 
     /* Handle None. */
     if (cpp == NULL)
@@ -8070,9 +8117,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
@@ -8093,6 +8138,25 @@
         return NULL;
     }
 
+    /*
+     * 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);
@@ -11188,7 +11252,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)
 {
@@ -11939,3 +12003,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);
+}

Reply via email to