[MUMPS] Conform MUMPS packaging to MPI Guidelines (bz#986708)
Antonio Trande
sagitter at fedoraproject.org
Sun Jul 28 10:55:04 UTC 2013
commit d54b73a82db0e0778941ccf24ff0868e0eb300c8
Author: sagitter <sagitter at fedoraproject.org>
Date: Sun Jul 28 12:54:33 2013 +0200
Conform MUMPS packaging to MPI Guidelines (bz#986708)
MUMPS-Makefile.par.inc | 2 +-
MUMPS.spec | 197 ++++++++++++++++++++++++++++++++++++++---------
2 files changed, 160 insertions(+), 39 deletions(-)
---
diff --git a/MUMPS-Makefile.par.inc b/MUMPS-Makefile.par.inc
index 282cdd9..165d064 100644
--- a/MUMPS-Makefile.par.inc
+++ b/MUMPS-Makefile.par.inc
@@ -77,7 +77,7 @@ SCALAP = -lscalapack -lmpiblacs
#INCPAR = -I/usr/local/include
INCPAR = $(MUMPS_INCDIR)
#LIBPAR = $(SCALAP) -L/usr/local/lib/ -llammpio -llamf77mpi -lmpi -llam -lutil -ldl -lpthread
-MPIFLIB = -lmpi_mpifh
+MPIFLIB = @@MPIFORTRANLIB@@
MPICLIB = -lmpi
LIBPAR = $(SCALAP) $(MPIFLIB)
# See point 17 in the FAQ to have more details on the compilation of mpich with gfortran
diff --git a/MUMPS.spec b/MUMPS.spec
index dd0eead..cec45fb 100644
--- a/MUMPS.spec
+++ b/MUMPS.spec
@@ -1,6 +1,13 @@
+## Define libraries' destination
+%define _incmpidir %{_includedir}/openmpi-%{_arch}
+%define _libmpidir %{_libdir}/openmpi/lib
+
+## Define if use openmpi or not
+%define with_openmpi 1
+
Name: MUMPS
Version: 4.10.0
-Release: 10%{?dist}
+Release: 11%{?dist}
Summary: A MUltifrontal Massively Parallel sparse direct Solver
License: Public Domain
Group: Development/Libraries
@@ -18,8 +25,19 @@ Patch1: %{name}-shared-pord.patch
Patch2: %{name}-shared.patch
BuildRequires: gcc-gfortran, blas-devel, lapack-devel
-BuildRequires: openmpi-devel >= 1.7.2, scalapack-openmpi-devel, blacs-openmpi-devel >= 1.1-50
+BuildRequires: scalapack-openmpi-devel
+
+%if 0%{?fedora} >= 20
+BuildRequires: openmpi-devel >= 1.7.2
+BuildRequires: blacs-openmpi-devel >= 1.1-50
+%else
+BuildRequires: openmpi-devel < 1.7.2
+BuildRequires: blacs-openmpi-devel < 1.1-50
+%endif
+
BuildRequires: openssh-clients
+Requires: %{name}-common = %{version}-%{release}
+Requires: environment-modules
%description
MUMPS implements a direct solver for large sparse linear systems, with a
@@ -31,26 +49,46 @@ C interfaces, and can interface with ordering tools such as Scotch.
Summary: The MUMPS headers and development-related files
Group: Development/Libraries
Requires: %{name}%{?_isa} = %{version}-%{release}
+Requires: %{name}-common = %{version}-%{release}
%description devel
Shared links, header files for MUMPS.
-%package doc
-Summary: The MUMPS documentation files
-Group: Development/Libraries
-Requires: %{name}%{?_isa} = %{version}-%{release}
-%description doc
-This document describes the Fortran 90 and C user interfaces to
-MUMPS 4.10.0 . It describes in detail the data structures, parameters,
-calling sequences, and error diagnostics. Basic example programs
-using MUMPS are also provided.
-
%package examples
-Summary: MUMPS illustrative test programs
+Summary: The MUMPS common illustrative test programs
Group: Development/Libraries
Requires: %{name}%{?_isa} = %{version}-%{release}
+Requires: %{name}-common = %{version}-%{release}
%description examples
-Illustrative test programs about how MUMPS can be used
-See README file
+This package contains common illustrative
+test programs about how MUMPS can be used.
+
+%package common
+Summary: Documentation files for MUMPS
+Group: Development/Libraries
+BuildArch: noarch
+%description common
+This package contains common documentation files for MUMPS.
+
+########################################################
+%if %{with_openmpi}
+%package openmpi
+Summary: MUMPS libraries compiled against openmpi
+Group: Development/Libraries
+BuildRequires: openmpi-devel
+Requires: %{name}-common = %{version}-%{release}
+%description openmpi
+MUMPS libraries compiled against openmpi
+
+%package openmpi-devel
+Summary: The MUMPS headers and development-related files
+Group: Development/Libraries
+BuildRequires: openmpi-devel
+Requires: %{name}-common = %{version}-%{release}
+Requires: %{name}-openmpi%{?_isa} = %{version}-%{release}
+%description openmpi-devel
+Shared links, header files for MUMPS.
+%endif
+##########################################################
%prep
%setup -q -n %{name}_%{version}
@@ -59,6 +97,8 @@ See README file
%patch1 -p1
%patch2 -p1
+mv examples/README examples/README-examples
+
%build
# Build parallel version.
@@ -69,22 +109,58 @@ cp -f %{SOURCE1} Makefile.inc
sed -e 's|@@CFLAGS@@|%{optflags}|g' -i Makefile.inc
sed -e 's|@@-O@@|-Wl,--as-needed|g' -i Makefile.inc
+%if 0%{?fedora} >= 20
+sed -e 's|@@MPIFORTRANLIB@@|-lmpi_mpifh|g' -i Makefile.inc
+%else
+sed -e 's|@@MPIFORTRANLIB@@|-lmpi_f77|g' -i Makefile.inc
+%endif
+
MUMPS_MPI=openmpi
MUMPS_INCDIR=-I/usr/include/openmpi-%{_arch}
+%if 0%{?fedora} >= 20
MUMPS_LIBF77="\
--L%{_libdir}/openmpi -L%{_libdir}/openmpi/lib \
- -lmpi -lmpi_mpifh -lscalapack -lmpiblacs \
+-L%{_libdir}/openmpi -L%{_libdir}/openmpi/lib -lmpi \
+ -lmpi_mpifh -lscalapack -lmpiblacs \
-lmpiblacsF77init -lmpiblacsCinit -llapack"
+%else
+MUMPS_LIBF77="\
+-L%{_libdir}/openmpi -L%{_libdir}/openmpi/lib -lmpi \
+ -lmpi_f77 -lscalapack -lmpiblacs \
+ -lmpiblacsF77init -lmpiblacsCinit -llapack"
+%endif
+
+#######################################################
+## Build MPI version
+%if %{with_openmpi}
+%{_openmpi_load}
+make MUMPS_MPI="$MUMPS_MPI" \
+ MUMPS_INCDIR="$MUMPS_INCDIR" \
+ MUMPS_LIBF77="$MUMPS_LIBF77" \
+ all
+%{_openmpi_unload}
+%else
+
+## Build serial version
make MUMPS_MPI="$MUMPS_MPI" \
MUMPS_INCDIR="$MUMPS_INCDIR" \
MUMPS_LIBF77="$MUMPS_LIBF77" \
all
+%endif
+#######################################################
# Make sure documentation is using Unicode.
iconv -f iso8859-1 -t utf-8 README > README-t && mv README-t README
+%post -p /sbin/ldconfig
+%postun -p /sbin/ldconfig
+
+%if %{with_openmpi}
+%post openmpi -p /sbin/ldconfig
+%postun openmpi -p /sbin/ldconfig
+%endif
+
%check
# Running test programs showing how MUMPS can be used
cd examples
@@ -92,23 +168,49 @@ cd examples
%if 0%{?rhel}
module load %{_sysconfdir}/modulefiles/openmpi-%{_arch}
%else
-module load mpi
+%{_openmpi_load}
%endif
-
LD_LIBRARY_PATH=$PWD:../lib:$LD_LIBRARY_PATH ./ssimpletest < input_simpletest_real
LD_LIBRARY_PATH=$PWD:../lib:$LD_LIBRARY_PATH ./csimpletest < input_simpletest_cmplx
+%{_openmpi_unload}
cd ../
%install
-mkdir -p $RPM_BUILD_ROOT%{_defaultdocdir}/%{name}-%{version}
+mkdir -p $RPM_BUILD_ROOT%{_defaultdocdir}/%{name}-common-%{version}
+mkdir -p $RPM_BUILD_ROOT%{_libexecdir}/%{name}-%{version}/examples
mkdir -p $RPM_BUILD_ROOT%{_libdir}
-mkdir -p $RPM_BUILD_ROOT%{_libdir}/%{name}-examples
-mkdir -p $RPM_BUILD_ROOT%{_includedir}
mkdir -p $RPM_BUILD_ROOT%{_includedir}/%{name}
-# Install documentation
-install -cpm 644 README $RPM_BUILD_ROOT%{_defaultdocdir}/%{name}-%{version}
+#########################################################
+%if %{with_openmpi}
+mkdir -p $RPM_BUILD_ROOT%{_libmpidir}
+mkdir -p $RPM_BUILD_ROOT%{_libmpidir}/%{name}-%{version}/examples
+mkdir -p $RPM_BUILD_ROOT%{_incmpidir}
+
+%{_openmpi_load}
+# Install libraries.
+install -cpm 755 lib/lib*-*.so $RPM_BUILD_ROOT%{_libmpidir}
+
+# Install development files.
+install -cpm 755 lib/libmumps_common.so $RPM_BUILD_ROOT%{_libmpidir}
+install -cpm 755 lib/lib*mumps.so $RPM_BUILD_ROOT%{_libmpidir}
+install -cpm 755 lib/lib*mumps-%{version}.so $RPM_BUILD_ROOT%{_libmpidir}
+install -cpm 755 lib/libpord-%{version}.so $RPM_BUILD_ROOT%{_libmpidir}
+install -cpm 755 lib/libpord.so $RPM_BUILD_ROOT%{_libmpidir}
+
+# Make symbolic links instead hard-link
+ln -sf %{_libmpidir}/libsmumps-%{version}.so $RPM_BUILD_ROOT%{_libmpidir}/libsmumps.so
+ln -sf %{_libmpidir}/libcmumps-%{version}.so $RPM_BUILD_ROOT%{_libmpidir}/libcmumps.so
+ln -sf %{_libmpidir}/libzmumps-%{version}.so $RPM_BUILD_ROOT%{_libmpidir}/libzmumps.so
+ln -sf %{_libmpidir}/libdmumps-%{version}.so $RPM_BUILD_ROOT%{_libmpidir}/libdmumps.so
+ln -sf %{_libmpidir}/libmumps_common-%{version}.so $RPM_BUILD_ROOT%{_libmpidir}/libmumps_common.so
+ln -sf %{_libmpidir}/libpord-%{version}.so $RPM_BUILD_ROOT%{_libmpidir}/libpord.so
+
+install -cpm 644 include/*.h $RPM_BUILD_ROOT%{_incmpidir}
+%{_openmpi_load}
+%endif
+##########################################################
# Install libraries.
install -cpm 755 lib/lib*-*.so $RPM_BUILD_ROOT%{_libdir}
@@ -129,38 +231,57 @@ ln -sf %{_libdir}/libmumps_common-%{version}.so $RPM_BUILD_ROOT%{_libdir}/libmum
ln -sf %{_libdir}/libpord-%{version}.so $RPM_BUILD_ROOT%{_libdir}/libpord.so
install -cpm 644 include/*.h $RPM_BUILD_ROOT%{_includedir}/%{name}
-install -cpm 755 examples/?simpletest $RPM_BUILD_ROOT%{_libdir}/%{name}-examples
-install -cpm 755 examples/input_* $RPM_BUILD_ROOT%{_libdir}/%{name}-examples
-
-%post -p /sbin/ldconfig
-%postun -p /sbin/ldconfig
+install -cpm 755 examples/?simpletest $RPM_BUILD_ROOT%{_libexecdir}/%{name}-%{version}/examples
+install -cpm 755 examples/input_* $RPM_BUILD_ROOT%{_libexecdir}/%{name}-%{version}/examples
+install -cpm 644 examples/README-examples $RPM_BUILD_ROOT%{_defaultdocdir}/%{name}-common-%{version}
+install -cpm 644 doc/*.pdf $RPM_BUILD_ROOT%{_defaultdocdir}/%{name}-common-%{version}
+install -cpm 644 ChangeLog LICENSE README $RPM_BUILD_ROOT%{_defaultdocdir}/%{name}-common-%{version}
+
+#######################################################
+%if %{with_openmpi}
+%files openmpi
+%{_libmpidir}/libpord-%{version}.so
+%{_libmpidir}/lib?mumps-%{version}.so
+%{_libmpidir}/libmumps_common-%{version}.so
+
+%files openmpi-devel
+%{_incmpidir}/*.h
+%{_libmpidir}/lib?mumps.so
+%{_libmpidir}/libmumps_common.so
+%{_libmpidir}/libpord.so
+%endif
+#######################################################
%files
-%doc README LICENSE ChangeLog
%{_libdir}/libpord-%{version}.so
%{_libdir}/lib?mumps-%{version}.so
%{_libdir}/libmumps_common-%{version}.so
%files devel
-%doc ChangeLog
%dir %{_includedir}/%{name}
%{_includedir}/%{name}/*.h
%{_libdir}/lib?mumps.so
%{_libdir}/libmumps_common.so
%{_libdir}/libpord.so
-%files doc
-%doc doc/*.pdf
+%files common
+## This directory contains README*, LICENSE, ChangeLog, UserGuide files
+%{_defaultdocdir}/%{name}-common-%{version}/
%files examples
-%doc examples/README
-%dir %{_libdir}/%{name}-examples
-%{_libdir}/%{name}-examples/*simpletest
-%{_libdir}/%{name}-examples/*_simpletest_*
-
+%dir %{_libexecdir}/%{name}-%{version}
+%{_libexecdir}/%{name}-%{version}/examples/
%changelog
+* Fri Jul 27 2013 Antonio Trande <sagitter at fedoraproject.org> - 4.10.0-11
+- Added new macros for 'openmpi' destination directories
+- Done some package modifications according to MPI guidelines
+- This .spec file now produces '-openmpi', '-openmpi-devel', '-common' packages
+- Added MUMPS packaging in "serial mode"
+- %%{name}-common package is a noarch
+- Added an '-examples' subpackage that contains all test programs
+
* Tue Jul 23 2013 Antonio Trande <sagitter at fedoraproject.org> - 4.10.0-10
- 'openmpi-devel' BR changed to 'openmpi-devel>=1.7'
- 'blacs-openmpi-devel' BR changed to 'blacs-openmpi-devel>=1.1-50'
More information about the scm-commits
mailing list