Hello community,

here is the log from the commit of package python-qt5 for openSUSE:Factory 
checked in at 2020-10-10 19:01:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-qt5 (Old)
 and      /work/SRC/openSUSE:Factory/.python-qt5.new.4249 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-qt5"

Sat Oct 10 19:01:07 2020 rev:47 rq:840092 version:5.15.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-qt5/python-qt5.changes    2020-09-03 
01:14:27.448477246 +0200
+++ /work/SRC/openSUSE:Factory/.python-qt5.new.4249/python-qt5.changes  
2020-10-10 19:01:18.644392550 +0200
@@ -1,0 +2,74 @@
+Wed Oct  7 15:13:41 UTC 2020 - Benjamin Greiner <c...@bnavigator.de>
+
+- disable _quick3d flavors in staging through ringdisabled
+
+-------------------------------------------------------------------
+Sat Oct  3 17:55:30 UTC 2020 - Benjamin Greiner <c...@bnavigator.de>
+
+- enable python2 Quick3D package for Leaps in new multibuild flavor 
+
+-------------------------------------------------------------------
+Fri Oct  2 11:13:14 UTC 2020 - Benjamin Greiner <c...@bnavigator.de>
+
+- Build Quick3D extension in separate package
+  * This keeps the dependency tree in staging smaller. (Requested
+    by Factory maintainers.)
+  * Is simply unresolvable for repositores which don't have
+    Quick3d but can still build the other extensions.
+- Clean alternatives setup: Make use of %python_clone macro.
+
+-------------------------------------------------------------------
+Sat Sep 26 18:25:32 UTC 2020 - Benjamin Greiner <c...@bnavigator.de>
+
+- Build Quick3D support in every repository that has it: presumably
+  all Qt 5.15 repositories
+
+-------------------------------------------------------------------
+Sat Sep 26 14:26:13 UTC 2020 - Hans-Peter Jansen <h...@urpla.net>
+
+- Qt5Quick3D is not available on Leaps
+
+-------------------------------------------------------------------
+Sat Sep 26 12:28:17 UTC 2020 - Benjamin Greiner <c...@bnavigator.de>
+
+- Add missing Quick3D and TextToSpeech build requirements
+
+-------------------------------------------------------------------
+Sat Sep 26 11:44:26 UTC 2020 - Benjamin Greiner <c...@bnavigator.de>
+
+- New upstream patch pyqt5-customaudio-qt511.patch
+  * versionize QCustomAudioRoleControl for older Leaps
+  * 
https://www.riverbankcomputing.com/pipermail/pyqt/2020-September/043241.html 
+- Updated patch pyqt5-signals-hashable.patch
+  * Fix typedef for old python versions
+  * Patch is submitted to the PyQt5 mailing list
+
+-------------------------------------------------------------------
+Sat Sep 19 15:10:22 UTC 2020 - Benjamin Greiner <c...@bnavigator.de>
+
+- Fix qtbot failures pyqt5-signals-hashable.patch, see
+  * 
https://www.riverbankcomputing.com/pipermail/pyqt/2020-September/043160.html
+  * gh#pytest-dev/pytest-qt#316
+
+-------------------------------------------------------------------
+Mon Sep 14 15:41:28 UTC 2020 - Benjamin Greiner <c...@bnavigator.de>
+
+- Update to Version 5.15.1
+  * Added the QtTextToSpeech module.
+  * None is now interpreted as a null QJsonValue.
+  * Bound signals can now be compared for equality.
+  * Q_CLASSINFO, Q_ENUM, Q_ENUMS, Q_FLAG and Q_FLAGS are not
+    implemented when using PyPy.
+- Drop update-timeline.patch once more. Nobody is using
+  nonexistent tags.
+- 0001-Use-a-noarch-wrapper-for-dbus-mainloop-integration.patch
+  * another fix for the project.py for sip5 builds
+
+-------------------------------------------------------------------
+Sun Aug 30 21:48:00 UTC 2020 - Benjamin Greiner <c...@bnavigator.de>
+
+- Fix 0001-Use-a-noarch-wrapper-for-dbus-mainloop-integration.patch
+  * Variable project is undefined. root_dir is attribute of self.
+  * This is a preparation for sip5 usage
+
+-------------------------------------------------------------------

Old:
----
  PyQt5-5.15.0.tar.gz
  update-timeline.patch

New:
----
  PyQt5-5.15.1.tar.gz
  pyqt5-customaudio-qt511.patch
  pyqt5-signals-hashable.patch

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

Other differences:
------------------
++++++ python-qt5.spec ++++++
--- /var/tmp/diff_new_pack.trbaIE/_old  2020-10-10 19:01:21.636394036 +0200
+++ /var/tmp/diff_new_pack.trbaIE/_new  2020-10-10 19:01:21.640394038 +0200
@@ -25,25 +25,38 @@
 ExclusiveArch:  do_not_build
 %endif
 
-%if "%{flavor}" == "python3"
+%if "%{flavor}" == "python3" || "%{flavor}" == "python3_quick3d"
 %define skip_python2 1
-%define build_examples 1
-%define build_sipfiles 1
 %define pyname python3
 %endif
-%if "%{flavor}" == "python2"
+
+%if "%{flavor}" == "python2" || "%{flavor}" == "python2_quick3d"
 %define skip_python3 1
 %define pyname python2
 %if 0%{?suse_version} > 1500
 ExclusiveArch:  do_not_build
 %endif
 %endif
+
+%if "%{flavor}" == "python3"
+%define build_examples 1
+%define build_sipfiles 1
+%endif
+
+%if "%{flavor}" == "python3_quick3d" || "%{flavor}" == "python2_quick3d"
+%if 0%{?_with_ringdisabled}
+ExclusiveArch:  do_not_build
+%else
+%define build_quick3d 1
+%endif
+%endif
+
 %define bname python-qt5
 %define pname %{pyname}-qt5
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           %{pname}
-Version:        5.15.0
+Version:        5.15.1
 Release:        0
 Summary:        Python bindings for Qt 5
 License:        SUSE-GPL-2.0-with-FLOSS-exception OR GPL-3.0-only OR NonFree
@@ -51,12 +64,14 @@
 URL:            https://www.riverbankcomputing.com/software/pyqt
 Source:         
https://files.pythonhosted.org/packages/source/P/PyQt5/PyQt5-%{version}.tar.gz
 Source99:       python-qt5-rpmlintrc
+# PATCH-FIX-UPSTREAM - allow hashable signals - 
https://www.riverbankcomputing.com/pipermail/pyqt/2020-September/043160.html
+Patch0:         pyqt5-signals-hashable.patch
+# PATCH-FIX-UPSTREAM - QCustomAudioRoleControl for Qt5 5.11 and later only - 
https://www.riverbankcomputing.com/pipermail/pyqt/2020-September/043241.html
+Patch1:         pyqt5-customaudio-qt511.patch
 # PATCH-FIX-OPENSUSE - disable-rpaths.diff - Disable RPATH when building PyQt5.
-Patch0:         disable-rpaths.diff
-# PATCH-FIX-UPSTREAM
-Patch1:         update-timeline.patch
+Patch2:         disable-rpaths.diff
 # PATCH-FIX-OPENSUSE - install binary dbus mainloop integration in arch 
