[hdf5] - Build parallel hdf5 packages for mpich2 and openmpi - Rework multiarch support and drop multiarch

Orion Poplawski orion at fedoraproject.org
Tue Oct 26 21:05:11 UTC 2010


commit f6e9a837cdec9132b2150a07fb10ea87468a548c
Author: Orion Poplawski <orion at cora.nwra.com>
Date:   Tue Oct 26 15:05:12 2010 -0600

    - Build parallel hdf5 packages for mpich2 and openmpi
    - Rework multiarch support and drop multiarch patch

 hdf5-1.8.0-multiarch.patch |   18 ----
 hdf5.spec                  |  207 ++++++++++++++++++++++++++++++++++++--------
 2 files changed, 172 insertions(+), 53 deletions(-)
---
diff --git a/hdf5.spec b/hdf5.spec
index 9e7674b..b6a678b 100644
--- a/hdf5.spec
+++ b/hdf5.spec
@@ -1,7 +1,7 @@
 %define snaprel %{nil}
 Name: hdf5
 Version: 1.8.5.patch1
-Release: 1%{?dist}
+Release: 2%{?dist}
 Summary: A general purpose library and file format for storing scientific data
 License: BSD
 Group: System Environment/Libraries
@@ -10,18 +10,17 @@ URL: http://www.hdfgroup.org/HDF5/
 Source0: http://www.hdfgroup.org/ftp/HDF5/current/src/hdf5-1.8.5-patch1.tar.bz2
 Source1: h5comp
 Patch1: hdf5-1.8.5-longdouble.patch
-Patch3: hdf5-1.8.0-multiarch.patch
 Patch4: hdf5-1.8.5-tstlite.patch
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildRequires: krb5-devel, openssl-devel, zlib-devel, gcc-gfortran, time
 
 %description
 HDF5 is a general purpose library and file format for storing scientific data.
-HDF5 can store two primary objects: datasets and groups. A dataset is 
-essentially a multidimensional array of data elements, and a group is a 
-structure for organizing objects in an HDF5 file. Using these two basic 
-objects, one can create and store almost any kind of scientific data 
-structure, such as images, arrays of vectors, and structured and unstructured 
+HDF5 can store two primary objects: datasets and groups. A dataset is
+essentially a multidimensional array of data elements, and a group is a
+structure for organizing objects in an HDF5 file. Using these two basic
+objects, one can create and store almost any kind of scientific data
+structure, such as images, arrays of vectors, and structured and unstructured
 grids. You can also mix and match them in HDF5 files according to your needs.
 
 
@@ -43,51 +42,124 @@ Requires: %{name}-devel = %{version}-%{release}
 HDF5 static libraries.
 
 
+%package mpich2
+Summary: HDF5 mpich2 libraries
+Group: Development/Libraries
+Requires: mpich2
+BuildRequires: mpich2-devel
+
+%description mpich2
+HDF5 parallel mpich2 libraries
+
+
+%package mpich2-devel
+Summary: HDF5 mpich2 development files
+Group: Development/Libraries
+Requires: mpich2-devel, %{name}-mpich2 = %{version}-%{release}
+
+%description mpich2-devel
+HDF5 parallel mpich2 development files
+
+
+%package openmpi
+Summary: HDF5 openmpi libraries
+Group: Development/Libraries
+Requires: openmpi
+BuildRequires: openmpi-devel
+
+%description openmpi
+HDF5 parallel openmpi libraries
+
+
+%package openmpi-devel
+Summary: HDF5 openmpi development files
+Group: Development/Libraries
+Requires: openmpi-devel, %{name}-openmpi = %{version}-%{release}
+
+%description openmpi-devel
+HDF5 parallel openmpi development files
+
+
 %prep
 #setup -q -n %{name}-%{version}%{?snaprel}
 %setup -q -n %{name}-1.8.5-patch1
 %ifarch ppc64
 %patch1 -p1 -b .longdouble
 %endif
-%patch3 -p1 -b .multiarch
 %patch4 -p1 -b .tstlite
 find -name '*.[ch]' -o -name '*.f90' -exec chmod -x {} +
 
 
 %build
+#Do out of tree builds
+%global _configure ../configure
+#Common configure options
+%global configure_opts \\\
+  --disable-dependency-tracking \\\
+  --enable-fortran \\\
+  --enable-hl \\\
+  --enable-shared \\\
+%{nil}
+# --enable-cxx and --enable-parallel flags are incompatible
+# --with-mpe=DIR          Use MPE instrumentation [default=no]
+# --enable-cxx/fortran/parallel and --enable-threadsafe flags are incompatible
+
+#Serial build
 export CC=gcc
 export CXX=g++
 export F9X=gfortran
 export CFLAGS="${RPM_OPT_FLAGS/O2/O0}"
