commit:     8f7aa07ffcd30599cb3668e517cdf8d395529fd4
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Sat Jan  2 06:59:35 2021 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sat Jan  2 06:59:44 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8f7aa07f

sci-libs/mumps: add gcc 10 workaround

Closes: https://bugs.gentoo.org/743442
Package-Manager: Portage-3.0.12, Repoman-3.0.2
Signed-off-by: Sam James <sam <AT> gentoo.org>

 sci-libs/mumps/Manifest           |   1 +
 sci-libs/mumps/mumps-5.3.5.ebuild | 205 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 206 insertions(+)

diff --git a/sci-libs/mumps/Manifest b/sci-libs/mumps/Manifest
index d914fe1d94c..ef756342a87 100644
--- a/sci-libs/mumps/Manifest
+++ b/sci-libs/mumps/Manifest
@@ -1,2 +1,3 @@
 DIST MUMPS_5.1.2.tar.gz 3351215 BLAKE2B 
1c77c2a217c101245a9a96a59be6b9bfd67ceffa603d807b5a7173026c5c33e2c4de78c14833d7b7f0a90130b9ebc0ac9c7d4ebfbf881d0bd2210a542887c239
 SHA512 
38a63b14a8df835be68b5fa310b39aa1815799220d56c176e4005797800959e9e08c9a6bf11d308ab82ea40b6f34d36072cebe7c1de39e0c314eb138b93f1b74
 DIST MUMPS_5.3.3.tar.gz 3912935 BLAKE2B 
03b88e23b8dd49832c43aef4717edd440328ca7c63eed9005a6baa008090f63089e7a259fb8091ce462e249196c2a1de0ec1e864173e3ecc3265d5a9cef8b869
 SHA512 
fb2da6acfd0a413ed5a9b2ea346a191ecea4a057f26a8c3b8ed2400843753a354055eb911e53d9f6ed5a6818e653ab926579c1a4a261b791c5ae421fcd5a7945
+DIST MUMPS_5.3.5.tar.gz 3940501 BLAKE2B 
f1767483bb23744a2c5ed11b0823c5b023377d5212abbe29a177cce5b5e51e6f2f391d7caa17022646e36c9e4b4fb4af80b03ac6cf8e89f37502ed960138bbbe
 SHA512 
6e3bb081f38af8540ada7b4fb54c6e766739c854e2a3dd253e3e012eee05dae30064b1b4a8d7493f10691725aba4cc9e80544b0fe5b71670cb0b2726ccfc4439

