Script 'mail_helper' called by obssrc
Hello community,

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

Package is "python-pyqt-builder"

Sun Oct 18 19:22:17 2026 rev:29 rq:1385948 version:1.20.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pyqt-builder/python-pyqt-builder.changes  
2026-08-31 15:56:22.817305964 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-pyqt-builder.new.3698736/python-pyqt-builder.changes
     2026-10-18 19:22:26.253555234 +0200
@@ -1,0 +2,30 @@
+Sun Oct 18 08:59:45 UTC 2026 - Ben Greiner <[email protected]>
+
+- Update to 1.20.1
+  ## pyqt-qt-wheel
+  * The --package-version option was added to allow the package
+    version to be set explicitly rather than defaulting to the Qt
+    version.
+  * The newer QtLabs libraries are now included in the PyQt6-Qt6
+    wheel.
+  * The QtGraphs2DImpl library is now included in the
+    PyQt6-Graphs-Qt6 wheel.
+  * The QtCanvas2D library is now included in the
+    PyQt6-CanvasPainter-Qt6 wheel.
+- Release v1.20.0
+  ## Support for Qt v6.12
+  * The minimum MacOS version for Qt v6.12 is v14.0.
+  * Updated QtMultimedia for the new versions of support libraries.
+  * The QtPdf and QtPdfWidgets modules and the qtwebview_webengine
+    plugin have been moved from PyQt6 to PyQt6-WebEngine.
+  * Added the PyQt6-CanvasPainter package.
+  ## Module API
+  * Added PyQtProject.get_version_tag() to allow version tags to be
+    independent of the Qt version.
+  ## Updated minimum ABI versions
+  * The minimum ABI versions have been updated to v12.20 and
+    v13.13.
+  ## Bug fixes
+  * Bundle the missing QtQmlCore library.
+
+-------------------------------------------------------------------

Old:
----
  pyqt_builder-1.19.1.tar.gz

New:
----
  pyqt_builder-1.20.1.tar.gz

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

Other differences:
------------------
++++++ python-pyqt-builder.spec ++++++
--- /var/tmp/diff_new_pack.p2bRtR/_old  2026-10-18 19:22:27.023587158 +0200
+++ /var/tmp/diff_new_pack.p2bRtR/_new  2026-10-18 19:22:27.025587241 +0200
@@ -23,7 +23,7 @@
 %endif
 %{?sle15_python_module_pythons}
 Name:           python-pyqt-builder
-Version:        1.19.1
+Version:        1.20.1
 Release:        0
 Summary:        The PEP 517 compliant PyQt build system
 License:        BSD-2-Clause

++++++ pyqt_builder-1.19.1.tar.gz -> pyqt_builder-1.20.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt_builder-1.19.1/PKG-INFO 
new/pyqt_builder-1.20.1/PKG-INFO
--- old/pyqt_builder-1.19.1/PKG-INFO    2025-12-05 14:57:54.704343800 +0100
+++ new/pyqt_builder-1.20.1/PKG-INFO    2026-10-16 15:49:26.343230200 +0200
@@ -1,11 +1,11 @@
 Metadata-Version: 2.4
 Name: PyQt-builder
-Version: 1.19.1
+Version: 1.20.1
 Summary: The PyQt build system
 Author-email: Phil Thompson <[email protected]>
 License-Expression: BSD-2-Clause
 Project-URL: homepage, https://github.com/Python-PyQt/PyQt-builder
-Requires-Python: >=3.8
+Requires-Python: >=3.10
 Description-Content-Type: text/markdown
 License-File: LICENSE
 Requires-Dist: packaging
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt_builder-1.19.1/PyQt_builder.egg-info/PKG-INFO 
new/pyqt_builder-1.20.1/PyQt_builder.egg-info/PKG-INFO
--- old/pyqt_builder-1.19.1/PyQt_builder.egg-info/PKG-INFO      2025-12-05 
14:57:54.000000000 +0100
+++ new/pyqt_builder-1.20.1/PyQt_builder.egg-info/PKG-INFO      2026-10-16 
15:49:26.257868500 +0200
@@ -1,11 +1,11 @@
 Metadata-Version: 2.4
 Name: PyQt-builder
-Version: 1.19.1
+Version: 1.20.1
 Summary: The PyQt build system
 Author-email: Phil Thompson <[email protected]>
 License-Expression: BSD-2-Clause
 Project-URL: homepage, https://github.com/Python-PyQt/PyQt-builder
-Requires-Python: >=3.8
+Requires-Python: >=3.10
 Description-Content-Type: text/markdown
 License-File: LICENSE
 Requires-Dist: packaging
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyqt_builder-1.19.1/PyQt_builder.egg-info/SOURCES.txt 
new/pyqt_builder-1.20.1/PyQt_builder.egg-info/SOURCES.txt
--- old/pyqt_builder-1.19.1/PyQt_builder.egg-info/SOURCES.txt   2025-12-05 
14:57:54.000000000 +0100
+++ new/pyqt_builder-1.20.1/PyQt_builder.egg-info/SOURCES.txt   2026-10-16 
15:49:26.295604000 +0200
@@ -7,6 +7,8 @@
 PyQt_builder.egg-info/dependency_links.txt
 PyQt_builder.egg-info/entry_points.txt
 PyQt_builder.egg-info/requires.txt
+PyQt_builder.egg-info/scm_file_list.json
+PyQt_builder.egg-info/scm_version.json
 PyQt_builder.egg-info/top_level.txt
 pyqtbuild/__init__.py
 pyqtbuild/_version.py
@@ -63,6 +65,7 @@
 pyqtbuild/bundle/packages/pyqt5.py
 pyqtbuild/bundle/packages/pyqt6.py
 pyqtbuild/bundle/packages/pyqt6_3d.py
+pyqtbuild/bundle/packages/pyqt6_canvaspainter.py
 pyqtbuild/bundle/packages/pyqt6_charts.py
 pyqtbuild/bundle/packages/pyqt6_datavisualization.py
 pyqtbuild/bundle/packages/pyqt6_graphs.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyqt_builder-1.19.1/PyQt_builder.egg-info/scm_file_list.json 
