[neon/forks/pyqt-builder/Neon/release] /: New upstream version 1.17.0+dfsg

Dmitry Shachnev null at kde.org
Wed Dec 3 06:33:47 GMT 2025


Git commit 772c39543d5937366418d7f0eb59e185b83b0023 by Dmitry Shachnev.
Committed on 08/12/2024 at 15:40.
Pushed by carlosdem into branch 'Neon/release'.

New upstream version 1.17.0+dfsg

M  +1    -1    docs/conf.py
M  +26   -0    docs/releases.md
M  +12   -4    pyqtbuild/builder.py
M  +1    -0    pyqtbuild/bundle/packages/__init__.py
M  +0    -1    pyqtbuild/bundle/packages/pyqt3d.py
M  +14   -21   pyqtbuild/bundle/packages/pyqt5.py
M  +80   -31   pyqtbuild/bundle/packages/pyqt6.py
M  +0    -1    pyqtbuild/bundle/packages/pyqt6_3d.py
M  +2    -2    pyqtbuild/bundle/packages/pyqt6_charts.py
M  +2    -2    pyqtbuild/bundle/packages/pyqt6_datavisualization.py
C  +7    -4    pyqtbuild/bundle/packages/pyqt6_graphs.py [from: pyqtbuild/bundle/packages/pyqtchart.py - 065% similarity]
M  +1    -1    pyqtbuild/bundle/packages/pyqt6_webengine.py
M  +1    -1    pyqtbuild/bundle/packages/pyqtchart.py
M  +1    -1    pyqtbuild/bundle/packages/pyqtdatavisualization.py
M  +1    -1    pyqtbuild/bundle/packages/pyqtpurchasing.py
M  +1    -1    pyqtbuild/bundle/packages/pyqtwebengine.py
M  +15   -15   pyqtbuild/bundle/qt_metadata.py
M  +7    -1    pyqtbuild/bundle/qt_wheel.py
M  +17   -13   pyqtbuild/project.py

https://invent.kde.org/neon/forks/pyqt-builder/-/commit/772c39543d5937366418d7f0eb59e185b83b0023

diff --git a/docs/conf.py b/docs/conf.py
index fe8b564..2a405f1 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -13,7 +13,7 @@ project = 'PyQt-builder'
 copyright = '{0} Phil Thompson <phil at riverbankcomputing.com>'.format(
         date.today().year)
 author = 'Phil Thompson'
-version = 'v1.16.4'
+version = 'v1.17.0'
 
 
 # -- General configuration ---------------------------------------------------
diff --git a/docs/releases.md b/docs/releases.md
index 7c2ceff..554a8e2 100644
--- a/docs/releases.md
+++ b/docs/releases.md
@@ -1,6 +1,32 @@
 # Release Notes
 
 
