Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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