new/pyqt_builder-1.20.1/PyQt_builder.egg-info/scm_file_list.json
--- old/pyqt_builder-1.19.1/PyQt_builder.egg-info/scm_file_list.json    
1970-01-01 01:00:00.000000000 +0100
+++ new/pyqt_builder-1.20.1/PyQt_builder.egg-info/scm_file_list.json    
2026-10-16 15:49:26.255824000 +0200
@@ -0,0 +1,93 @@
+{
+  "files": [
+    ".gitignore",
+    ".readthedocs.yaml",
+    "LICENSE",
+    "MANIFEST.in",
+    "README.md",
+    "docs/Makefile",
+    "docs/command_line_tools.rst",
+    "docs/conf.py",
+    "docs/example.rst",
+    "docs/index.rst",
+    "docs/introduction.rst",
+    "docs/make.bat",
+    "docs/pyproject.toml",
+    "docs/pyproject_toml.rst",
+    "docs/pyqtbuild_api.rst",
+    "docs/pyqtbundle.rst",
+    "docs/releases.md",
+    "docs/requirements.in",
+    "docs/requirements.txt",
+    "pyproject.toml",
+    "pyqtbuild/__init__.py",
+    "pyqtbuild/bindings.py",
+    "pyqtbuild/builder.py",
+    "pyqtbuild/bundle/__init__.py",
+    "pyqtbuild/bundle/abstract_package.py",
+    "pyqtbuild/bundle/bundle.py",
+    "pyqtbuild/bundle/bundle_main.py",
+    "pyqtbuild/bundle/dlls/msvc-32/concrt140.dll",
+    "pyqtbuild/bundle/dlls/msvc-32/msvcp140.dll",
+    "pyqtbuild/bundle/dlls/msvc-32/msvcp140_1.dll",
+    "pyqtbuild/bundle/dlls/msvc-32/msvcp140_2.dll",
+    "pyqtbuild/bundle/dlls/msvc-32/msvcp140_atomic_wait.dll",
+    "pyqtbuild/bundle/dlls/msvc-32/msvcp140_codecvt_ids.dll",
+    "pyqtbuild/bundle/dlls/msvc-32/vccorlib140.dll",
+    "pyqtbuild/bundle/dlls/msvc-32/vcruntime140.dll",
+    "pyqtbuild/bundle/dlls/msvc-32/vcruntime140_threads.dll",
+    "pyqtbuild/bundle/dlls/msvc-64/concrt140.dll",
+    "pyqtbuild/bundle/dlls/msvc-64/msvcp140.dll",
+    "pyqtbuild/bundle/dlls/msvc-64/msvcp140_1.dll",
+    "pyqtbuild/bundle/dlls/msvc-64/msvcp140_2.dll",
+    "pyqtbuild/bundle/dlls/msvc-64/msvcp140_atomic_wait.dll",
+    "pyqtbuild/bundle/dlls/msvc-64/msvcp140_codecvt_ids.dll",
+    "pyqtbuild/bundle/dlls/msvc-64/vccorlib140.dll",
+    "pyqtbuild/bundle/dlls/msvc-64/vcruntime140.dll",
+    "pyqtbuild/bundle/dlls/msvc-64/vcruntime140_1.dll",
+    "pyqtbuild/bundle/dlls/msvc-64/vcruntime140_threads.dll",
+    "pyqtbuild/bundle/dlls/msvc-arm64/concrt140.dll",
+    "pyqtbuild/bundle/dlls/msvc-arm64/msvcp140.dll",
+    "pyqtbuild/bundle/dlls/msvc-arm64/msvcp140_1.dll",
+    "pyqtbuild/bundle/dlls/msvc-arm64/msvcp140_2.dll",
+    "pyqtbuild/bundle/dlls/msvc-arm64/msvcp140_atomic_wait.dll",
+    "pyqtbuild/bundle/dlls/msvc-arm64/msvcp140_codecvt_ids.dll",
+    "pyqtbuild/bundle/dlls/msvc-arm64/vccorlib140.dll",
+    "pyqtbuild/bundle/dlls/msvc-arm64/vcruntime140.dll",
+    "pyqtbuild/bundle/dlls/msvc-arm64/vcruntime140_1.dll",
+    "pyqtbuild/bundle/dlls/msvc-arm64/vcruntime140_threads.dll",
+    "pyqtbuild/bundle/dlls/openssl-32/libcrypto-1_1.dll",
+    "pyqtbuild/bundle/dlls/openssl-32/libssl-1_1.dll",
+    "pyqtbuild/bundle/dlls/openssl-64/libcrypto-1_1-x64.dll",
+    "pyqtbuild/bundle/dlls/openssl-64/libssl-1_1-x64.dll",
+    "pyqtbuild/bundle/packages/__init__.py",
+    "pyqtbuild/bundle/packages/pyqt.py",
+    "pyqtbuild/bundle/packages/pyqt3d.py",
+    "pyqtbuild/bundle/packages/pyqt5.py",
+    "pyqtbuild/bundle/packages/pyqt6.py",
+    "pyqtbuild/bundle/packages/pyqt6_3d.py",
+    "pyqtbuild/bundle/packages/pyqt6_canvaspainter.py",
+    "pyqtbuild/bundle/packages/pyqt6_charts.py",
+    "pyqtbuild/bundle/packages/pyqt6_datavisualization.py",
+    "pyqtbuild/bundle/packages/pyqt6_graphs.py",
+    "pyqtbuild/bundle/packages/pyqt6_networkauth.py",
+    "pyqtbuild/bundle/packages/pyqt6_webengine.py",
+    "pyqtbuild/bundle/packages/pyqtchart.py",
+    "pyqtbuild/bundle/packages/pyqtdatavisualization.py",
+    "pyqtbuild/bundle/packages/pyqtnetworkauth.py",
+    "pyqtbuild/bundle/packages/pyqtpurchasing.py",
+    "pyqtbuild/bundle/packages/pyqtwebengine.py",
+    "pyqtbuild/bundle/qt_metadata.py",
+    "pyqtbuild/bundle/qt_wheel.py",
+    "pyqtbuild/bundle/qt_wheel_distinfo/LICENSE.gpl3",
+    "pyqtbuild/bundle/qt_wheel_distinfo/LICENSE.lgpl3",
+    "pyqtbuild/bundle/qt_wheel_distinfo/METADATA",
+    "pyqtbuild/bundle/qt_wheel_distinfo/WHEEL",
+    "pyqtbuild/bundle/qt_wheel_main.py",
+    "pyqtbuild/bundle/verbose.py",
+    "pyqtbuild/bundle/wheel.py",
+    "pyqtbuild/installable.py",
+    "pyqtbuild/project.py",
+    "pyqtbuild/version.py"
+  ]
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyqt_builder-1.19.1/PyQt_builder.egg-info/scm_version.json 
new/pyqt_builder-1.20.1/PyQt_builder.egg-info/scm_version.json
--- old/pyqt_builder-1.19.1/PyQt_builder.egg-info/scm_version.json      
1970-01-01 01:00:00.000000000 +0100
+++ new/pyqt_builder-1.20.1/PyQt_builder.egg-info/scm_version.json      
2026-10-16 15:49:26.223970200 +0200
@@ -0,0 +1,8 @@
+{
+  "tag": "1.20.1",
+  "distance": 0,
+  "node": "g612565940bd8d348b8e6c92b500f415b4229543a",
+  "dirty": false,
+  "branch": "main",
+  "node_date": "2026-10-16"
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt_builder-1.19.1/pyproject.toml 
new/pyqt_builder-1.20.1/pyproject.toml
--- old/pyqt_builder-1.19.1/pyproject.toml      2025-06-03 16:12:19.000000000 
+0200
+++ new/pyqt_builder-1.20.1/pyproject.toml      2026-10-04 13:04:07.998818000 
+0200
@@ -13,7 +13,7 @@
 readme = "README.md"
 urls.homepage = "https://github.com/Python-PyQt/PyQt-builder";
 dependencies = ["packaging", "sip >=6.7, <7"]
-requires-python = ">=3.8"
+requires-python = ">=3.10"
 license = "BSD-2-Clause"
 license-files = ["LICENSE"]
 dynamic = ["version"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt_builder-1.19.1/pyqtbuild/_version.py 
new/pyqt_builder-1.20.1/pyqtbuild/_version.py
--- old/pyqt_builder-1.19.1/pyqtbuild/_version.py       2025-12-05 
14:57:54.000000000 +0100
+++ new/pyqt_builder-1.20.1/pyqtbuild/_version.py       2026-10-16 
15:49:26.207632000 +0200
@@ -1,5 +1,6 @@
-# file generated by setuptools-scm
+# file generated by vcs-versioning
 # don't change, don't track in version control
+from __future__ import annotations
 
 __all__ = [
     "__version__",
@@ -10,25 +11,14 @@
     "commit_id",
 ]
 
-TYPE_CHECKING = False
-if TYPE_CHECKING:
-    from typing import Tuple
-    from typing import Union
-
-    VERSION_TUPLE = Tuple[Union[int, str], ...]
-    COMMIT_ID = Union[str, None]
-else:
-    VERSION_TUPLE = object
-    COMMIT_ID = object
-
 version: str
 __version__: str
-__version_tuple__: VERSION_TUPLE
-version_tuple: VERSION_TUPLE
-commit_id: COMMIT_ID
-__commit_id__: COMMIT_ID
+__version_tuple__: tuple[int | str, ...]
+version_tuple: tuple[int | str, ...]
+commit_id: str | None
+__commit_id__: str | None
 
-__version__ = version = '1.19.1'
-__version_tuple__ = version_tuple = (1, 19, 1)
+__version__ = version = '1.20.1'
+__version_tuple__ = version_tuple = (1, 20, 1)
 
-__commit_id__ = commit_id = 'g6ad7e5887'
+__commit_id__ = commit_id = 'g612565940'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt_builder-1.19.1/pyqtbuild/bindings.py 
new/pyqt_builder-1.20.1/pyqtbuild/bindings.py
--- old/pyqt_builder-1.19.1/pyqtbuild/bindings.py       2024-12-18 
17:51:37.000000000 +0100
+++ new/pyqt_builder-1.20.1/pyqtbuild/bindings.py       2026-10-04 
13:04:07.999207500 +0200
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: BSD-2-Clause
 
-# Copyright (c) 2024 Phil Thompson <[email protected]>
+# Copyright (c) 2026 Phil Thompson <[email protected]>
 
 
 import glob
@@ -51,7 +51,7 @@
             project = self.project
 
             self.tags = ['{}_{}'.format(project.tag_prefix,
-                    project.builder.qt_version_tag)]
+                    project.get_version_tag())]
 
         super().apply_user_defaults(tool)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt_builder-1.19.1/pyqtbuild/builder.py 
new/pyqt_builder-1.20.1/pyqtbuild/builder.py
--- old/pyqt_builder-1.19.1/pyqtbuild/builder.py        2025-10-23 
22:02:55.000000000 +0200
+++ new/pyqt_builder-1.20.1/pyqtbuild/builder.py        2026-10-04 
13:04:07.999636700 +0200
@@ -115,9 +115,14 @@
                 else:
                     project.minimum_glibc_version = '2.17'
 
-            # Set the default minimum macOS version.
+            # Set the default minimum macOS version.  These may not be exact
+            # as they have to be supported by pip (see 'pip debug --verbose')
+            # which tends not only support '.0' versions.  Note that we didn't
+            # keep these up to date for Qt6 until v6.12.
             if not project.minimum_macos_version:
-                if self.qt_version >= 0x060000:
+                if self.qt_version >= 0x060c00:
+                    project.minimum_macos_version = '14.0'
+                elif self.qt_version >= 0x060000:
                     project.minimum_macos_version = '10.14'
                 elif self.qt_version >= 0x050e00:
                     project.minimum_macos_version = '10.13'
@@ -136,13 +141,12 @@
 
             # Set the default ABI major version of the sip module.  These
             # should track the versions specified by the latest versions of
-            # PyQt5 and PyQt6 (and vice versa).  This can be removed completely
-            # when PyQt5 and PyQt6 use %MinimumABIVersion unconditionaly.
+            # PyQt5 and PyQt6 (and vice versa).  This should be removed in v2.
             if not project.abi_version:
                 if project.sip_module == 'PyQt5.sip':
-                    project.abi_version = '12.15'
+                    project.abi_version = '12.20'
                 elif project.sip_module == 'PyQt6.sip':
-                    project.abi_version = '13.8'
+                    project.abi_version = '13.13'
 
         super().apply_user_defaults(tool)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyqt_builder-1.19.1/pyqtbuild/bundle/packages/pyqt6.py 
new/pyqt_builder-1.20.1/pyqtbuild/bundle/packages/pyqt6.py
--- old/pyqt_builder-1.19.1/pyqtbuild/bundle/packages/pyqt6.py  2025-02-24 
23:40:51.000000000 +0100
+++ new/pyqt_builder-1.20.1/pyqtbuild/bundle/packages/pyqt6.py  2026-10-16 
15:48:31.697518300 +0200
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: BSD-2-Clause
 
-# Copyright (c) 2024 Phil Thompson <[email protected]>
+# Copyright (c) 2026 Phil Thompson <[email protected]>
 
 
 from ..qt_metadata import VersionedMetadata
@@ -17,29 +17,58 @@
         VersionedMetadata(version=(6, 2, 0)),
 
     'QtCore': (
+        VersionedMetadata(version=(6, 12, 0),
+            other_lib_deps={
+                'linux': (
+                    'libicui18n.so.73', 'libicuuc.so.73', 'libicudata.so.73',
+                ),
+            },
+            translations=(
+                'qt_', 'qt_help', 'qtbase', 'qtconnectivity', 'qtdeclarative',
+                'qtlocation', 'qtmultimedia', 'qtquickcontrols2',
+                'qtserialport', 'qtwebsockets',
+            ),
+            excluded_plugins=('designer', 'qmltooling', 'qtwebview_webengine'),
+        ),
         VersionedMetadata(version=(6, 7, 0),
             other_lib_deps={
-                'linux': ('libicui18n.so.73', 'libicuuc.so.73',
-                          'libicudata.so.73')},
-            translations=('qt_', 'qt_help', 'qtbase', 'qtconnectivity',
-                'qtdeclarative', 'qtlocation', 'qtmultimedia',
-                'qtquickcontrols2', 'qtserialport', 'qtwebsockets'),
-            excluded_plugins=('designer', 'qmltooling')),
+                'linux': (
+                    'libicui18n.so.73', 'libicuuc.so.73', 'libicudata.so.73',
+                ),
+            },
+            translations=(
+                'qt_', 'qt_help', 'qtbase', 'qtconnectivity', 'qtdeclarative',
+                'qtlocation', 'qtmultimedia', 'qtquickcontrols2',
+                'qtserialport', 'qtwebsockets',
+            ),
+            excluded_plugins=('designer', 'qmltooling'),
+        ),
         VersionedMetadata(version=(6, 2, 0),
             other_lib_deps={
-                'linux': ('libicui18n.so.56', 'libicuuc.so.56',
-                          'libicudata.so.56')},
-            translations=('qt_', 'qt_help', 'qtbase', 'qtconnectivity',
-                'qtdeclarative', 'qtlocation', 'qtmultimedia',
-                'qtquickcontrols2', 'qtserialport', 'qtwebsockets'),
-            excluded_plugins=('designer', 'qmltooling')),
+                'linux': (
+                    'libicui18n.so.56', 'libicuuc.so.56', 'libicudata.so.56',
+                ),
+            },
+            translations=(
+                'qt_', 'qt_help', 'qtbase', 'qtconnectivity', 'qtdeclarative',
+                'qtlocation', 'qtmultimedia', 'qtquickcontrols2',
+                'qtserialport', 'qtwebsockets',
+            ),
+            excluded_plugins=('designer', 'qmltooling'),
+        ),
         VersionedMetadata(
             other_lib_deps={
-                'linux': ('libicui18n.so.56', 'libicuuc.so.56',
-                          'libicudata.so.56')},
-            translations=('qt_', 'qt_help', 'qtbase', 'qtdeclarative', 
-                'qtquickcontrols2'),
-            excluded_plugins=('designer', 'qmltooling'))),
+                'linux': (
+                    'libicui18n.so.56', 'libicuuc.so.56', 'libicudata.so.56',
+                ),
+            },
+            translations=(
+                'qt_', 'qt_help', 'qtbase', 'qtdeclarative',
+                'qtquickcontrols2',
+            ),
+            excluded_plugins=('designer', 'qmltooling'),
+        )
+    ),
 
     'QtDBus':
         VersionedMetadata(),
