python3.14-pybind11/python3.14-pybind11.spec
2025-12-02 14:46:36 +01:00

149 lines
4.4 KiB
RPMSpec

%global python3_pkgversion 3.14
# While the headers are architecture independent, the package must be
# built separately on all architectures so that the tests are run
# properly. See also
# https://fedoraproject.org/wiki/Packaging:Guidelines#Packaging_Header_Only_Libraries
%global debug_package %{nil}
%ifarch ppc64le
# The tests are not LTO-compatible on power
%global _lto_cflags %{nil}
%endif
# Exclude automatic provides without python3.14 in the name
%global __provides_exclude cmake|pkgconfig
# Whether to run the tests, enabled by default
%bcond tests 1
Name: python%{python3_pkgversion}-pybind11
Version: 2.13.6
Release: %autorelease
Summary: Seamless operability between C++11 and Python
License: BSD-3-Clause
URL: https://github.com/pybind/pybind11
Source0: https://github.com/pybind/pybind11/archive/v%{version}/pybind11-%{version}.tar.gz
# Use the `/usr` prefix for the python commands
Patch1: pybind11-2.13.6-Use_usr_prefix.patch
# Drop cmake and ninja from build-requires
Patch2: pybind11-2.13.6-Drop_some_build-requires.patch
# Adjust test for different syntax in python3.14
# Upstream commit: https://github.com/pybind/pybind11/commit/094343c
Patch3: Adjust-test-for-python3.14.patch
# Needed to build the python libraries
BuildRequires: python%{python3_pkgversion}-devel
# Test depdendencies are not exposed
%if %{with tests}
BuildRequires: python%{python3_pkgversion}-pytest
BuildRequires: python%{python3_pkgversion}-numpy
BuildRequires: python%{python3_pkgversion}-scipy
%endif
BuildRequires: eigen3-devel
BuildRequires: gcc-c++
BuildRequires: cmake
Requires: %{name}-devel%{?_isa} = %{version}-%{release}
%global base_description \
pybind11 is a lightweight header-only library that exposes C++ types \
in Python and vice versa, mainly to create Python bindings of existing \
C++ code.
%description
%{base_description}
%package devel
Summary: Development headers for pybind11
# This package does not have namespaced file locations, so if we build the
# pybind11-devel subpackage in any other stack as well, the files from these
# packages will conflict. The package name is namespaced so that customers can
# decide which to install, but the packages will conflict with each other.
# Whenever python3.X-pybind11-devel is introduced, it needs to explicitly
# conflict with all the previous python3.X-pybind11-devel packages as well as
# the non-namespaced pybind11-devel package from the main Python stack.
Conflicts: pybind11-devel < %{version}-%{release}
Conflicts: python3.11-pybind11-devel < %{version}-%{release}
Conflicts: python3.12-pybind11-devel < %{version}-%{release}
# https://fedoraproject.org/wiki/Packaging:Guidelines#Packaging_Header_Only_Libraries
Provides: %{name}-static = %{version}-%{release}
%description devel
%{base_description}
This package contains the development headers for pybind11.
%package -n python%{python3_pkgversion}-%{name}
Summary: %{summary}
Requires: %{name}-devel%{?_isa} = %{version}-%{release}
%description -n python%{python3_pkgversion}-%{name}
%{base_description}
This package contains the Python 3 files.
%prep
%autosetup -n pybind11-%{version} -p1
%generate_buildrequires
%pyproject_buildrequires
%build
# Build with CMake first to install the devel files in OS native paths
# When -DCMAKE_BUILD_TYPE is set to Release, the tests in %%check might segfault.
# However, we do not ship any binaries, and therefore Debug
# build type does not affect the results.
# https://bugzilla.redhat.com/show_bug.cgi?id=1921199
%cmake \
-DCMAKE_BUILD_TYPE=Debug \
%{?with_tests:-DPYBIND11_TEST=ON} \
%{!?with_tests:-DPYBIND11_TEST=OFF} \
-DUSE_PYTHON_INCLUDE_DIR=FALSE \
-DPython_EXECUTABLE=/usr/bin/python%{python3_pkgversion} \
-DPython_INCLUDE_DIR=/usr/include/python%{python3_pkgversion}
%cmake_build
# Build again with the python build system to get the python files
%pyproject_wheel
%install
%cmake_install
%pyproject_install
%pyproject_save_files pybind11
# Remove the devel files in the python package
rm -rf %{buildroot}%{python3_sitelib}/pybind11/include/
rm -rf %{buildroot}%{python3_sitelib}/pybind11/share/
sed -i '/pybind11\/include/d' %{pyproject_files}
sed -i '/pybind11\/share/d' %{pyproject_files}
%if %{with tests}
%check
%cmake_build --target check
%endif
%files devel
%license LICENSE
%doc README.rst
%{_includedir}/pybind11/
%{_datadir}/cmake/pybind11/
%{_bindir}/pybind11-config
%{_datadir}/pkgconfig/pybind11.pc
%files -n python%{python3_pkgversion}-pybind11 -f %{pyproject_files}
%changelog
%autochangelog