+## v1.17.0
+
+### Added support for Qt v6.8
+
+- Added support for the QtGraphs module.
+- Linux wheels now require GLIBC v2.35 (eg. Ubuntu 22.04) on Intel and v2.39
+  (eg. Ubuntu 24.04) on Arm.
+
+Resolves [#16](https://github.com/Python-PyQt/PyQt-builder/issues/16)
+
+### Re-signing of bundled macOS Qt dynamic libraries
+
+Prior to Qt v6.8 the macOS dynamic libraries were not signed.  They are
+signed in v6.8 and the signature becomes invalid when `lipo` is used to
+extract the individual architecture-specific libraries (which is done to
+produce smaller wheels). The individual architecture-specific libraries are
+now re-signed by `pyqt-bundle`.
+
+Resolves [#21](https://github.com/Python-PyQt/PyQt-builder/issues/21)
+
+### Python shared library name on macOS incorrect
+
+The name of the Python shared library on macOS was incorrect which broke
+PyQt's `qmlscene` and `Designer` plugins.
+
+
 ## v1.16.4
 
 ### Support for Windows on Arm for Qt6
diff --git a/pyqtbuild/builder.py b/pyqtbuild/builder.py
index 502d139..1cd0eb3 100644
--- a/pyqtbuild/builder.py
+++ b/pyqtbuild/builder.py
@@ -5,7 +5,6 @@
 
 import os
 import sys
-import sysconfig
 
 from sipbuild import (Buildable, BuildableModule, Builder, Option, Project,
         PyProjectOptionException, UserException)
@@ -98,10 +97,19 @@ class QmakeBuilder(Builder):
             # Set the default minimum GLIBC version.  This is actually a
             # function of the build platform and it should really be determined
             # by inspecting the compiled extension module.  These defaults
-            # reflect the minimum versions provided by the supported Qt
-            # platforms at any particular time.
+            # reflect the minimum versions required by the Qt online installer
+            # for a particular version.
             if not project.minimum_glibc_version:
-                if self.qt_version >= 0x060000:
+                if self.qt_version >= 0x060800:
+                    from platform import processor
+
+                    # The arm64 build is based on Ubuntu 24.04 rather than
+                    # 22.04.
+                    if processor() == 'aarch64':
+                        project.minimum_glibc_version = '2.39'
+                    else:
+                        project.minimum_glibc_version = '2.35'
+                elif self.qt_version >= 0x060000:
                     project.minimum_glibc_version = '2.28'
                 else:
                     project.minimum_glibc_version = '2.17'
diff --git a/pyqtbuild/bundle/packages/__init__.py b/pyqtbuild/bundle/packages/__init__.py
index 48f61b9..af9f889 100644
--- a/pyqtbuild/bundle/packages/__init__.py
+++ b/pyqtbuild/bundle/packages/__init__.py
@@ -8,6 +8,7 @@ from .pyqt6 import PyQt6
 from .pyqt6_3d import PyQt6_3D
 from .pyqt6_charts import PyQt6_Charts
 from .pyqt6_datavisualization import PyQt6_DataVisualization
+from .pyqt6_graphs import PyQt6_Graphs
 from .pyqt6_networkauth import PyQt6_NetworkAuth
 from .pyqt6_webengine import PyQt6_WebEngine
 
diff --git a/pyqtbuild/bundle/packages/pyqt3d.py b/pyqtbuild/bundle/packages/pyqt3d.py
index 71a6237..c892a0e 100755
--- a/pyqtbuild/bundle/packages/pyqt3d.py
+++ b/pyqtbuild/bundle/packages/pyqt3d.py
@@ -16,7 +16,6 @@ _QT_METADATA = {
     'Qt3DCore':
         VersionedMetadata(
             lib_deps={'': ('Qt3DQuick', )},
-            qml=True,
             qml_names=('Qt3D', )),
 
     'Qt3DExtras':
diff --git a/pyqtbuild/bundle/packages/pyqt5.py b/pyqtbuild/bundle/packages/pyqt5.py
index 718dac1..f00ba50 100644
--- a/pyqtbuild/bundle/packages/pyqt5.py
+++ b/pyqtbuild/bundle/packages/pyqt5.py
@@ -27,7 +27,7 @@ _QT_METADATA = {
             lib_deps={
                 'linux': ('QtConcurrent', ),
                 'macos': ('QtConcurrent', )},
-            qml=True),
+            ),
 
     'QtCore':
         VersionedMetadata(
@@ -60,9 +60,7 @@ _QT_METADATA = {
         VersionedMetadata(),
 
     'QtLocation':
-        VersionedMetadata(
-            lib_deps={'': ('QtPositioningQuick', )},
-            qml=True),
+        VersionedMetadata(lib_deps={'': ('QtPositioningQuick', )}),
 
     'QtMacExtras':
         VersionedMetadata(),
@@ -73,7 +71,7 @@ _QT_METADATA = {
                 '': ('QtMultimediaQuick', ),
                 'linux': ('QtMultimediaGstTools', )
             },
-            qml=True, qml_names=('QtAudioEngine', 'QtMultimedia')),
+            qml_names=('QtAudioEngine', 'QtMultimedia')),
 
     'QtMultimediaWidgets':
         VersionedMetadata(),
@@ -85,27 +83,24 @@ _QT_METADATA = {
         VersionedMetadata(legacy=True),
 
     'QtNfc':
-        VersionedMetadata(qml=True),
+        VersionedMetadata(),
 
     'QtOpenGL':
         VersionedMetadata(),
 
     'QtPositioning':
-        VersionedMetadata(qml=True),
+        VersionedMetadata(),
 
     'QtPrintSupport':
         VersionedMetadata(),
 
     'QtQml':
-        VersionedMetadata(
-            lib_deps={'': ('QtQmlModels', 'QtQmlWorkerScript')},
-            qml=True),
+        VersionedMetadata(lib_deps={'': ('QtQmlModels', 'QtQmlWorkerScript')}),
 
     'QtQuick':
         VersionedMetadata(
             lib_deps={'': ('QtQuickControls2', 'QtQuickParticles',
                     'QtQuickShapes', 'QtQuickTemplates2', 'QtQuickTest')},
-            qml=True,
             qml_names=('QtCanvas3D', 'QtGraphicalEffects', 'QtQuick',
                     'QtQuick.2')),
 
@@ -114,16 +109,16 @@ _QT_METADATA = {
             lib_deps={
                     '': ('QtQuick3DAssetImport', 'QtQuick3DRender',
                             'QtQuick3DRuntimeRender', 'QtQuick3DUtils')},
-            qml=True),
+            ),
 
     'QtQuickWidgets':
         VersionedMetadata(),
 
     'QtRemoteObjects':
-        VersionedMetadata(qml=True),
+        VersionedMetadata(),
 
     'QtSensors':
-        VersionedMetadata(qml=True),
+        VersionedMetadata(),
 
     'QtSerialPort':
         VersionedMetadata(),
@@ -135,19 +130,19 @@ _QT_METADATA = {
         VersionedMetadata(),
 
     'QtTest':
-        VersionedMetadata(qml=True),
+        VersionedMetadata(),
 
     'QtTextToSpeech':
         VersionedMetadata(),
 
     'QtWebChannel':
-        VersionedMetadata(qml=True),
+        VersionedMetadata(),
 
     'QtWebSockets':
-        VersionedMetadata(qml=True),
+        VersionedMetadata(),
 
     'QtWebView':
-        VersionedMetadata(qml=True),
+        VersionedMetadata(),
 
     'QtWidgets':
         VersionedMetadata(),
@@ -162,9 +157,7 @@ _QT_METADATA = {
         VersionedMetadata(),
 
     'QtXmlPatterns':
-        VersionedMetadata(
-            qml=True,
-            qml_names=('Qt', )),
+        VersionedMetadata(qml_names=('Qt', )),
 }
 
 
diff --git a/pyqtbuild/bundle/packages/pyqt6.py b/pyqtbuild/bundle/packages/pyqt6.py
index 33cfcfb..4525a0b 100644
--- a/pyqtbuild/bundle/packages/pyqt6.py
+++ b/pyqtbuild/bundle/packages/pyqt6.py
@@ -14,7 +14,7 @@ _QT_METADATA = {
         VersionedMetadata(dll=False),
 
     'QtBluetooth':
-        VersionedMetadata(version=(6, 2, 0), qml=True),
+        VersionedMetadata(version=(6, 2, 0)),
 
     'QtCore': (
         VersionedMetadata(version=(6, 7, 0),
@@ -63,9 +63,19 @@ _QT_METADATA = {
         VersionedMetadata(),
 
     #'QtLocation':
-    #    VersionedMetadata(qml=True),
+    #    VersionedMetadata(),
 
     'QtMultimedia': (
+        VersionedMetadata(version=(6, 8, 0),
+                lib_deps={'': ('QtMultimediaQuick', )},
+                other_lib_deps={
+                    '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={
@@ -75,17 +85,17 @@ _QT_METADATA = {
                     'win': ('avcodec-60.dll', 'avformat-60.dll',
                             'avutil-58.dll', 'swresample-4.dll',
                             'swscale-7.dll')},
-                qml=True),
+                ),
         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')},
-                qml=True),
+                ),
         VersionedMetadata(version=(6, 2, 0),
                 lib_deps={'': ('QtMultimediaQuick', )},
-                qml=True)),
+                )),
 
     'QtMultimediaWidgets':
         VersionedMetadata(version=(6, 2, 0)),
@@ -94,7 +104,7 @@ _QT_METADATA = {
         VersionedMetadata(),
 
     'QtNfc':
-        VersionedMetadata(version=(6, 2, 0), qml=True),
+        VersionedMetadata(version=(6, 2, 0)),
 
     'QtOpenGL':
         VersionedMetadata(),
@@ -112,23 +122,51 @@ _QT_METADATA = {
     'QtPositioning':
         VersionedMetadata(version=(6, 2, 0),
                 lib_deps={'': ('QtPositioningQuick', )},
-                qml=True),
+                ),
 
     'QtPrintSupport':
         VersionedMetadata(),
 
     'QtQml': (
+        VersionedMetadata(version=(6, 8, 0),
+                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')},
-                qml=True),
+                ),
         VersionedMetadata(
                 lib_deps={'': ('QtQmlModels', 'QtQmlWorkerScript')},
-                qml=True)),
+                )),
 
     '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')},