@@ -49,16 +78,20 @@
 
     'QtGui': (
         VersionedMetadata(version=(6, 2, 0),
-                lib_deps={
-                        'linux': ('QtEglFSDeviceIntegration',
-                                'QtWaylandClient',
-                                'QtWaylandEglClientHwIntegration',
-                                'QtWlShellIntegration', 'QtXcbQpa')},
-                other_lib_deps={
-                        'win': ('d3dcompiler_47.dll', 'opengl32sw.dll')}),
-        VersionedMetadata(lib_deps={'linux': ('QtWaylandClient', 'QtXcbQpa')},
-                other_lib_deps={
-                        'win': ('d3dcompiler_47.dll', 'opengl32sw.dll')})),
+            lib_deps={
+                'linux': (
+                    'QtEglFSDeviceIntegration', 'QtWaylandClient',
+                    'QtWaylandEglClientHwIntegration', 'QtWlShellIntegration',
+                    'QtXcbQpa',
+                ),
+            },
+            other_lib_deps={'win': ('d3dcompiler_47.dll', 'opengl32sw.dll')},
+        ),
+        VersionedMetadata(
+            lib_deps={'linux': ('QtWaylandClient', 'QtXcbQpa')},
+            other_lib_deps={'win': ('d3dcompiler_47.dll', 'opengl32sw.dll')},
+        )
+    ),
 
     'QtHelp':
         VersionedMetadata(),
