Gentoo Archives: gentoo-commits

From: David Seifert <soap@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: sci-biology/tree-puzzle/files/, sci-biology/tree-puzzle/
Date: Sat, 29 Jan 2022 00:00:42
Message-Id: 1643414414.8fe21c3fd5b5e7be60a75a09ba4b3ec4bad417bd.soap@gentoo
1 commit: 8fe21c3fd5b5e7be60a75a09ba4b3ec4bad417bd
2 Author: David Seifert <soap <AT> gentoo <DOT> org>
3 AuthorDate: Sat Jan 29 00:00:14 2022 +0000
4 Commit: David Seifert <soap <AT> gentoo <DOT> org>
5 CommitDate: Sat Jan 29 00:00:14 2022 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8fe21c3f
7
8 sci-biology/tree-puzzle: fix build system and MPI
9
10 Closes: https://bugs.gentoo.org/690900
11 Closes: https://bugs.gentoo.org/810502
12 Closes: https://bugs.gentoo.org/814185
13 Signed-off-by: David Seifert <soap <AT> gentoo.org>
14
15 .../files/tree-puzzle-5.2-MPI-3.0.patch | 362 +++++++++++++++++++++
16 sci-biology/tree-puzzle/tree-puzzle-5.2.ebuild | 25 +-
17 2 files changed, 375 insertions(+), 12 deletions(-)
18
19 diff --git a/sci-biology/tree-puzzle/files/tree-puzzle-5.2-MPI-3.0.patch b/sci-biology/tree-puzzle/files/tree-puzzle-5.2-MPI-3.0.patch
20 new file mode 100644
21 index 000000000000..66e3e6482338
22 --- /dev/null
23 +++ b/sci-biology/tree-puzzle/files/tree-puzzle-5.2-MPI-3.0.patch
24 @@ -0,0 +1,362 @@
25 +https://bugs.gentoo.org/690900
26 +rename MPI 1.0 to 3.0+ functions:
27 +- MPI_Address -> MPI_Get_address
28 +- MPI_Type_struct -> MPI_Type_create_struct
29 +
30 +--- a/src/ppuzzle.c
31 ++++ b/src/ppuzzle.c
32 +@@ -297,13 +297,13 @@
33 + else MPI_Recv(&dummy, 0, MPI_INT, PP_MyMaster, PP_UPDATEEEI, PP_Comm, &stat);
34 +
35 + Dtypes[0] = MPI_DOUBLE; Dtypelens[0] = tpmradix;
36 +- MPI_Address(&(Eval[0]), &(Dtypeaddr[0]));
37 ++ MPI_Get_address(&(Eval[0]), &(Dtypeaddr[0]));
38 + Dtypes[1] = MPI_DOUBLE; Dtypelens[1] = tpmradix * tpmradix;
39 +- MPI_Address(&(Evec[0][0]), &(Dtypeaddr[1]));
40 ++ MPI_Get_address(&(Evec[0][0]), &(Dtypeaddr[1]));
41 + Dtypes[2] = MPI_DOUBLE; Dtypelens[2] = tpmradix * tpmradix;
42 +- MPI_Address(&(Ievc[0][0]), &(Dtypeaddr[2]));
43 ++ MPI_Get_address(&(Ievc[0][0]), &(Dtypeaddr[2]));
44 +
45 +- MPI_Type_struct(3, Dtypelens, Dtypeaddr, Dtypes, &PP_Data);
46 ++ MPI_Type_create_struct(3, Dtypelens, Dtypeaddr, Dtypes, &PP_Data);
47 + MPI_Type_commit(&PP_Data);
48 +
49 + MPI_Bcast (MPI_BOTTOM, 1, PP_Data, PP_MyMaster, PP_Comm);
50 +@@ -341,19 +341,19 @@
51 + double* DMVector = new_dvector(jobs);
52 +
53 + Dtypes[0] = MPI_DOUBLE; Dtypelens[0] = jobs;
54 +- MPI_Address(&(DMVector[0]), &(Dtypeaddr[0]));
55 ++ MPI_Get_address(&(DMVector[0]), &(Dtypeaddr[0]));
56 + Dtypes[1] = MPI_DOUBLE; Dtypelens[1] = numcats;
57 +- MPI_Address(&(Rates[0]), &(Dtypeaddr[1]));
58 ++ MPI_Get_address(&(Rates[0]), &(Dtypeaddr[1]));
59 + Dtypes[2] = MPI_DOUBLE; Dtypelens[2] = 1;
60 +- MPI_Address(&(fracinv), &(Dtypeaddr[2]));
61 ++ MPI_Get_address(&(fracinv), &(Dtypeaddr[2]));
62 + Dtypes[3] = MPI_DOUBLE; Dtypelens[3] = tpmradix;
63 +- MPI_Address(&(Eval[0]), &(Dtypeaddr[3]));
64 ++ MPI_Get_address(&(Eval[0]), &(Dtypeaddr[3]));
65 + Dtypes[4] = MPI_DOUBLE; Dtypelens[4] = tpmradix * tpmradix;
66 +- MPI_Address(&(Evec[0][0]), &(Dtypeaddr[4]));
67 ++ MPI_Get_address(&(Evec[0][0]), &(Dtypeaddr[4]));
68 + Dtypes[5] = MPI_DOUBLE; Dtypelens[5] = tpmradix * tpmradix;
69 +- MPI_Address(&(Ievc[0][0]), &(Dtypeaddr[5]));
70 ++ MPI_Get_address(&(Ievc[0][0]), &(Dtypeaddr[5]));
71 +
72 +- MPI_Type_struct(6, Dtypelens, Dtypeaddr, Dtypes, &PP_Data);
73 ++ MPI_Type_create_struct(6, Dtypelens, Dtypeaddr, Dtypes, &PP_Data);
74 + MPI_Type_commit(&PP_Data);
75 +
76 + if (PP_IamMaster) {
77 +@@ -719,10 +719,10 @@
78 + #endif
79 + doubles[0] = frconst;
80 +
81 +- MPI_Address(ints, Dtypeaddr);
82 +- MPI_Address(doubles, (Dtypeaddr+1));
83 ++ MPI_Get_address(ints, Dtypeaddr);
84 ++ MPI_Get_address(doubles, (Dtypeaddr+1));
85 +
86 +- MPI_Type_struct(2, Dtypelens, Dtypeaddr, Dtypes, &PP_Sizes);
87 ++ MPI_Type_create_struct(2, Dtypelens, Dtypeaddr, Dtypes, &PP_Sizes);
88 + MPI_Type_commit(&PP_Sizes);
89 +
90 + for (dest=1; dest<PP_NumProcs; dest++) {
91 +@@ -797,10 +797,10 @@
92 + fprintf(STDOUT, "(%2d) Receiving Sizes ...\n", PP_Myid);
93 + # endif /* PVERBOSE3 */
94 +
95 +- MPI_Address(ints, Dtypeaddr);
96 +- MPI_Address(doubles, (Dtypeaddr+1));
97 ++ MPI_Get_address(ints, Dtypeaddr);
98 ++ MPI_Get_address(doubles, (Dtypeaddr+1));
99 +
100 +- MPI_Type_struct(2, Dtypelens, Dtypeaddr, Dtypes, &PP_Sizes);
101 ++ MPI_Type_create_struct(2, Dtypelens, Dtypeaddr, Dtypes, &PP_Sizes);
102 + MPI_Type_commit(&PP_Sizes);
103 +
104 + error = MPI_Probe(PP_MyMaster, MPI_ANY_TAG, PP_Comm, &stat);
105 +@@ -889,31 +889,31 @@
106 + # endif /* PVERBOSE2 */
107 +
108 + Dtypes [0] = MPI_CHAR; Dtypelens [0] = Maxspc * Numptrn;
109 +- MPI_Address(&(Seqpat[0][0]), &(Dtypeaddr[0]));
110 ++ MPI_Get_address(&(Seqpat[0][0]), &(Dtypeaddr[0]));
111 + Dtypes [1] = MPI_INT; Dtypelens [1] = Maxsite ;
112 +- MPI_Address(&(Alias[0]), &(Dtypeaddr[1]));
113 ++ MPI_Get_address(&(Alias[0]), &(Dtypeaddr[1]));
114 + Dtypes [2] = MPI_INT; Dtypelens [2] = Numptrn ;
115 +- MPI_Address(&(Weight[0]), &(Dtypeaddr[2]));
116 ++ MPI_Get_address(&(Weight[0]), &(Dtypeaddr[2]));
117 + Dtypes [3] = MPI_INT; Dtypelens [3] = Numptrn ;
118 +- MPI_Address(&(constpat[0]), &(Dtypeaddr[3]));
119 ++ MPI_Get_address(&(constpat[0]), &(Dtypeaddr[3]));
120 + Dtypes [4] = MPI_DOUBLE; Dtypelens [4] = numcats ;
121 +- MPI_Address(&(Rates[0]), &(Dtypeaddr[4]));
122 ++ MPI_Get_address(&(Rates[0]), &(Dtypeaddr[4]));
123 + Dtypes [5] = MPI_DOUBLE; Dtypelens [5] = tpmradix ;
124 +- MPI_Address(&(Eval[0]), &(Dtypeaddr[5]));
125 ++ MPI_Get_address(&(Eval[0]), &(Dtypeaddr[5]));
126 + Dtypes [6] = MPI_DOUBLE; Dtypelens [6] = tpmradix ;
127 +- MPI_Address(&(Freqtpm[0]), &(Dtypeaddr[6]));
128 ++ MPI_Get_address(&(Freqtpm[0]), &(Dtypeaddr[6]));
129 + Dtypes [7] = MPI_DOUBLE; Dtypelens [7] = tpmradix * tpmradix ;
130 +- MPI_Address(&(Evec[0][0]), &(Dtypeaddr[7]));
131 ++ MPI_Get_address(&(Evec[0][0]), &(Dtypeaddr[7]));
132 + Dtypes [8] = MPI_DOUBLE; Dtypelens [8] = tpmradix * tpmradix ;
133 +- MPI_Address(&(Ievc[0][0]), &(Dtypeaddr[8]));
134 ++ MPI_Get_address(&(Ievc[0][0]), &(Dtypeaddr[8]));
135 + Dtypes [9] = MPI_DOUBLE; Dtypelens [9] = tpmradix * tpmradix ;
136 +- MPI_Address(&(iexp[0][0]), &(Dtypeaddr[9]));
137 ++ MPI_Get_address(&(iexp[0][0]), &(Dtypeaddr[9]));
138 + Dtypes [10] = MPI_DOUBLE; Dtypelens [10] = Maxspc * Maxspc ;
139 +- MPI_Address(&(Distanmat[0][0]), &(Dtypeaddr[10]));
140 ++ MPI_Get_address(&(Distanmat[0][0]), &(Dtypeaddr[10]));
141 + Dtypes [11] = MPI_DOUBLE; Dtypelens [11] = numcats * tpmradix * tpmradix ;
142 +- MPI_Address(&(ltprobr[0][0][0]), &(Dtypeaddr[11]));
143 ++ MPI_Get_address(&(ltprobr[0][0][0]), &(Dtypeaddr[11]));
144 +
145 +- MPI_Type_struct(12, Dtypelens, Dtypeaddr, Dtypes, &PP_Data);
146 ++ MPI_Type_create_struct(12, Dtypelens, Dtypeaddr, Dtypes, &PP_Data);
147 + MPI_Type_commit(&PP_Data);
148 +
149 +
150 +@@ -984,31 +984,31 @@
151 + # endif /* PVERBOSE2 */
152 +
153 + Dtypes [0] = MPI_CHAR; Dtypelens [0] = Maxspc * Numptrn;
154 +- MPI_Address(&(Seqpat[0][0]), &(Dtypeaddr[0]));
155 ++ MPI_Get_address(&(Seqpat[0][0]), &(Dtypeaddr[0]));
156 + Dtypes [1] = MPI_INT; Dtypelens [1] = Maxsite ;
157 +- MPI_Address(&(Alias[0]), &(Dtypeaddr[1]));
158 ++ MPI_Get_address(&(Alias[0]), &(Dtypeaddr[1]));
159 + Dtypes [2] = MPI_INT; Dtypelens [2] = Numptrn ;
160 +- MPI_Address(&(Weight[0]), &(Dtypeaddr[2]));
161 ++ MPI_Get_address(&(Weight[0]), &(Dtypeaddr[2]));
162 + Dtypes [3] = MPI_INT; Dtypelens [3] = Numptrn ;
163 +- MPI_Address(&(constpat[0]), &(Dtypeaddr[3]));
164 ++ MPI_Get_address(&(constpat[0]), &(Dtypeaddr[3]));
165 + Dtypes [4] = MPI_DOUBLE; Dtypelens [4] = numcats ;
166 +- MPI_Address(&(Rates[0]), &(Dtypeaddr[4]));
167 ++ MPI_Get_address(&(Rates[0]), &(Dtypeaddr[4]));
168 + Dtypes [5] = MPI_DOUBLE; Dtypelens [5] = tpmradix ;
169 +- MPI_Address(&(Eval[0]), &(Dtypeaddr[5]));
170 ++ MPI_Get_address(&(Eval[0]), &(Dtypeaddr[5]));
171 + Dtypes [6] = MPI_DOUBLE; Dtypelens [6] = tpmradix ;
172 +- MPI_Address(&(Freqtpm[0]), &(Dtypeaddr[6]));
173 ++ MPI_Get_address(&(Freqtpm[0]), &(Dtypeaddr[6]));
174 + Dtypes [7] = MPI_DOUBLE; Dtypelens [7] = tpmradix * tpmradix ;
175 +- MPI_Address(&(Evec[0][0]), &(Dtypeaddr[7]));
176 ++ MPI_Get_address(&(Evec[0][0]), &(Dtypeaddr[7]));
177 + Dtypes [8] = MPI_DOUBLE; Dtypelens [8] = tpmradix * tpmradix ;
178 +- MPI_Address(&(Ievc[0][0]), &(Dtypeaddr[8]));
179 ++ MPI_Get_address(&(Ievc[0][0]), &(Dtypeaddr[8]));
180 + Dtypes [9] = MPI_DOUBLE; Dtypelens [9] = tpmradix * tpmradix ;
181 +- MPI_Address(&(iexp[0][0]), &(Dtypeaddr [9]));
182 ++ MPI_Get_address(&(iexp[0][0]), &(Dtypeaddr [9]));
183 + Dtypes [10] = MPI_DOUBLE; Dtypelens [10] = Maxspc * Maxspc ;
184 +- MPI_Address(&(Distanmat[0][0]), &(Dtypeaddr[10]));
185 ++ MPI_Get_address(&(Distanmat[0][0]), &(Dtypeaddr[10]));
186 + Dtypes [11] = MPI_DOUBLE; Dtypelens [11] = numcats * tpmradix * tpmradix ;
187 +- MPI_Address(&(ltprobr[0][0][0]), &(Dtypeaddr[11]));
188 ++ MPI_Get_address(&(ltprobr[0][0][0]), &(Dtypeaddr[11]));
189 +
190 +- MPI_Type_struct(12, Dtypelens, Dtypeaddr, Dtypes, &PP_Data);
191 ++ MPI_Type_create_struct(12, Dtypelens, Dtypeaddr, Dtypes, &PP_Data);
192 + MPI_Type_commit(&PP_Data);
193 +
194 + for (dest=1; dest<PP_NumProcs; dest++) {
195 +@@ -1150,10 +1150,10 @@
196 + ints[4] = usebestq;
197 + ints[5] = approx;
198 +
199 +- MPI_Address(ints, Dtypeaddr);
200 +- MPI_Address(doubles, (Dtypeaddr+1));
201 ++ MPI_Get_address(ints, Dtypeaddr);
202 ++ MPI_Get_address(doubles, (Dtypeaddr+1));
203 +
204 +- MPI_Type_struct(2, Dtypelens, Dtypeaddr, Dtypes, &PP_Quart);
205 ++ MPI_Type_create_struct(2, Dtypelens, Dtypeaddr, Dtypes, &PP_Quart);
206 + MPI_Type_commit(&PP_Quart);
207 +
208 + # ifdef PVERBOSE2
209 +@@ -1201,10 +1201,10 @@
210 +
211 + PP_quartrecved++;
212 + PP_quartrecvedn++;
213 +- MPI_Address(ints, Dtypeaddr);
214 +- MPI_Address(doubles, (Dtypeaddr+1));
215 ++ MPI_Get_address(ints, Dtypeaddr);
216 ++ MPI_Get_address(doubles, (Dtypeaddr+1));
217 +
218 +- MPI_Type_struct(2, Dtypelens, Dtypeaddr, Dtypes, &PP_Quart);
219 ++ MPI_Type_create_struct(2, Dtypelens, Dtypeaddr, Dtypes, &PP_Quart);
220 + MPI_Type_commit(&PP_Quart);
221 +
222 + error = MPI_Recv(MPI_BOTTOM, 1, PP_Quart, MPI_ANY_SOURCE, PP_QUART, PP_Comm, &stat);
223 +@@ -1368,10 +1368,10 @@
224 + ulis[5] = fullresqs; /* number of fully resolved quartets */
225 + ulis[6] = missingqs; /* number of missing quartets */
226 +
227 +- MPI_Address(ulis, Dtypeaddr);
228 +- MPI_Address(ints, (Dtypeaddr+1));
229 ++ MPI_Get_address(ulis, Dtypeaddr);
230 ++ MPI_Get_address(ints, (Dtypeaddr+1));
231 +
232 +- MPI_Type_struct(2, Dtypelens, Dtypeaddr, Dtypes, &PP_QBlockSpecs);
233 ++ MPI_Type_create_struct(2, Dtypelens, Dtypeaddr, Dtypes, &PP_QBlockSpecs);
234 + MPI_Type_commit(&PP_QBlockSpecs);
235 +
236 + # ifdef PVERBOSE2
237 +@@ -1384,12 +1384,12 @@
238 + fprintf(STDOUT, "(%2d) ... Sent QuartBlockSpecs (%ld, %ld, %ld, %d)\n", PP_Myid, ulis[0], ulis[1], ulis[2], ints[0]);
239 + # endif /* PVERBOSE3 */
240 +
241 +- MPI_Address(trueaddr, DtypeaddrRes);
242 ++ MPI_Get_address(trueaddr, DtypeaddrRes);
243 + DtypelensRes[0] = truenum;
244 +
245 +- MPI_Address(bq, (DtypeaddrRes + 1));
246 ++ MPI_Get_address(bq, (DtypeaddrRes + 1));
247 + DtypelensRes[1] = numofbq;
248 +- MPI_Type_struct(2, DtypelensRes, DtypeaddrRes, DtypesRes, &PP_QBlockRes);
249 ++ MPI_Type_create_struct(2, DtypelensRes, DtypeaddrRes, DtypesRes, &PP_QBlockRes);
250 + MPI_Type_commit(&PP_QBlockRes);
251 +
252 + error = MPI_Ssend(MPI_BOTTOM, 1, PP_QBlockRes, PP_MyMaster, PP_QUARTBLOCK, PP_Comm);
253 +@@ -1455,10 +1455,10 @@
254 + # ifdef PVERBOSE3
255 + fprintf(STDOUT, "(%2d) Receiving QuartBlock ...\n", PP_Myid);
256 + # endif /* PVERBOSE3 */
257 +- MPI_Address(ulis, Dtypeaddr);
258 +- MPI_Address(ints, (Dtypeaddr+1));
259 ++ MPI_Get_address(ulis, Dtypeaddr);
260 ++ MPI_Get_address(ints, (Dtypeaddr+1));
261 +
262 +- MPI_Type_struct(2, Dtypelens, Dtypeaddr, Dtypes, &PP_QBlockSpecs);
263 ++ MPI_Type_create_struct(2, Dtypelens, Dtypeaddr, Dtypes, &PP_QBlockSpecs);
264 + MPI_Type_commit(&PP_QBlockSpecs);
265 +
266 + MPI_Probe(MPI_ANY_SOURCE, PP_QUARTBLOCKSPECS, PP_Comm, &stat);
267 +@@ -1486,13 +1486,13 @@
268 + # endif /* PVERBOSE3 */
269 +
270 + DtypelensRes[0] = truenum;
271 +- MPI_Address(trueaddr, DtypeaddrRes);
272 ++ MPI_Get_address(trueaddr, DtypeaddrRes);
273 +
274 + bq = calloc((size_t) *numofbq, sizeof(uli));
275 +
276 + DtypelensRes[1] = *numofbq;
277 +- MPI_Address(bq, (DtypeaddrRes+1));
278 +- MPI_Type_struct(2, DtypelensRes, DtypeaddrRes, DtypesRes, &PP_QBlockRes);
279 ++ MPI_Get_address(bq, (DtypeaddrRes+1));
280 ++ MPI_Type_create_struct(2, DtypelensRes, DtypeaddrRes, DtypesRes, &PP_QBlockRes);
281 + MPI_Type_commit(&PP_QBlockRes);
282 +
283 + error = MPI_Recv(MPI_BOTTOM, 1, PP_QBlockRes, dest, PP_QUARTBLOCK, PP_Comm, &stat);
284 +@@ -1637,8 +1637,8 @@
285 + Dtypelens[0] = (Numquartets + 1)/2;
286 + }
287 +
288 +- MPI_Address(&(quartetinfo[0]), Dtypeaddr);
289 +- MPI_Type_struct(1, Dtypelens, Dtypeaddr, Dtypes, &PP_AllQuarts);
290 ++ MPI_Get_address(&(quartetinfo[0]), Dtypeaddr);
291 ++ MPI_Type_create_struct(1, Dtypelens, Dtypeaddr, Dtypes, &PP_AllQuarts);
292 + MPI_Type_commit(&PP_AllQuarts);
293 +
294 + for (dest=1; dest<PP_NumProcs; dest++) {
295 +@@ -1686,8 +1686,8 @@
296 + Dtypelens[0] = (*Numquartets + 1)/2;
297 + }
298 +
299 +- MPI_Address(&(quartetinfo[0]), Dtypeaddr);
300 +- MPI_Type_struct(1, Dtypelens, Dtypeaddr, Dtypes, &PP_AllQuarts);
301 ++ MPI_Get_address(&(quartetinfo[0]), Dtypeaddr);
302 ++ MPI_Type_create_struct(1, Dtypelens, Dtypeaddr, Dtypes, &PP_AllQuarts);
303 + MPI_Type_commit(&PP_AllQuarts);
304 +
305 + error = MPI_Recv(MPI_BOTTOM, 1, PP_AllQuarts, PP_MyMaster, PP_ALLQUARTS, PP_Comm, &stat);
306 +@@ -1748,13 +1748,13 @@
307 + for (n=0; n<(int)blocksize; n++) {
308 + Dtypes[n] = MPI_CHAR;
309 + Dtypelens[n] = (taxa - 3) * taxa;
310 +- MPI_Address(&(biparts[n][0][0]), &(Dtypeaddr[n]));
311 ++ MPI_Get_address(&(biparts[n][0][0]), &(Dtypeaddr[n]));
312 + }
313 + pstptr = pstlist;
314 + for (n=0; n<pstnum; n++) {
315 + Dtypes[(int)blocksize + n] = MPI_CHAR;
316 + Dtypelens[(int)blocksize + n] = psteptreestrlen;
317 +- MPI_Address((*pstptr).tree, &(Dtypeaddr[(int)blocksize + n]));
318 ++ MPI_Get_address((*pstptr).tree, &(Dtypeaddr[(int)blocksize + n]));
319 + pstnumarr[n] = (*pstptr).count;
320 + # ifdef PVERBOSE3
321 + fprintf(STDOUT, "(%2d) Sent tree item ->%d: [%d/%d] #=%d \"%s\"\n",
322 +@@ -1764,9 +1764,9 @@
323 + }
324 + Dtypes[((int)blocksize + pstnum)] = MPI_INT;
325 + Dtypelens[((int)blocksize + pstnum)] = pstnum;
326 +- MPI_Address(&(pstnumarr[0]), &(Dtypeaddr[((int)blocksize + pstnum)]));
327 ++ MPI_Get_address(&(pstnumarr[0]), &(Dtypeaddr[((int)blocksize + pstnum)]));
328 +
329 +- MPI_Type_struct(((int)blocksize + pstnum + 1), Dtypelens, Dtypeaddr, Dtypes, &PP_Biparts);
330 ++ MPI_Type_create_struct(((int)blocksize + pstnum + 1), Dtypelens, Dtypeaddr, Dtypes, &PP_Biparts);
331 + MPI_Type_commit(&PP_Biparts);
332 +
333 + error = MPI_Ssend(MPI_BOTTOM, 1, PP_Biparts, PP_MyMaster, PP_PUZZLEBLOCK, PP_Comm);
334 +@@ -1843,20 +1843,20 @@
335 + (*bip)[n] = new_cmatrix(*taxa - 3, *taxa);
336 + Dtypes[n] = MPI_CHAR;
337 + Dtypelens[n] = (*taxa - 3) * *taxa;
338 +- MPI_Address(&((*bip)[n][0][0]), &(Dtypeaddr[n]));
339 ++ MPI_Get_address(&((*bip)[n][0][0]), &(Dtypeaddr[n]));
340 + }
341 + for (n=0; n<pstlistnum; n++) {
342 + pstarr[n] = (char *)calloc((size_t) psteptreestrlen, sizeof(char));
343 + Dtypes[(int)*blocksize + n] = MPI_CHAR;
344 + Dtypelens[(int)*blocksize + n] = psteptreestrlen;
345 +- MPI_Address(&(pstarr[n][0]), &(Dtypeaddr[(int)*blocksize + n]));
346 ++ MPI_Get_address(&(pstarr[n][0]), &(Dtypeaddr[(int)*blocksize + n]));
347 + }
348 +
349 + Dtypes[(int)*blocksize + pstlistnum] = MPI_INT;
350 + Dtypelens[(int)*blocksize + pstlistnum] = pstlistnum;
351 +- MPI_Address(&(pstnumarr[0]), &(Dtypeaddr[(int)*blocksize + pstlistnum]));
352 ++ MPI_Get_address(&(pstnumarr[0]), &(Dtypeaddr[(int)*blocksize + pstlistnum]));
353 +
354 +- MPI_Type_struct(((int)*blocksize + pstlistnum + 1), Dtypelens, Dtypeaddr, Dtypes, &PP_Biparts);
355 ++ MPI_Type_create_struct(((int)*blocksize + pstlistnum + 1), Dtypelens, Dtypeaddr, Dtypes, &PP_Biparts);
356 + MPI_Type_commit(&PP_Biparts);
357 +
358 + error = MPI_Recv(MPI_BOTTOM, 1, PP_Biparts, dest, PP_PUZZLEBLOCK, PP_Comm, &stat);
359 +@@ -2053,10 +2053,10 @@
360 + fprintf(STDOUT, "(%2d) ... Sent DONE Signal\n", PP_Myid);
361 + # endif /* PVERBOSE3 */
362 +
363 +- MPI_Address(ints, Dtypeaddr);
364 +- MPI_Address(doubles, (Dtypeaddr+1));
365 ++ MPI_Get_address(ints, Dtypeaddr);
366 ++ MPI_Get_address(doubles, (Dtypeaddr+1));
367 +
368 +- MPI_Type_struct(2, Dtypelens, Dtypeaddr, Dtypes, &PP_Stats);
369 ++ MPI_Type_create_struct(2, Dtypelens, Dtypeaddr, Dtypes, &PP_Stats);
370 + MPI_Type_commit(&PP_Stats);
371 +
372 + doquartrecved[0] = 0;
373 +@@ -2173,10 +2173,10 @@
374 + doubles[4] = tarr.cpu;
375 + doubles[5] = tarr.time;
376 +
377 +- MPI_Address(ints, Dtypeaddr);
378 +- MPI_Address(doubles, (Dtypeaddr+1));
379 ++ MPI_Get_address(ints, Dtypeaddr);
380 ++ MPI_Get_address(doubles, (Dtypeaddr+1));
381 +
382 +- MPI_Type_struct(2, Dtypelens, Dtypeaddr, Dtypes, &PP_Stats);
383 ++ MPI_Type_create_struct(2, Dtypelens, Dtypeaddr, Dtypes, &PP_Stats);
384 + MPI_Type_commit(&PP_Stats);
385 +
386 + error = MPI_Ssend(MPI_BOTTOM, 1, PP_Stats, PP_MyMaster, PP_STATS, PP_Comm);
387
388 diff --git a/sci-biology/tree-puzzle/tree-puzzle-5.2.ebuild b/sci-biology/tree-puzzle/tree-puzzle-5.2.ebuild
389 index 8e2a07f8183e..06fc28376ff5 100644
390 --- a/sci-biology/tree-puzzle/tree-puzzle-5.2.ebuild
391 +++ b/sci-biology/tree-puzzle/tree-puzzle-5.2.ebuild
392 @@ -1,7 +1,7 @@
393 -# Copyright 1999-2019 Gentoo Authors
394 +# Copyright 1999-2022 Gentoo Authors
395 # Distributed under the terms of the GNU General Public License v2
396
397 -EAPI=7
398 +EAPI=8
399
400 inherit toolchain-funcs
401
402 @@ -18,14 +18,10 @@ RESTRICT="test"
403 DEPEND="mpi? ( virtual/mpi )"
404 RDEPEND="${DEPEND}"
405
406 -PATCHES=( "${FILESDIR}"/${PN}-impl-dec.patch )
407 -
408 -pkg_setup() {
409 - use mpi && [[ $(tc-getCC) == icc* ]] &&
410 - die "The parallelized version of tree-puzzle cannot be compiled using icc.
411 - Either disable the \"mpi\" USE flag to compile only the non-parallelized
412 - version of the program, or use gcc as your compiler (CC=\"gcc\")."
413 -}
414 +PATCHES=(
415 + "${FILESDIR}"/${PN}-impl-dec.patch
416 + "${FILESDIR}"/${P}-MPI-3.0.patch
417 +)
418
419 src_configure() {
420 default
421 @@ -38,9 +34,14 @@ src_configure() {
422 fi
423 }
424
425 +src_compile() {
426 + # hopelessly terrible build system, abuses Automake
427 + emake -j1
428 +}
429 +
430 src_install() {
431 - dobin src/puzzle
432 - use mpi && dobin src/ppuzzle
433 + dobin src/puzzle $(usev mpi src/ppuzzle)
434 +
435 einstalldocs
436
437 # User manual