Sync from SUSE:SLFO:Main python-PyQt6 revision 68441506b352fb990b3a5dce5f677b88

This commit is contained in:
2025-04-29 12:55:21 +02:00
parent eb559dc642
commit c156306198
4 changed files with 108 additions and 19 deletions

4
_multibuild Normal file
View File

@@ -0,0 +1,4 @@
<multibuild>
<flavor>qt6pdf</flavor>
</multibuild>

View File

@@ -0,0 +1,14 @@
Index: pyqt6-6.8.1/project.py
===================================================================
--- pyqt6-6.8.1.orig/project.py
+++ pyqt6-6.8.1/project.py
@@ -180,7 +180,8 @@ del find_qt
'win32': 'Windows',
}
- self.bindings['QtCore'].tags.append(
+ if QtCore in self.bindings:
+ self.bindings['QtCore'].tags.append(
platform_tags_map.get(self.py_platform, 'Linux'))
# Make sure the bindings are buildable.

View File

@@ -1,3 +1,14 @@
-------------------------------------------------------------------
Fri Apr 25 07:44:03 UTC 2025 - Antonio Larrosa <alarrosa@suse.com>
- Split the package to build the Qt6Pdf bindings as a separate
flavor. This allows to build most of the bindings in SLFO but
only build the Qt6Pdf bindings (which need qt6-webengine) in
Backports.
- Add patch to allow building only the Qt6Pdf bindings without
having to build Qt6Core too:
* fix-build-without-qtcore.patch
-------------------------------------------------------------------
Thu Apr 3 17:05:34 UTC 2025 - Ben Greiner <code@bnavigator.de>

View File

@@ -19,8 +19,27 @@
%define plainpython python
%define mname PyQt6
%define pyqt_build_for_qt6 1
%global flavor @BUILD_FLAVOR@%{nil}
%if "%{flavor}" == "qt6pdf"
%define pkg_suffix -qt6pdf
%bcond_without qt6pdf
%if (0%{?suse_version} == 1600 && !0%{?is_opensuse}) || 0%{?suse_version} < 1600
# SLFO and SLE15 don't have cmake(Qt6Pdf)
ExclusiveArch: do_not_build
%endif
%ifnarch aarch64 x86_64 riscv64
# qt6-pdf-devel is built in qt6-webengine with ExclusiveArch
ExclusiveArch: do_not_build
%endif
%else
%bcond_with qt6pdf
%endif
%{?sle15_python_module_pythons}
Name: python-%{mname}
Name: python-%{mname}%{?pkg_suffix}
Version: 6.8.1
Release: 0
Summary: Python bindings for Qt 6
@@ -34,6 +53,8 @@ Patch0: disable-rpaths.diff
Patch1: 0001-Use-a-noarch-wrapper-for-dbus-mainloop-integration.patch
# PATCH-FIX-UPSTREAM PyQt6-Qt6.9.0.patch -- this is basically 6.9.0.dev2504021615 without the version bump
Patch2: PyQt6-Qt6.9.0.patch
# PATCH-FIX-UPSTREAM fix-build-without-qtcore.patch -- Allow building only the Qt6Pdf bindings
Patch3: fix-build-without-qtcore.patch
BuildRequires: %{python_module PyQt6-sip >= 13.8}
BuildRequires: %{python_module dbus-python-devel >= 0.8}
BuildRequires: %{python_module devel >= 3.9}
@@ -47,6 +68,11 @@ BuildRequires: python-pyqt-rpm-macros
BuildRequires: python-rpm-macros
BuildRequires: qt6-base-devel
BuildRequires: qt6-macros
%if %{with qt6pdf}
BuildRequires: cmake(Qt6Pdf)
BuildRequires: cmake(Qt6PdfWidgets)
BuildRequires: %{python_module PyQt6-devel}
%else
BuildRequires: cmake(Qt6Bluetooth)
BuildRequires: cmake(Qt6Designer)
BuildRequires: cmake(Qt6DBus)
@@ -57,14 +83,6 @@ BuildRequires: cmake(Qt6Network)
BuildRequires: cmake(Qt6Nfc)
BuildRequires: cmake(Qt6OpenGL)
BuildRequires: cmake(Qt6OpenGLWidgets)
%if %{?suse_version} >= 1550
# no pdf headers in 15.X
%ifarch aarch64 x86_64 riscv64
# qt6-pdf-devel is built in qt6-webengine with ExclusiveArch
BuildRequires: cmake(Qt6Pdf)
BuildRequires: cmake(Qt6PdfWidgets)
%endif
%endif
BuildRequires: cmake(Qt6Positioning)
BuildRequires: cmake(Qt6PrintSupport)
BuildRequires: cmake(Qt6Qml)
@@ -80,6 +98,7 @@ BuildRequires: cmake(Qt6SerialPort)
%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 155000
BuildRequires: cmake(Qt6SpatialAudio)
%endif
BuildRequires: cmake(Qt6StateMachine)
BuildRequires: cmake(Qt6Sql)
BuildRequires: cmake(Qt6Svg)
BuildRequires: cmake(Qt6SvgWidgets)
@@ -91,9 +110,15 @@ BuildRequires: cmake(Qt6WebChannel)
BuildRequires: cmake(Qt6WebSockets)
BuildRequires: cmake(Qt6Widgets)
BuildRequires: cmake(Qt6Xml)
%endif
Requires: python-PyQt6-sip >= %(rpm -q --whatprovides python-PyQt6-sip --qf "%%{version}")
Requires: python-dbus-python >= %(rpm -q --whatprovides python-dbus-python --qf "%%{version}")
%if %{with qt6pdf}
Requires: python-PyQt6
%else
Recommends: python-PyQt6-qt6pdf
Provides: python-qt6 = %{version}-%{release}
%endif
%python_subpackages
%description
@@ -107,6 +132,10 @@ Requires: python-dbus-python-devel >= 0.8
Requires: python-devel
Requires: qt6-base-devel
Requires: qt6-macros
%if %{with qt6pdf}
Requires: cmake(Qt6Pdf)
Requires: cmake(Qt6PdfWidgets)
%else
Requires: cmake(Qt6Bluetooth)
Requires: cmake(Qt6Designer)
Requires: cmake(Qt6DBus)
@@ -117,14 +146,6 @@ Requires: cmake(Qt6Network)
Requires: cmake(Qt6Nfc)
Requires: cmake(Qt6OpenGL)
Requires: cmake(Qt6OpenGLWidgets)
%if %{?suse_version} >= 1550
# no pdf headers in 15.X
%ifarch aarch64 x86_64 riscv64
# qt6-pdf-devel is built in qt6-webengine with ExclusiveArch
Requires: cmake(Qt6Pdf)
Requires: cmake(Qt6PdfWidgets)
%endif
%endif
Requires: cmake(Qt6Positioning)
Requires: cmake(Qt6PrintSupport)
Requires: cmake(Qt6Qml)
@@ -151,14 +172,19 @@ Requires: cmake(Qt6WebChannel)
Requires: cmake(Qt6WebSockets)
Requires: cmake(Qt6Widgets)
Requires: cmake(Qt6Xml)
%endif
Requires: %plainpython(abi) = %{python_version}
Requires(post): update-alternatives
Requires(postun):update-alternatives
# If and which version of sip is required depends on the project trying
# to build against PyQt6.
%if %{with qt6pdf}
Requires: python-PyQt6-devel
%else
Recommends: python-sip-devel
Recommends: python-qscintilla-qt6
Provides: python-qt6-devel = %{version}-%{release}
%endif
%description devel
PyQt is a set of Python bindings for the Qt framework.
@@ -189,17 +215,42 @@ dos2unix examples/multimedia*/*/*.ui
-s %{quote:--pep484-pyi \
--confirm-license \
--qt-shared \
--qmake-setting 'QMAKE_CXXFLAGS_RELEASE=%{optflags} -DQT_NO_INT128'}}
--qmake-setting 'QMAKE_CXXFLAGS_RELEASE=%{optflags} -DQT_NO_INT128'\
%if %{with qt6pdf}
--enable QtPdf \
%endif
%{nil}
}}
%install
%pyqt_install
%if %{without qt6pdf}
%pyqt_install_examples %mname
%python_clone -a %{buildroot}%{_bindir}/pyuic6
%python_clone -a %{buildroot}%{_bindir}/pylupdate6
%else
# We have to remove installed files that aren't part of qt6pdf
rm %{buildroot}%{_bindir}/pyuic6 \
%{buildroot}%{_bindir}/pylupdate6
rm -Rf %{buildroot}%{_qt6_datadir}/qsci
%{python_expand
rm -Rf %{buildroot}%{$python_sitelib}/dbus \
%{buildroot}%{$python_sitearch}/PyQt6/uic \
%{buildroot}%{$python_sitearch}/PyQt6/lupdate \
%{buildroot}%{$python_sitearch}/PyQt6-%{version}.dist-info
rm %{buildroot}%{$python_sitearch}/PyQt6/__init__.py \
%{buildroot}%{$python_sitearch}/PyQt6/dbus_mainloop.abi3.so \
%{buildroot}%{$python_sitearch}/PyQt6/py.typed \
%{buildroot}%{$python_sitearch}/PyQt6/sip.pyi
}
%endif
%python_expand %fdupes %{buildroot}%{$python_sitearch}
%if %{without qt6pdf}
%check
export PYTHONDONTWRITEBYTECODE=1 # boo#1047218
%{python_expand # there is no test suite. If it compiles and imports, it should be okay.
@@ -213,8 +264,11 @@ $python -c 'from PyQt6 import QtCore; assert QtCore.PYQT_VERSION_STR == "%{versi
%postun devel
%python_uninstall_alternative pyuic6
%endif
%files %{python_files}
%license LICENSE
%if %{without qt6pdf}
%doc README.md NEWS ChangeLog
%{python_sitearch}/PyQt6/
%{python_sitearch}/PyQt6-%{version}.dist-info/
@@ -224,9 +278,15 @@ $python -c 'from PyQt6 import QtCore; assert QtCore.PYQT_VERSION_STR == "%{versi
%dir %{_qt6_pluginsdir}/PyQt6/
%{_qt6_pluginsdir}/PyQt6/libpy%{python_bin_suffix}qt6qmlplugin.so
%exclude %pyqt6_sipdir
%exclude %{python_sitearch}/PyQt6/QtPdf.*
%else
%{python_sitearch}/PyQt6/QtPdf.*
%endif
%files %{python_files devel}
%license LICENSE
%pyqt6_sipdir
%if %{without qt6pdf}
%python_alternative %{_bindir}/pyuic6
%python_alternative %{_bindir}/pylupdate6
%dir %{_qt6_pluginsdir}/designer/
@@ -235,7 +295,6 @@ $python -c 'from PyQt6 import QtCore; assert QtCore.PYQT_VERSION_STR == "%{versi
%dir %{_qt6_datadir}/qsci/api/
%dir %{_qt6_datadir}/qsci/api/python_%{python_bin_suffix}/
%{_qt6_datadir}/qsci/api/python_%{python_bin_suffix}/PyQt6.api
%pyqt6_sipdir
%files %{python_files doc}
%license LICENSE
@@ -243,5 +302,6 @@ $python -c 'from PyQt6 import QtCore; assert QtCore.PYQT_VERSION_STR == "%{versi
%exclude %{_docdir}/%{python_prefix}-%{mname}/README.md
%exclude %{_docdir}/%{python_prefix}-%{mname}/NEWS
%exclude %{_docdir}/%{python_prefix}-%{mname}/ChangeLog
%endif
%changelog