@@ -67,45 +100,77 @@
     #    VersionedMetadata(),
 
     'QtMultimedia': (
+        VersionedMetadata(version=(6, 12, 0),
+            lib_deps={'': ('QtMultimediaQuick', )},
+            other_lib_deps={
+                'linux': (
+                    'libQt6FFmpegStub-crypto.so.3',
+                    'libQt6FFmpegStub-ssl.so.3', 'libQt6FFmpegStub-va.so.2',
+                    'libQt6FFmpegStub-va-drm.so.2',
+                    'libQt6FFmpegStub-va-x11.so.2', 'libavcodec.so.63',
+                    'libavformat.so.63', 'libavutil.so.61',
+                    'libswresample.so.7', 'libswscale.so.10',
+                ),
+                'macos': (
+                    'libavcodec.63.dylib', 'libavformat.63.dylib',
+                    'libavutil.61.dylib', 'libswresample.7.dylib',
+                    'libswscale.10.dylib',
+                ),
+                'win': (
+                    'avcodec-63.dll', 'avformat-63.dll', 'avutil-61.dll',
+                    'swresample-7.dll', 'swscale-10.dll',
+                ),
+            },
+        ),
         VersionedMetadata(version=(6, 8, 0),
-                lib_deps={'': ('QtMultimediaQuick', )},
-                other_lib_deps={
-                    'linux': (
-                            'libQt6FFmpegStub-crypto.so.3',
-                            'libQt6FFmpegStub-ssl.so.3',
-                            'libQt6FFmpegStub-va.so.2',
-                            'libQt6FFmpegStub-va-drm.so.2',
-                            'libQt6FFmpegStub-va-x11.so.2',
-                            'libavcodec.so.61', 'libavformat.so.61',
-                            'libavutil.so.59', 'libswresample.so.5',
-                            'libswscale.so.8'),
-                    'macos': ('libavcodec.61.dylib', 'libavformat.61.dylib',
-                            'libavutil.59.dylib', 'libswresample.5.dylib',
-                            'libswscale.8.dylib'),
-                    'win': ('avcodec-61.dll', 'avformat-61.dll',
-                            'avutil-59.dll', 'swresample-5.dll',
-                            'swscale-8.dll')},
+            lib_deps={'': ('QtMultimediaQuick', )},
+            other_lib_deps={
+                'linux': (
+                    'libQt6FFmpegStub-crypto.so.3',
+                    'libQt6FFmpegStub-ssl.so.3', 'libQt6FFmpegStub-va.so.2',
+                    'libQt6FFmpegStub-va-drm.so.2',
+                    'libQt6FFmpegStub-va-x11.so.2', 'libavcodec.so.61',
+                    'libavformat.so.61', 'libavutil.so.59',
+                    'libswresample.so.5', 'libswscale.so.8',
+                ),
+                'macos': (
+                    'libavcodec.61.dylib', 'libavformat.61.dylib',
+                    'libavutil.59.dylib', 'libswresample.5.dylib',
+                    'libswscale.8.dylib',
+                ),
+                'win': (
+                    'avcodec-61.dll', 'avformat-61.dll', 'avutil-59.dll',
+                    'swresample-5.dll', 'swscale-8.dll',
                 ),
+            },
+        ),
         VersionedMetadata(version=(6, 7, 1),
-                lib_deps={'': ('QtMultimediaQuick', )},
-                other_lib_deps={
-                    'macos': ('libavcodec.60.dylib', 'libavformat.60.dylib',
-                            'libavutil.58.dylib', 'libswresample.4.dylib',
-                            'libswscale.7.dylib'),
-                    'win': ('avcodec-60.dll', 'avformat-60.dll',
-                            'avutil-58.dll', 'swresample-4.dll',
-                            'swscale-7.dll')},
+            lib_deps={'': ('QtMultimediaQuick', )},
+            other_lib_deps={
+                'macos': (
+                    'libavcodec.60.dylib', 'libavformat.60.dylib',
+                    'libavutil.58.dylib', 'libswresample.4.dylib',
+                    'libswscale.7.dylib',
+                ),
+                'win': (
+                    'avcodec-60.dll', 'avformat-60.dll', 'avutil-58.dll',
+                    'swresample-4.dll', 'swscale-7.dll',
                 ),
+            },
+        ),
         VersionedMetadata(version=(6, 7, 0),
-                lib_deps={'': ('QtMultimediaQuick', )},
-                other_lib_deps={
-                    'win': ('avcodec-60.dll', 'avformat-60.dll',
-                            'avutil-58.dll', 'swresample-4.dll',
-                            'swscale-7.dll')},
+            lib_deps={'': ('QtMultimediaQuick', )},
+            other_lib_deps={
+                'win': (
+                    'avcodec-60.dll', 'avformat-60.dll', 'avutil-58.dll',
+                    'swresample-4.dll', 'swscale-7.dll',
                 ),
+            },
+        ),
         VersionedMetadata(version=(6, 2, 0),
-                lib_deps={'': ('QtMultimediaQuick', )},
-                )),
+            lib_deps={'': ('QtMultimediaQuick', )},
+        )
+    ),
 
     'QtMultimediaWidgets':
         VersionedMetadata(version=(6, 2, 0)),
@@ -123,191 +188,251 @@
         VersionedMetadata(),
 
     'QtPdf':
-        VersionedMetadata(version=(6, 4, 0),
-                lib_deps={'': ('QtPdfQuick', )}),
+        VersionedMetadata(version=(6, 4, 0), until_version=(6, 12, 0),
+            lib_deps={'': ('QtPdfQuick', )},
+        ),
 
     'QtPdfWidgets':