+                ),
         VersionedMetadata(version=(6, 7, 0),
                 lib_deps={'': ('QtQuickControls2', 'QtQuickControls2Basic',
                         'QtQuickControls2BasicStyleImpl',
@@ -144,11 +182,12 @@ _QT_METADATA = {
                         'QtQuickControls2Universal',
                         'QtQuickControls2UniversalStyleImpl',
                         'QtQuickDialogs2', 'QtQuickDialogs2QuickImpl',
-                        'QtQuickDialogs2Utils', 'QtQuickLayouts',
+                        'QtQuickDialogs2Utils', 'QtQuickEffects',
+                        'QtQuickLayouts',
                         'QtQuickParticles', 'QtQuickShapes',
                         'QtQuickTemplates2', 'QtQuickTest',
                         'QtQuickTimeline', 'QtQuickTimelineBlendTrees')},
-                qml=True),
+                ),
         VersionedMetadata(version=(6, 6, 3),
                 lib_deps={'': ('QtQuickControls2', 'QtQuickControls2Basic',
                         'QtQuickControls2BasicStyleImpl',
@@ -166,7 +205,7 @@ _QT_METADATA = {
                         'QtQuickParticles', 'QtQuickShapes',
                         'QtQuickTemplates2', 'QtQuickTest',
                         'QtQuickTimeline')},
-                qml=True),
+                ),
         VersionedMetadata(version=(6, 2, 0),
                 lib_deps={'': ('QtQuickControls2', 'QtQuickControls2Impl',
                         'QtQuickDialogs2', 'QtQuickDialogs2QuickImpl',
@@ -174,24 +213,34 @@ _QT_METADATA = {
                         'QtQuickParticles', 'QtQuickShapes',
                         'QtQuickTemplates2', 'QtQuickTest',
                         'QtQuickTimeline')},
-                qml=True),
+                ),
         VersionedMetadata(
                 lib_deps={'': ('QtQuickControls2', 'QtQuickControls2Impl',
                         'QtQuickLayouts', 'QtQuickParticles', 'QtQuickShapes',
                         'QtQuickTemplates2', 'QtQuickTest')},
-                qml=True)),
+                )),
 
     'QtQuick3D': (
+        VersionedMetadata(version=(6, 8, 0),
+                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',
-                        'QtQuick3DHelpers', 'QtQuick3DHelpersImpl',
-                        'QtQuick3DIblBaker', 'QtQuick3DParticles',
-                        'QtQuick3DPhysics', 'QtQuick3DPhysicsHelpers',
-                        'QtQuick3DRuntimeRender', 'QtQuick3DUtils',
-                        'QtShaderTools')},
-                qml=True),
+                        'QtQuick3DGlslParser', 'QtQuick3DHelpers',
+                        'QtQuick3DHelpersImpl', 'QtQuick3DIblBaker',
+                        'QtQuick3DParticles', 'QtQuick3DPhysics',
+                        'QtQuick3DPhysicsHelpers', 'QtQuick3DRuntimeRender',
+                        'QtQuick3DUtils', 'QtShaderTools')},
+                ),
         VersionedMetadata(version=(6, 6, 0),
                 lib_deps={
                         '': ('QtConcurrent', 'QtQuick3DAssetImport',
@@ -200,7 +249,7 @@ _QT_METADATA = {
                         'QtQuick3DParticles', 'QtQuick3DPhysics',
                         'QtQuick3DPhysicsHelpers', 'QtQuick3DRuntimeRender',
                         'QtQuick3DUtils', 'QtShaderTools')},
-                qml=True),
+                ),
         VersionedMetadata(version=(6, 4, 0),
                 lib_deps={
                         '': ('QtConcurrent', 'QtQuick3DAssetImport',
@@ -208,7 +257,7 @@ _QT_METADATA = {
                         'QtQuick3DHelpers', 'QtQuick3DIblBaker',
                         'QtQuick3DParticles', 'QtQuick3DRuntimeRender',
                         'QtQuick3DUtils', 'QtShaderTools')},
-                qml=True),
+                ),
         VersionedMetadata(version=(6, 1, 0),
                 lib_deps={
                         '': ('QtQuick3DAssetImport', 'QtQuick3DAssetUtils',
@@ -216,12 +265,12 @@ _QT_METADATA = {
                         'QtQuick3DIblBaker', 'QtQuick3DParticles',
                         'QtQuick3DRuntimeRender', 'QtQuick3DUtils',
                         'QtShaderTools')},
-                qml=True),
+                ),
         VersionedMetadata(
                 lib_deps={
                         '': ('QtQuick3DAssetImport', 'QtQuick3DRuntimeRender',
                         'QtQuick3DUtils', 'QtShaderTools')},
-                qml=True)),
+                )),
 
     'QtQuickWidgets':
         VersionedMetadata(),
