Files
desktop/python-pyside6/python-pyside6.spec

248 lines
9.2 KiB
RPMSpec

# SPDX-FileCopyrightText: (C) 2026 Institute of Software, Chinese Academy of Sciences (ISCAS)
# SPDX-FileCopyrightText: (C) 2026 openRuyi Project Contributors
# SPDX-FileContributor: yyjeqhc <jialin.oerv@isrc.iscas.ac.cn>
#
# SPDX-License-Identifier: MulanPSL-2.0
%global pypi_name pyside6
%global camel_name PySide6
%global qt6ver 6.10.1
Name: python-%{pypi_name}
Version: 6.10.1
Release: %autorelease
Summary: Python bindings for the Qt 6 cross-platform application and UI framework
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
URL: https://wiki.qt.io/Qt_for_Python
VCS: git:https://github.com/qtproject/pyside-pyside-setup
#!RemoteAsset sha256:fd54f40853d61dfd845dbb40d4f89fbd63df5ed341b3d9a2c77bb5c947a0a838
Source0: https://download.qt.io/official_releases/QtForPython/%{pypi_name}/%{camel_name}-%{qt6ver}-src/pyside-setup-everywhere-src-%{version}.tar.xz
BuildSystem: cmake
# Revert header installation paths to use standard system include directories.
Patch0: 0001-Revert-Modify-headers-installation-for-CMake-builds.patch
# Unconditionally link against Python libraries on all platforms.
Patch1: 0002-Always-link-to-python-libraries.patch
# Install CMake configuration files and binaries to standard system locations.
Patch2: 0003-Fix-installation.patch
BuildOption(conf): -DCMAKE_BUILD_TYPE=Release
BuildOption(conf): -DBUILD_TESTING=OFF
BuildOption(conf): -DBUILD_DOCS=OFF
BuildOption(conf): -DNO_QT_TOOLS=yes
BuildOption(conf): -DCMAKE_SKIP_INSTALL_RPATH=ON
BuildOption(conf): -DCMAKE_BUILD_RPATH_USE_ORIGIN=ON
BuildOption(conf): -DFORCE_LIMITED_API=no
BuildRequires: cmake
BuildRequires: ninja
BuildRequires: gcc
BuildRequires: gcc-c++
BuildRequires: clang-devel
BuildRequires: pkgconfig(python3)
BuildRequires: python3dist(numpy)
BuildRequires: python3dist(setuptools)
BuildRequires: python3dist(wheel)
BuildRequires: python3dist(packaging)
BuildRequires: qt6-macros
BuildRequires: qt6-qttools
BuildRequires: qt6-doctools
BuildRequires: pkgconfig(libffi)
BuildRequires: pkgconfig(libxslt)
BuildRequires: cmake(Qt6Core)
BuildRequires: cmake(Qt6Gui)
BuildRequires: cmake(Qt6CorePrivate)
BuildRequires: cmake(Qt6Widgets)
BuildRequires: cmake(Qt6Network)
BuildRequires: cmake(Qt6DBus)
BuildRequires: cmake(Qt6Test)
BuildRequires: cmake(Qt6Concurrent)
BuildRequires: cmake(Qt6Sql)
BuildRequires: cmake(Qt6Xml)
BuildRequires: cmake(Qt6PrintSupport)
BuildRequires: cmake(Qt6OpenGL)
BuildRequires: cmake(Qt6OpenGLWidgets)
BuildRequires: cmake(Qt6Qml)
BuildRequires: cmake(Qt6Quick)
BuildRequires: cmake(Qt6Multimedia)
BuildRequires: cmake(Qt6MultimediaWidgets)
BuildRequires: pkgconfig(Qt6Positioning)
BuildRequires: cmake(Qt6Location)
BuildRequires: cmake(Qt6NetworkAuth)
BuildRequires: cmake(Qt6Nfc)
BuildRequires: cmake(Qt6Quick3D)
BuildRequires: cmake(Qt6Scxml)
BuildRequires: cmake(Qt6Sensors)
BuildRequires: cmake(Qt6SerialPort)
BuildRequires: cmake(Qt6SerialBus)
BuildRequires: cmake(Qt6StateMachine)
BuildRequires: cmake(Qt6TextToSpeech)
BuildRequires: cmake(Qt6Charts)
BuildRequires: cmake(Qt6SpatialAudio)
BuildRequires: cmake(Qt6Svg)
BuildRequires: cmake(Qt6SvgWidgets)
BuildRequires: cmake(Qt6DataVisualization)
BuildRequires: cmake(Qt6Graphs)
BuildRequires: cmake(Qt6GraphsWidgets)
BuildRequires: cmake(Qt6Bluetooth)
BuildRequires: cmake(Qt6WebChannel)
# we don't have yet.
# BuildRequires: cmake(Qt6WebEngineCore)
# BuildRequires: cmake(Qt6WebEngineWidgets)
# BuildRequires: cmake(Qt6WebEngineQuick)
BuildRequires: cmake(Qt6WebSockets)
BuildRequires: cmake(Qt6HttpServer)
BuildRequires: cmake(Qt63DCore)
BuildRequires: cmake(Qt63DRender)
BuildRequires: cmake(Qt63DInput)
BuildRequires: cmake(Qt63DLogic)
BuildRequires: cmake(Qt63DAnimation)
BuildRequires: cmake(Qt63DExtras)
BuildRequires: cmake(Qt6RemoteObjects)
BuildRequires: cmake(Qt6UiPlugin)
BuildRequires: qt6-designer
Provides: python3-%{pypi_name}
%python_provide python3-%{pypi_name}
%description
PySide6 is the official Python module from the Qt for Python project, which
provides access to the complete Qt 6+ framework.
%package -n python-%{pypi_name}-devel
Summary: Development files related to %{name}
Requires: pyside6-tools
Requires: shiboken6
Provides: python3-%{pypi_name}-devel
%description -n python-%{pypi_name}-devel
Development files for PySide6.
%package -n pyside6-tools
Summary: PySide6 tools for the Qt 6 framework
Requires: python-%{pypi_name}
%description -n pyside6-tools
PySide6 tools.
%package -n shiboken6
Summary: Python / C++ bindings generator for %camel_name
%description -n shiboken6
Shiboken binding generator.
%package -n python-shiboken6
Summary: Python / C++ bindings libraries for %camel_name
Provides: python3-shiboken6
%python_provide python3-shiboken6
%description -n python-shiboken6
Shiboken Python libraries.
%package -n python-shiboken6-devel
Summary: Python / C++ bindings helper module for %camel_name
Requires: shiboken6
Requires: python-shiboken6
Provides: python3-shiboken6-devel
%description -n python-shiboken6-devel
Shiboken development files.
%prep -a
sed -i 's#${base}/../shiboken6/##' sources/pyside6/CMakeLists.txt
%build -p
# fix can't find stddef.h
CLANG_INC=$(ls -d /usr/lib/clang/*/include | head -n 1)
echo "Injecting CPATH=$CLANG_INC into shiboken_wrapper.sh"
find . -name "shiboken_wrapper.sh" -exec sed -i "2i export CPATH=\"$CLANG_INC:\$CPATH\"" {} +
export PYTHONPATH="$PWD/%{_vpath_builddir}/sources:$PYTHONPATH"
%install -a
cp -r %{_vpath_builddir}/sources/shiboken6/shibokenmodule/{*.py,*.txt} sources/shiboken6/shibokenmodule/
cp -r %{_vpath_builddir}/sources/pyside6/PySide6/*.py sources/pyside6/PySide6/
%{__python3} setup.py --qtpaths=/usr/%{_lib}/qt6/bin/qtpaths install_scripts --install-dir=%{buildroot}%{_bindir}
for name in PySide6 shiboken6 shiboken6_generator; do
mkdir -p %{buildroot}%{python3_sitearch}/$name-%{version}-py%{python3_version}.egg-info
cp -p $name.egg-info/{PKG-INFO,top_level.txt} \
%{buildroot}%{python3_sitearch}/$name-%{version}-py%{python3_version}.egg-info/
if [ -f $name.egg-info/entry_points.txt ]; then
cp -p $name.egg-info/entry_points.txt %{buildroot}%{python3_sitearch}/$name-%{version}-py%{python3_version}.egg-info/
fi
done
ln -sfr %{buildroot}%{_bindir}/shiboken6 \
%{buildroot}%{python3_sitelib}/shiboken6_generator/shiboken6
# Add symlinks for tools used by pyside_tool.py
mkdir -p %{buildroot}%{python3_sitelib}/%{camel_name}/Qt/libexec
ln -sfr %{_qt6_libexecdir}/{qmlcachegen,qmlimportscanner,qmltyperegistrar,rcc,uic} %{buildroot}%{python3_sitelib}/%{camel_name}/Qt/libexec/
ln -sfr %{_qt6_bindir}/{assistant,balsam,balsamui,designer,linguist,lrelease,lupdate,qmlformat,qmllint,qmlls,qsb} %{buildroot}%{python3_sitelib}/%{camel_name}/
# Create scripts folders (this basically replicates prepare_packages() in build_scripts/main.py)
mkdir -p %{buildroot}%{python3_sitelib}/%{camel_name}/scripts
mv %{buildroot}%{_bindir}/{android_deploy.py,deploy_lib,deploy.py,metaobjectdump.py,project_lib,project.py,pyside_tool.py,qml.py,qtpy2cpp_lib,qtpy2cpp.py,requirements-android.txt} %{buildroot}%{python3_sitelib}/%{camel_name}/scripts
mkdir -p %{buildroot}%{python3_sitelib}/shiboken6_generator/scripts
mv %{buildroot}%{_bindir}/shiboken_tool.py %{buildroot}%{python3_sitelib}/shiboken6_generator/scripts
# Fix CMake config files to use correct absolute paths (OpenSUSE solution)
# The upstream build is designed for wheel installation with relative paths,
# but for system installation we need absolute paths
sed -i 's#/typesystems#/share/PySide6/typesystems#g' %{buildroot}%{_libdir}/cmake/PySide6/*.cmake
sed -i 's#/glue#/share/PySide6/glue#g' %{buildroot}%{_libdir}/cmake/PySide6/*.cmake
# Fix all Python shebangs recursively
# -p preserves timestamps
# -n prevents creating ~backup files
# -i specifies the interpreter for the shebang
# Need to list files that do not match ^[a-zA-Z0-9_]+\.py$ explicitly!
%py3_shebang_fix %{buildroot}%{python3_sitelib}/%{camel_name}/scripts
%py3_shebang_fix %{buildroot}%{python3_sitelib}/shiboken6_generator/scripts
%check
export LD_LIBRARY_PATH="%{buildroot}%{_libdir}"
%py3_check_import PySide6
%py3_check_import shiboken6
%files
%license LICENSES/*
%{_libdir}/libpyside6*.so.6*
%{python3_sitelib}/PySide6/
%{python3_sitearch}/PySide6-%{version}-py%{python3_version}.egg-info/
%files -n python-pyside6-devel
%{_datadir}/PySide6/
%{_includedir}/PySide6/
%{_libdir}/libpyside6*.so
%{_libdir}/libpyside6remoteobjects.a
%{_libdir}/cmake/PySide6*
%{_libdir}/pkgconfig/pyside6.pc
%files -n pyside6-tools
%{_bindir}/pyside*
%{_libdir}/qt6/plugins/designer/libPySidePlugin.so
%files -n shiboken6
%{_libdir}/cmake/Shiboken6Tools/*
%files -n python-shiboken6
%{_libdir}/libshiboken6*.so.6*
%{python3_sitelib}/shiboken6/
%{python3_sitearch}/shiboken6-%{version}-py%{python3_version}.egg-info/
%files -n python-shiboken6-devel
%{_bindir}/shiboken6*
%{_includedir}/shiboken6/
%{_libdir}/cmake/Shiboken6/
%{_libdir}/libshiboken6*.so
%{_libdir}/pkgconfig/shiboken6.pc
%{python3_sitelib}/shiboken6_generator/
%{python3_sitearch}/shiboken6_generator-%{version}-py%{python3_version}.egg-info/
%changelog
%{?autochangelog}