+mkdir build
+pushd build
 %configure \
-  --disable-dependency-tracking \
-  --enable-cxx \
-  --enable-fortran \
-  --enable-hl
-# --enable-cxx/fortran and --enable-parallel flags are incompatible
-#  --with-mpe=DIR          Use MPE instrumentation [default=no]
-# --enable-cxx/fortran/parallel and --enable-threadsafe flags are incompatible
-#Multiarch header
-%ifarch x86_64 ppc64 ia64 s390x sparc64 alpha
-cp src/H5pubconf.h \
-   src/H5pubconf-64.h
-%else
-cp src/H5pubconf.h \
-   src/H5pubconf-32.h
-%endif
+  %{configure_opts} \
+  --enable-cxx
 make
+popd
+
+#MPI builds
+export CC=mpicc
+export CXX=mpicxx
+export F9X=mpif90
+for mpi in mpich2 openmpi
+do
+  mkdir $mpi
+  pushd $mpi
+  module load $mpi-%{_arch}
+  %configure \
+    %{configure_opts} \
+    --enable-parallel \
+    --disable-static \
+    --libdir=%{_libdir}/$mpi/lib \
+    --bindir=%{_libdir}/$mpi/bin \
+    --sbindir=%{_libdir}/$mpi/sbin \
+    --includedir=%{_includedir}/$mpi-%{_arch} \
+    --datarootdir=%{_libdir}/$mpi/share \
+    --mandir=%{_libdir}/$mpi/share/man \
+  make
+  module purge
+  popd
+done
 
 
 %install
 rm -rf $RPM_BUILD_ROOT
