Gentoo Archives: gentoo-commits

From: Sam James <sam@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: sci-libs/mumps/
Date: Sat, 02 Jan 2021 07:02:47
Message-Id: 1609570784.8f7aa07ffcd30599cb3668e517cdf8d395529fd4.sam@gentoo
1 commit: 8f7aa07ffcd30599cb3668e517cdf8d395529fd4
2 Author: Sam James <sam <AT> gentoo <DOT> org>
3 AuthorDate: Sat Jan 2 06:59:35 2021 +0000
4 Commit: Sam James <sam <AT> gentoo <DOT> org>
5 CommitDate: Sat Jan 2 06:59:44 2021 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8f7aa07f
7
8 sci-libs/mumps: add gcc 10 workaround
9
10 Closes: https://bugs.gentoo.org/743442
11 Package-Manager: Portage-3.0.12, Repoman-3.0.2
12 Signed-off-by: Sam James <sam <AT> gentoo.org>
13
14 sci-libs/mumps/Manifest | 1 +
15 sci-libs/mumps/mumps-5.3.5.ebuild | 205 ++++++++++++++++++++++++++++++++++++++
16 2 files changed, 206 insertions(+)
17
18 diff --git a/sci-libs/mumps/Manifest b/sci-libs/mumps/Manifest
19 index d914fe1d94c..ef756342a87 100644
20 --- a/sci-libs/mumps/Manifest
21 +++ b/sci-libs/mumps/Manifest
22 @@ -1,2 +1,3 @@
23 DIST MUMPS_5.1.2.tar.gz 3351215 BLAKE2B 1c77c2a217c101245a9a96a59be6b9bfd67ceffa603d807b5a7173026c5c33e2c4de78c14833d7b7f0a90130b9ebc0ac9c7d4ebfbf881d0bd2210a542887c239 SHA512 38a63b14a8df835be68b5fa310b39aa1815799220d56c176e4005797800959e9e08c9a6bf11d308ab82ea40b6f34d36072cebe7c1de39e0c314eb138b93f1b74
24 DIST MUMPS_5.3.3.tar.gz 3912935 BLAKE2B 03b88e23b8dd49832c43aef4717edd440328ca7c63eed9005a6baa008090f63089e7a259fb8091ce462e249196c2a1de0ec1e864173e3ecc3265d5a9cef8b869 SHA512 fb2da6acfd0a413ed5a9b2ea346a191ecea4a057f26a8c3b8ed2400843753a354055eb911e53d9f6ed5a6818e653ab926579c1a4a261b791c5ae421fcd5a7945
25 +DIST MUMPS_5.3.5.tar.gz 3940501 BLAKE2B f1767483bb23744a2c5ed11b0823c5b023377d5212abbe29a177cce5b5e51e6f2f391d7caa17022646e36c9e4b4fb4af80b03ac6cf8e89f37502ed960138bbbe SHA512 6e3bb081f38af8540ada7b4fb54c6e766739c854e2a3dd253e3e012eee05dae30064b1b4a8d7493f10691725aba4cc9e80544b0fe5b71670cb0b2726ccfc4439
26
27 diff --git a/sci-libs/mumps/mumps-5.3.5.ebuild b/sci-libs/mumps/mumps-5.3.5.ebuild
28 new file mode 100644
29 index 00000000000..d88be408e3f
30 --- /dev/null
31 +++ b/sci-libs/mumps/mumps-5.3.5.ebuild
32 @@ -0,0 +1,205 @@
33 +# Copyright 1999-2021 Gentoo Authors
34 +# Distributed under the terms of the GNU General Public License v2
35 +
36 +EAPI=7
37 +
38 +inherit fortran-2 flag-o-matic toolchain-funcs
39 +
40 +MYP=MUMPS_${PV}
41 +
42 +DESCRIPTION="MUltifrontal Massively Parallel sparse direct matrix Solver"
43 +HOMEPAGE="http://mumps.enseeiht.fr/"
44 +SRC_URI="http://mumps.enseeiht.fr/${MYP}.tar.gz"
45 +S="${WORKDIR}/${MYP}"
46 +
47 +LICENSE="public-domain"
48 +SLOT="0"
49 +KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
50 +IUSE="doc examples metis mpi +scotch static-libs"
51 +
52 +BDEPEND="virtual/pkgconfig"
53 +RDEPEND="
54 + virtual/blas
55 + metis? (
56 + || ( >=sci-libs/metis-5 >=sci-libs/parmetis-4 )
57 + mpi? ( >=sci-libs/parmetis-4 )
58 + )
59 + mpi? ( sci-libs/scalapack )
60 + scotch? ( >=sci-libs/scotch-6.0.1:=[mpi=] )
61 +"
62 +DEPEND="${RDEPEND}"
63 +
64 +get_version_component_count() {
65 + local cnt=( $(ver_rs 1- ' ') )
66 + echo ${#cnt[@]} || die
67 +}
68 +
69 +static_to_shared() {
70 + local libstatic=${1}
71 + shift
72 + local libname=$(basename ${libstatic%.a})
73 + local soname=${libname}$(get_libname $(ver_cut 1-2))
74 + local libdir=$(dirname ${libstatic})
75 +
76 + einfo "Making ${soname} from ${libstatic}"
77 + if [[ ${CHOST} == *-darwin* ]] ; then
78 + ${LINK:-$(tc-getCC)} ${LDFLAGS} \
79 + -dynamiclib -install_name "${EPREFIX}"/usr/lib/"${soname}" \
80 + -Wl,-all_load -Wl,${libstatic} \
81 + "$@" -o ${libdir}/${soname} || die "${soname} failed"
82 + else
83 + ${LINK:-$(tc-getCC)} ${LDFLAGS} \
84 + -shared -Wl,-soname=${soname} \
85 + -Wl,--whole-archive ${libstatic} -Wl,--no-whole-archive \
86 + "$@" -o ${libdir}/${soname} || die "${soname} failed"
87 +
88 + if [[ $(get_version_component_count) -ge 1 ]] ; then
89 + ln -s ${soname} ${libdir}/${libname}$(get_libname $(ver_cut 1)) || die
90 + fi
91 +
92 + ln -s ${soname} ${libdir}/${libname}$(get_libname) || die
93 + fi
94 +}
95 +
96 +src_prepare() {
97 + # workaround for gcc10 (bug #743442)
98 + append-fflags $(test-flags-FC -fallow-argument-mismatch)
99 +
100 + sed -e "s;^\(CC\s*=\).*;\1$(tc-getCC);" \
101 + -e "s;^\(FC\s*=\).*;\1$(tc-getFC);" \
102 + -e "s;^\(FL\s*=\).*;\1$(tc-getFC);" \
103 + -e "s;^\(AR\s*=\).*;\1$(tc-getAR) cr ;" \
104 + -e "s;^\(RANLIB\s*=\).*;\1$(tc-getRANLIB);" \
105 + -e "s;^\(LIBBLAS\s*=\).*;\1$($(tc-getPKG_CONFIG) --libs blas);" \
106 + -e "s;^\(INCPAR\s*=\).*;\1;" \
107 + -e 's;^\(LIBPAR\s*=\).*;\1$(SCALAP);' \
108 + -e "s;^\(OPTF\s*=\).*;\1${FFLAGS} -DALLOW_NON_INIT \$(PIC);" \
109 + -e "s;^\(OPTC\s*=\).*;\1${CFLAGS} \$(PIC);" \
110 + -e "s;^\(OPTL\s*=\).*;\1${LDFLAGS};" \
111 + Make.inc/Makefile.inc.generic > Makefile.inc || die
112 + # fixed a missing copy of libseq to libdir
113 +
114 + default
115 +}
116 +
117 +src_configure() {
118 + LIBADD="$($(tc-getPKG_CONFIG) --libs blas) -Llib -lpord"
119 + local ord="-Dpord"
120 +
121 + if use metis && use mpi; then
122 + sed -i \
123 + -e "s;#\s*\(LMETIS\s*=\).*;\1$($(tc-getPKG_CONFIG) --libs parmetis);" \
124 + -e "s;#\s*\(IMETIS\s*=\).*;\1$($(tc-getPKG_CONFIG) --cflags parmetis);" \
125 + Makefile.inc || die
126 + LIBADD="${LIBADD} $($(tc-getPKG_CONFIG) --libs parmetis)"
127 + ord="${ord} -Dparmetis"
128 + elif use metis; then
129 + sed -i \
130 + -e "s;#\s*\(LMETIS\s*=\).*;\1$($(tc-getPKG_CONFIG) --libs metis);" \
131 + -e "s;#\s*\(IMETIS\s*=\).*;\1$($(tc-getPKG_CONFIG) --cflags metis);" \
132 + Makefile.inc || die
133 + LIBADD="${LIBADD} $($(tc-getPKG_CONFIG) --libs metis)"
134 + ord="${ord} -Dmetis"
135 + fi
136 + if use scotch && use mpi; then
137 + sed -i \
138 + -e "s;#\s*\(LSCOTCH\s*=\).*;\1-lptesmumps -lptscotch -lptscotcherr;" \
139 + -e "s;#\s*\(ISCOTCH\s*=\).*;\1-I${ESYSROOT}/usr/include/scotch;" \
140 + Makefile.inc || die
141 + LIBADD="${LIBADD} -lptesmumps -lptscotch -lptscotcherr"
142 + ord="${ord} -Dptscotch"
143 + elif use scotch; then
144 + sed -i \
145 + -e "s;#\s*\(LSCOTCH\s*=\).*;\1-lesmumps -lscotch -lscotcherr;" \
146 + -e "s;#\s*\(ISCOTCH\s*=\).*;\1-I${ESYSROOT}/usr/include/scotch;" \
147 + Makefile.inc || die
148 + LIBADD="${LIBADD} -lesmumps -lscotch -lscotcherr"
149 + ord="${ord} -Dscotch"
150 + fi
151 + if use mpi; then
152 + sed -i \
153 + -e "s;^\(CC\s*=\).*;\1mpicc;" \
154 + -e "s;^\(FC\s*=\).*;\1mpif90;" \
155 + -e "s;^\(FL\s*=\).*;\1mpif90;" \
156 + -e "s;^\(SCALAP\s*=\).*;\1$($(tc-getPKG_CONFIG) --libs scalapack);" \
157 + Makefile.inc || die
158 + export LINK=mpif90
159 + LIBADD="${LIBADD} $($(tc-getPKG_CONFIG) --libs scalapack)"
160 + else
161 + sed -i \
162 + -e 's;-Llibseq;-L$(topdir)/libseq;' \
163 + -e 's;PAR);SEQ);g' \
164 + -e "s;^\(SCALAP\s*=\).*;\1;" \
165 + -e 's;^LIBSEQNEEDED =;LIBSEQNEEDED = libseqneeded;g' \
166 + Makefile.inc || die
167 + export LINK="$(tc-getFC)"
168 + fi
169 + sed -i -e "s;^\s*\(ORDERINGSF\s*=\).*;\1 ${ord};" Makefile.inc || die
170 +}
171 +
172 +src_compile() {
173 + # Workaround #462602
174 + export FAKEROOTKEY=1
175 +
176 + # -j1 because of static archive race
177 + emake -j1 alllib PIC="-fPIC"
178 + if ! use mpi; then
179 + #$(tc-getAR) crs lib/libmumps_common.a libseq/*.o || die
180 + LIBADD+=" -Llibseq -lmpiseq"
181 + static_to_shared libseq/libmpiseq.a
182 + fi
183 +
184 + static_to_shared lib/libpord.a ${LIBADD}
185 + static_to_shared lib/libmumps_common.a ${LIBADD}
186 +
187 + local i
188 + for i in c d s z; do
189 + static_to_shared lib/lib${i}mumps.a -Llib -lmumps_common ${LIBADD}
190 + done
191 +
192 + if use static-libs; then
193 + emake clean
194 + emake -j1 alllib
195 + fi
196 +}
197 +
198 +src_test() {
199 + emake all
200 +
201 + local dotest
202 + if use mpi; then
203 + dotest="mpirun -np 2"
204 + else
205 + export LD_LIBRARY_PATH="${S}/libseq:${LD_LIBRARY_PATH}"
206 + fi
207 +
208 + cd examples
209 + ${dotest} ./ssimpletest < input_simpletest_real || die
210 + ${dotest} ./dsimpletest < input_simpletest_real || die
211 + ${dotest} ./csimpletest < input_simpletest_cmplx || die
212 + ${dotest} ./zsimpletest < input_simpletest_cmplx || die
213 + einfo "The solutions should be close to (1,2,3,4,5)"
214 + ${dotest} ./c_example || die
215 + einfo "The solution should be close to (1,2)"
216 + emake clean
217 +}
218 +
219 +src_install() {
220 + dolib.so lib/lib*$(get_libname)*
221 + use static-libs && dolib.a lib/lib*.a
222 + insinto /usr
223 +
224 + doins -r include
225 + if ! use mpi; then
226 + dolib.so libseq/lib*$(get_libname)*
227 + insinto /usr/include/mpiseq
228 + doins libseq/*.h
229 + use static-libs && dolib.a libseq/libmpiseq.a
230 + fi
231 +
232 + dodoc README ChangeLog VERSION
233 + use doc && dodoc doc/*.pdf
234 + if use examples; then
235 + dodoc -r examples
236 + fi
237 +}