You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
209 lines
5.7 KiB
209 lines
5.7 KiB
4 years ago
|
# Copyright 1999-2021 Gentoo Authors
|
||
6 years ago
|
# Distributed under the terms of the GNU General Public License v2
|
||
|
|
||
4 years ago
|
EAPI=7
|
||
6 years ago
|
|
||
4 years ago
|
inherit fortran-2 flag-o-matic multilib toolchain-funcs
|
||
6 years ago
|
|
||
|
MYP=MUMPS_${PV}
|
||
|
|
||
|
DESCRIPTION="MUltifrontal Massively Parallel sparse direct matrix Solver"
|
||
|
HOMEPAGE="http://mumps.enseeiht.fr/"
|
||
5 years ago
|
SRC_URI="http://mumps.enseeiht.fr/${MYP}.tar.gz"
|
||
4 years ago
|
S="${WORKDIR}/${MYP}"
|
||
6 years ago
|
|
||
|
LICENSE="public-domain"
|
||
|
SLOT="0"
|
||
|
KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
|
||
|
IUSE="doc examples metis mpi +scotch static-libs"
|
||
|
|
||
4 years ago
|
BDEPEND="virtual/pkgconfig"
|
||
6 years ago
|
RDEPEND="
|
||
|
virtual/blas
|
||
4 years ago
|
metis? (
|
||
3 years ago
|
>=sci-libs/metis-5
|
||
|
mpi? ( >=sci-libs/parmetis-4 )
|
||
4 years ago
|
)
|
||
|
mpi? ( sci-libs/scalapack )
|
||
3 years ago
|
!mpi? ( virtual/lapack )
|
||
4 years ago
|
scotch? ( >=sci-libs/scotch-6.0.1:=[mpi=] )
|
||
|
"
|
||
|
DEPEND="${RDEPEND}"
|
||
|
|
||
4 years ago
|
_get_version_component_count() {
|
||
4 years ago
|
local cnt=( $(ver_rs 1- ' ') )
|
||
|
echo ${#cnt[@]} || die
|
||
|
}
|
||
6 years ago
|
|
||
|
static_to_shared() {
|
||
4 years ago
|
local libstatic=${1}
|
||
|
shift
|
||
6 years ago
|
local libname=$(basename ${libstatic%.a})
|
||
4 years ago
|
local soname=${libname}$(get_libname $(ver_cut 1-2))
|
||
6 years ago
|
local libdir=$(dirname ${libstatic})
|
||
|
|
||
|
einfo "Making ${soname} from ${libstatic}"
|
||
|
if [[ ${CHOST} == *-darwin* ]] ; then
|
||
|
${LINK:-$(tc-getCC)} ${LDFLAGS} \
|
||
|
-dynamiclib -install_name "${EPREFIX}"/usr/lib/"${soname}" \
|
||
|
-Wl,-all_load -Wl,${libstatic} \
|
||
|
"$@" -o ${libdir}/${soname} || die "${soname} failed"
|
||
|
else
|
||
|
${LINK:-$(tc-getCC)} ${LDFLAGS} \
|
||
|
-shared -Wl,-soname=${soname} \
|
||
|
-Wl,--whole-archive ${libstatic} -Wl,--no-whole-archive \
|
||
|
"$@" -o ${libdir}/${soname} || die "${soname} failed"
|
||
4 years ago
|
|
||
4 years ago
|
if [[ $(_get_version_component_count) -ge 1 ]] ; then
|
||
4 years ago
|
ln -s ${soname} ${libdir}/${libname}$(get_libname $(ver_cut 1)) || die
|
||
|
fi
|
||
|
|
||
|
ln -s ${soname} ${libdir}/${libname}$(get_libname) || die
|
||
6 years ago
|
fi
|
||
|
}
|
||
|
|
||
|
src_prepare() {
|
||
4 years ago
|
# workaround for gcc10 (bug #743442)
|
||
|
append-fflags $(test-flags-FC -fallow-argument-mismatch)
|
||
|
|
||
4 years ago
|
sed -e "s;^\(CC\s*=\).*;\1$(tc-getCC);" \
|
||
|
-e "s;^\(FC\s*=\).*;\1$(tc-getFC);" \
|
||
|
-e "s;^\(FL\s*=\).*;\1$(tc-getFC);" \
|
||
|
-e "s;^\(AR\s*=\).*;\1$(tc-getAR) cr ;" \
|
||
|
-e "s;^\(RANLIB\s*=\).*;\1$(tc-getRANLIB);" \
|
||
|
-e "s;^\(LIBBLAS\s*=\).*;\1$($(tc-getPKG_CONFIG) --libs blas);" \
|
||
|
-e "s;^\(INCPAR\s*=\).*;\1;" \
|
||
|
-e 's;^\(LIBPAR\s*=\).*;\1$(SCALAP);' \
|
||
|
-e "s;^\(OPTF\s*=\).*;\1${FFLAGS} -DALLOW_NON_INIT \$(PIC);" \
|
||
|
-e "s;^\(OPTC\s*=\).*;\1${CFLAGS} \$(PIC);" \
|
||
|
-e "s;^\(OPTL\s*=\).*;\1${LDFLAGS};" \
|
||
6 years ago
|
Make.inc/Makefile.inc.generic > Makefile.inc || die
|
||
|
# fixed a missing copy of libseq to libdir
|
||
|
|
||
|
default
|
||
|
}
|
||
|
|
||
|
src_configure() {
|
||
3 years ago
|
# We abuse LIBADD here to work around the fact that MUMPS is criminally
|
||
|
# underlinked.
|
||
6 years ago
|
LIBADD="$($(tc-getPKG_CONFIG) --libs blas) -Llib -lpord"
|
||
|
local ord="-Dpord"
|
||
4 years ago
|
|
||
6 years ago
|
if use metis && use mpi; then
|
||
|
sed -i \
|
||
4 years ago
|
-e "s;#\s*\(LMETIS\s*=\).*;\1$($(tc-getPKG_CONFIG) --libs parmetis);" \
|
||
|
-e "s;#\s*\(IMETIS\s*=\).*;\1$($(tc-getPKG_CONFIG) --cflags parmetis);" \
|
||
6 years ago
|
Makefile.inc || die
|
||
|
LIBADD="${LIBADD} $($(tc-getPKG_CONFIG) --libs parmetis)"
|
||
|
ord="${ord} -Dparmetis"
|
||
|
elif use metis; then
|
||
|
sed -i \
|
||
4 years ago
|
-e "s;#\s*\(LMETIS\s*=\).*;\1$($(tc-getPKG_CONFIG) --libs metis);" \
|
||
|
-e "s;#\s*\(IMETIS\s*=\).*;\1$($(tc-getPKG_CONFIG) --cflags metis);" \
|
||
6 years ago
|
Makefile.inc || die
|
||
|
LIBADD="${LIBADD} $($(tc-getPKG_CONFIG) --libs metis)"
|
||
|
ord="${ord} -Dmetis"
|
||
|
fi
|
||
|
if use scotch && use mpi; then
|
||
|
sed -i \
|
||
4 years ago
|
-e "s;#\s*\(LSCOTCH\s*=\).*;\1-lptesmumps -lptscotch -lptscotcherr;" \
|
||
|
-e "s;#\s*\(ISCOTCH\s*=\).*;\1-I${ESYSROOT}/usr/include/scotch;" \
|
||
6 years ago
|
Makefile.inc || die
|
||
|
LIBADD="${LIBADD} -lptesmumps -lptscotch -lptscotcherr"
|
||
|
ord="${ord} -Dptscotch"
|
||
|
elif use scotch; then
|
||
|
sed -i \
|
||
4 years ago
|
-e "s;#\s*\(LSCOTCH\s*=\).*;\1-lesmumps -lscotch -lscotcherr;" \
|
||
|
-e "s;#\s*\(ISCOTCH\s*=\).*;\1-I${ESYSROOT}/usr/include/scotch;" \
|
||
6 years ago
|
Makefile.inc || die
|
||
|
LIBADD="${LIBADD} -lesmumps -lscotch -lscotcherr"
|
||
|
ord="${ord} -Dscotch"
|
||
|
fi
|
||
|
if use mpi; then
|
||
|
sed -i \
|
||
4 years ago
|
-e "s;^\(CC\s*=\).*;\1mpicc;" \
|
||
|
-e "s;^\(FC\s*=\).*;\1mpif90;" \
|
||
|
-e "s;^\(FL\s*=\).*;\1mpif90;" \
|
||
|
-e "s;^\(SCALAP\s*=\).*;\1$($(tc-getPKG_CONFIG) --libs scalapack);" \
|
||
6 years ago
|
Makefile.inc || die
|
||
|
export LINK=mpif90
|
||
|
LIBADD="${LIBADD} $($(tc-getPKG_CONFIG) --libs scalapack)"
|
||
|
else
|
||
|
sed -i \
|
||
4 years ago
|
-e 's;-Llibseq;-L$(topdir)/libseq;' \
|
||
|
-e 's;PAR);SEQ);g' \
|
||
|
-e "s;^\(SCALAP\s*=\).*;\1;" \
|
||
|
-e 's;^LIBSEQNEEDED =;LIBSEQNEEDED = libseqneeded;g' \
|
||
6 years ago
|
Makefile.inc || die
|
||
3 years ago
|
LIBADD="${LIBADD} $($(tc-getPKG_CONFIG) --libs lapack)"
|
||
6 years ago
|
export LINK="$(tc-getFC)"
|
||
|
fi
|
||
4 years ago
|
sed -i -e "s;^\s*\(ORDERINGSF\s*=\).*;\1 ${ord};" Makefile.inc || die
|
||
6 years ago
|
}
|
||
|
|
||
|
src_compile() {
|
||
|
# Workaround #462602
|
||
|
export FAKEROOTKEY=1
|
||
|
|
||
4 years ago
|
emake alllib PIC="-fPIC"
|
||
6 years ago
|
if ! use mpi; then
|
||
|
#$(tc-getAR) crs lib/libmumps_common.a libseq/*.o || die
|
||
|
LIBADD+=" -Llibseq -lmpiseq"
|
||
|
static_to_shared libseq/libmpiseq.a
|
||
|
fi
|
||
4 years ago
|
|
||
6 years ago
|
static_to_shared lib/libpord.a ${LIBADD}
|
||
|
static_to_shared lib/libmumps_common.a ${LIBADD}
|
||
|
|
||
|
local i
|
||
|
for i in c d s z; do
|
||
|
static_to_shared lib/lib${i}mumps.a -Llib -lmumps_common ${LIBADD}
|
||
|
done
|
||
4 years ago
|
|
||
6 years ago
|
if use static-libs; then
|
||
|
emake clean
|
||
4 years ago
|
emake alllib
|
||
6 years ago
|
fi
|
||
|
}
|
||
|
|
||
|
src_test() {
|
||
|
emake all
|
||
4 years ago
|
|
||
6 years ago
|
local dotest
|
||
|
if use mpi; then
|
||
|
dotest="mpirun -np 2"
|
||
|
else
|
||
|
export LD_LIBRARY_PATH="${S}/libseq:${LD_LIBRARY_PATH}"
|
||
|
fi
|
||
4 years ago
|
|
||
6 years ago
|
cd examples
|
||
|
${dotest} ./ssimpletest < input_simpletest_real || die
|
||
|
${dotest} ./dsimpletest < input_simpletest_real || die
|
||
|
${dotest} ./csimpletest < input_simpletest_cmplx || die
|
||
|
${dotest} ./zsimpletest < input_simpletest_cmplx || die
|
||
|
einfo "The solutions should be close to (1,2,3,4,5)"
|
||
|
${dotest} ./c_example || die
|
||
|
einfo "The solution should be close to (1,2)"
|
||
4 years ago
|
emake clean
|
||
6 years ago
|
}
|
||
|
|
||
|
src_install() {
|
||
|
dolib.so lib/lib*$(get_libname)*
|
||
|
use static-libs && dolib.a lib/lib*.a
|
||
|
insinto /usr
|
||
4 years ago
|
|
||
6 years ago
|
doins -r include
|
||
|
if ! use mpi; then
|
||
|
dolib.so libseq/lib*$(get_libname)*
|
||
|
insinto /usr/include/mpiseq
|
||
|
doins libseq/*.h
|
||
|
use static-libs && dolib.a libseq/libmpiseq.a
|
||
|
fi
|
||
4 years ago
|
|
||
6 years ago
|
dodoc README ChangeLog VERSION
|
||
|
use doc && dodoc doc/*.pdf
|
||
|
if use examples; then
|
||
4 years ago
|
dodoc -r examples
|
||
6 years ago
|
fi
|
||
|
}
|