-        VersionedMetadata(version=(6, 4, 0)),
+        VersionedMetadata(version=(6, 4, 0), until_version=(6, 12, 0)),
 
     'QtPositioning':
         VersionedMetadata(version=(6, 2, 0),
-                lib_deps={'': ('QtPositioningQuick', )},
-                ),
+            lib_deps={'': ('QtPositioningQuick', )},
+        ),
 
     'QtPrintSupport':
         VersionedMetadata(),
 
     'QtQml': (
+        VersionedMetadata(version=(6, 11, 0),
+            lib_deps={
+                '': (
+                    'QtQmlCore', 'QtQmlMeta', 'QtQmlModels',
+                    'QtQmlWorkerScript', 'QtLabsAnimation',
+                    'QtLabsFolderListModel', 'QtLabsPlatform',
+                    'QtLabsQmlModels', 'QtLabsSettings', 'QtLabsSharedImage',
+                    'QtLabsStyleKit', 'QtLabsStyleKitImpl',
+                    'QtLabsSynchronizer', 'QtLabsWavefrontMesh',
+                ),
+            },
+        ),
+        VersionedMetadata(version=(6, 9, 0),
+            lib_deps={
+                '': (
+                    'QtQmlCore', 'QtQmlMeta', 'QtQmlModels',
+                    'QtQmlWorkerScript', 'QtLabsAnimation',
+                    'QtLabsFolderListModel', 'QtLabsPlatform',
+                    'QtLabsQmlModels', 'QtLabsSettings', 'QtLabsSharedImage',
+                    'QtLabsWavefrontMesh',
+                ),
+            },
+        ),
         VersionedMetadata(version=(6, 8, 0),
-                lib_deps={'': ('QtQmlMeta', 'QtQmlModels', 'QtQmlWorkerScript',
-                        'QtLabsAnimation', 'QtLabsFolderListModel',
-                        'QtLabsPlatform', 'QtLabsQmlModels', 'QtLabsSettings',
-                        'QtLabsSharedImage', 'QtLabsWavefrontMesh')},
+            lib_deps={
+                '': (
+                    'QtQmlMeta', 'QtQmlModels', 'QtQmlWorkerScript',
+                    'QtLabsAnimation', 'QtLabsFolderListModel',
+                    'QtLabsPlatform', 'QtLabsQmlModels', 'QtLabsSettings',
+                    'QtLabsSharedImage', 'QtLabsWavefrontMesh',
                 ),
+            },
+        ),
         VersionedMetadata(version=(6, 5, 0),
-                lib_deps={'': ('QtQmlModels', 'QtQmlWorkerScript',
-                        'QtLabsAnimation', 'QtLabsFolderListModel',
-                        'QtLabsQmlModels', 'QtLabsSettings',
-                        'QtLabsSharedImage', 'QtLabsWavefrontMesh')},
+            lib_deps={
+                '': (
+                    'QtQmlModels', 'QtQmlWorkerScript', 'QtLabsAnimation',
+                    'QtLabsFolderListModel', 'QtLabsQmlModels',
+                    'QtLabsSettings', 'QtLabsSharedImage',
+                    'QtLabsWavefrontMesh',
                 ),
+            },
+        ),
         VersionedMetadata(
-                lib_deps={'': ('QtQmlModels', 'QtQmlWorkerScript')},
-                )),
+            lib_deps={'': ('QtQmlModels', 'QtQmlWorkerScript')},
+        )
+    ),
 
     'QtQuick': (
         VersionedMetadata(version=(6, 8, 0),
-                lib_deps={'': ('QtQuickControls2', 'QtQuickControls2Basic',
-                        'QtQuickControls2BasicStyleImpl',
-                        'QtQuickControls2Fusion',
-                        'QtQuickControls2FusionStyleImpl',
-                        'QtQuickControls2IOSStyleImpl',
-                        'QtQuickControls2Imagine',
-                        'QtQuickControls2ImagineStyleImpl',
-                        'QtQuickControls2Impl',
-                        'QtQuickControls2MacOSStyleImpl',
-                        'QtQuickControls2Material',
-                        'QtQuickControls2MaterialStyleImpl',
-                        'QtQuickControls2Universal',
-                        'QtQuickControls2UniversalStyleImpl',
-                        'QtQuickDialogs2', 'QtQuickDialogs2QuickImpl',
-                        'QtQuickDialogs2Utils', 'QtQuickEffects',
-                        'QtQuickLayouts',
-                        'QtQuickParticles', 'QtQuickShapes',
-                        'QtQuickTemplates2', 'QtQuickTest',
-                        'QtQuickTimeline', 'QtQuickTimelineBlendTrees',
-                        'QtQuickVectorImage', 'QtQuickVectorImageGenerator')},
+            lib_deps={
+                '': (
+                    'QtQuickControls2', 'QtQuickControls2Basic',
+                    'QtQuickControls2BasicStyleImpl', 'QtQuickControls2Fusion',
+                    'QtQuickControls2FusionStyleImpl',
+                    'QtQuickControls2IOSStyleImpl', 'QtQuickControls2Imagine',
+                    'QtQuickControls2ImagineStyleImpl', 'QtQuickControls2Impl',
+                    'QtQuickControls2MacOSStyleImpl',
+                    'QtQuickControls2Material',
+                    'QtQuickControls2MaterialStyleImpl',
+                    'QtQuickControls2Universal',
+                    'QtQuickControls2UniversalStyleImpl', 'QtQuickDialogs2',
+                    'QtQuickDialogs2QuickImpl', 'QtQuickDialogs2Utils',
+                    'QtQuickEffects', 'QtQuickLayouts', 'QtQuickParticles',
+                    'QtQuickShapes', 'QtQuickTemplates2', 'QtQuickTest',
+                    'QtQuickTimeline', 'QtQuickTimelineBlendTrees',
+                    'QtQuickVectorImage', 'QtQuickVectorImageGenerator',
                 ),
+            },
+        ),
         VersionedMetadata(version=(6, 7, 0),
-                lib_deps={'': ('QtQuickControls2', 'QtQuickControls2Basic',
-                        'QtQuickControls2BasicStyleImpl',
-                        'QtQuickControls2Fusion',
-                        'QtQuickControls2FusionStyleImpl',
-                        'QtQuickControls2IOSStyleImpl',
-                        'QtQuickControls2Imagine',
-                        'QtQuickControls2ImagineStyleImpl',
-                        'QtQuickControls2Impl',
-                        'QtQuickControls2MacOSStyleImpl',
-                        'QtQuickControls2Material',
-                        'QtQuickControls2MaterialStyleImpl',
-                        'QtQuickControls2Universal',
-                        'QtQuickControls2UniversalStyleImpl',
-                        'QtQuickDialogs2', 'QtQuickDialogs2QuickImpl',
-                        'QtQuickDialogs2Utils', 'QtQuickEffects',
-                        'QtQuickLayouts',
-                        'QtQuickParticles', 'QtQuickShapes',
-                        'QtQuickTemplates2', 'QtQuickTest',
-                        'QtQuickTimeline', 'QtQuickTimelineBlendTrees')},
+            lib_deps={
+                '': (
+                    'QtQuickControls2', 'QtQuickControls2Basic',
+                    'QtQuickControls2BasicStyleImpl', 'QtQuickControls2Fusion',
+                    'QtQuickControls2FusionStyleImpl',
+                    'QtQuickControls2IOSStyleImpl', 'QtQuickControls2Imagine',
+                    'QtQuickControls2ImagineStyleImpl', 'QtQuickControls2Impl',
+                    'QtQuickControls2MacOSStyleImpl',
+                    'QtQuickControls2Material',
+                    'QtQuickControls2MaterialStyleImpl',
+                    'QtQuickControls2Universal',
+                    'QtQuickControls2UniversalStyleImpl', 'QtQuickDialogs2',
+                    'QtQuickDialogs2QuickImpl', 'QtQuickDialogs2Utils',
+                    'QtQuickEffects', 'QtQuickLayouts', 'QtQuickParticles',
+                    'QtQuickShapes', 'QtQuickTemplates2', 'QtQuickTest',
+                    'QtQuickTimeline', 'QtQuickTimelineBlendTrees',
                 ),
+            },
+        ),
         VersionedMetadata(version=(6, 6, 3),
-                lib_deps={'': ('QtQuickControls2', 'QtQuickControls2Basic',
-                        'QtQuickControls2BasicStyleImpl',
-                        'QtQuickControls2Fusion',
-                        'QtQuickControls2FusionStyleImpl',
-                        'QtQuickControls2IOSStyleImpl',
-                        'QtQuickControls2Imagine',
-                        'QtQuickControls2ImagineStyleImpl',
-                        'QtQuickControls2Impl', 'QtQuickControls2Material',
-                        'QtQuickControls2MaterialStyleImpl',
-                        'QtQuickControls2Universal',
-                        'QtQuickControls2UniversalStyleImpl',
-                        'QtQuickDialogs2', 'QtQuickDialogs2QuickImpl',
-                        'QtQuickDialogs2Utils', 'QtQuickLayouts',
-                        'QtQuickParticles', 'QtQuickShapes',
-                        'QtQuickTemplates2', 'QtQuickTest',
-                        'QtQuickTimeline')},
+            lib_deps={
+                '': (
+                    'QtQuickControls2', 'QtQuickControls2Basic',
+                    'QtQuickControls2BasicStyleImpl', 'QtQuickControls2Fusion',
+                    'QtQuickControls2FusionStyleImpl',
+                    'QtQuickControls2IOSStyleImpl', 'QtQuickControls2Imagine',
+                    'QtQuickControls2ImagineStyleImpl', 'QtQuickControls2Impl',
+                    'QtQuickControls2Material',
+                    'QtQuickControls2MaterialStyleImpl',
+                    'QtQuickControls2Universal',
+                    'QtQuickControls2UniversalStyleImpl', 'QtQuickDialogs2',
+                    'QtQuickDialogs2QuickImpl', 'QtQuickDialogs2Utils',
+                    'QtQuickLayouts', 'QtQuickParticles', 'QtQuickShapes',
+                    'QtQuickTemplates2', 'QtQuickTest', 'QtQuickTimeline',
                 ),
+            },
+        ),
         VersionedMetadata(version=(6, 2, 0),
-                lib_deps={'': ('QtQuickControls2', 'QtQuickControls2Impl',
-                        'QtQuickDialogs2', 'QtQuickDialogs2QuickImpl',
-                        'QtQuickDialogs2Utils', 'QtQuickLayouts',
-                        'QtQuickParticles', 'QtQuickShapes',
-                        'QtQuickTemplates2', 'QtQuickTest',
-                        'QtQuickTimeline')},
+            lib_deps={
+                '': (
+                    'QtQuickControls2', 'QtQuickControls2Impl',
+                    'QtQuickDialogs2', 'QtQuickDialogs2QuickImpl',
+                    'QtQuickDialogs2Utils', 'QtQuickLayouts',
+                    'QtQuickParticles', 'QtQuickShapes', 'QtQuickTemplates2',
+                    'QtQuickTest', 'QtQuickTimeline',
                 ),
+            },
+        ),
         VersionedMetadata(
-                lib_deps={'': ('QtQuickControls2', 'QtQuickControls2Impl',
-                        'QtQuickLayouts', 'QtQuickParticles', 'QtQuickShapes',
-                        'QtQuickTemplates2', 'QtQuickTest')},
-                )),
+            lib_deps={
+                '': (
+                    'QtQuickControls2', 'QtQuickControls2Impl',
+                    'QtQuickLayouts', 'QtQuickParticles', 'QtQuickShapes',
+                    'QtQuickTemplates2', 'QtQuickTest',
+                ),
+            },
+        )
+    ),
 
     'QtQuick3D': (
         VersionedMetadata(version=(6, 8, 0),
-                lib_deps={
-                        '': ('QtConcurrent', 'QtQuick3DAssetImport',
-                        'QtQuick3DAssetUtils', 'QtQuick3DEffects',
-                        'QtQuick3DGlslParser', 'QtQuick3DHelpers',
-                        'QtQuick3DHelpersImpl', 'QtQuick3DIblBaker',
-                        'QtQuick3DParticles', 'QtQuick3DPhysics',
-                        'QtQuick3DPhysicsHelpers', 'QtQuick3DRuntimeRender',
-                        'QtQuick3DUtils', 'QtShaderTools', 'QtQuick3DXr')},
+            lib_deps={
+                '': (
+                    'QtConcurrent', 'QtQuick3DAssetImport',
+                    'QtQuick3DAssetUtils', 'QtQuick3DEffects',
+                    'QtQuick3DGlslParser', 'QtQuick3DHelpers',
+                    'QtQuick3DHelpersImpl', 'QtQuick3DIblBaker',
+                    'QtQuick3DParticles', 'QtQuick3DPhysics',
+                    'QtQuick3DPhysicsHelpers', 'QtQuick3DRuntimeRender',
+                    'QtQuick3DUtils', 'QtShaderTools', 'QtQuick3DXr',
                 ),
+            },
+        ),
         VersionedMetadata(version=(6, 7, 0),
-                lib_deps={
-                        '': ('QtConcurrent', 'QtQuick3DAssetImport',
-                        'QtQuick3DAssetUtils', 'QtQuick3DEffects',
-                        'QtQuick3DGlslParser', 'QtQuick3DHelpers',
-                        'QtQuick3DHelpersImpl', 'QtQuick3DIblBaker',
-                        'QtQuick3DParticles', 'QtQuick3DPhysics',
-                        'QtQuick3DPhysicsHelpers', 'QtQuick3DRuntimeRender',
-                        'QtQuick3DUtils', 'QtShaderTools')},
+            lib_deps={
+                '': (
+                    'QtConcurrent', 'QtQuick3DAssetImport',
+                    'QtQuick3DAssetUtils', 'QtQuick3DEffects',
+                    'QtQuick3DGlslParser', 'QtQuick3DHelpers',
+                    'QtQuick3DHelpersImpl', 'QtQuick3DIblBaker',
+                    'QtQuick3DParticles', 'QtQuick3DPhysics',
+                    'QtQuick3DPhysicsHelpers', 'QtQuick3DRuntimeRender',
+                    'QtQuick3DUtils', 'QtShaderTools',
                 ),
+            },
+        ),
         VersionedMetadata(version=(6, 6, 0),
-                lib_deps={
-                        '': ('QtConcurrent', 'QtQuick3DAssetImport',
-                        'QtQuick3DAssetUtils', 'QtQuick3DEffects',
-                        'QtQuick3DHelpers', 'QtQuick3DIblBaker',
-                        'QtQuick3DParticles', 'QtQuick3DPhysics',
-                        'QtQuick3DPhysicsHelpers', 'QtQuick3DRuntimeRender',
-                        'QtQuick3DUtils', 'QtShaderTools')},
+            lib_deps={
+                '': (
+                    'QtConcurrent', 'QtQuick3DAssetImport',
+                    'QtQuick3DAssetUtils', 'QtQuick3DEffects',
+                    'QtQuick3DHelpers', 'QtQuick3DIblBaker',
+                    'QtQuick3DParticles', 'QtQuick3DPhysics',
+                    'QtQuick3DPhysicsHelpers', 'QtQuick3DRuntimeRender',
+                    'QtQuick3DUtils', 'QtShaderTools',
                 ),
+            },
+        ),
         VersionedMetadata(version=(6, 4, 0),
-                lib_deps={
-                        '': ('QtConcurrent', 'QtQuick3DAssetImport',
-                        'QtQuick3DAssetUtils', 'QtQuick3DEffects',
-                        'QtQuick3DHelpers', 'QtQuick3DIblBaker',
-                        'QtQuick3DParticles', 'QtQuick3DRuntimeRender',
-                        'QtQuick3DUtils', 'QtShaderTools')},
+            lib_deps={
+                '': (
+                    'QtConcurrent', 'QtQuick3DAssetImport',
+                    'QtQuick3DAssetUtils', 'QtQuick3DEffects',
+                    'QtQuick3DHelpers', 'QtQuick3DIblBaker',
+                    'QtQuick3DParticles', 'QtQuick3DRuntimeRender',
+                    'QtQuick3DUtils', 'QtShaderTools',
                 ),
+            },
+        ),
         VersionedMetadata(version=(6, 1, 0),
-                lib_deps={
-                        '': ('QtQuick3DAssetImport', 'QtQuick3DAssetUtils',
-                        'QtQuick3DEffects', 'QtQuick3DHelpers',
-                        'QtQuick3DIblBaker', 'QtQuick3DParticles',
-                        'QtQuick3DRuntimeRender', 'QtQuick3DUtils',
-                        'QtShaderTools')},
+            lib_deps={
+                '': (
+                    'QtQuick3DAssetImport', 'QtQuick3DAssetUtils',
+                    'QtQuick3DEffects', 'QtQuick3DHelpers',
+                    'QtQuick3DIblBaker', 'QtQuick3DParticles',
+                    'QtQuick3DRuntimeRender', 'QtQuick3DUtils',
+                    'QtShaderTools',
                 ),
+            },
+        ),
         VersionedMetadata(
-                lib_deps={
-                        '': ('QtQuick3DAssetImport', 'QtQuick3DRuntimeRender',
-                        'QtQuick3DUtils', 'QtShaderTools')},
-                )),
+            lib_deps={
+                '': (
+                    'QtQuick3DAssetImport', 'QtQuick3DRuntimeRender',
+                    'QtQuick3DUtils', 'QtShaderTools',
+                ),
+            },
+        )
+    ),
 
     'QtQuickWidgets':
         VersionedMetadata(),
 
     'QtRemoteObjects':
         VersionedMetadata(version=(6, 2, 0),
-                lib_deps={'': ('QtRemoteObjectsQml', )},
-                ),
+            lib_deps={'': ('QtRemoteObjectsQml', )},
+        ),
 
     'QtSensors':
         VersionedMetadata(version=(6, 2, 0),
-                lib_deps={'': ('QtSensorsQuick', )},
-                ),
+            lib_deps={'': ('QtSensorsQuick', )},
+        ),
 
     'QtSerialPort':
         VersionedMetadata(version=(6, 2, 0)),
 
     'QtSpatialAudio':
         VersionedMetadata(version=(6, 5, 0),
-                lib_deps={'': ('QtQuick3DSpatialAudio', )}),
+            lib_deps={'': ('QtQuick3DSpatialAudio', )},
+        ),
 
     'QtSql':
         VersionedMetadata(),
 
     'QtStateMachine':
         VersionedMetadata(
-                lib_deps={'': ('QtStateMachineQml', )}),
+            lib_deps={'': ('QtStateMachineQml', )},
+        ),
 
     'QtSvg':
         VersionedMetadata(),