@@ -229,12 +278,12 @@ _QT_METADATA = {
     'QtRemoteObjects':
         VersionedMetadata(version=(6, 2, 0),
                 lib_deps={'': ('QtRemoteObjectsQml', )},
-                qml=True),
+                ),
 
     'QtSensors':
         VersionedMetadata(version=(6, 2, 0),
                 lib_deps={'': ('QtSensorsQuick', )},
-                qml=True),
+                ),
 
     'QtSerialPort':
         VersionedMetadata(version=(6, 2, 0)),
@@ -253,20 +302,20 @@ _QT_METADATA = {
         VersionedMetadata(),
 
     'QtTest':
-        VersionedMetadata(qml=True),
+        VersionedMetadata(),
 
     'QtTextToSpeech':
-        VersionedMetadata(version=(6, 4, 0), qml=True),
+        VersionedMetadata(version=(6, 4, 0)),
 
     'QtWebChannel': (
         # The quick library may have been present from the start.
         VersionedMetadata(version=(6, 6, 0),
                 lib_deps={'': ('QtWebChannelQuick', )},
-                qml=True),
-        VersionedMetadata(version=(6, 2, 0), qml=True)),
+                ),
+        VersionedMetadata(version=(6, 2, 0))),
 
     'QtWebSockets':
