diff options
Diffstat (limited to 'mpi4py.spec')
-rw-r--r-- | mpi4py.spec | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/mpi4py.spec b/mpi4py.spec new file mode 100644 index 0000000..87cebf7 --- /dev/null +++ b/mpi4py.spec @@ -0,0 +1,234 @@ +%global with_mpich 1 + +### TESTSUITE ### +# The testsuite currently fails only on the buildsystem, but works localy. +# So to easily enable/disable the testsuite, the following variables are +# introduced: +# +# * MPICH: if '1' enable mpich +# * OPENMPI: if '1' enable openmpi +%ifarch %{arm} +# Disable tests on arm until upstream bug is fixed: +# https://bitbucket.org/mpi4py/mpi4py/issues/145 +%global MPICH 0 +%else +%global MPICH 1 +%endif +%global OPENMPI 1 +# Run full testsuite or just with 1 core +%global FULLTESTS 0 + +Name: mpi4py +Version: 4.0.1 +Release: 1%{?dist} +Summary: Python bindings of the Message Passing Interface (MPI) + +License: BSD-2-Clause +URL: https://mpi4py.readthedocs.io/en/stable/ +Source0: https://github.com/mpi4py/mpi4py/archive/%{version}/%{name}-%{version}.tar.gz + +ExcludeArch: %{ix86} + +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-Cython +BuildRequires: environment-modules +# For testing +#BuildRequires: python3-numpy +#BuildRequires: python3-simplejson +#BuildRequires: python3-yaml +#BuildRequires: python3-dill + +%global _description %{expand: +This package is constructed on top of the MPI-1/MPI-2 specification and +provides an object oriented interface which closely follows MPI-2 C++ +bindings. It supports point-to-point (sends, receives) and collective +(broadcasts, scatters, gathers) communications of any picklable Python +object as well as optimized communications of Python object exposing the +single-segment buffer interface (NumPy arrays, built-in bytes/string/array +objects).} + +%description %_description + +%package docs +Summary: Documentation for %{name} +Requires: %{name}-common = %{version}-%{release} +BuildArch: noarch +%description docs +This package contains the documentation and examples for %{name}. + +%package -n python3-mpi4py +Requires: %{name}-common = %{version}-%{release} +Summary: Python %{python3_version} bindings of the Message Passing Interface (MPI) +%{?python_provide:%python_provide python3-mpi4py} +%description -n python3-mpi4py %_description + +%package -n python3-mpi4py-openmpi +BuildRequires: openmpi-devel +Requires: %{name}-common = %{version}-%{release} +Requires: python3-openmpi%{?_isa} +Summary: Python %{python3_version} bindings of MPI, Open MPI version +Provides: python3-mpi4py-runtime = %{version}-%{release} +%{?python_provide:%python_provide python3-mpi4py-openmpi} +%description -n python3-mpi4py-openmpi %_description + +This package contains %{name} compiled against Open MPI. + + +%if %{with_mpich} +%package -n python3-mpi4py-mpich +BuildRequires: mpich-devel +Requires: %{name}-common = %{version}-%{release} +Requires: python3-mpich%{?_isa} +Summary: Python %{python3_version} bindings of MPI, MPICH version +Provides: python3-mpi4py-runtime = %{version}-%{release} +Provides: python3-%{name}-mpich2 = %{version}-%{release} +Obsoletes: python3-%{name}-mpich2 < 1.3-8 +%{?python_provide:%python_provide python3-mpi4py-mpich} +%description -n python3-mpi4py-mpich %_description + +This package contains %{name} compiled against MPICH. +%endif + +%package common +Summary: Common files for mpi4py packages +BuildArch: noarch +Requires: %{name}-common = %{version}-%{release} +%description common +This package contains the license file shared between the subpackages of %{name}. + + +%prep +%autosetup -p1 %{?commit:-n %{name}-%{name}-%{shortcommit}} +# delete docs/source +# this is just needed to generate docs/* +rm -r docs/source + +# work around "wrong-file-end-of-line-encoding" +for file in $(find | grep runtests.bat); do + sed -i 's/\r//' $file +done + +# Save current src/__init__.py for mpich +cp src/mpi4py/__init__.py .__init__mpich.py +cp src/mpi4py/__init__.py .__init__openmpi.py + +# Remove precythonized C sources +#rm $(grep -rl '/\* Generated by Cython') +python3 conf/cythonize.py + +%build +# Build parallel versions: set compiler variables to MPI wrappers +export CC=mpicc +export CXX=mpicxx + +# Build OpenMPI version +%{_openmpi_load} +ompi_info +cp .__init__openmpi.py src/mpi4py/__init__.py +%py3_build +mv build openmpi +%{_openmpi_unload} + +%if %{with_mpich} +# Build mpich version +%{_mpich_load} +cp .__init__mpich.py src/mpi4py/__init__.py +%py3_build +mv build mpich +%{_mpich_unload} +%endif + + + +%install +# Install OpenMPI version +%{_openmpi_load} +cp .__init__openmpi.py src/mpi4py/__init__.py +mv openmpi build +%py3_install +mkdir -p %{buildroot}%{python3_sitearch}/openmpi +mv %{buildroot}%{python3_sitearch}/%{name}/ %{buildroot}%{python3_sitearch}/%{name}*.egg-info %{buildroot}%{python3_sitearch}/openmpi +mv build openmpi +%{_openmpi_unload} + +%if %{with_mpich} +# Install MPICH version +%{_mpich_load} +cp .__init__mpich.py src/mpi4py/__init__.py +mv mpich build +%py3_install +mkdir -p %{buildroot}%{python3_sitearch}/mpich +mv %{buildroot}%{python3_sitearch}/%{name}/ %{buildroot}%{python3_sitearch}/%{name}*.egg-info %{buildroot}%{python3_sitearch}/mpich +mv build mpich +%{_mpich_unload} +%endif + + + +#%check +## test openmpi? +#%if 0%{?OPENMPI} +#%{_openmpi_load} +#cp .__init__openmpi.py src/mpi4py/__init__.py +#mv openmpi build +#PYTHONPATH=%{buildroot}%{python3_sitearch}/openmpi \ +# mpiexec -np 1 python3 test/runtests.py -v --no-builddir \ +# -e spawn \ +#%ifarch ppc64le +# -e test_datatype +#%endif + +# test_datatype: https://bitbucket.org/mpi4py/mpi4py/issues/127/test-failure-with-openmpi-on-ppc64le + +#%if 0%{?FULLTESTS} +## Allow running with more processes than cores +#export OMPI_MCA_rmaps_base_oversubscribe=1 +#PYTHONPATH=%{buildroot}%{python3_sitearch}/openmpi \ +# mpiexec -np 5 python3 test/runtests.py -v --no-builddir -e spawn +#PYTHONPATH=%{buildroot}%{python3_sitearch}/openmpi \ +# mpiexec -np 8 python3 test/runtests.py -v --no-builddir -e spawn +#%endif +#mv build openmpi +#%{_openmpi_unload} +#%endif + +# test mpich? +#%if 0%{?MPICH} +#%if %{with_mpich} +#%{_mpich_load} +#cp .__init__mpich.py src/mpi4py/__init__.py +#mv mpich build +#PYTHONPATH=%{buildroot}%{python3_sitearch}/mpich \ +# mpiexec -np 1 python3 test/runtests.py -v --no-builddir -e spawn +#%if 0%{?FULLTESTS} +#PYTHONPATH=%{buildroot}%{python3_sitearch}/mpich \ +# mpiexec -np 5 python3 test/runtests.py -v --no-builddir -e spawn +#PYTHONPATH=%{buildroot}%{python3_sitearch}/mpich \ +# mpiexec -np 8 python3 test/runtests.py -v --no-builddir -e spawn +#%endif +#mv build mpich +#%{_mpich_unload} +#%endif +#%endif + + +%files common +%license LICENSE.rst +%doc CHANGES.rst DESCRIPTION.rst README.rst + +%files -n python3-mpi4py-openmpi +%{python3_sitearch}/openmpi/%{name}-*.egg-info +%{python3_sitearch}/openmpi/%{name} + +%if %{with_mpich} +%files -n python3-mpi4py-mpich +%{python3_sitearch}/mpich/%{name}-*.egg-info +%{python3_sitearch}/mpich/%{name} +%endif + +%files docs +%doc docs/* demo + + +%changelog |