@@ -324,9 +449,10 @@
     'QtWebChannel': (
         # The quick library may have been present from the start.
         VersionedMetadata(version=(6, 6, 0),
-                lib_deps={'': ('QtWebChannelQuick', )},
-                ),
-        VersionedMetadata(version=(6, 2, 0))),
+            lib_deps={'': ('QtWebChannelQuick', )},
+        ),
+        VersionedMetadata(version=(6, 2, 0))
+    ),
 
     'QtWebSockets':
         VersionedMetadata(version=(6, 2, 0)),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyqt_builder-1.19.1/pyqtbuild/bundle/packages/pyqt6_canvaspainter.py 
new/pyqt_builder-1.20.1/pyqtbuild/bundle/packages/pyqt6_canvaspainter.py
--- old/pyqt_builder-1.19.1/pyqtbuild/bundle/packages/pyqt6_canvaspainter.py    
1970-01-01 01:00:00.000000000 +0100
+++ new/pyqt_builder-1.20.1/pyqtbuild/bundle/packages/pyqt6_canvaspainter.py    
2026-10-16 15:48:31.698354500 +0200
@@ -0,0 +1,26 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
+# Copyright (c) 2026 Phil Thompson <[email protected]>
+
+
+from ..abstract_package import AbstractPackage
+from ..qt_metadata import VersionedMetadata
+
+
+# The Qt meta-data for this package.
+_QT_METADATA = {
+    'QtCanvasPainter':
+        VersionedMetadata(version=(6, 12, 0), lgpl=False,
+            lib_deps={'': ('QtCanvas2D', )}),
+}
+
+
+class PyQt6_CanvasPainter(AbstractPackage):
+    """ The PyQt6-CanvasPainter package. """
+
+    def get_qt_metadata(self):
+        """ Return the package-specific meta-data describing the parts of Qt to
+        install.
+        """
+
+        return _QT_METADATA
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyqt_builder-1.19.1/pyqtbuild/bundle/packages/pyqt6_graphs.py 
new/pyqt_builder-1.20.1/pyqtbuild/bundle/packages/pyqt6_graphs.py
--- old/pyqt_builder-1.19.1/pyqtbuild/bundle/packages/pyqt6_graphs.py   
2024-12-18 17:51:37.000000000 +0100
+++ new/pyqt_builder-1.20.1/pyqtbuild/bundle/packages/pyqt6_graphs.py   
2026-10-16 15:48:31.698638000 +0200
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: BSD-2-Clause
 