-        VersionedMetadata(version=(6, 2, 0), qml=True),
+        VersionedMetadata(version=(6, 2, 0)),
 
     'QtWidgets':
         VersionedMetadata(),
diff --git a/pyqtbuild/bundle/packages/pyqt6_3d.py b/pyqtbuild/bundle/packages/pyqt6_3d.py
index 9a8cd00..db5cdc3 100755
--- a/pyqtbuild/bundle/packages/pyqt6_3d.py
+++ b/pyqtbuild/bundle/packages/pyqt6_3d.py
@@ -16,7 +16,6 @@ _QT_METADATA = {
     'Qt3DCore':
         VersionedMetadata(
             lib_deps={'': ('QtConcurrent', )},
-            qml=True,
             qml_names=('Qt3D', )),
 
     'Qt3DExtras':
diff --git a/pyqtbuild/bundle/packages/pyqt6_charts.py b/pyqtbuild/bundle/packages/pyqt6_charts.py
index cd39955..4dbb14b 100755
--- a/pyqtbuild/bundle/packages/pyqt6_charts.py
+++ b/pyqtbuild/bundle/packages/pyqt6_charts.py
@@ -13,8 +13,8 @@ _QT_METADATA = {
         # It's likely that the QML library was required from the start.
         VersionedMetadata(version=(6, 5, 0),
                 lib_deps={'': ('QtChartsQml', )},
-                qml=True, lgpl=False),
-        VersionedMetadata(version=(6, 1, 0), qml=True, lgpl=False))
+                lgpl=False),
+        VersionedMetadata(version=(6, 1, 0), lgpl=False))
 }
 
 