diff --git a/sci-libs/mumps/mumps-5.3.5.ebuild 
b/sci-libs/mumps/mumps-5.3.5.ebuild
new file mode 100644
index 00000000000..d88be408e3f
--- /dev/null
+++ b/sci-libs/mumps/mumps-5.3.5.ebuild
@@ -0,0 +1,205 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit fortran-2 flag-o-matic toolchain-funcs
+
+MYP=MUMPS_${PV}
+
+DESCRIPTION="MUltifrontal Massively Parallel sparse direct matrix Solver"
+HOMEPAGE="http://mumps.enseeiht.fr/";
+SRC_URI="http://mumps.enseeiht.fr/${MYP}.tar.gz";
+S="${WORKDIR}/${MYP}"
+
+LICENSE="public-domain"
+SLOT="0"
+KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
+IUSE="doc examples metis mpi +scotch static-libs"
+
+BDEPEND="virtual/pkgconfig"
+RDEPEND="
+       virtual/blas
+       metis? (
+                  || ( >=sci-libs/metis-5 >=sci-libs/parmetis-4 )
+                  mpi? ( >=sci-libs/parmetis-4 )
+       )
+       mpi? ( sci-libs/scalapack )
+       scotch? ( >=sci-libs/scotch-6.0.1:=[mpi=] )
+"
+DEPEND="${RDEPEND}"
+
+get_version_component_count() {
+       local cnt=( $(ver_rs 1- ' ') )
+       echo ${#cnt[@]} || die
+}
+
+static_to_shared() {
+       local libstatic=${1}
+       shift
+       local libname=$(basename ${libstatic%.a})
+       local soname=${libname}$(get_libname $(ver_cut 1-2))
+       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"
+
+               if [[ $(get_version_component_count) -ge 1 ]] ; then
+                       ln -s ${soname} ${libdir}/${libname}$(get_libname 
$(ver_cut 1)) || die
+               fi
+
+               ln -s ${soname} ${libdir}/${libname}$(get_libname) || die
+       fi
+}
+
+src_prepare() {
+       # workaround for gcc10 (bug #743442)
+       append-fflags $(test-flags-FC -fallow-argument-mismatch)
+
+       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};" \
+               Make.inc/Makefile.inc.generic > Makefile.inc || die
+       # fixed a missing copy of libseq to libdir
+
+       default
+}
+
+src_configure() {
+       LIBADD="$($(tc-getPKG_CONFIG) --libs blas) -Llib -lpord"
+       local ord="-Dpord"
+
+       if use metis && use mpi; then
+               sed -i \
+                       -e "s;#\s*\(LMETIS\s*=\).*;\1$($(tc-getPKG_CONFIG) 
--libs parmetis);" \
+                       -e "s;#\s*\(IMETIS\s*=\).*;\1$($(tc-getPKG_CONFIG) 
--cflags parmetis);" \
+                       Makefile.inc || die
+               LIBADD="${LIBADD} $($(tc-getPKG_CONFIG) --libs parmetis)"
+               ord="${ord} -Dparmetis"
+       elif use metis; then
+               sed -i \
+                       -e "s;#\s*\(LMETIS\s*=\).*;\1$($(tc-getPKG_CONFIG) 
--libs metis);" \
+                       -e "s;#\s*\(IMETIS\s*=\).*;\1$($(tc-getPKG_CONFIG) 
--cflags metis);" \
+                       Makefile.inc || die
+               LIBADD="${LIBADD} $($(tc-getPKG_CONFIG) --libs metis)"
+               ord="${ord} -Dmetis"
+       fi
+       if use scotch && use mpi; then
+               sed -i \
+                       -e "s;#\s*\(LSCOTCH\s*=\).*;\1-lptesmumps -lptscotch 
-lptscotcherr;" \
+                       -e 
"s;#\s*\(ISCOTCH\s*=\).*;\1-I${ESYSROOT}/usr/include/scotch;" \
+                       Makefile.inc || die
+               LIBADD="${LIBADD} -lptesmumps -lptscotch -lptscotcherr"
+               ord="${ord} -Dptscotch"
+       elif use scotch; then
+               sed -i \
+                       -e "s;#\s*\(LSCOTCH\s*=\).*;\1-lesmumps -lscotch 
-lscotcherr;" \
+                       -e 
"s;#\s*\(ISCOTCH\s*=\).*;\1-I${ESYSROOT}/usr/include/scotch;" \
+                       Makefile.inc || die
+               LIBADD="${LIBADD} -lesmumps -lscotch -lscotcherr"
+               ord="${ord} -Dscotch"
+       fi
+       if use mpi; then
+               sed -i \
+                       -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);" \
+                       Makefile.inc || die
+               export LINK=mpif90
+               LIBADD="${LIBADD} $($(tc-getPKG_CONFIG) --libs scalapack)"
+       else
+               sed -i \
+                       -e 's;-Llibseq;-L$(topdir)/libseq;' \
+                       -e 's;PAR);SEQ);g' \
+                       -e "s;^\(SCALAP\s*=\).*;\1;" \
+                       -e 's;^LIBSEQNEEDED =;LIBSEQNEEDED = libseqneeded;g' \
+                       Makefile.inc || die
+               export LINK="$(tc-getFC)"
+       fi
+       sed -i -e "s;^\s*\(ORDERINGSF\s*=\).*;\1 ${ord};" Makefile.inc || die
+}
+
+src_compile() {
+       # Workaround #462602
+       export FAKEROOTKEY=1
+
+       # -j1 because of static archive race
+       emake -j1 alllib PIC="-fPIC"
+       if ! use mpi; then
+               #$(tc-getAR) crs lib/libmumps_common.a libseq/*.o || die
+               LIBADD+=" -Llibseq -lmpiseq"
+               static_to_shared libseq/libmpiseq.a
+       fi
+
+       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
+
+       if use static-libs; then
+               emake clean
+               emake -j1 alllib
+       fi
+}
+
+src_test() {
+       emake all
+
+       local dotest
+       if use mpi; then
+               dotest="mpirun -np 2"
+       else
+               export LD_LIBRARY_PATH="${S}/libseq:${LD_LIBRARY_PATH}"
+       fi
+
+       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)"
+       emake clean
+}
+
+src_install() {
+       dolib.so lib/lib*$(get_libname)*
+       use static-libs && dolib.a lib/lib*.a
+       insinto /usr
+
+       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
+
+       dodoc README ChangeLog VERSION
+       use doc && dodoc doc/*.pdf
+       if use examples; then
+               dodoc -r examples
+       fi
+}

Reply via email to