Magellan Linux

Contents of /branches/R11-unstable/include/multilib.sminc

Parent Directory Parent Directory | Revision Log Revision Log


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