summaryrefslogtreecommitdiff
path: root/mpi4py.spec
diff options
context:
space:
mode:
Diffstat (limited to 'mpi4py.spec')
-rw-r--r--mpi4py.spec234
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