File python-nanobind.spec of Package python-nanobind

#
# spec file for package python-nanobind
#
# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


%{?sle15_python_module_pythons}
Name:           python-nanobind
Version:        2.7.0
Release:        0
Summary:        Tiny And Efficient C++/Python Bindings
License:        BSD-3-Clause
URL:            https://github.com/wjakob/nanobind
Source:         https://github.com/wjakob/nanobind/archive/refs/tags/v%{version}.tar.gz#/nanobind-%{version}.tar.gz
# PATCH-FEATURE-OPENSUSE nanobind-installationpath.patch
Patch1:         nanobind-installationpath.patch
BuildRequires:  cmake
BuildRequires:  %{python_module base}
BuildRequires:  python-rpm-macros
BuildArch:      noarch

## req'd for tests
%if 0%{?sle_version} >= 150500 && 0%{?is_opensuse}
BuildRequires:  gcc10-c++
%else
BuildRequires:  gcc-c++
%endif
BuildRequires:  eigen3-devel
BuildRequires:  robin-map-devel >= 1.3.0, robin-map-devel < 2.0.0
BuildRequires:  %{python_module devel}
BuildRequires:  %{python_module numpy}
BuildRequires:  %{python_module typing_extensions if %python-base < 3.11}
BuildRequires:  %{python_module pytest}

%if "%{python_flavor}" == "python310"
Requires:       python310-typing_extensions
%endif

%python_subpackages

%description
nanobind is a small binding library that exposes C++ types in Python
and vice versa.  It is reminiscent of Boost.Python and pybind11 and
uses near-identical syntax.  In contrast to these existing tools,
nanobind is more efficient: bindings compile in a shorter amount of
time, produce smaller binaries, and have better runtime performance.

This package contains the Python module.

%package -n nanobind-common-devel
Summary:        Tiny And Efficient C++/Python Bindings

%description -n nanobind-common-devel
nanobind is a small binding library that exposes C++ types in Python
and vice versa.  It is reminiscent of Boost.Python and pybind11 and
uses near-identical syntax.  In contrast to these existing tools,
nanobind is more efficient: bindings compile in a shorter amount of
time, produce smaller binaries, and have better runtime performance.

This package contains files for developing applications using nanobind.

%package devel
Summary:        Tiny And Efficient C++/Python Bindings
%if 0%{?sle_version} >= 150500 && 0%{?is_opensuse}
Requires:       gcc10-c++
%else
Requires:       gcc-c++
%endif
Requires:       nanobind-common-devel = %{version}
Requires:       python-devel
Requires:       python-nanobind = %{version}
Requires:       robin-map-devel >= 1.3.0, robin-map-devel < 2.0.0

%description devel
nanobind is a small binding library that exposes C++ types in Python
and vice versa.  It is reminiscent of Boost.Python and pybind11 and
uses near-identical syntax.  In contrast to these existing tools,
nanobind is more efficient: bindings compile in a shorter amount of
time, produce smaller binaries, and have better runtime performance.

This package contains files for developing applications using nanobind.

%prep
%autosetup -p1 -n nanobind-%{version}
sed -e '1s/^#!.*/#/' -i src/stubgen.py

%build
%{python_expand #
mkdir -p ../build_$python
cp -pr . ../build_$python
pushd ../build_$python
%cmake \
  -DNB_INSTALL_DATADIR="%{_datadir}/nanobind" \
  -DNB_USE_SUBMODULE_DEPS=OFF \
  -DNB_TEST_SHARED_BUILD=ON \
  -DNB_TEST_STABLE_ABI=ON \
%if 0%{?sle_version} >= 150500 && 0%{?is_opensuse}
  -DCMAKE_CXX_COMPILER=g++-10 \
%endif
  -DCMAKE_SHARED_LINKER_FLAGS="-Wl,--as-needed -Wl,-z,now" \
  -DPython_EXECUTABLE=%{_bindir}/$python
%cmake_build CXX_INCLUDES="-I%{_includedir}/$python -I%{_builddir}/%{buildsubdir}/include -I%{_includedir}/eigen3"
popd
}

%install
%{python_expand #
pushd ../build_$python
%cmake_install
popd
mkdir -p %{buildroot}%{$python_sitelib}/nanobind
mv %{buildroot}%{_datadir}/nanobind/__*.py %{buildroot}%{$python_sitelib}/nanobind
cp %{buildroot}%{_datadir}/nanobind/stubgen.py %{buildroot}%{$python_sitelib}/nanobind
}

%check
%{python_expand #
pushd ../build_$python
cd build
$python -m pytest
popd
}

%files %{python_files}
%license LICENSE
%{python_sitelib}/nanobind

%files -n nanobind-common-devel
%license LICENSE
%doc README.md
%{_datadir}/nanobind

%files %{python_files devel}
%license LICENSE

%changelog
openSUSE Build Service is sponsored by