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)