diff --git a/_multibuild b/_multibuild
new file mode 100644
index 0000000..b2a7d62
--- /dev/null
+++ b/_multibuild
@@ -0,0 +1,4 @@
+
+ sle15_python_module
+
+
diff --git a/python3-pyside2.changes b/python3-pyside2.changes
index 2418b7c..3d2e1a2 100644
--- a/python3-pyside2.changes
+++ b/python3-pyside2.changes
@@ -1,3 +1,13 @@
+-------------------------------------------------------------------
+Fri Jan 26 14:34:01 UTC 2024 - Ben Greiner
+
+- Enable SLE15 python module for a more modern python than 3.6
+ * disambiguate multiple providers of cmake(Pyside2) with
+ pyside2_python_abi() provides
+- Use llvm14 for 15.6 in order to workaround PYSIDE-2288:
+ * Wrong type for QEvent::Type
+ * avoids patch like deb#1051886 for libqt5-qtbase
+
-------------------------------------------------------------------
Fri Jan 12 09:22:25 UTC 2024 - Antonio Larrosa
diff --git a/python3-pyside2.spec b/python3-pyside2.spec
index 28c13cf..2d91dc4 100644
--- a/python3-pyside2.spec
+++ b/python3-pyside2.spec
@@ -1,5 +1,5 @@
#
-# spec file for package python3-pyside2
+# spec file
#
# Copyright (c) 2024 SUSE LLC
#
@@ -18,10 +18,25 @@
%bcond_without tests
+%global flavor @BUILD_FLAVOR@%{nil}
+%if "%flavor" == "sle15_python_module"
+%{?sle15_python_module_pythons}
+%{!?sle15_python_module_pythons:ExclusiveArch: donotbuild}
+%{!?sle15_python_module_pythons:BuildRequires: no-build-without-sle15_python_module}
+%else
+# SLE15: python3.6, Tumbleweed: primary python
+%define pythons python3
+%endif
+%global mypython %pythons
+%global __mypython %{expand:%%__%{mypython}}
+%global mypython_sitearch %{expand:%%%{mypython}_sitearch}
+%global mypython_version_nodots %{expand:%%%{mypython}_version_nodots}
+%global mypython_soflags %(%__mypython -c "import sysconfig; print(sysconfig.get_config_var('SOABI'))")
+
# QML imports created and used by examples
%global __requires_exclude qmlimport\\((Charts|TextBalloonPlugin)
-Name: python3-pyside2
+Name: %{mypython}-pyside2
Version: 5.15.12
Release: 0
Summary: Python bindings for Qt
@@ -41,30 +56,41 @@ Patch2: 0001-cmake-Don-t-assume-qhelpgenerator-is-in-PATH.patch
# PATCH-FIX-UPSTREAM
Patch3: 0001-Fix-tests-sample_privatector-sample_privatedtor-fail.patch
# Provide the PyPI names
-Provides: python3-PySide2 = %{version}-%{release}
-Provides: python3-shiboken2 = %{version}-%{release}
-Provides: python3-shiboken2_generator = %{version}-%{release}
+Provides: %{mypython}-PySide2 = %{version}-%{release}
+Provides: %{mypython}-shiboken2 = %{version}-%{release}
+Provides: %{mypython}-shiboken2_generator = %{version}-%{release}
+Requires(post): update-alternatives
+Requires(postun):update-alternatives
# SECTION common_dependencies
%if 0%{?suse_version} > 1500
# boo#1210176 - PYSIDE-2268
BuildRequires: clang15-devel
BuildRequires: llvm15-libclang13
#!BuildIgnore: clang16
+#!BuildIgnore: clang17
+%else
+%if 0%{?sle_version} >= 150600
+# boo#1210176 - PYSIDE-2268, PY-2288
+BuildRequires: clang14-devel
+BuildRequires: llvm14-libclang13
+#!BuildIgnore: clang16
+#!BuildIgnore: clang17
%else
BuildRequires: clang-devel >= 3.9
%endif
+%endif
+BuildRequires: %{mypython}-Sphinx
+BuildRequires: %{mypython}-devel
+BuildRequires: %{mypython}-idna
+BuildRequires: %{mypython}-setuptools
+BuildRequires: %{mypython}-urllib3
+BuildRequires: %{mypython}-wheel
BuildRequires: cmake
BuildRequires: fdupes
BuildRequires: gcc-c++
BuildRequires: libqt5-qtdeclarative-private-headers-devel
BuildRequires: libxslt-devel
BuildRequires: python-rpm-macros
-BuildRequires: python3-Sphinx
-BuildRequires: python3-devel
-BuildRequires: python3-idna
-BuildRequires: python3-setuptools
-BuildRequires: python3-urllib3
-BuildRequires: python3-wheel
%if %{with tests}
BuildRequires: Mesa-dri
BuildRequires: xvfb-run
@@ -124,6 +150,12 @@ application and UI framework.
Summary: Header Files for PySide2
License: (GPL-2.0-only AND (GPL-2.0-only OR GPL-3.0-or-later) AND GPL-3.0-only WITH Qt-GPL-exception-1.0) OR LGPL-3.0-only
Requires: %{name} = %{version}
+# can be used to disambiguate multiple providers of cmake(PySide2) and cmake(Shiboken2)
+Provides: pyside2_python_abi(%{mypython_soflags}) = %{version}
+%if "%{mypython}" != "python3"
+# Can only build for one flavor at a time
+Conflicts: python3-pyside2-devel
+%endif
%description devel
Files needed for development with the PySide2 bindings
@@ -133,8 +165,12 @@ for Qt.
Summary: Examples for using PySide2
License: BSD-3-Clause
Requires: %{name} = %{version}
+%if "%{mypython}" != "python3"
+Conflicts: python3-pyside2-examples
+%endif
BuildArch: noarch
+
%description examples
Examples and Tutorials for the PySide2 bindings for Qt.
@@ -150,7 +186,7 @@ _libsuffix=$(echo %{_lib} | cut -b4-)
-DCMAKE_C_FLAGS:STRING="" \
-DCMAKE_CXX_FLAGS:STRING="" \
-DCMAKE_EXE_LINKER_FLAGS:STRING="" \
- -DPYTHON_EXECUTABLE:STRING=python3 \
+ -DPYTHON_EXECUTABLE:STRING=%{__mypython} \
-DCMAKE_BUILD_RPATH_USE_ORIGIN:BOOL=ON \
%if %{with tests}
-DBUILD_TESTS:BOOL=ON
@@ -161,10 +197,11 @@ _libsuffix=$(echo %{_lib} | cut -b4-)
%install
%cmake_install
-sed -i 's#env python$#python%{python3_bin_suffix}#' \
- %{buildroot}%{_bindir}/pyside_tool.py
+%python_clone -a %{buildroot}%{_bindir}/pyside2-lupdate
+%python_clone -a %{buildroot}%{_bindir}/pyside_tool.py
+%python_clone -a %{buildroot}%{_bindir}/shiboken2
-# Broken and conflicts with python3-pyside6
+# Broken and conflicts with python3X-pyside6
rm %{buildroot}%{_bindir}/shiboken_tool.py
# No use on linux
@@ -174,16 +211,16 @@ rm %{buildroot}%{_datadir}/PySide2/typesystems/*_{mac,win}.xml
cp -r build/sources/pyside2/PySide2/*.pyi \
build/sources/pyside2/PySide2/py.typed \
build/sources/pyside2/PySide2/support \
- %{buildroot}%{python3_sitearch}/PySide2/
+ %{buildroot}%{mypython_sitearch}/PySide2/
# this is not ideal, but at least we get some python dist metadata
-python3 setup.py dist_info
+%{__mypython} setup.py dist_info
for d in *.dist-info; do
# the commands were copied verbatim, not wrapped by entry-points.
rm -f $d/entry_points.txt
-%if %{pkg_vcmp python3-setuptools < 63}
- cp -r $d %{buildroot}%{python3_sitearch}/${d/.dist-info/-%{version}.dist-info}
+%if %{pkg_vcmp %{mypython}-setuptools < 63}
+ cp -r $d %{buildroot}%{mypython_sitearch}/${d/.dist-info/-%{version}.dist-info}
%else
- cp -r $d %{buildroot}%{python3_sitearch}/${d}
+ cp -r $d %{buildroot}%{mypython_sitearch}/${d}
%endif
done
@@ -192,14 +229,14 @@ cp -R examples %{buildroot}%{_datadir}/PySide2
%fdupes %{buildroot}%{_datadir}/PySide2/examples/
%fdupes %{buildroot}%{_libqt5_libdir}/cmake/
-%fdupes %{buildroot}%{python3_sitearch}
+%fdupes %{buildroot}%{mypython_sitearch}
%check
%if %{with tests}
# Set some environment variables
export PATH=%{_libqt5_bindir}:$PATH
export LD_LIBRARY_PATH=%{buildroot}%{_libqt5_libdir}:$LD_LIBRARY_PATH
-export PYTHONPATH=%{buildroot}%{python3_sitearch}:$PWD/build/sources/pyside2/tests/pysidetest
+export PYTHONPATH=%{buildroot}%{mypython_sitearch}:$PWD/build/sources/pyside2/tests/pysidetest
%if 0%{?sle_version} && 0%{?sle_version} <= 150300
# Leap 15.3: ctest searches the libs before shiboken_paths.py can set the search path (!?)
for binding in $PWD/build/sources/shiboken2/tests/lib*; do
@@ -218,7 +255,7 @@ ctest_exclude_regex="$ctest_exclude_regex|registry_existence_test"
ctest_exclude_regex="$ctest_exclude_regex|QtWebEngineWidgets_pyside-474-qtwebengineview"
ctest_exclude_regex="$ctest_exclude_regex|QtWebEngineCore_web_engine_custom_scheme"
-%if 0%{?suse_version} > 1500
+%if %{mypython_version_nodots} >= 311
# Blacklist broken test with python 3.11
ctest_exclude_regex="$ctest_exclude_regex|signal_enum_test|QtCore_qenum_test"
%endif
@@ -247,29 +284,39 @@ pushd build/sources/pyside2
popd
%endif
-%ldconfig_scriptlets
+%post
+%{?ldconfig}
+%python_install_alternative pyside2-lupdate
+%python_install_alternative pyside_tool.py
+%python_install_alternative shiboken2
+
+%postun
+%{?ldconfig}
+%python_uninstall_alternative pyside2-lupdate
+%python_uninstall_alternative pyside_tool.py
+%python_uninstall_alternative shiboken2
%files
%license LICENSE.*
%doc dist/changes*
-%{_bindir}/pyside2-lupdate
-%{_bindir}/pyside_tool.py
-%{_bindir}/shiboken2
-%{_libqt5_libdir}/libpyside2.%{py3_soflags}.so.*
-%{_libqt5_libdir}/libshiboken2.%{py3_soflags}.so.*
-%{python3_sitearch}/PySide2/
-%{python3_sitearch}/PySide2-%{version}.dist-info
-%{python3_sitearch}/shiboken2/
-%{python3_sitearch}/shiboken2-%{version}.dist-info
-%{python3_sitearch}/shiboken2_generator/
-%{python3_sitearch}/shiboken2_generator-%{version}.dist-info
+%python_alternative %{_bindir}/pyside2-lupdate
+%python_alternative %{_bindir}/pyside_tool.py
+%python_alternative %{_bindir}/shiboken2
+%{_libqt5_libdir}/libpyside2.%{mypython_soflags}.so.*
+%{_libqt5_libdir}/libshiboken2.%{mypython_soflags}.so.*
+%{mypython_sitearch}/PySide2/
+%{mypython_sitearch}/PySide2-%{version}.dist-info
+%{mypython_sitearch}/shiboken2/
+%{mypython_sitearch}/shiboken2-%{version}.dist-info
+%{mypython_sitearch}/shiboken2_generator/
+%{mypython_sitearch}/shiboken2_generator-%{version}.dist-info
%files devel
%{_datadir}/PySide2/
%{_includedir}/PySide2/
%{_includedir}/shiboken2/
-%{_libqt5_libdir}/libpyside2.%{py3_soflags}.so
-%{_libqt5_libdir}/libshiboken2.%{py3_soflags}.so
+%{_libqt5_libdir}/libpyside2.%{mypython_soflags}.so
+%{_libqt5_libdir}/libshiboken2.%{mypython_soflags}.so
%{_libqt5_libdir}/cmake/PySide2-%{version}
%{_libqt5_libdir}/cmake/Shiboken2-%{version}
%{_libqt5_libdir}/pkgconfig/pyside2.pc