Magellan Linux

Contents of /smage/trunk/include/multilib.sminc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5461 - (show annotations) (download)
Tue Mar 25 10:52:50 2014 UTC (10 years, 7 months ago) by niro
File size: 13296 byte(s)
-sync with upstream
1 # $Id$
2 # multilib abis
3
4 # tell the buildsystem that we are doing a multilib build
5 export MULTILIB_BUILD="true"
6
7 # be verbose or nor (true|false}
8 : ${MULTILIB_VERBOSE="true"}
9
10 # multilib should call all dependant includes, which gets overridden
11 sminclude mtools
12
13 # do not define EMUL_LINUX_32 after inherit of multlib !!
14 # it may break i*86 builds
15
16 # default ABIs to be build
17 case ${ARCH} in
18 x86_64)
19 : ${MULTILIB_ABIS="m32 m64"}
20 # default false
21 : ${EMUL_LINUX_32="false"}
22
23 # add linux32 to the dependencies
24 if [[ ${EMUL_LINUX_32} = true ]]
25 then
26 EMUL_LINUX_32_SDEPEND_x86_64=">= sys-apps/util-linux-2.19"
27 SPECIAL_VARS="${SPECIAL_VARS} EMUL_LINUX_32_SDEPEND_x86_64"
28 fi
29 ;;
30 i*86)
31 : ${MULTILIB_ABIS="m32"}
32 # always false
33 EMUL_LINUX_32="false"
34 ;;
35 esac
36
37 # add linux32 to the dependencies
38 if [[ ${EMUL_LINUX_32} = true ]]
39 then
40 # very dirty trick to get the dependencies right
41 # ; is the IFS, tr replaces ; with an crlfs
42 # the var ist decided with our common eval+echo magic
43 if [[ -z ${SDEPEND} ]]
44 then
45 SDEPEND="\$(eval echo \\\$EMUL_LINUX_32_SDEPEND_\${ARCH/i*86/x86} | tr ';' '\n')"
46 else
47 SDEPEND="${SDEPEND}
48 \$(eval echo \\\$EMUL_LINUX_32_SDEPEND_\${ARCH/i*86/x86} | tr ';' '\n')"
49 fi
50 fi
51
52 ##
53 # overide some defaults to respect ABI_LIBDIR
54 ##
55 mlibdir()
56 {
57 local libdir=lib
58 [[ ${ARCH} = x86_64 ]] && libdir=lib64
59 [[ -n ${ABI_LIBDIR} ]] && libdir="${ABI_LIBDIR}"
60
61 echo "${libdir}"
62 }
63
64 ##
65 # multilib abi changers
66 ##
67 abi-m32()
68 {
69 export ABI="m32"
70 export CC="gcc -${ABI}"
71 export CXX="g++ -${ABI}"
72 export ABI_LIBDIR="lib"
73 if [[ ${EXPORT_ABI_LDFLAGS} != false ]]
74 then
75 local saved_ldflags="${LDFLAGS}"
76 export LDFLAGS="${LDFLAGS} -L/${ABI_LIBDIR} -L/usr/${ABI_LIBDIR}"
77 fi
78 # keep pkgconfig clean
79 local orig_pkg_config_path="${PKG_CONFIG_PATH}"
80 export PKG_CONFIG_PATH="/usr/${ABI_LIBDIR}/pkgconfig:${PKG_CONFIG_PATH}"
81
82 if [[ ${MULTILIB_VERBOSE} = true ]]
83 then
84 echo -e "${COLBLUE}*** ${COLGREEN}running with -${ABI} ABI${COLDEFAULT}"
85 echo -e "${COLBLUE}*** ${COLGREEN} ABI${COLDEFAULT}='${ABI}'"
86 echo -e "${COLBLUE}*** ${COLGREEN} CC${COLDEFAULT}='${CC}'"
87 echo -e "${COLBLUE}*** ${COLGREEN} CXX${COLDEFAULT}='${CXX}'"
88 echo -e "${COLBLUE}*** ${COLGREEN} ABI_LIBDIR${COLDEFAULT}='${ABI_LIBDIR}'"
89 if [[ ${EXPORT_ABI_LDFLAGS} != false ]]
90 then
91 echo -e "${COLBLUE}*** ${COLGREEN} LDFLAGS${COLDEFAULT}='${LDFLAGS}'"
92 else
93 echo -e "${COLBLUE}*** ${COLGREEN} LDFLAGS${COLDEFAULT}='${COLYELLOW}not exported${COLDEFAULT}'"
94 fi
95 echo -e "${COLBLUE}*** ${COLGREEN} CHOST${COLDEFAULT}='${CHOST}'"
96 echo -e "${COLBLUE}*** ${COLGREEN} SRCDIR${COLDEFAULT}='${SRCDIR}/${SRCSUBDIR}'"
97 echo -e "${COLBLUE}*** ${COLGREEN} PKG_CONFIG_PATH${COLDEFAULT}='${PKG_CONFIG_PATH}'"
98 fi
99
100 # configure a linux32 emulated build
101 if [[ ${EMUL_LINUX_32} = true ]]
102 then
103 if [[ ${MULTILIB_VERBOSE} = true ]]
104 then
105 echo -e "${COLBLUE}*** ${COLGREEN} EMUL_LINUX_32${COLDEFAULT}='${EMUL_LINUX_32}'"
106 fi
107 uname(){ linux32 uname $@; } && export -f uname
108 local orig_chost="${CHOST}" && export CHOST="i686-pc-linux-gnu"
109 fi
110 if [[ ${MULTILIB_VERBOSE} = true ]]
111 then
112 echo -e "${COLBLUE}*** ${COLGREEN} CHOST${COLDEFAULT}='${CHOST}'"
113 fi
114
115 # run any given command
116 eval $@ || die
117
118 unset ABI CC CXX ABI_LIBDIR
119 # keep pkgconfig clean
120 export PKG_CONFIG_PATH="${orig_pkg_config_path}"
121 export LDFLAGS="${saved_ldflags}"
122
123 # restore original settings
124 if [[ ${EMUL_LINUX_32} = true ]]
125 then
126 unset uname
127 export CHOST="${orig_chost}" && unset orig_chost
128 fi
129 }
130
131 abi-m64()
132 {
133 export ABI="m64"
134 export CC="gcc -${ABI}"
135 export CXX="g++ -${ABI}"
136 export ABI_LIBDIR="lib64"
137 if [[ ${EXPORT_ABI_LDFLAGS} != false ]]
138 then
139 local saved_ldflags="${LDFLAGS}"
140 export LDFLAGS="-L/${ABI_LIBDIR} -L/usr/${ABI_LIBDIR}"
141 fi
142 # keep pkgconfig clean
143 local orig_pkg_config_path="${PKG_CONFIG_PATH}"
144 export PKG_CONFIG_PATH="/usr/${ABI_LIBDIR}/pkgconfig:${PKG_CONFIG_PATH}"
145
146 if [[ ${MULTILIB_VERBOSE} = true ]]
147 then
148 echo -e "${COLBLUE}*** ${COLGREEN}running with -${ABI} ABI${COLDEFAULT}"
149 echo -e "${COLBLUE}*** ${COLGREEN} ABI${COLDEFAULT}='${ABI}'"
150 echo -e "${COLBLUE}*** ${COLGREEN} CC${COLDEFAULT}='${CC}'"
151 echo -e "${COLBLUE}*** ${COLGREEN} CXX${COLDEFAULT}='${CXX}'"
152 echo -e "${COLBLUE}*** ${COLGREEN} ABI_LIBDIR${COLDEFAULT}='${ABI_LIBDIR}'"
153 if [[ ${EXPORT_ABI_LDFLAGS} != false ]]
154 then
155 echo -e "${COLBLUE}*** ${COLGREEN} LDFLAGS${COLDEFAULT}='${LDFLAGS}'"
156 else
157 echo -e "${COLBLUE}*** ${COLGREEN} LDFLAGS${COLDEFAULT}='${COLYELLOW}not exported${COLDEFAULT}'"
158 fi
159 echo -e "${COLBLUE}*** ${COLGREEN} CHOST${COLDEFAULT}='${CHOST}'"
160 echo -e "${COLBLUE}*** ${COLGREEN} SRCDIR${COLDEFAULT}='${SRCDIR}/${SRCSUBDIR}'"
161 echo -e "${COLBLUE}*** ${COLGREEN} PKG_CONFIG_PATH${COLDEFAULT}='${PKG_CONFIG_PATH}'"
162 fi
163
164 # run any given command
165 eval $@ || die
166
167 unset ABI CC CXX ABI_LIBDIR
168 # keep pkgconfig clean
169 export PKG_CONFIG_PATH="${orig_pkg_config_path}"
170 export LDFLAGS="${saved_ldflags}"
171 }
172
173 only-m32()
174 {
175 local abi=m32
176 local i
177
178 for i in ${MULTILIB_ABIS}
179 do
180 if [[ ${i} = ${abi} ]]
181 then
182 # export this for mpatch etc (to repect only-${abi})
183 export MULTILIB_ONLY_ABI=${abi}
184
185 cd ${SRCDIR}-${abi}/${SRCSUBDIR}
186 abi-${abi} $@ || die
187
188 # unset this is very important
189 unset MULTILIB_ONLY_ABI
190 fi
191 done
192 }
193
194 only-m64()
195 {
196 local abi=m64
197 local i
198
199 for i in ${MULTILIB_ABIS}
200 do
201 if [[ ${i} = ${abi} ]]
202 then
203 # export this for mpatch etc (to repect only-${abi})
204 export MULTILIB_ONLY_ABI=${abi}
205
206 cd ${SRCDIR}-${abi}/${SRCSUBDIR}
207 abi-${abi} $@ || die
208
209 # unset this is very important
210 unset MULTILIB_ONLY_ABI
211 fi
212 done
213 }
214
215 all-abis()
216 {
217 local abi
218 for abi in ${MULTILIB_ABIS}
219 do
220 cd ${SRCDIR}-${abi}/${SRCSUBDIR}
221 abi-${abi} $@ || die
222 done
223 }
224
225 mabi()
226 {
227 echo \${ABI}
228 }
229
230 mabi-cc()
231 {
232 echo "gcc -\${ABI}"
233 }
234
235 mabi-cxx()
236 {
237 echo "g++ -\${ABI}"
238 }
239
240 mabi-cflags()
241 {
242 echo "\${CFLAGS}"
243 }
244
245 mabi-cxxflags()
246 {
247 echo "\${CXXFLAGS}"
248 }
249
250 mabi-ldflags()
251 {
252 echo "\${LDFLAGS}"
253 }
254
255 ##
256 # multilib compile functions
257 ##
258
259 if [[ ! -z $(typeset -f mconfigure) ]]
260 then
261 # rename the old one
262 old_mconfigure=old$(typeset -f mconfigure)
263 eval "${old_mconfigure}"
264
265 mconfigure()
266 {
267 local abi
268 local abis_to_run="${MULTILIB_ABIS}"
269
270 # respect MULTILIB_ONLY_ABI variable
271 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
272
273 for abi in ${abis_to_run}
274 do
275 cd ${SRCDIR}-${abi}/${SRCSUBDIR}
276 abi-${abi} oldmconfigure $@ || die
277 done
278 }
279 fi
280
281 if [[ ! -z $(typeset -f cmake_configure) ]]
282 then
283 # rename the old one
284 old_cmake_configure=old$(typeset -f cmake_configure)
285 eval "${old_cmake_configure}"
286
287 cmake_configure()
288 {
289 local abi
290 local abis_to_run="${MULTILIB_ABIS}"
291
292 # respect MULTILIB_ONLY_ABI variable
293 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
294
295 local saved_SRCDIR="${SRCDIR}"
296 for abi in ${abis_to_run}
297 do
298 cd ${BUILDDIR}/build-${abi}
299 SRCDIR="${saved_SRCDIR}-${abi}"
300 abi-${abi} oldcmake_configure $@ || die
301 done
302 # restore SRCDIR
303 SRCDIR="${saved_SRCDIR}"
304 }
305 fi
306
307 if [[ ! -z $(typeset -f cmake_src_compile) ]]
308 then
309 # rename the old one
310 old_cmake_src_compile=old$(typeset -f cmake_src_compile)
311 eval "${old_cmake_src_compile}"
312
313 cmake_src_compile()
314 {
315 local abi
316 local abis_to_run="${MULTILIB_ABIS}"
317
318 # respect MULTILIB_ONLY_ABI variable
319 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
320
321 for abi in ${abis_to_run}
322 do
323 # remove build dir if exist
324 [[ -d ${BUILDDIR}/build-${abi} ]] && rm -rf ${BUILDDIR}/build-${abi}
325
326 # build outside of the source dir
327 install -d ${BUILDDIR}/build-${abi} || die
328 cd ${BUILDDIR}/build-${abi}
329 done
330
331 cmake_configure || die
332
333 for abi in ${abis_to_run}
334 do
335 cd ${BUILDDIR}/build-${abi}
336 abi-${abi} oldmmake $@ || die
337 done
338 }
339 fi
340
341 if [[ ! -z $(typeset -f cmake_src_check) ]]
342 then
343 # rename the old one
344 old_cmake_src_check=old$(typeset -f cmake_src_check)
345 eval "${old_cmake_check}"
346
347 cmake_src_check()
348 {
349 local abi
350 local abis_to_run="${MULTILIB_ABIS}"
351
352 # respect MULTILIB_ONLY_ABI variable
353 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
354
355 for abi in ${abis_to_run}
356 do
357 cd ${BUILDDIR}/build-${abi}
358 mmake -j1 -k check || die
359 done
360 }
361 fi
362
363 if [[ ! -z $(typeset -f cmake_src_install) ]]
364 then
365 # rename the old one
366 old_cmake_src_install=old$(typeset -f cmake_src_install)
367 eval "${old_cmake_install}"
368
369 cmake_src_install()
370 {
371 local abi
372 local abis_to_run="${MULTILIB_ABIS}"
373
374 # respect MULTILIB_ONLY_ABI variable
375 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
376
377 for abi in ${abis_to_run}
378 do
379 # install build outside of the source dir
380 cd ${BUILDDIR}/build-${abi}
381 abi-${abi} oldmmake DESTDIR=${BINDIR} $@ install || die
382 done
383 }
384 fi
385
386 if [[ ! -z $(typeset -f munpack) ]]
387 then
388 # rename the old one
389 old_munpack=old$(typeset -f munpack)
390 eval "${old_munpack}"
391
392 munpack()
393 {
394 local abi
395 local abis_to_run="${MULTILIB_ABIS}"
396
397 # respect MULTILIB_ONLY_ABI variable
398 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
399
400 for abi in ${abis_to_run}
401 do
402 echo -e "${COLBLUE}*** ${COLGREEN}unpacking for ABI -${abi}${COLDEFAULT}"
403 oldmunpack $@ || die
404 mv ${SRCDIR} ${SRCDIR}-${abi} || die
405 done
406 }
407 fi
408
409 if [[ ! -z $(typeset -f mmake) ]]
410 then
411 # rename the old one
412 old_mmake=old$(typeset -f mmake)
413 eval "${old_mmake}"
414
415 mmake()
416 {
417 local abi
418 local abis_to_run="${MULTILIB_ABIS}"
419
420 # respect MULTILIB_ONLY_ABI variable
421 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
422
423 for abi in ${abis_to_run}
424 do
425 echo -e "${COLBLUE}*** ${COLGREEN}compiling for ABI -${abi}${COLDEFAULT}"
426 cd ${SRCDIR}-${abi}/${SRCSUBDIR}
427 abi-${abi} oldmmake $@ || die
428 done
429 }
430 fi
431
432 if [[ ! -z $(typeset -f minstall) ]]
433 then
434 # rename the old one
435 old_minstall=old$(typeset -f minstall)
436 eval "${old_minstall}"
437
438 minstall()
439 {
440 local abi
441 local abis_to_run="${MULTILIB_ABIS}"
442
443 # respect MULTILIB_ONLY_ABI variable
444 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
445
446 for abi in ${abis_to_run}
447 do
448 echo -e "${COLBLUE}*** ${COLGREEN}installing for ABI -${abi}${COLDEFAULT}"
449 cd ${SRCDIR}-${abi}/${SRCSUBDIR}
450 abi-${abi} oldminstall $@ || die
451 done
452 }
453 fi
454
455 minstall_destdir()
456 {
457 local abi
458 local abis_to_run="${MULTILIB_ABIS}"
459
460 # respect MULTILIB_ONLY_ABI variable
461 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
462
463 for abi in ${abis_to_run}
464 do
465 echo -e "${COLBLUE}*** ${COLGREEN}installing for ABI -${abi}${COLDEFAULT}"
466 cd ${SRCDIR}-${abi}/${SRCSUBDIR}
467 make DESTDIR=${BINDIR} $@ install || die
468 done
469 }
470
471 if [[ ! -z $(typeset -f mpatch) ]]
472 then
473 # rename the old one
474 old_mpatch=old$(typeset -f mpatch)
475 eval "${old_mpatch}"
476
477 mpatch()
478 {
479 local abi
480 local abis_to_run="${MULTILIB_ABIS}"
481
482 # respect MULTILIB_ONLY_ABI variable
483 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
484
485 for abi in ${abis_to_run}
486 do
487 echo -e "${COLBLUE}*** ${COLGREEN}appling patch for ABI -${abi}${COLDEFAULT}"
488 cd ${SRCDIR}-${abi}/${SRCSUBDIR}
489 oldmpatch $@ || die
490 done
491 }
492 fi
493
494 if [[ ! -z $(typeset -f mlibtoolize) ]]
495 then
496 # rename the old one
497 old_mlibtoolize=old$(typeset -f mlibtoolize)
498 eval "${old_mlibtoolize}"
499
500 mlibtoolize()
501 {
502 local abi
503 local abis_to_run="${MULTILIB_ABIS}"
504
505 # respect MULTILIB_ONLY_ABI variable
506 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
507
508 for abi in ${abis_to_run}
509 do
510 echo -e "${COLBLUE}*** ${COLGREEN}running mlibtoolize for ABI -${abi}${COLDEFAULT}"
511 cd ${SRCDIR}-${abi}/${SRCSUBDIR}
512 oldmlibtoolize $@ || die
513 done
514 }
515 fi
516
517 if [[ ! -z $(typeset -f mautoreconf) ]]
518 then
519 # rename the old one
520 old_mautoreconf=old$(typeset -f mautoreconf)
521 eval "${old_mautoreconf}"
522
523 mautoreconf()
524 {
525 local abi
526 local abis_to_run="${MULTILIB_ABIS}"
527
528 # respect MULTILIB_ONLY_ABI variable
529 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
530
531 for abi in ${abis_to_run}
532 do
533 echo -e "${COLBLUE}*** ${COLGREEN}running mautoreconf for ABI -${abi}${COLDEFAULT}"
534 cd ${SRCDIR}-${abi}/${SRCSUBDIR}
535 oldmautoreconf $@ || die
536 done
537 }
538 fi
539
540 if [[ ! -z $(typeset -f minstalldocs) ]]
541 then
542 # rename the old one
543 old_minstalldocs=old$(typeset -f minstalldocs)
544 eval "${old_minstalldocs}"
545
546 minstalldocs()
547 {
548 local abi
549 local docfiles
550
551 local abis_to_run="${MULTILIB_ABIS}"
552
553 # respect MULTILIB_ONLY_ABI variable
554 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
555
556 for abi in ${abis_to_run}
557 do
558 cd ${SRCDIR}-${abi}/${SRCSUBDIR}
559 oldminstalldocs $@ || die
560 done
561 }
562 fi
563
564 ##
565 # multilib mbuild wrappers
566 ##
567 multilib_src_prepare()
568 {
569 munpack ${SRCFILE} || die
570 }
571
572 multilib_src_compile()
573 {
574 if [[ ! -z $(typeset -f cmake_src_compile) ]]
575 then
576 cmake_src_compile || die
577 else
578 mconfigure || die
579 mmake || die
580 fi
581 }
582
583 multilib_src_check()
584 {
585 if [[ ! -z $(typeset -f cmake_src_check) ]]
586 then
587 cmake_src_check || die
588 else
589 mmake -j1 -k check || die
590 fi
591 }
592
593 multilib_src_install()
594 {
595 if [[ ! -z $(typeset -f cmake_src_install) ]]
596 then
597 cmake_src_install || die
598 else
599 mmake DESTDIR=${BINDIR} install || die
600 fi
601
602 local i
603 for abi in ${MULTILIB_ABIS}
604 do
605 cd ${SRCDIR}-${abi}/${SRCSUBDIR}
606 for i in ABOUT-NLS AUTHORS BUGS CHANGES ChangeLog COPYING \
607 FAQ LICENSE NEWS README TODO
608 do
609 if [ -f ${SRCDIR}-${abi}/${i} ]
610 then
611 minstalldocs ${i} || die
612 fi
613 done
614 done
615 }
616
617 export_inherits multilib src_prepare src_compile src_check src_install