-# Copyright (c) 2024 Phil Thompson <[email protected]>
+# Copyright (c) 2026 Phil Thompson <[email protected]>
 
 
 from ..abstract_package import AbstractPackage
@@ -9,8 +9,12 @@
 
 # The Qt meta-data for this package.
 _QT_METADATA = {
-    'QtGraphs':
-        VersionedMetadata(version=(6, 8, 0), lgpl=False),
+    'QtGraphs': (
+        VersionedMetadata(version=(6, 12, 0), lgpl=False,
+            lib_deps={'': ('QtGraphs2DImpl', )},
+        ),
+        VersionedMetadata(version=(6, 8, 0), lgpl=False)
+    ),
 
     'QtGraphsWidgets':
         VersionedMetadata(version=(6, 8, 0), lgpl=False),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyqt_builder-1.19.1/pyqtbuild/bundle/packages/pyqt6_webengine.py 
new/pyqt_builder-1.20.1/pyqtbuild/bundle/packages/pyqt6_webengine.py
--- old/pyqt_builder-1.19.1/pyqtbuild/bundle/packages/pyqt6_webengine.py        
2024-12-18 17:51:37.000000000 +0100
+++ new/pyqt_builder-1.20.1/pyqtbuild/bundle/packages/pyqt6_webengine.py        
2026-10-04 13:04:08.001138400 +0200
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: BSD-2-Clause
 
-# Copyright (c) 2024 Phil Thompson <[email protected]>
+# Copyright (c) 2026 Phil Thompson <[email protected]>
 
 
 from ..abstract_package import AbstractPackage
@@ -9,7 +9,13 @@
 
 # The Qt meta-data for this package.
 _QT_METADATA = {
-    'QtWebEngineCore':
+    'QtPdf':
+        VersionedMetadata(version=(6, 12, 0),
+                lib_deps={'': ('QtPdfQuick', )}),
+
+    'QtPdfWidgets':
+        VersionedMetadata(version=(6, 12, 0)),
+    'QtWebEngineCore': (
         VersionedMetadata(version=(6, 2, 0),
             translations=('qtwebengine', ),
             other_lib_deps={
@@ -21,11 +27,28 @@
             files={
                 'win':  (('lib\\Qt6Core.lib',
                         "Enable QtWebEngineProcess to find it's 
resources.\n"), )},
+            included_plugins=(('webview', 'qtwebview_webengine'), ),
             others={
                 'linux': ('resources', 'translations/qtwebengine_locales'),
                 'win':   ('resources', 'translations\\qtwebengine_locales')},
             subwheel_files={
                 '':      (('qtlib', 'QtWebEngineCore'), )}),
+        VersionedMetadata(version=(6, 2, 0),
+            translations=('qtwebengine', ),
+            other_lib_deps={
+                'macos': 
('QtWebEngineCore.framework/Helpers/QtWebEngineProcess.app/Contents/Info.plist',
 )},
+            exes={
+                'linux': ('libexec/QtWebEngineProcess', ),
+                'macos': 
('lib/QtWebEngineCore.framework/Helpers/QtWebEngineProcess.app/Contents/MacOS/QtWebEngineProcess',
 ),
+                'win':   ('bin\\QtWebEngineProcess.exe', )},
+            files={
+                'win':  (('lib\\Qt6Core.lib',
+                        "Enable QtWebEngineProcess to find it's 
resources.\n"), )},
+            others={
+                'linux': ('resources', 'translations/qtwebengine_locales'),
+                'win':   ('resources', 'translations\\qtwebengine_locales')},
+            subwheel_files={
+                '':      (('qtlib', 'QtWebEngineCore'), )})),
 
     'QtWebEngineQuick':
         VersionedMetadata(version=(6, 2, 0),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt_builder-1.19.1/pyqtbuild/bundle/qt_metadata.py 
new/pyqt_builder-1.20.1/pyqtbuild/bundle/qt_metadata.py
--- old/pyqt_builder-1.19.1/pyqtbuild/bundle/qt_metadata.py     2024-12-18 
17:51:37.000000000 +0100
+++ new/pyqt_builder-1.20.1/pyqtbuild/bundle/qt_metadata.py     2026-10-04 
13:04:08.001487500 +0200
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: BSD-2-Clause
 
-# Copyright (c) 2024 Phil Thompson <[email protected]>
+# Copyright (c) 2026 Phil Thompson <[email protected]>
 
 
 import fnmatch
@@ -18,13 +18,15 @@
     version of Qt.
     """
 
-    def __init__(self, *, version=None, name=None, lib_deps=None,
-            other_lib_deps=None, exes=None, files=None, others=None, dll=True,
-            qml_names=None, translations=None, excluded_plugins=None,
-            lgpl=True, legacy=False, subwheel_files=None):
+    def __init__(self, *, version=None, until_version=None, name=None,
+            lib_deps=None, other_lib_deps=None, exes=None, files=None,
+            others=None, dll=True, qml_names=None, translations=None,
+            excluded_plugins=None, included_plugins=None, lgpl=True,
+            legacy=False, subwheel_files=None):
         """ Initialise the versioned bindings. """
 
         self._version = version
+        self._until_version = until_version
         self._name = name
         self._lib_deps = {} if lib_deps is None else lib_deps
         self._other_lib_deps = {} if other_lib_deps is None else other_lib_deps
@@ -35,6 +37,7 @@
         self._qml_names = qml_names
         self._translations = () if translations is None else translations
         self._excluded_plugins = excluded_plugins
+        self._included_plugins = included_plugins
         self._subwheel_files = {} if subwheel_files is None else subwheel_files
 
         self.lgpl = lgpl
@@ -163,14 +166,23 @@
                     target_qt_dir, qt_dir, platform_tag, macos_thin_arch,
                     ignore_missing, skip_files=skip_files)
 
-        # Bundle any plugins.  We haven't done the analysis of which plugins
-        # belong to which package so we assume that only the QtCore package
-        # will specify any to exclude and we bundle all of them with that.
+        # If any excluded plugins have been specified then assume we should
+        # bundle the rest.
         if self._excluded_plugins is not None:
             self._bundle_nondebug('plugins', target_qt_dir, qt_dir,
                     platform_tag, macos_thin_arch, ignore_missing,
                     skip_files=skip_files, exclude=self._excluded_plugins)
 
+        # Bundle any explicitly included plugins.  Note that it makes no sense
+        # to specify excluded and included plugins for the same module.
+        if self._included_plugins is not None:
+            for plugin_subdir, plugin in self._included_plugins:
+                plugin_impl = self._impl_from_plugin(plugin, platform_tag)
+                self._bundle_file(
+                        os.path.join('plugins', plugin_subdir, plugin_impl),
+                        target_qt_dir, qt_dir, platform_tag, macos_thin_arch,
+                        ignore_missing, skip_files=skip_files)
+
         # Bundle any translations:
         if self._translations:
             target_tr_dir = os.path.join(target_qt_dir, 'translations')
@@ -208,6 +220,9 @@
         version.
         """
 
+        if self._until_version is not None and qt_version >= 
self._until_version:
+            return False
+
         return self._version is None or qt_version >= self._version
 
     @classmethod
@@ -220,23 +235,31 @@
 
         for dirpath, dirnames, filenames in os.walk(os.path.join(qt_dir, 
src_dir)):
             for ignore in exclude:
-                try:
+                if ignore in dirnames:
+                    verbose(f"Excluding {ignore} plugin directory.")
                     dirnames.remove(ignore)
-                except ValueError:
-                    pass
 
             for name in list(dirnames):
                 if cls._is_debug(name, platform_tag):
+                    verbose(f"Excluding {name} plugin directory.")
                     dirnames.remove(name)
 
             for name in filenames:
                 if cls._is_debug(name, platform_tag):
                     continue
 
-                cls._bundle_file(
-                        os.path.relpath(os.path.join(dirpath, name), qt_dir),
-                        target_qt_dir, qt_dir, platform_tag, macos_thin_arch,
-                        ignore_missing, skip_files=skip_files)
+                for ignore in exclude:
+                    plugin = cls._impl_from_plugin(ignore, platform_tag)
+                    if plugin == name:
+                        verbose(f"Excluding {ignore} plugin.")
+                        break
+                else:
+                    cls._bundle_file(
+                            os.path.relpath(
+                                    os.path.join(dirpath, name), qt_dir),
+                            target_qt_dir, qt_dir, platform_tag,
+                            macos_thin_arch, ignore_missing,
+                            skip_files=skip_files)
 
     @classmethod
     def _bundle_exe(cls, name, target_qt_dir, qt_dir, qt_version, platform_tag,
@@ -426,6 +449,19 @@
             return 'Qt{}{}.dll'.format(qt_major, name[2:])
 
     @classmethod
+    def _impl_from_plugin(cls, name, platform_tag):
+        """ Return the architecture-specific name of a plugin. """
+
+        if cls._is_platform('linux', platform_tag):
+            return 'lib{}.so'.format(name)
+
+        if cls._is_platform('macos', platform_tag):
+            return 'lib{}.dylib'.format(name)
+
+        if cls._is_platform('win', platform_tag):
+            return name + '.dll'
+
+    @classmethod
     def _is_debug(cls, name, platform_tag):
         """ Return True if a name implies a debug version. """
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt_builder-1.19.1/pyqtbuild/bundle/qt_wheel.py 
new/pyqt_builder-1.20.1/pyqtbuild/bundle/qt_wheel.py
--- old/pyqt_builder-1.19.1/pyqtbuild/bundle/qt_wheel.py        2025-12-05 
14:55:46.000000000 +0100
+++ new/pyqt_builder-1.20.1/pyqtbuild/bundle/qt_wheel.py        2026-10-16 
15:48:31.699053800 +0200
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: BSD-2-Clause
 
-# Copyright (c) 2025 Phil Thompson <[email protected]>
+# Copyright (c) 2026 Phil Thompson <[email protected]>
 
 
 import os
@@ -14,7 +14,7 @@
 
 
 def qt_wheel(package, qt_dir, build_tag, suffix, msvc_runtime, openssl,
-        openssl_dir, exclude, arch, subwheel):
+        openssl_dir, exclude, arch, subwheel, package_version):
     """ Create a wheel containing the subset of a Qt installation required for
     a particular PyQt package.
     """
@@ -37,6 +37,10 @@
     if suffix:
         version_str += suffix
 
+    # The package version defaults to the Qt version.
+    if not package_version:
+        package_version = version_str
+
     # Construct the tag.
     qt_arch = os.path.basename(qt_dir)
 
@@ -112,7 +116,7 @@
 
     # Construct the name of the wheel.
     name_parts = [package_full_name.replace('-', '_').lower()]
-    name_parts.append(version_str)
+    name_parts.append(package_version)
 
     distinfo_dir = '-'.join(name_parts) + '.dist-info'
 
@@ -161,7 +165,7 @@
             metadata = metadata.replace('@RB_PACKAGE_NAME@', package_full_name)
             metadata = metadata.replace('@RB_PACKAGE_REQUIRES@',
                     package_requires)
-            metadata = metadata.replace('@RB_VERSION@', version_str)
+            metadata = metadata.replace('@RB_VERSION@', package_version)
             metadata = metadata.replace('@RB_LICENSE@',
                     "LGPL v3" if lgpl else "GPL v3")
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyqt_builder-1.19.1/pyqtbuild/bundle/qt_wheel_main.py 
new/pyqt_builder-1.20.1/pyqtbuild/bundle/qt_wheel_main.py
--- old/pyqt_builder-1.19.1/pyqtbuild/bundle/qt_wheel_main.py   2024-12-18 
17:51:37.000000000 +0100
+++ new/pyqt_builder-1.20.1/pyqtbuild/bundle/qt_wheel_main.py   2026-10-16 
15:48:31.699438600 +0200
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: BSD-2-Clause
 
-# Copyright (c) 2024 Phil Thompson <[email protected]>
+# Copyright (c) 2026 Phil Thompson <[email protected]>
 
 
 from argparse import ArgumentParser
@@ -49,6 +49,9 @@
     parser.add_argument('--openssl-dir', metavar='DIR',
             help="replace the OpenSSL DLLs with the versions in DIR")
 
+    parser.add_argument('--package-version', metavar='VERSION',
+            help="use VERSION in the wheel name instead of the Qt version")
+
     parser.add_argument('--qt-dir', metavar='DIR', required=True,
             help="the Qt installation in DIR to be copied to the wheel")
 
@@ -85,7 +88,7 @@
                 build_tag=args.build_tag, suffix=args.suffix,
                 msvc_runtime=args.msvc_runtime, openssl=args.openssl,
                 openssl_dir=args.openssl_dir, exclude=args.exclude, arch=arch,
-                subwheel=subwheel)
+                subwheel=subwheel, package_version=args.package_version)
     except Exception as e:
         handle_exception(e)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyqt_builder-1.19.1/pyqtbuild/project.py 
new/pyqt_builder-1.20.1/pyqtbuild/project.py
--- old/pyqt_builder-1.19.1/pyqtbuild/project.py        2024-12-18 
17:51:37.000000000 +0100
+++ new/pyqt_builder-1.20.1/pyqtbuild/project.py        2026-10-04 
13:04:08.001976300 +0200
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: BSD-2-Clause
 
-# Copyright (c) 2024 Phil Thompson <[email protected]>
+# Copyright (c) 2026 Phil Thompson <[email protected]>
 
 
 import os
@@ -192,3 +192,12 @@
                 metavar="DIR", tools=['wheel']))
 
         return options
+
+    def get_version_tag(self):
+        """ Return the version tag (ie. a '_' separated 3-tuple version number)
+        to be used in the default tags.  This allows a project to use a version
+        tag that is not based on the Qt version number.
+        """
+
+        # The default is the version tag provided by the builder.
+        return self.builder.qt_version_tag

Reply via email to