dependent directory
-Patch2:         0001-Use-a-noarch-wrapper-for-dbus-mainloop-integration.patch
+Patch3:         0001-Use-a-noarch-wrapper-for-dbus-mainloop-integration.patch
 BuildRequires:  %{python_module dbus-python-devel}
 BuildRequires:  %{python_module devel}
 BuildRequires:  %{python_module sip-devel >= 4.19.19}
@@ -79,9 +94,11 @@
 BuildRequires:  pkgconfig(Qt5Positioning)
 BuildRequires:  pkgconfig(Qt5Qml)
 BuildRequires:  pkgconfig(Qt5Quick)
+%{?build_quick3d:BuildRequires: pkgconfig(Qt5Quick3D)}
 BuildRequires:  pkgconfig(Qt5QuickWidgets)
 BuildRequires:  pkgconfig(Qt5SerialPort)
 BuildRequires:  pkgconfig(Qt5Svg)
+BuildRequires:  pkgconfig(Qt5TextToSpeech)
 BuildRequires:  pkgconfig(Qt5UiTools)
 BuildRequires:  pkgconfig(Qt5WebChannel)
 BuildRequires:  pkgconfig(Qt5WebSockets)
@@ -143,6 +160,7 @@
 Requires:       pkgconfig(Qt5QuickWidgets)
 Requires:       pkgconfig(Qt5SerialPort)
 Requires:       pkgconfig(Qt5Svg)
+Requires:       pkgconfig(Qt5TextToSpeech)
 Requires:       pkgconfig(Qt5UiTools)
 Requires:       pkgconfig(Qt5WebChannel)
 Requires:       pkgconfig(Qt5WebSockets)
@@ -151,6 +169,7 @@
 Requires(post): update-alternatives
 Requires(postun): update-alternatives
 Recommends:     %{pyname}-qscintilla-qt5
+Recommends:     pkgconfig(Qt5Quick3D)
 Provides:       %{pyname}-PyQt5-devel = %{version}
 %ifpython2
 Requires:       %{pyname}-enum34
@@ -206,6 +225,18 @@
 
 This package contains programming examples for PyQt5.
 
+
+%package quick3d
+Summary:        Python bindings for QtQuick3D
+Group:          Development/Libraries/Python
+Requires:       %{python_module qt5 = %{version}}
+
+%description quick3d
+PyQt is a set of Python bindings for the Qt framework.
+
+This package contains the extension for QtQuick3D
+
+
 %prep
 %autosetup -p1 -n PyQt5-%{version}
 
@@ -232,6 +263,7 @@
                         --qsci-api-destdir=%{_libqt5_datadir}/qsci \
                         QMAKE_CFLAGS+="${CFLAGS} ${CPPFLAGS}" \
                         QMAKE_CXXFLAGS+="${CXXFLAGS} ${CPPFLAGS}" \
+                        %{?build_quick3d:--enable}%{!?build_quick3d:--disable} 
QtQuick3D
 
 make %{?_smp_mflags}
 
@@ -240,30 +272,35 @@
 }
 
 %install
-mkdir -p %{buildroot}%{_sysconfdir}/alternatives
+# sip4 uses an extra target for the python3 only PEP484 pyi stub files
+%define python2_pep484target %{nil}
+%define python3_pep484target install_pep484_stubs
 %{python_expand pushd build_%{$python_bin_suffix}
 
+%if ! 0%{?build_quick3d}
 %make_install INSTALL_ROOT=%{buildroot}
 
+mv %{buildroot}%{_libqt5_plugindir}/designer/libpyqt5.so 
%{buildroot}%{_libqt5_plugindir}/designer/libpy%{$python_bin_suffix}qt5.so
+mv %{buildroot}%{_libqt5_plugindir}/PyQt5/libpyqt5qmlplugin.so 
%{buildroot}%{_libqt5_plugindir}/PyQt5/libpy%{$python_bin_suffix}qt5qmlplugin.so
+mv -T %{buildroot}%{_datadir}/qt5/qsci/api/python 
%{buildroot}%{_datadir}/qt5/qsci/api/python_%{$python_bin_suffix}
+%else
+%__make sub-QtQuick3D-install_subtargets-ordered \
+        %{$python_pep484target} \
+        INSTALL="%__install -p" INSTALL_ROOT=%{buildroot}
+%endif
+
 # Point to the correct location for the documentation files
 cp ../README ./
 sed -i 's/The "doc" directory/The "doc" directory of package 
%{$python_prefix}-qt5-devel/' README
 
 popd
-
-# Prepare for update-alternatives usage
-for p in pyuic5 pylupdate5 pyrcc5 ; do
-    mv %{buildroot}%{_bindir}/$p 
%{buildroot}%{_bindir}/$p-%{$python_bin_suffix}
-done
-
-mv %{buildroot}%{_libqt5_plugindir}/designer/libpyqt5.so 
%{buildroot}%{_libqt5_plugindir}/designer/libpy%{$python_bin_suffix}qt5.so
-mv %{buildroot}%{_libqt5_plugindir}/PyQt5/libpyqt5qmlplugin.so 
%{buildroot}%{_libqt5_plugindir}/PyQt5/libpy%{$python_bin_suffix}qt5qmlplugin.so
-mv -T %{buildroot}%{_datadir}/qt5/qsci/api/python 
%{buildroot}%{_datadir}/qt5/qsci/api/python_%{$python_bin_suffix}
 }
 
-for p in pyuic5 pylupdate5 pyrcc5 ; do
-    %prepare_alternative $p
-done
+%if !0%{?build_quick3d}
+%python_clone -a %{buildroot}%{_bindir}/pyuic5
+%python_clone -a %{buildroot}%{_bindir}/pylupdate5
+%python_clone -a %{buildroot}%{_bindir}/pyrcc5
+%endif
 
 %if 0%{?build_examples}
 mkdir -p %{buildroot}%{_docdir}/%{bname}
@@ -275,10 +312,9 @@
 rm -Rf %{buildroot}%{_datadir}/sip/PyQt5/
 %endif
 
+%if ! 0%{?build_quick3d}
 %post devel
-%{python_install_alternative pyuic5} \
-   --slave %{_bindir}/pylupdate5 pylupdate5 
%{_bindir}/pylupdate5-%{python_bin_suffix} \
-   --slave %{_bindir}/pyrcc5 pyrcc5 %{_bindir}/pyrcc5-%{python_bin_suffix}
+%python_install_alternative pyuic5 pylupdate5 pyrcc5
 
 %postun devel
 %python_uninstall_alternative pyuic5
@@ -307,6 +343,15 @@
 %dir %{_datadir}/qt5/qsci/api/python_%{python_bin_suffix}/
 %{_datadir}/qt5/qsci/api/python_%{python_bin_suffix}/PyQt5.api
 
+%else
+
+%files %{python_files quick3d}
+%license LICENSE
+%doc build_%{python_bin_suffix}/README
+%doc NEWS ChangeLog
+%{python_sitearch}/PyQt5/QtQuick3D*
+%endif
+
 %if 0%{?build_sipfiles}
 %files -n %{bname}-common-devel
 %{_datadir}/sip/PyQt5/