-make install DESTDIR=${RPM_BUILD_ROOT}
-rm -rf $RPM_BUILD_ROOT/%{_libdir}/*.la
+make -C build install DESTDIR=${RPM_BUILD_ROOT}
+rm $RPM_BUILD_ROOT/%{_libdir}/*.la
+for mpi in mpich2 openmpi
+do
+  module load $mpi-%{_arch}
+  make -C $mpi install DESTDIR=${RPM_BUILD_ROOT}
+  rm $RPM_BUILD_ROOT/%{_libdir}/$mpi/lib/*.la
+  module purge
+done
 #Fortran modules
 mkdir -p ${RPM_BUILD_ROOT}%{_fmoddir}
 mv ${RPM_BUILD_ROOT}%{_includedir}/*.mod ${RPM_BUILD_ROOT}%{_fmoddir}
 
 #Fixup headers and scripts for multiarch
 %ifarch x86_64 ppc64 ia64 s390x sparc64 alpha
+sed -i -e s/H5pubconf.h/H5pubconf-64.h/ ${RPM_BUILD_ROOT}%{_includedir}/H5public.h
 mv ${RPM_BUILD_ROOT}%{_includedir}/H5pubconf.h \
    ${RPM_BUILD_ROOT}%{_includedir}/H5pubconf-64.h
 for x in h5c++ h5cc h5fc
@@ -97,6 +169,7 @@ do
   install -m 0755 %SOURCE1 ${RPM_BUILD_ROOT}%{_bindir}/${x}
 done
 %else
+sed -i -e s/H5pubconf.h/H5pubconf-32.h/ ${RPM_BUILD_ROOT}%{_includedir}/H5public.h
 mv ${RPM_BUILD_ROOT}%{_includedir}/H5pubconf.h \
    ${RPM_BUILD_ROOT}%{_includedir}/H5pubconf-32.h
 for x in h5c++ h5cc h5fc
@@ -109,7 +182,14 @@ done
 
 
 %check
-make check
+make -C build check
+#These really don't work on builders
+#for mpi in mpich2 openmpi
+#do
+#  module load $mpi-%{_arch}
+#  make -C $mpi check
+#  module purge
+#done
 
 
 %clean
@@ -144,12 +224,9 @@ rm -rf $RPM_BUILD_ROOT
 
 %files devel
 %defattr(-,root,root,-)
-%{_bindir}/h5c++
-%{_bindir}/h5c++-*
-%{_bindir}/h5cc
-%{_bindir}/h5cc-*
-%{_bindir}/h5fc
-%{_bindir}/h5fc-*
+%{_bindir}/h5c++*
+%{_bindir}/h5cc*
+%{_bindir}/h5fc*
 %{_bindir}/h5redeploy
 %{_includedir}/*.h
 %{_libdir}/*.so
@@ -161,8 +238,68 @@ rm -rf $RPM_BUILD_ROOT
 %defattr(-,root,root,-)
 %{_libdir}/*.a
 
+%files mpich2
+%defattr(-,root,root,-)
+%{_libdir}/mpich2/bin/gif2h5
+%{_libdir}/mpich2/bin/h52gif
+%{_libdir}/mpich2/bin/h5copy
+%{_libdir}/mpich2/bin/h5debug
+%{_libdir}/mpich2/bin/h5diff
+%{_libdir}/mpich2/bin/h5dump
+%{_libdir}/mpich2/bin/h5import
+%{_libdir}/mpich2/bin/h5jam
+%{_libdir}/mpich2/bin/h5ls
+%{_libdir}/mpich2/bin/h5mkgrp
+%{_libdir}/mpich2/bin/h5repack
+%{_libdir}/mpich2/bin/h5perf
+%{_libdir}/mpich2/bin/h5repart
+%{_libdir}/mpich2/bin/h5stat
+%{_libdir}/mpich2/bin/h5unjam
+%{_libdir}/mpich2/bin/ph5diff
+%{_libdir}/mpich2/lib/*.so.*
+
+%files openmpi
+%defattr(-,root,root,-)
+%{_libdir}/openmpi/bin/gif2h5
+%{_libdir}/openmpi/bin/h52gif
+%{_libdir}/openmpi/bin/h5copy
+%{_libdir}/openmpi/bin/h5debug
+%{_libdir}/openmpi/bin/h5diff
+%{_libdir}/openmpi/bin/h5dump
+%{_libdir}/openmpi/bin/h5import
+%{_libdir}/openmpi/bin/h5jam
+%{_libdir}/openmpi/bin/h5ls
+%{_libdir}/openmpi/bin/h5mkgrp
+%{_libdir}/openmpi/bin/h5perf
+%{_libdir}/openmpi/bin/h5repack
+%{_libdir}/openmpi/bin/h5repart
+%{_libdir}/openmpi/bin/h5stat
+%{_libdir}/openmpi/bin/h5unjam
+%{_libdir}/openmpi/bin/ph5diff
+%{_libdir}/openmpi/lib/*.so.*
+
+%files mpich2-devel
+%defattr(-,root,root,-)
+%{_includedir}/mpich2-%{_arch}
+%{_libdir}/mpich2/bin/h5pcc
+%{_libdir}/mpich2/bin/h5pfc
+%{_libdir}/mpich2/lib/lib*.so
+%{_libdir}/mpich2/lib/lib*.settings
+
+%files openmpi-devel
+%defattr(-,root,root,-)
+%{_includedir}/openmpi-%{_arch}
+%{_libdir}/openmpi/bin/h5pcc
+%{_libdir}/openmpi/bin/h5pfc
+%{_libdir}/openmpi/lib/lib*.so
+%{_libdir}/openmpi/lib/lib*.settings
+
 
 %changelog
+* Tue Oct 26 2010 Orion Poplawski <orion at cora.nwra.com> 1.8.5.patch1-2
+- Build parallel hdf5 packages for mpich2 and openmpi
+- Rework multiarch support and drop multiarch patch
+
 * Tue Sep 7 2010 Orion Poplawski <orion at cora.nwra.com> 1.8.5.patch1-1
 - Update to 1.8.5-patch1
 
@@ -222,7 +359,7 @@ rm -rf $RPM_BUILD_ROOT
 
 * Fri Sep 26 2008 Orion Poplawski <orion at cora.nwra.com> 1.8.1-2
 - Add patch to filter -little as option used on sh arch (#464052)
- 
+
 * Thu Jun 5 2008 Orion Poplawski <orion at cora.nwra.com> 1.8.1-1
 - Update to 1.8.1
 
@@ -231,12 +368,12 @@ rm -rf $RPM_BUILD_ROOT
 
 * Tue May 13 2008 Orion Poplawski <orion at cora.nwra.com> 1.8.0.snap5-2
 - Use new %%{_fmoddir} macro
-- Re-enable ppc64, disable failing tests.  Failing tests are for 
+- Re-enable ppc64, disable failing tests.  Failing tests are for
   experimental long double support.
 
 * Mon May 5 2008 Orion Poplawski <orion at cora.nwra.com> 1.8.0.snap5-1
 - Update to 1.8.0-snap5
-- Remove --enable-threadsafe, incompatible with --enable-cxx and 
+- Remove --enable-threadsafe, incompatible with --enable-cxx and
   --enable-fortran
 - ExcludeArch ppc64 until we can get it to build (bug #445423)
 


More information about the scm-commits mailing list