diff --git a/pyqtbuild/bundle/packages/pyqt6_datavisualization.py b/pyqtbuild/bundle/packages/pyqt6_datavisualization.py
index 4fbb2d8..a989c7e 100755
--- a/pyqtbuild/bundle/packages/pyqt6_datavisualization.py
+++ b/pyqtbuild/bundle/packages/pyqt6_datavisualization.py
@@ -13,8 +13,8 @@ _QT_METADATA = {
         # It's likely that the QML library was required from the start.
         VersionedMetadata(version=(6, 5, 0),
                 lib_deps={'': ('QtDataVisualizationQml', )},
-                qml=True, lgpl=False),
-        VersionedMetadata(version=(6, 1, 0), qml=True, lgpl=False))
+                lgpl=False),
+        VersionedMetadata(version=(6, 1, 0), lgpl=False))
 }
 
 
diff --git a/pyqtbuild/bundle/packages/pyqtchart.py b/pyqtbuild/bundle/packages/pyqt6_graphs.py
similarity index 65%
copy from pyqtbuild/bundle/packages/pyqtchart.py
copy to pyqtbuild/bundle/packages/pyqt6_graphs.py
index 90c5c01..7f4cf24 100755
--- a/pyqtbuild/bundle/packages/pyqtchart.py
+++ b/pyqtbuild/bundle/packages/pyqt6_graphs.py
@@ -9,13 +9,16 @@ from ..qt_metadata import VersionedMetadata
 
 # The Qt meta-data for this package.
 _QT_METADATA = {
-    'QtChart':
-        VersionedMetadata(name='QtCharts', qml=True, lgpl=False),
+    'QtGraphs':
+        VersionedMetadata(version=(6, 8, 0), lgpl=False),
+
+    'QtGraphsWidgets':
+        VersionedMetadata(version=(6, 8, 0), lgpl=False),
 }
 
 