++++++ 0001-Use-a-noarch-wrapper-for-dbus-mainloop-integration.patch ++++++
--- /var/tmp/diff_new_pack.trbaIE/_old  2020-10-10 19:01:21.660394048 +0200
+++ /var/tmp/diff_new_pack.trbaIE/_new  2020-10-10 19:01:21.660394048 +0200
@@ -16,10 +16,10 @@
  4 files changed, 24 insertions(+), 6 deletions(-)
  create mode 100644 dbus/pyqt5.py
 
-Index: PyQt5-5.15.0/configure.py
+Index: PyQt5-5.15.1/configure.py
 ===================================================================
---- PyQt5-5.15.0.orig/configure.py
-+++ PyQt5-5.15.0/configure.py
+--- PyQt5-5.15.1.orig/configure.py
++++ PyQt5-5.15.1/configure.py
 @@ -58,7 +58,7 @@ class ModuleMetadata:
  # The module meta-data.
  MODULE_METADATA = {
@@ -29,7 +29,7 @@
      'QAxContainer':         ModuleMetadata(qmake_QT=['axcontainer']),
      'Qt':                   ModuleMetadata(qmake_QT=['-core', '-gui']),
      'QtAndroidExtras':      ModuleMetadata(qmake_QT=['androidextras']),
-@@ -1671,7 +1671,6 @@ del find_qt
+@@ -1674,7 +1674,6 @@ del find_qt
  
          generate_module_makefile(target_config, verbose, mname,
                  include_paths=target_config.dbus_inc_dirs, libs=libs,
@@ -37,7 +37,7 @@
                  src_dir=sp_src_dir)
  
          subdirs.append(mname)
-@@ -1701,6 +1700,14 @@ INSTALLS += init_py
+@@ -1704,6 +1703,14 @@ INSTALLS += init_py
  
      all_installs.append(root_dir + '/__init__.py')
  
@@ -52,10 +52,10 @@
      # Install the uic module.
      out_f.write('''
  uic_package.files = %s
-Index: PyQt5-5.15.0/dbus/dbus.cpp
+Index: PyQt5-5.15.1/dbus/dbus.cpp
 ===================================================================
---- PyQt5-5.15.0.orig/dbus/dbus.cpp
-+++ PyQt5-5.15.0/dbus/dbus.cpp
+--- PyQt5-5.15.1.orig/dbus/dbus.cpp
++++ PyQt5-5.15.1/dbus/dbus.cpp
 @@ -405,11 +405,11 @@ static PyMethodDef module_functions[] =
  
  // The module entry point.
@@ -85,27 +85,36 @@
 +    Py_InitModule("dbus_mainloop", module_functions);
  }
  #endif
-Index: PyQt5-5.15.0/dbus/pyqt5.py
+Index: PyQt5-5.15.1/dbus/pyqt5.py
 ===================================================================
 --- /dev/null
-+++ PyQt5-5.15.0/dbus/pyqt5.py
++++ PyQt5-5.15.1/dbus/pyqt5.py
 @@ -0,0 +1,5 @@
 +"""Qt main loop integration using "python-qt5"""
 +
 +__all__ = ('DBusQtMainLoop', )
 +
 +from PyQt5.dbus_mainloop import DBusQtMainLoop
-Index: PyQt5-5.15.0/project.py
+Index: PyQt5-5.15.1/project.py
 ===================================================================
---- PyQt5-5.15.0.orig/project.py
-+++ PyQt5-5.15.0/project.py
-@@ -298,6 +298,12 @@ del find_qt
+--- PyQt5-5.15.1.orig/project.py
++++ PyQt5-5.15.1/project.py
+@@ -290,7 +290,7 @@ del find_qt
+         # Create the buildable.
+         sources_dir = os.path.join(self.root_dir, 'dbus')
+ 
+-        buildable = BuildableModule(self, 'dbus', 'dbus.mainloop.pyqt5',
++        buildable = BuildableModule(self, 'dbus', 'PyQt5.dbus_mainloop',
+                 uses_limited_api=True)
+         buildable.builder_settings.append('QT -= gui')
+         buildable.sources.extend(glob.glob(os.path.join(sources_dir, 
'*.cpp')))
+@@ -300,6 +300,12 @@ del find_qt
          buildable.libraries.extend(dbus_libs)
          buildable.debug = debug
  
 +        installable = Installable('pyqt5', target_subdir=dbus_module_dir)
 +        installable.files.append(
-+                os.path.join(project.root_dir, 'dbus',
++                os.path.join(self.root_dir, 'dbus',
 +                        'pyqt5.py'))
 +        self.installables.append(installable)
 +

++++++ PyQt5-5.15.0.tar.gz -> PyQt5-5.15.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PyQt5-5.15.0/ChangeLog new/PyQt5-5.15.1/ChangeLog
--- old/PyQt5-5.15.0/ChangeLog  2020-05-31 14:10:54.315946000 +0200
+++ new/PyQt5-5.15.1/ChangeLog  2020-09-11 16:03:58.105748000 +0200
@@ -1,5 +1,72 @@
+2020-09-11  Phil Thompson  <p...@riverbankcomputing.com>
+
+       * NEWS:
+       Released as v5.15.1.
+       [f99d8e2299f1] [5.15.1] <5.15-maint>
+
+       * NEWS:
+       Updated the NEWS file.
+       [51b9d0e4a153] <5.15-maint>
+
+       * PyQt5.msp:
+       Fixed bugs related to QSGNode.
+       [a8a92e00511e] <5.15-maint>
+
+2020-08-27  Phil Thompson  <p...@riverbankcomputing.com>
+
+       * PyQt5.msp, config-tests/cfgtest_QtCore.cpp:
+       Fixed building with compilers without constexpr support (ie. MSVC
+       2015).
+       [ae7bb0399061] <5.15-maint>
+
+2020-08-22  Phil Thompson  <p...@riverbankcomputing.com>
+
+       * lib/project.py:
+       Set the name of the sip module explicitly.
+       [16811c7f937c] <5.15-maint>
+
+2020-08-08  Phil Thompson  <p...@riverbankcomputing.com>
+
+       * qpy/QtCore/qpycore_pyqtboundsignal.cpp:
+       Fix a signal disconnect() when None is passed as the argument.
+       [22794b6d6a6c] <5.15-maint>
+
+2020-07-11  Phil Thompson  <p...@riverbankcomputing.com>
+
+       * NEWS, qpy/QtCore/qpycore_pyqtboundsignal.cpp:
+       Bound signals can now be tested for equality.
+       [2651d9efa223] <5.15-maint>
+
+       * NEWS, qpy/QtCore/qpycore_classinfo.cpp,
+       qpy/QtCore/qpycore_enums_flags.cpp:
+       Raise an appropriate exception if Q_CLASSINFO, Q_ENUM, Q_ENUMS,
+       Q_FLAG or Q_FLAGS are used on PyPy.
+       [1d22af022477] <5.15-maint>
+
+2020-06-16  Phil Thompson  <p...@riverbankcomputing.com>
+
+       * NEWS, PyQt5.msp, lib/configure.py, lib/project.py:
+       Added the QtTextToSpeech module.
+       [d31c28251af2] <5.15-maint>
+
+2020-06-10  Phil Thompson  <p...@riverbankcomputing.com>
+
+       * NEWS, PyQt5.msp, qpy/QtCore/qpycore_qjsonvalue.cpp:
+       None is now interpreted as a null QJsonValue.
+       [1b4fdf6609d4] <5.15-maint>
+
+2020-06-01  Phil Thompson  <p...@riverbankcomputing.com>
+
+       * lib/project.py:
+       Fixed the platform tag for macOS wheels.
+       [72fd5bbd2388] <5.15-maint>
+
 2020-05-30  Phil Thompson  <p...@riverbankcomputing.com>
 
+       * .hgtags:
+       Added tag 5.15.0 for changeset 5e7e90d17d36
+       [720e8a99e5df]
+
        * NEWS:
        Released as v5.15.0.
        [5e7e90d17d36] [5.15.0]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PyQt5-5.15.0/NEWS new/PyQt5-5.15.1/NEWS
--- old/PyQt5-5.15.0/NEWS       2020-05-31 13:53:00.546416000 +0200
+++ new/PyQt5-5.15.1/NEWS       2020-09-11 15:45:44.271468000 +0200
@@ -1,3 +1,10 @@
+v5.15.1 12th September 2020
+  - Added the QtTextToSpeech module.
+  - None is now interpreted as a null QJsonValue.
+  - Bound signals can now be compared for equality.
+  - Q_CLASSINFO, Q_ENUM, Q_ENUMS, Q_FLAG and Q_FLAGS are not implemented when
+    using PyPy.
+
 v5.15.0 1st June 2020
   - Added support for Qt v5.15.0.
   - Added the QtQuick3D module.
@@ -12,7 +19,7 @@
   - Added QFlags.__index__().
 
 v5.14.1 6th January 2020
-  - This is a bug fix release.
+  - This is a bug-fix release.
 
 v5.14.0 18th December 2019
   - Added support for Qt v5.14.0.
@@ -122,10 +129,10 @@
   - SIP v4.19.3 is required.
 
 v5.8.2 30th March 2017
-  - This is a bug fix release.
+  - This is a bug-fix release.
 
 v5.8.1 7th March 2017
-  - This is a bug fix release.
+  - This is a bug-fix release.
 
 v5.8 15th February 2017
   - Added support for Qt v5.8.0.
@@ -246,7 +253,7 @@
     configure.py.
 
 v5.1.1 16th October 2013
-  - This is a bug fix release.
+  - This is a bug-fix release.
 
 v5.1 2nd October 2013
   - Added full support for Qt v5.1.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PyQt5-5.15.0/PKG-INFO new/PyQt5-5.15.1/PKG-INFO
--- old/PyQt5-5.15.0/PKG-INFO   2020-05-31 14:11:07.847061000 +0200
+++ new/PyQt5-5.15.1/PKG-INFO   2020-09-11 16:04:08.710348000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: PyQt5
-Version: 5.15.0
+Version: 5.15.1
 Requires-Python: >=3.5
 Summary: Python bindings for the Qt cross platform application toolkit
 Home-Page: https://www.riverbankcomputing.com/software/pyqt/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PyQt5-5.15.0/config-tests/cfgtest_QtCore.cpp 
new/PyQt5-5.15.1/config-tests/cfgtest_QtCore.cpp
--- old/PyQt5-5.15.0/config-tests/cfgtest_QtCore.cpp    2020-05-31 
13:53:00.718423000 +0200
+++ new/PyQt5-5.15.1/config-tests/cfgtest_QtCore.cpp    2020-09-11 
15:45:44.362782000 +0200
@@ -38,5 +38,9 @@
         out << "PyQt_qreal_double\n";
 #endif
 
+#if !defined(Q_COMPILER_CONSTEXPR) || !defined(Q_COMPILER_UNIFORM_INIT)
+    out << "PyQt_CONSTEXPR\n";
+#endif
+
     return 0;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PyQt5-5.15.0/configure.py 
new/PyQt5-5.15.1/configure.py
--- old/PyQt5-5.15.0/configure.py       2020-05-31 14:10:54.334553000 +0200
+++ new/PyQt5-5.15.1/configure.py       2020-09-11 16:03:58.119633000 +0200
@@ -28,7 +28,7 @@
 
 
 # Initialise the constants.
-PYQT_VERSION_STR = "5.15.0"
+PYQT_VERSION_STR = "5.15.1"
 SIP_MIN_VERSION = '4.19.23'
 
 
@@ -96,6 +96,7 @@
     'QtSql':                ModuleMetadata(qmake_QT=['sql', 'widgets']),
     'QtSvg':                ModuleMetadata(qmake_QT=['svg']),
     'QtTest':               ModuleMetadata(qmake_QT=['testlib', 'widgets']),
+    'QtTextToSpeech':       ModuleMetadata(qmake_QT=['texttospeech', '-gui']),
     'QtWebChannel':         ModuleMetadata(
                                     qmake_QT=['webchannel', 'network',
                                             '-gui']),
@@ -163,7 +164,7 @@
     'QtWebKitWidgets', 'QtBluetooth', 'QtMacExtras', 'QtPositioning',
         'QtWinExtras', 'QtX11Extras', 'QtQuick3D', 'QtQuickWidgets',
         'QtWebSockets', 'Enginio', 'QtWebChannel',
-    'QtLocation', 'QtNfc', 'QtRemoteObjects'
+    'QtLocation', 'QtNfc', 'QtRemoteObjects', 'QtTextToSpeech'
 )
 
 
@@ -1495,6 +1496,8 @@
 
     check_module(target_config, disabled_modules, verbose, 'QtQuick3D',
             'qquick3d.h', 'QQuick3D::idealSurfaceFormat()')
+    check_module(target_config, disabled_modules, verbose, 'QtTextToSpeech',
+            'QTextToSpeech', 'new QTextToSpeech()')
 
 
 def generate_makefiles(target_config, verbose, parts, tracing, fatal_warnings, 
distinfo):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PyQt5-5.15.0/project.py new/PyQt5-5.15.1/project.py
--- old/PyQt5-5.15.0/project.py 2020-05-31 14:10:54.341576000 +0200
+++ new/PyQt5-5.15.1/project.py 2020-09-11 16:03:58.124164000 +0200
@@ -33,7 +33,8 @@
     def __init__(self):
         """ Initialise the project. """
 
-        super().__init__(abi_version='12.8', dunder_init=True, tag_prefix='Qt',
+        super().__init__(sip_module='PyQt5.sip', abi_version='12.8',
+                dunder_init=True, tag_prefix='Qt',
                 console_scripts=[
                     'pylupdate5 = PyQt5.pylupdate_main:main',
                     'pyrcc5 = PyQt5.pyrcc_main:main',
@@ -46,10 +47,11 @@
             QtMultimediaWidgets, QtNetworkAuth, QtNfc, QtOpenGL, QtPositioning,
             QtLocation, QtPrintSupport, QtQuick, QtQuick3D, QtQuickWidgets,
             QtRemoteObjects, QtSensors, QtSerialPort, QtSql, QtSvg, QtTest,
-            QtWebChannel, QtWebKit, QtWebKitWidgets, QtWebSockets, QtWinExtras,
-            QtX11Extras, QtXml, QtXmlPatterns, _QOpenGLFunctions_2_0,
-            _QOpenGLFunctions_2_1, _QOpenGLFunctions_4_1_Core,
-            _QOpenGLFunctions_ES2, pylupdate, pyrcc]
+            QtTextToSpeech, QtWebChannel, QtWebKit, QtWebKitWidgets,
+            QtWebSockets, QtWinExtras, QtX11Extras, QtXml, QtXmlPatterns,
+            _QOpenGLFunctions_2_0, _QOpenGLFunctions_2_1,
+            _QOpenGLFunctions_4_1_Core, _QOpenGLFunctions_ES2, pylupdate,
+            pyrcc]
 
     def apply_user_defaults(self, tool):
         """ Set default values where needed. """
@@ -172,7 +174,7 @@
         self.bindings['QtCore'].tags.append(plattag)
 
         # Make sure the bindings are buildable.
-        self.update_buildable_bindings()
+        super().update(tool)
 
         # PyQtWebEngine needs to know if QtWebChannel is available.
         if 'QtWebChannel' not in self.bindings:
@@ -918,6 +920,18 @@
                 test_headers=['QtTest'], test_statement='QTest::qSleep(0)')
 
 
+class QtTextToSpeech(PyQtBindings):
+    """ The QtTextToSpeech bindings. """
+
+    def __init__(self, project):
+        """ Initialise the bindings. """
+
+        super().__init__(project, 'QtTextToSpeech',
+                qmake_QT=['texttospeech', '-gui'],
+                test_headers=['QTextToSpeech'],
+                test_statement='new QTextToSpeech()')
+
+
 class QtWebChannel(PyQtBindings):
     """ The QtWebChannel bindings. """
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PyQt5-5.15.0/pyproject.toml 
new/PyQt5-5.15.1/pyproject.toml
--- old/PyQt5-5.15.0/pyproject.toml     2020-05-31 14:10:54.342606000 +0200
+++ new/PyQt5-5.15.1/pyproject.toml     2020-09-11 16:03:58.124424000 +0200
@@ -6,7 +6,7 @@
 # Specify the PEP 566 metadata for the project.
 [tool.sip.metadata]
 name = "PyQt5"
-version = "5.15.0"
+version = "5.15.1"
 summary = "Python bindings for the Qt cross platform application toolkit"
 home-page = "https://www.riverbankcomputing.com/software/pyqt/";
 author = "Riverbank Computing Limited"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PyQt5-5.15.0/qpy/QtCore/qpycore_classinfo.cpp 
new/PyQt5-5.15.1/qpy/QtCore/qpycore_classinfo.cpp
--- old/PyQt5-5.15.0/qpy/QtCore/qpycore_classinfo.cpp   2020-05-31 
14:10:54.690965000 +0200
+++ new/PyQt5-5.15.1/qpy/QtCore/qpycore_classinfo.cpp   2020-09-11 
16:03:58.322897000 +0200
@@ -34,6 +34,11 @@
 // Add the given name/value pair to the current class info hash.
 PyObject *qpycore_ClassInfo(const char *name, const char *value)
 {
+#if defined(PYPY_VERSION)
+    PyErr_SetString(PyExc_AttributeError,
+            "Q_CLASSINFO is not supported on PyPy");
+    return 0;
+#else
     // We need the frame we were called from, not the current one.
     struct _frame *frame = sipGetFrame(1);
 
@@ -48,16 +53,21 @@
 
     Py_INCREF(Py_None);
     return Py_None;
+#endif
 }
 
 
 // Return the current class info list.
 QList<ClassInfo> qpycore_get_class_info_list()
 {
+    QList<ClassInfo> class_info_list;
+
+#if !defined(PYPY_VERSION)
     struct _frame *frame = sipGetFrame(0);
-    QList<ClassInfo> class_info_list = class_info_hash.values(frame);
 
+    class_info_list = class_info_hash.values(frame);
     class_info_hash.remove(frame);
+#endif
 
     return class_info_list;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PyQt5-5.15.0/qpy/QtCore/qpycore_enums_flags.cpp 
new/PyQt5-5.15.1/qpy/QtCore/qpycore_enums_flags.cpp
--- old/PyQt5-5.15.0/qpy/QtCore/qpycore_enums_flags.cpp 2020-05-31 
14:10:54.633939000 +0200
+++ new/PyQt5-5.15.1/qpy/QtCore/qpycore_enums_flags.cpp 2020-09-11 
16:03:58.286367000 +0200
@@ -93,6 +93,10 @@
 // Add the given Q_ENUM() or Q_FLAG() argument to the current enums/flags hash.
 static PyObject *parse_enum_flag(PyObject *arg, bool flag, const char *context)
 {
+#if defined(PYPY_VERSION)
+    PyErr_Format(PyExc_AttributeError, "%s is not supported on PyPy", context);
+    return 0;
+#else
     struct _frame *frame = get_calling_frame();
 
     if (!frame)
@@ -103,6 +107,7 @@
 
     Py_INCREF(Py_None);
     return Py_None;
+#endif
 }
 
 
@@ -111,6 +116,10 @@
 static PyObject *parse_enums_flags(PyObject *args, bool flags,
         const char *context)
 {
+#if defined(PYPY_VERSION)
+    PyErr_Format(PyExc_AttributeError, "%s is not supported on PyPy", context);
+    return 0;
+#else
     struct _frame *frame = get_calling_frame();
 
     if (!frame)
@@ -127,6 +136,7 @@
 
     Py_INCREF(Py_None);
     return Py_None;
+#endif
 }
 
 
@@ -320,10 +330,14 @@
 // Return the current enums/flags list.
 QList<EnumFlag> qpycore_get_enums_flags_list()
 {
+    QList<EnumFlag> enums_flags_list;
+
+#if !defined(PYPY_VERSION)
     struct _frame *frame = sipGetFrame(0);
-    QList<EnumFlag> enums_flags_list = enums_flags_hash.values(frame);
 
+    enums_flags_list = enums_flags_hash.values(frame);
     enums_flags_hash.remove(frame);
+#endif
 
     return enums_flags_list;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PyQt5-5.15.0/qpy/QtCore/qpycore_pyqtboundsignal.cpp 
new/PyQt5-5.15.1/qpy/QtCore/qpycore_pyqtboundsignal.cpp
--- old/PyQt5-5.15.0/qpy/QtCore/qpycore_pyqtboundsignal.cpp     2020-05-31 
14:10:54.678981000 +0200
+++ new/PyQt5-5.15.1/qpy/QtCore/qpycore_pyqtboundsignal.cpp     2020-09-11 
16:03:58.315977000 +0200
@@ -53,6 +53,8 @@
         PyObject *kw);
 static void pyqtBoundSignal_dealloc(PyObject *self);
 static PyObject *pyqtBoundSignal_repr(PyObject *self);
+static PyObject *pyqtBoundSignal_richcompare(PyObject *self, PyObject *other,
+        int op);
 static PyObject *pyqtBoundSignal_get_doc(PyObject *self, void *);
 static PyObject *pyqtBoundSignal_get_signal(PyObject *self, void *);
 static PyObject *pyqtBoundSignal_connect(PyObject *self, PyObject *args,
@@ -136,6 +138,7 @@
     {Py_tp_new,         (void *)PyType_GenericNew},
     {Py_tp_dealloc,     (void *)pyqtBoundSignal_dealloc},
     {Py_tp_repr,        (void *)pyqtBoundSignal_repr},
+    {Py_tp_richcompare, (void *)pyqtBoundSignal_richcompare},
     {Py_tp_call,        (void *)pyqtBoundSignal_call},
     {Py_mp_subscript,   (void *)pyqtBoundSignal_mp_subscript},
     {Py_tp_methods,     pyqtBoundSignal_methods},
@@ -186,7 +189,7 @@
     0,                      /* tp_doc */
     0,                      /* tp_traverse */
     0,                      /* tp_clear */
-    0,                      /* tp_richcompare */
+    pyqtBoundSignal_richcompare,    /* tp_richcompare */
     0,                      /* tp_weaklistoffset */
     0,                      /* tp_iter */
     0,                      /* tp_iternext */
@@ -277,6 +280,41 @@
 }
 
 
+// The type richcompare slot.
+static PyObject *pyqtBoundSignal_richcompare(PyObject *self, PyObject *other,
+        int op)
+{
+    if ((op != Py_EQ && op != Py_NE) || !PyObject_TypeCheck(other, 
qpycore_pyqtBoundSignal_TypeObject))
+    {
+        Py_INCREF(Py_NotImplemented);
+        return Py_NotImplemented;
+    }
+
+    qpycore_pyqtBoundSignal *bs = (qpycore_pyqtBoundSignal *)self;
+    qpycore_pyqtBoundSignal *other_bs = (qpycore_pyqtBoundSignal *)other;
+
+    int eq = PyObject_RichCompareBool((PyObject *)(bs->unbound_signal),
+                (PyObject *)(other_bs->unbound_signal), Py_EQ);
+
+    if (eq == 1)
+        eq = PyObject_RichCompareBool(bs->bound_pyobject,
+                other_bs->bound_pyobject, Py_EQ);
+
+    if (eq < 0)
+        return 0;
+
+    PyObject *res;
+
+    if (op == Py_EQ)
+        res = eq ? Py_True : Py_False;
+    else
+        res = eq ? Py_False : Py_True;
+
+    Py_INCREF(res);
+    return res;
+}
+
+
 // The type call slot.
 static PyObject *pyqtBoundSignal_call(PyObject *self, PyObject *args,
         PyObject *kw)
@@ -586,7 +624,7 @@
     }
 
     // See if the slot is a connection.
-    if (sipCanConvertToType(py_slot, sipType_QMetaObject_Connection, 0))
+    if (sipCanConvertToType(py_slot, sipType_QMetaObject_Connection, 
SIP_NOT_NONE))
     {
         int is_error = 0;
         QMetaObject::Connection *connection = 
reinterpret_cast<QMetaObject::Connection *>(sipConvertToType(py_slot, 
sipType_QMetaObject_Connection, NULL, 0, NULL, &is_error));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PyQt5-5.15.0/qpy/QtCore/qpycore_qjsonvalue.cpp 
new/PyQt5-5.15.1/qpy/QtCore/qpycore_qjsonvalue.cpp
--- old/PyQt5-5.15.0/qpy/QtCore/qpycore_qjsonvalue.cpp  2020-05-31 
14:10:54.699845000 +0200
+++ new/PyQt5-5.15.1/qpy/QtCore/qpycore_qjsonvalue.cpp  2020-09-11 
16:03:58.329158000 +0200
@@ -65,6 +65,13 @@
 int qpycore_convertTo_QJsonValue(PyObject *py, PyObject *transferObj,
         QJsonValue **cpp, int *isErr)
 {
+    if (py == Py_None)
+    {
+        *cpp = new QJsonValue();
+
+        return sipGetState(transferObj);
+    }
+
     if (PyObject_TypeCheck(py, sipTypeAsPyTypeObject(sipType_QJsonValue_Type)))
     {
         int v = sipConvertToEnum(py, sipType_QJsonValue_Type);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PyQt5-5.15.0/sip/QtCore/QtCoremod.sip 
new/PyQt5-5.15.1/sip/QtCore/QtCoremod.sip
--- old/PyQt5-5.15.0/sip/QtCore/QtCoremod.sip   2020-05-31 14:11:05.871394000 
+0200
+++ new/PyQt5-5.15.1/sip/QtCore/QtCoremod.sip   2020-09-11 16:04:07.251657000 
+0200
@@ -42,6 +42,7 @@
 %Feature PyQt_Process
 %Feature PyQt_MacOSXOnly
 %Feature PyQt_WebChannel
+%Feature PyQt_CONSTEXPR
 
 %Copying
 Copyright (c) 2020 Riverbank Computing Limited <i...@riverbankcomputing.com>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PyQt5-5.15.0/sip/QtCore/qglobal.sip 
new/PyQt5-5.15.1/sip/QtCore/qglobal.sip
--- old/PyQt5-5.15.0/sip/QtCore/qglobal.sip     2020-05-31 14:11:05.940480000 
+0200
+++ new/PyQt5-5.15.1/sip/QtCore/qglobal.sip     2020-09-11 16:04:07.311302000 
+0200
@@ -29,8 +29,8 @@
 const char *PYQT_VERSION_STR;
 
 %ModuleCode
-static int PYQT_VERSION = 0x050f00;
-static const char *PYQT_VERSION_STR = "5.15.0";
+static int PYQT_VERSION = 0x050f01;
+static const char *PYQT_VERSION_STR = "5.15.1";
 %End
 const int QT_VERSION;
 const char *QT_VERSION_STR;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PyQt5-5.15.0/sip/QtCore/qjsonvalue.sip 
new/PyQt5-5.15.1/sip/QtCore/qjsonvalue.sip
--- old/PyQt5-5.15.0/sip/QtCore/qjsonvalue.sip  2020-05-31 14:11:05.932889000 
+0200
+++ new/PyQt5-5.15.1/sip/QtCore/qjsonvalue.sip  2020-09-11 16:04:07.305529000 
+0200
@@ -20,7 +20,7 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-class QJsonValue /TypeHintIn="Union[QJsonValue, QJsonValue.Type, QJsonArray, 
QJsonObject, bool, int, float, QString]"/
+class QJsonValue /AllowNone,TypeHintIn="Union[QJsonValue, QJsonValue.Type, 
QJsonArray, QJsonObject, bool, int, float, None, QString]"/
 {
 %TypeHeaderCode
 #include <qjsonvalue.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PyQt5-5.15.0/sip/QtGui/qcolor.sip 
new/PyQt5-5.15.1/sip/QtGui/qcolor.sip
--- old/PyQt5-5.15.0/sip/QtGui/qcolor.sip       2020-05-31 14:11:05.131769000 
+0200
+++ new/PyQt5-5.15.1/sip/QtGui/qcolor.sip       2020-09-11 16:04:06.590336000 
+0200
@@ -199,6 +199,7 @@
 QDataStream &operator<<(QDataStream &, const QColor & /Constrained/) 
/ReleaseGIL/;
 QDataStream &operator>>(QDataStream &, QColor & /Constrained/) /ReleaseGIL/;
 %If (Qt_5_14_0 -)
+%If (PyQt_CONSTEXPR)
 
 namespace QColorConstants
 {
@@ -384,3 +385,4 @@
 };
 
 %End
+%End
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PyQt5-5.15.0/sip/QtQuick/qsgnode.sip 
new/PyQt5-5.15.1/sip/QtQuick/qsgnode.sip
--- old/PyQt5-5.15.0/sip/QtQuick/qsgnode.sip    2020-05-31 14:11:05.312573000 
+0200
+++ new/PyQt5-5.15.1/sip/QtQuick/qsgnode.sip    2020-09-11 16:04:06.735439000 
+0200
@@ -20,7 +20,7 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-class QSGNode /NoDefaultCtors,Supertype=sip.wrapper/
+class QSGNode /Supertype=sip.wrapper/
 {
 %TypeHeaderCode
 #include <qsgnode.h>
@@ -240,6 +240,9 @@
 
     void setFlags(QSGNode::Flags, bool enabled = true);
     virtual void preprocess();
+
+private:
+    QSGNode(const QSGNode &);
 };
 
 class QSGBasicGeometryNode : QSGNode /NoDefaultCtors/
@@ -261,7 +264,7 @@
     QSGGeometry *geometry();
 };
 
-class QSGGeometryNode : QSGBasicGeometryNode /NoDefaultCtors/
+class QSGGeometryNode : QSGBasicGeometryNode
 {
 %TypeHeaderCode
 #include <qsgnode.h>
@@ -290,7 +293,7 @@
     QSGMaterial *opaqueMaterial() const;
 };
 
-class QSGClipNode : QSGBasicGeometryNode /NoDefaultCtors/
+class QSGClipNode : QSGBasicGeometryNode
 {
 %TypeHeaderCode
 #include <qsgnode.h>
@@ -305,7 +308,7 @@
     QRectF clipRect() const;
 };
 
-class QSGTransformNode : QSGNode /NoDefaultCtors/
+class QSGTransformNode : QSGNode
 {
 %TypeHeaderCode
 #include <qsgnode.h>
@@ -318,7 +321,7 @@
     const QMatrix4x4 &matrix() const;
 };
 
-class QSGOpacityNode : QSGNode /NoDefaultCtors/
+class QSGOpacityNode : QSGNode
 {
 %TypeHeaderCode
 #include <qsgnode.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PyQt5-5.15.0/sip/QtQuick/qsgrendernode.sip 
new/PyQt5-5.15.1/sip/QtQuick/qsgrendernode.sip
--- old/PyQt5-5.15.0/sip/QtQuick/qsgrendernode.sip      2020-05-31 
14:11:05.289808000 +0200
+++ new/PyQt5-5.15.1/sip/QtQuick/qsgrendernode.sip      2020-09-11 
16:04:06.708589000 +0200
@@ -22,7 +22,7 @@
 
 %If (Qt_5_8_0 -)
 
-class QSGRenderNode : QSGNode /NoDefaultCtors/
+class QSGRenderNode : QSGNode
 {
 %TypeHeaderCode
 #include <qsgrendernode.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/PyQt5-5.15.0/sip/QtTextToSpeech/QtTextToSpeechmod.sip 
new/PyQt5-5.15.1/sip/QtTextToSpeech/QtTextToSpeechmod.sip
--- old/PyQt5-5.15.0/sip/QtTextToSpeech/QtTextToSpeechmod.sip   1970-01-01 
01:00:00.000000000 +0100
+++ new/PyQt5-5.15.1/sip/QtTextToSpeech/QtTextToSpeechmod.sip   2020-09-11 
16:04:07.157091000 +0200
@@ -0,0 +1,49 @@
+// QtTextToSpeechmod.sip generated by MetaSIP
+//
+// This file is part of the QtTextToSpeech Python extension module.
+//
+// Copyright (c) 2020 Riverbank Computing Limited <i...@riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file.  Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// i...@riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtTextToSpeech, keyword_arguments="Optional", 
use_limited_api=True)
+
+%Import QtCore/QtCoremod.sip
+
+%Copying
+Copyright (c) 2020 Riverbank Computing Limited <i...@riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+This file may be used under the terms of the GNU General Public License
+version 3.0 as published by the Free Software Foundation and appearing in
+the file LICENSE included in the packaging of this file.  Please review the
+following information to ensure the GNU General Public License version 3.0
+requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+i...@riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qtexttospeech.sip
+%Include qvoice.sip
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PyQt5-5.15.0/sip/QtTextToSpeech/qtexttospeech.sip 
new/PyQt5-5.15.1/sip/QtTextToSpeech/qtexttospeech.sip
--- old/PyQt5-5.15.0/sip/QtTextToSpeech/qtexttospeech.sip       1970-01-01 
01:00:00.000000000 +0100
+++ new/PyQt5-5.15.1/sip/QtTextToSpeech/qtexttospeech.sip       2020-09-11 
16:04:07.156118000 +0200
@@ -0,0 +1,101 @@
+// qtexttospeech.sip generated by MetaSIP
+//
+// This file is part of the QtTextToSpeech Python extension module.
+//
+// Copyright (c) 2020 Riverbank Computing Limited <i...@riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file.  Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// i...@riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_15_0 -)
+
+class QTextToSpeech : QObject
+{
+%TypeHeaderCode
+#include <qtexttospeech.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QTextToSpeech, &sipType_QTextToSpeech, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    enum State
+    {
+        Ready,
+        Speaking,
+        Paused,
+        BackendError,
+    };
+
+    explicit QTextToSpeech(QObject *parent /TransferThis/ = 0);
+    QTextToSpeech(const QString &engine, QObject *parent /TransferThis/ = 0);
+    QTextToSpeech::State state() const;
+    QVector<QLocale> availableLocales() const;
+    QLocale locale() const;
+    QVoice voice() const;
+    QVector<QVoice> availableVoices() const;
+    double rate() const;
+    double pitch() const;
+    double volume() const;
+    static QStringList availableEngines();
+
+public slots:
+    void say(const QString &text);
+    void stop();
+    void pause();
+    void resume();
+    void setLocale(const QLocale &locale);
+    void setRate(double rate);
+    void setPitch(double pitch);
+    void setVolume(double volume);
+    void setVoice(const QVoice &voice);
+
+signals:
+    void stateChanged(QTextToSpeech::State state);
+    void localeChanged(const QLocale &locale);
+    void rateChanged(double rate);
+    void pitchChanged(double pitch);
+    void volumeChanged(double volume /Constrained/);
+    void volumeChanged(int volume);
+    void voiceChanged(const QVoice &voice);
+};
+
+%End
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/PyQt5-5.15.0/sip/QtTextToSpeech/qvoice.sip 
new/PyQt5-5.15.1/sip/QtTextToSpeech/qvoice.sip
--- old/PyQt5-5.15.0/sip/QtTextToSpeech/qvoice.sip      1970-01-01 
01:00:00.000000000 +0100
+++ new/PyQt5-5.15.1/sip/QtTextToSpeech/qvoice.sip      2020-09-11 
16:04:07.156658000 +0200
@@ -0,0 +1,60 @@
+// qvoice.sip generated by MetaSIP
+//
+// This file is part of the QtTextToSpeech Python extension module.
+//
+// Copyright (c) 2020 Riverbank Computing Limited <i...@riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file.  Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// i...@riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_15_0 -)
+
+class QVoice
+{
+%TypeHeaderCode
+#include <qvoice.h>
+%End
+
+public:
+    enum Gender
+    {
+        Male,
+        Female,
+        Unknown,
+    };
+
+    enum Age
+    {
+        Child,
+        Teenager,
+        Adult,
+        Senior,
+        Other,
+    };
+
+    QVoice();
+    QVoice(const QVoice &other);
+    ~QVoice();
+    bool operator==(const QVoice &other);
+    bool operator!=(const QVoice &other);
+    QString name() const;
+    QVoice::Gender gender() const;
+    QVoice::Age age() const;
+    static QString genderName(QVoice::Gender gender);
+    static QString ageName(QVoice::Age age);
+};
+
+%End

++++++ _multibuild ++++++
--- /var/tmp/diff_new_pack.trbaIE/_old  2020-10-10 19:01:22.116394274 +0200
+++ /var/tmp/diff_new_pack.trbaIE/_new  2020-10-10 19:01:22.116394274 +0200
@@ -1,4 +1,6 @@
 <multibuild>
   <package>python2</package>
   <package>python3</package>
+  <package>python2_quick3d</package>
+  <package>python3_quick3d</package>
 </multibuild>

++++++ pyqt5-customaudio-qt511.patch ++++++
From: Phil Thompson <p...@riverbankcomputing.com>
References: 
https://www.riverbankcomputing.com/pipermail/pyqt/2020-September/043241.html
Subject: Fixed building against Qt v5.10 and earlier. [29e2ebf17db3]

QCustomAudioRoleControl is only available for Qt 5.11 and later

Index: PyQt5-5.15.1/sip/QtMultimedia/qabstractvideosurface.sip
===================================================================
--- PyQt5-5.15.1.orig/sip/QtMultimedia/qabstractvideosurface.sip
+++ PyQt5-5.15.1/sip/QtMultimedia/qabstractvideosurface.sip
@@ -81,7 +81,11 @@ class QAbstractVideoSurface : QObject
         {sipName_QCameraViewfinderSettingsControl, 
&sipType_QCameraViewfinderSettingsControl, -1, 39},
         {sipName_QCameraViewfinderSettingsControl2, 
&sipType_QCameraViewfinderSettingsControl2, -1, 40},
         {sipName_QCameraZoomControl, &sipType_QCameraZoomControl, -1, 41},
+    #if QT_VERSION >= 0x050b00
         {sipName_QCustomAudioRoleControl, &sipType_QCustomAudioRoleControl, 
-1, 42},
+    #else
+        {0, 0, -1, 42},
+    #endif
         {sipName_QImageEncoderControl, &sipType_QImageEncoderControl, -1, 43},
         {sipName_QMediaAudioProbeControl, &sipType_QMediaAudioProbeControl, 
-1, 44},
         {sipName_QMediaAvailabilityControl, 
&sipType_QMediaAvailabilityControl, -1, 45},

Index: PyQt5-5.15.1/sip/QtMultimedia/qcustomaudiorolecontrol.sip
===================================================================
--- PyQt5-5.15.1.orig/sip/QtMultimedia/qcustomaudiorolecontrol.sip
+++ PyQt5-5.15.1/sip/QtMultimedia/qcustomaudiorolecontrol.sip
@@ -20,6 +20,8 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
+%If (Qt_5_11_0 -)
+
 class QCustomAudioRoleControl : QMediaControl
 {
 %TypeHeaderCode
@@ -38,3 +40,5 @@ signals:
 protected:
     explicit QCustomAudioRoleControl(QObject *parent /TransferThis/ = 0);
 };
+
+%End
++++++ pyqt5-signals-hashable.patch ++++++
From: Phil Thompson <p...@riverbankcomputing.com>
References: 
https://www.riverbankcomputing.com/pipermail/pyqt/2020-September/043160.html
Subject: Make signals hashable

Index: PyQt5-5.15.1/qpy/QtCore/qpycore_pyqtboundsignal.cpp
===================================================================
--- PyQt5-5.15.1.orig/qpy/QtCore/qpycore_pyqtboundsignal.cpp
+++ PyQt5-5.15.1/qpy/QtCore/qpycore_pyqtboundsignal.cpp
@@ -42,6 +42,10 @@
 #define CHAR_CAST(s)    (const_cast<char *>(s))
 #endif
 
+#if PY_VERSION_HEX < 0x03020000
+typedef long Py_hash_t;
+#endif
+
 
 // The type object.
 PyTypeObject *qpycore_pyqtBoundSignal_TypeObject;
@@ -52,6 +56,7 @@ extern "C" {
 static PyObject *pyqtBoundSignal_call(PyObject *self, PyObject *args,
         PyObject *kw);
 static void pyqtBoundSignal_dealloc(PyObject *self);
+static Py_hash_t pyqtBoundSignal_hash(PyObject *self);
 static PyObject *pyqtBoundSignal_repr(PyObject *self);
 static PyObject *pyqtBoundSignal_richcompare(PyObject *self, PyObject *other,
         int op);
@@ -139,6 +144,7 @@ static PyType_Slot qpycore_pyqtBoundSign
     {Py_tp_dealloc,     (void *)pyqtBoundSignal_dealloc},
     {Py_tp_repr,        (void *)pyqtBoundSignal_repr},
     {Py_tp_richcompare, (void *)pyqtBoundSignal_richcompare},
+    {Py_tp_hash,        (void *)pyqtBoundSignal_hash},
     {Py_tp_call,        (void *)pyqtBoundSignal_call},
     {Py_mp_subscript,   (void *)pyqtBoundSignal_mp_subscript},
     {Py_tp_methods,     pyqtBoundSignal_methods},
@@ -179,7 +185,7 @@ static PyTypeObject qpycore_pyqtBoundSig
     0,                      /* tp_as_number */
     0,                      /* tp_as_sequence */
     &pyqtBoundSignal_as_mapping,    /* tp_as_mapping */
-    0,                      /* tp_hash */
+    pyqtBoundSignal_hash,   /* tp_hash */
     pyqtBoundSignal_call,   /* tp_call */
     0,                      /* tp_str */
     0,                      /* tp_getattro */
@@ -315,6 +321,27 @@ static PyObject *pyqtBoundSignal_richcom
 }
 
 
+// The type hash slot.
+static Py_hash_t pyqtBoundSignal_hash(PyObject *self)
+{
+    qpycore_pyqtBoundSignal *bs = (qpycore_pyqtBoundSignal *)self;
+
+    Py_hash_t signal_hash = PyObject_Hash((PyObject *)(bs->unbound_signal));
+    if (signal_hash == -1)
+        return -1;
+
+    Py_hash_t object_hash = PyObject_Hash((PyObject *)(bs->bound_pyobject));
+    if (object_hash == -1)
+        return -1;
+
+    Py_hash_t hash = signal_hash ^ object_hash;
+    if (hash == -1)
+        hash = -2;
+
+    return hash;
+}
+
+
 // The type call slot.
 static PyObject *pyqtBoundSignal_call(PyObject *self, PyObject *args,
         PyObject *kw)

Reply via email to