%bcond_with tests
%global _description %{expand:
C++ / Python reader for SONATA circuit files. SONATA guide:
https://github.com/AllenInstitute/sonata/blob/master/docs/SONATA_DEVELOPER_GUIDE.md
}
Name: libsonata
Version: 0.1.11
Release: %autorelease
Summary: A Python and C++ interface to the SONATA format
# Boost: include/bbp/sonata/optional.hpp
# single file header only library: https://github.com/martinmoene/optional-lite
License: LGPLv3 and Boost
URL: https://github.com/BlueBrain/libsonata
Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz
# https://github.com/sanjayankur31/libsonata/tree/fedora-0.1.11
Patch0: 0001-include-catch-cmake.patch
Patch1: 0002-use-cpp-17-filesystem.patch
Patch2: 0003-Remove-pybind-redeclarations.patch
Patch3: 0004-disable-python-ext-build.patch
Patch4: 0005-set-libdir.patch
# https://github.com/BlueBrain/libsonata/pull/182
Patch5: 0006-fix-assertion-error.patch
BuildRequires: cmake
BuildRequires: boost-devel
BuildRequires: cmake(Catch2) < 3
BuildRequires: fmt-devel
BuildRequires: json-devel
BuildRequires: gcc-c++
BuildRequires: git-core
# 2.3.1-5 has a fix that is necessary to ensure builds on
# s390x, ppc64le, aarch64
# https://github.com/BlueBrain/libsonata/issues/184
BuildRequires: highfive-devel >= 2.3.1-5
BuildRequires: hdf5-devel
BuildRequires: pybind11-devel
BuildRequires: python3-pybind11
%description %_description
%package devel
Summary: Development files for %{name}
Requires: %{name}%{?_isa} = %{version}-%{release}
%description devel %_description
%package -n python3-libsonata
Summary: %{summary}
BuildRequires: python3-devel
BuildRequires: python3-pip
BuildRequires: python3-wheel
BuildRequires: python3-setuptools
BuildRequires: python3-setuptools_scm
BuildRequires: python3-pytest
BuildRequires: python3-h5py
%description -n python3-libsonata %_description
%prep
%autosetup -n libsonata-%{version} -S git
rm -rf libsonata.egg-info
rm -rf extlib/{Catch2,Highfive,fmt,nlohmann}
# Work around np.int removal; it was only an alias anyway
sed -r -i 's/\bnp\.(int)/\1/' python/tests/test.py
# Comment out to remove /usr/bin/env shebangs
# Can use something similar to correct/remove /usr/bin/python shebangs also
# find . -type f -name "*.py" -exec sed -i '/^#![ ]*\/usr\/bin\/env.*$/ d' {} 2>/dev/null ';'
%build
%cmake -DSONATA_PYTHON=ON -DEXTLIB_FROM_SUBMODULES=OFF -DSONATA_VERSION="%{version}" -DSONATA_TESTS=ON -DSONATA_CXX_WARNINGS=OFF
%cmake_build
# python bits need to be run in the out of source build directory so we need to
# move some files to allow that
export SETUPTOOLS_SCM_PRETEND_VERSION=%{version}
cp -a README.rst %{__cmake_builddir}
cp -a setup.py %{__cmake_builddir}
cp -a pyproject.toml %{__cmake_builddir}
cp -a COPYING.* %{__cmake_builddir}
cp -a MANIFEST.* %{__cmake_builddir}
mkdir -p %{__cmake_builddir}/python/libsonata/
cp -a python/libsonata/__init__.py %{__cmake_builddir}/python/libsonata
pushd %{__cmake_builddir}
%pyproject_wheel
popd
# regenerate data files and copy to build dir
pushd tests/data
%{python3} generate.py
popd
mkdir -p %{__cmake_builddir}/tests
cp -a tests/data %{__cmake_builddir}/tests
%install
%cmake_install
# remove static lib
rm -rf %{buildroot}/%{_libdir}/libsonata.a
# neither cmake nor pyproject install python module(!?)
install -p -m 0655 -D -t %{buildroot}/%{python3_sitearch}/libsonata/ %{__cmake_builddir}/python/_libsonata*so
export SETUPTOOLS_SCM_PRETEND_VERSION=%{version}
pushd %{__cmake_builddir}
%pyproject_install
%pyproject_save_files libsonata
popd
%check
%ctest tests
# There are some messages related to HDF5-DIAG, but upstream's CI also gets them, for example:
# https://github.com/BlueBrain/libsonata/runs/5272240111?check_suite_focus=true
pushd python/tests
export PYTHONPATH=%{buildroot}/%{python3_sitearch}/
%{python3} -m unittest -v
popd
%files
%license COPYING.LESSER
%doc README.rst CHANGELOG.md
%{_libdir}/libsonata.so.0.1
%{_libdir}/libsonata.so.0.1.11
%files devel
%{_includedir}/bbp
%{_datadir}/sonata/
%{_libdir}/libsonata.so
%files -n python3-libsonata -f %{pyproject_files}
%doc README.rst CHANGELOG.md
%{python3_sitearch}/libsonata/_libsonata*so
%changelog
%autochangelog