-class PyQtChart(AbstractPackage):
-    """ The PyQtChart package. """
+class PyQt6_Graphs(AbstractPackage):
+    """ The PyQt6-Graphs package. """
 
     def get_qt_metadata(self):
         """ Return the package-specific meta-data describing the parts of Qt to
diff --git a/pyqtbuild/bundle/packages/pyqt6_webengine.py b/pyqtbuild/bundle/packages/pyqt6_webengine.py
index 1de6c9f..5f45f27 100755
--- a/pyqtbuild/bundle/packages/pyqt6_webengine.py
+++ b/pyqtbuild/bundle/packages/pyqt6_webengine.py
@@ -30,7 +30,7 @@ _QT_METADATA = {
     'QtWebEngineQuick':
         VersionedMetadata(version=(6, 2, 0),
             lib_deps={'': ('QtWebEngineQuickDelegatesQml', )},
-            qml=True, qml_names=['QtWebEngine']),
+            qml_names=['QtWebEngine']),
 
     'QtWebEngineWidgets':
         VersionedMetadata(version=(6, 2, 0)),
diff --git a/pyqtbuild/bundle/packages/pyqtchart.py b/pyqtbuild/bundle/packages/pyqtchart.py
index 90c5c01..f11dce9 100755
--- a/pyqtbuild/bundle/packages/pyqtchart.py
+++ b/pyqtbuild/bundle/packages/pyqtchart.py
@@ -10,7 +10,7 @@ from ..qt_metadata import VersionedMetadata
 # The Qt meta-data for this package.
 _QT_METADATA = {
     'QtChart':
-        VersionedMetadata(name='QtCharts', qml=True, lgpl=False),
+        VersionedMetadata(name='QtCharts', lgpl=False),
 }
 
 
diff --git a/pyqtbuild/bundle/packages/pyqtdatavisualization.py b/pyqtbuild/bundle/packages/pyqtdatavisualization.py
index 30b1d1c..f430683 100755
--- a/pyqtbuild/bundle/packages/pyqtdatavisualization.py
+++ b/pyqtbuild/bundle/packages/pyqtdatavisualization.py
@@ -10,7 +10,7 @@ from ..qt_metadata import VersionedMetadata
 # The Qt meta-data for this package.
 _QT_METADATA = {
     'QtDataVisualization':
-        VersionedMetadata(qml=True, lgpl=False),
+        VersionedMetadata(lgpl=False),
 }
 
 
diff --git a/pyqtbuild/bundle/packages/pyqtpurchasing.py b/pyqtbuild/bundle/packages/pyqtpurchasing.py
index 9f68cf9..4580d9b 100755
--- a/pyqtbuild/bundle/packages/pyqtpurchasing.py
+++ b/pyqtbuild/bundle/packages/pyqtpurchasing.py
@@ -10,7 +10,7 @@ from ..qt_metadata import VersionedMetadata
 # The Qt meta-data for this package.
 _QT_METADATA = {
     'QtPurchasing':
-        VersionedMetadata(qml=True),
+        VersionedMetadata(),
 }
 
 
diff --git a/pyqtbuild/bundle/packages/pyqtwebengine.py b/pyqtbuild/bundle/packages/pyqtwebengine.py
index f64fc67..d2307c1 100755
--- a/pyqtbuild/bundle/packages/pyqtwebengine.py
+++ b/pyqtbuild/bundle/packages/pyqtwebengine.py
@@ -10,7 +10,7 @@ from ..qt_metadata import VersionedMetadata
 # The Qt meta-data for this package.
 _QT_METADATA = {
     'QtWebEngine':
-        VersionedMetadata(qml=True, translations=('qtwebengine', )),
+        VersionedMetadata(translations=('qtwebengine', )),
 
     'QtWebEngineCore':
         VersionedMetadata(
diff --git a/pyqtbuild/bundle/qt_metadata.py b/pyqtbuild/bundle/qt_metadata.py
index 191189b..2e7a6fd 100644
--- a/pyqtbuild/bundle/qt_metadata.py
+++ b/pyqtbuild/bundle/qt_metadata.py
@@ -20,9 +20,8 @@ class VersionedMetadata:
 
     def __init__(self, *, version=None, name=None, lib_deps=None,
             other_lib_deps=None, exes=None, files=None, others=None, dll=True,
-            qml=False, qml_names=None, translations=None,
-            excluded_plugins=None, lgpl=True, legacy=False,
-            subwheel_files=None):
+            qml_names=None, translations=None, excluded_plugins=None,
+            lgpl=True, legacy=False, subwheel_files=None):
         """ Initialise the versioned bindings. """
 
         self._version = version
@@ -33,7 +32,6 @@ class VersionedMetadata:
         self._files = {} if files is None else files
         self._others = {} if others is None else others
         self._dll = dll
-        self._qml = qml
         self._qml_names = qml_names
         self._translations = () if translations is None else translations
         self._excluded_plugins = excluded_plugins
@@ -64,7 +62,7 @@ class VersionedMetadata:
                 raise UserException(
                         "'lipo' from Xcode must be installed on your system")
 
-            if macos_thin_arch == 'arm64' and AbstractPackage.missing_executable('codesign'):
+            if macos_thin_arch is not None and AbstractPackage.missing_executable('codesign'):
                 raise UserException(
                         "'codesign' from Xcode must be installed on your system")
         # Bundle any sub-wheel files.
@@ -158,15 +156,12 @@ class VersionedMetadata:
                             skip_files=skip_files)
 
         # Bundle any QML files.
-        if self._qml:
-            qml_names = self._qml_names
-            if qml_names is None:
-                qml_names = [self._name]
+        qml_names = self._qml_names if self._qml_names is not None else [self._name]
 
-            for qml_subdir in qml_names:
-                self._bundle_nondebug(os.path.join('qml', qml_subdir),
-                        target_qt_dir, qt_dir, platform_tag, macos_thin_arch,
-                        ignore_missing, skip_files=skip_files)
+        for qml_subdir in qml_names:
+            self._bundle_nondebug(os.path.join('qml', qml_subdir),
+                    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
@@ -288,6 +283,9 @@ class VersionedMetadata:
                 except:
                     # If there is any sort of error then just copy it.
                     shutil.copy2(src, dst)
+
+                subprocess.run(['codesign', '--force', '--sign', '-', dst],
+                        stderr=stderr, check=True)
             else:
                 shutil.copy2(src, dst)
         elif ignore_missing:
@@ -366,8 +364,10 @@ class VersionedMetadata:
         with open(exe, 'wb') as f:
             f.write(contents)
 
-        if macos_thin_arch == 'arm64':
-            subprocess.run(['codesign', '-s', '-', exe])
+        if macos_thin_arch is not None:
+            stderr = None if is_verbose() else subprocess.DEVNULL
+            subprocess.run(['codesign', '--force', '--sign', '-', exe],
+                    stderr=stderr, check=True)
 
     @classmethod
     def _fix_win_executable(cls, exe):
diff --git a/pyqtbuild/bundle/qt_wheel.py b/pyqtbuild/bundle/qt_wheel.py
index 2765537..ad18ca1 100644
--- a/pyqtbuild/bundle/qt_wheel.py
+++ b/pyqtbuild/bundle/qt_wheel.py
@@ -41,7 +41,13 @@ def qt_wheel(package, qt_dir, build_tag, suffix, msvc_runtime, openssl,
     qt_arch = os.path.basename(qt_dir)
 
     if qt_arch in ('gcc_64', 'gcc_arm64'):
-        manylinux = '_2_28' if package.qt_version[0] == 6 else '2014'
+        if package.qt_version >= (6, 8, 0):
+            manylinux = '_2_35' if qt_arch == 'gcc_64' else '_2_39'
+        elif package.qt_version >= (6, 0, 0):
+            manylinux = '_2_28'
+        else:
+            manylinux = '2014'
+
         wheel_arch = 'x86_64' if qt_arch == 'gcc_64' else 'aarch64'
         platform_tag = f'manylinux{manylinux}_{wheel_arch}'
 
diff --git a/pyqtbuild/project.py b/pyqtbuild/project.py
index e104fe3..ba1e54e 100644
--- a/pyqtbuild/project.py
+++ b/pyqtbuild/project.py
@@ -50,6 +50,9 @@ class PyQtProject(Project):
 
         super().apply_user_defaults(tool)
 
+        major = self.py_major_version
+        minor = self.py_minor_version
+
         # Get the details of the default Python interpreter library.  Note that
         # these are actually non-user options but we need the 'link_full_dll'
         # user option in order to set them.
@@ -60,18 +63,16 @@ class PyQtProject(Project):
 
             # See if we are using the limited API.
             if self.py_debug or self.link_full_dll:
-                pylib_lib = 'python{}{}{}'.format(self.py_major_version,
-                        self.py_minor_version, debug_suffix)
+                pylib_lib = f'python{major}{minor}{debug_suffix}'
             else:
-                pylib_lib = 'python{}{}'.format(self.py_major_version,
-                        debug_suffix)
+                pylib_lib = f'python{major}{debug_suffix}'
 
             # Assume Python is a DLL on Windows.
             pylib_shlib = pylib_lib
         else:
             abi = getattr(sys, 'abiflags', '')
-            pylib_lib = 'python{}.{}{}'.format(self.py_major_version,
-                    self.py_minor_version, abi)
+
+            pylib_lib = f'python{major}.{minor}{abi}'
             pylib_dir = pylib_shlib = ''
 
             # Get the additional configuration.
@@ -87,19 +88,22 @@ class PyQtProject(Project):
                 dynamic_pylib = '--enable-framework' in config_args
 
             if dynamic_pylib:
-                pylib_shlib = ducfg.get('LDLIBRARY', '')
-
                 exec_prefix = ducfg['exec_prefix']
                 multiarch = ducfg.get('MULTIARCH', '')
                 libdir = ducfg['LIBDIR']
 
-                if glob('{}/lib/libpython{}.{}*'.format(exec_prefix, self.py_major_version, self.py_minor_version)):
-                    pylib_dir = exec_prefix + '/lib'
-                elif multiarch != '' and glob('{}/lib/{}/libpython{}.{}*'.format(exec_prefix, multiarch, self.py_major_version, self.py_minor_version)):
-                    pylib_dir = exec_prefix + '/lib/' + multiarch
-                elif glob('{}/libpython{}.{}*'.format(libdir, self.py_major_version, self.py_minor_version)):
+                pattern = f'libpython{major}.{minor}*'
+
+                if glob(os.path.join(exec_prefix, 'lib', pattern)):
+                    pylib_dir = os.path.join(exec_prefix, 'lib')
+                elif multiarch != '' and glob(os.path.join(exec_prefix, 'lib', multiarch, pattern)):
+                    pylib_dir = os.path.join(exec_prefix, 'lib', multiarch)
+                elif glob(os.path.join(libdir, pattern)):
                     pylib_dir = libdir
 
+                if pylib_dir != '':
+                    pylib_shlib = os.path.join(pylib_dir, 'lib' + pylib_lib)
+
         # Apply the defaults if necessary.
         if self.py_pylib_dir == '':
             self.py_pylib_dir = pylib_dir



More information about the Neon-commits mailing list