Magellan Linux

Contents of /trunk/include/multilib.sminc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 11300 - (show annotations) (download)
Fri Mar 2 15:27:45 2012 UTC (12 years, 2 months ago) by niro
File size: 10596 byte(s)
-do not overwrite any ldflags
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} PKG_CONFIG_PATH${COLDEFAULT}='${PKG_CONFIG_PATH}'"
93 fi
94
95 # configure a linux32 emulated build
96 if [[ ${EMUL_LINUX_32} = true ]]
97 then
98 if [[ ${MULTILIB_VERBOSE} = true ]]
99 then
100 echo -e "${COLBLUE}*** ${COLGREEN} EMUL_LINUX_32${COLDEFAULT}='${EMUL_LINUX_32}'"
101 fi
102 uname(){ linux32 uname $@; } && export -f uname
103 ORIG_CHOST="${CHOST}" && export CHOST="i686-pc-linux-gnu"
104 fi
105 if [[ ${MULTILIB_VERBOSE} = true ]]
106 then
107 echo -e "${COLBLUE}*** ${COLGREEN} CHOST${COLDEFAULT}='${CHOST}'"
108 fi
109
110 # run any given command
111 eval $@ || die
112
113 unset ABI CC CXX ABI_LIBDIR
114 # keep pkgconfig clean
115 export PKG_CONFIG_PATH="${orig_pkg_config_path}"
116 export LDFLAGS="${saved_ldflags}"
117
118 # restore original settings
119 if [[ ${EMUL_LINUX_32} = true ]]
120 then
121 unset uname
122 export CHOST="${ORIG_CHOST}" && unset ORIG_CHOST
123 fi
124 }
125
126 abi-m64()
127 {
128 export ABI="m64"
129 export CC="gcc -${ABI}"
130 export CXX="g++ -${ABI}"
131 export ABI_LIBDIR="lib64"
132 if [[ ${EXPORT_ABI_LDFLAGS} != false ]]
133 then
134 local saved_ldflags="${LDFLAGS}"
135 export LDFLAGS="-L/${ABI_LIBDIR} -L/usr/${ABI_LIBDIR}"
136 fi
137 # keep pkgconfig clean
138 local orig_pkg_config_path="${PKG_CONFIG_PATH}"
139 export PKG_CONFIG_PATH="/usr/${ABI_LIBDIR}/pkgconfig:${PKG_CONFIG_PATH}"
140
141 if [[ ${MULTILIB_VERBOSE} = true ]]
142 then
143 echo -e "${COLBLUE}*** ${COLGREEN}running with -${ABI} ABI${COLDEFAULT}"
144 echo -e "${COLBLUE}*** ${COLGREEN} ABI${COLDEFAULT}='${ABI}'"
145 echo -e "${COLBLUE}*** ${COLGREEN} CC${COLDEFAULT}='${CC}'"
146 echo -e "${COLBLUE}*** ${COLGREEN} CXX${COLDEFAULT}='${CXX}'"
147 echo -e "${COLBLUE}*** ${COLGREEN} ABI_LIBDIR${COLDEFAULT}='${ABI_LIBDIR}'"
148 if [[ ${EXPORT_ABI_LDFLAGS} != false ]]
149 then
150 echo -e "${COLBLUE}*** ${COLGREEN} LDFLAGS${COLDEFAULT}='${LDFLAGS}'"
151 else
152 echo -e "${COLBLUE}*** ${COLGREEN} LDFLAGS${COLDEFAULT}='${COLYELLOW}not exported${COLDEFAULT}'"
153 fi
154 echo -e "${COLBLUE}*** ${COLGREEN} CHOST${COLDEFAULT}='${CHOST}'"
155 echo -e "${COLBLUE}*** ${COLGREEN} PKG_CONFIG_PATH${COLDEFAULT}='${PKG_CONFIG_PATH}'"
156 fi
157
158 # run any given command
159 eval $@ || die
160
161 unset ABI CC CXX ABI_LIBDIR
162 # keep pkgconfig clean
163 export PKG_CONFIG_PATH="${orig_pkg_config_path}"
164 export LDFLAGS="${saved_ldflags}"
165 }
166
167 only-m32()
168 {
169 local abi=m32
170 local i
171
172 for i in ${MULTILIB_ABIS}
173 do
174 if [[ ${i} = ${abi} ]]
175 then
176 # export this for mpatch etc (to repect only-${abi})
177 export MULTILIB_ONLY_ABI=${abi}
178
179 cd ${SRCDIR}-${abi}
180 abi-${abi} $@ || die
181
182 # unset this is very important
183 unset MULTILIB_ONLY_ABI
184 fi
185 done
186 }
187
188 only-m64()
189 {
190 local abi=m64
191 local i
192
193 for i in ${MULTILIB_ABIS}
194 do
195 if [[ ${i} = ${abi} ]]
196 then
197 # export this for mpatch etc (to repect only-${abi})
198 export MULTILIB_ONLY_ABI=${abi}
199
200 cd ${SRCDIR}-${abi}
201 abi-${abi} $@ || die
202
203 # unset this is very important
204 unset MULTILIB_ONLY_ABI
205 fi
206 done
207 }
208
209 all-abis()
210 {
211 local abi
212 for abi in ${MULTILIB_ABIS}
213 do
214 cd ${SRCDIR}-${abi}
215 abi-${abi} $@ || die
216 done
217 }
218
219 mabi()
220 {
221 echo \${ABI}
222 }
223
224 ##
225 # multilib compile functions
226 ##
227
228 if [[ ! -z $(typeset -f mconfigure) ]]
229 then
230 # rename the old one
231 old_mconfigure=old$(typeset -f mconfigure)
232 eval "${old_mconfigure}"
233 fi
234 mconfigure()
235 {
236 local abi
237 local abis_to_run="${MULTILIB_ABIS}"
238
239 # respect MULTILIB_ONLY_ABI variable
240 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
241
242 for abi in ${abis_to_run}
243 do
244 cd ${SRCDIR}-${abi}
245 abi-${abi} oldmconfigure $@ || die
246 done
247 }
248
249 if [[ ! -z $(typeset -f cmake_configure) ]]
250 then
251 # rename the old one
252 old_cmake_configure=old$(typeset -f cmake_configure)
253 eval "${old_cmake_configure}"
254 fi
255 cmake_configure()
256 {
257 local abi
258 local abis_to_run="${MULTILIB_ABIS}"
259
260 # respect MULTILIB_ONLY_ABI variable
261 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
262
263 local saved_SRCDIR="${SRCDIR}"
264 for abi in ${abis_to_run}
265 do
266 SRCDIR="${saved_SRCDIR}-${abi}"
267 cd ${SRCDIR}
268 abi-${abi} oldcmake_configure $@ || die
269 done
270 # restore SRCDIR
271 SRCDIR="${saved_SRCDIR}"
272 }
273
274 if [[ ! -z $(typeset -f munpack) ]]
275 then
276 # rename the old one
277 old_munpack=old$(typeset -f munpack)
278 eval "${old_munpack}"
279 fi
280 munpack()
281 {
282 local abi
283 local abis_to_run="${MULTILIB_ABIS}"
284
285 # respect MULTILIB_ONLY_ABI variable
286 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
287
288 for abi in ${abis_to_run}
289 do
290 echo -e "${COLBLUE}*** ${COLGREEN}unpacking for ABI -${abi}${COLDEFAULT}"
291 oldmunpack ${SRCFILE} || die
292 mv ${SRCDIR} ${SRCDIR}-${abi} || die
293 done
294 }
295
296 if [[ ! -z $(typeset -f mmake) ]]
297 then
298 # rename the old one
299 old_mmake=old$(typeset -f mmake)
300 eval "${old_mmake}"
301 fi
302 mmake()
303 {
304 local abi
305 local abis_to_run="${MULTILIB_ABIS}"
306
307 # respect MULTILIB_ONLY_ABI variable
308 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
309
310 for abi in ${abis_to_run}
311 do
312 echo -e "${COLBLUE}*** ${COLGREEN}compiling for ABI -${abi}${COLDEFAULT}"
313 cd ${SRCDIR}-${abi}
314 abi-${abi} oldmmake $@ || die
315 done
316 }
317
318 if [[ ! -z $(typeset -f minstall) ]]
319 then
320 # rename the old one
321 old_minstall=old$(typeset -f minstall)
322 eval "${old_minstall}"
323 fi
324 minstall()
325 {
326 local abi
327 local abis_to_run="${MULTILIB_ABIS}"
328
329 # respect MULTILIB_ONLY_ABI variable
330 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
331
332 for abi in ${abis_to_run}
333 do
334 echo -e "${COLBLUE}*** ${COLGREEN}installing for ABI -${abi}${COLDEFAULT}"
335 cd ${SRCDIR}-${abi}
336 abi-${abi} oldminstall $@ || die
337 done
338 }
339
340 minstall_destdir()
341 {
342 local abi
343 local abis_to_run="${MULTILIB_ABIS}"
344
345 # respect MULTILIB_ONLY_ABI variable
346 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
347
348 for abi in ${abis_to_run}
349 do
350 echo -e "${COLBLUE}*** ${COLGREEN}installing for ABI -${abi}${COLDEFAULT}"
351 cd ${SRCDIR}-${abi}
352 make DESTDIR=${BINDIR} $@ install || die
353 done
354 }
355
356 if [[ ! -z $(typeset -f mpatch) ]]
357 then
358 # rename the old one
359 old_mpatch=old$(typeset -f mpatch)
360 eval "${old_mpatch}"
361 fi
362 mpatch()
363 {
364 local abi
365 local abis_to_run="${MULTILIB_ABIS}"
366
367 # respect MULTILIB_ONLY_ABI variable
368 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
369
370 for abi in ${abis_to_run}
371 do
372 echo -e "${COLBLUE}*** ${COLGREEN}appling patch for ABI -${abi}${COLDEFAULT}"
373 cd ${SRCDIR}-${abi}
374 oldmpatch $@ || die
375 done
376 }
377
378 if [[ ! -z $(typeset -f mlibtoolize) ]]
379 then
380 # rename the old one
381 old_mlibtoolize=old$(typeset -f mlibtoolize)
382 eval "${old_mlibtoolize}"
383 fi
384 mlibtoolize()
385 {
386 local abi
387 local abis_to_run="${MULTILIB_ABIS}"
388
389 # respect MULTILIB_ONLY_ABI variable
390 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
391
392 for abi in ${abis_to_run}
393 do
394 echo -e "${COLBLUE}*** ${COLGREEN}running mlibtoolize for ABI -${abi}${COLDEFAULT}"
395 cd ${SRCDIR}-${abi}
396 oldmlibtoolize $@ || die
397 done
398 }
399
400 if [[ ! -z $(typeset -f mautoreconf) ]]
401 then
402 # rename the old one
403 old_mautoreconf=old$(typeset -f mautoreconf)
404 eval "${old_mautoreconf}"
405 fi
406 mautoreconf()
407 {
408 local abi
409 local abis_to_run="${MULTILIB_ABIS}"
410
411 # respect MULTILIB_ONLY_ABI variable
412 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
413
414 for abi in ${abis_to_run}
415 do
416 echo -e "${COLBLUE}*** ${COLGREEN}running mautoreconf for ABI -${abi}${COLDEFAULT}"
417 cd ${SRCDIR}-${abi}
418 oldmautoreconf $@ || die
419 done
420 }
421
422 if [[ ! -z $(typeset -f minstalldocs) ]]
423 then
424 # rename the old one
425 old_minstalldocs=old$(typeset -f minstalldocs)
426 eval "${old_minstalldocs}"
427 fi
428 minstalldocs()
429 {
430 local abi
431 local docfiles
432
433 local abis_to_run="${MULTILIB_ABIS}"
434
435 # respect MULTILIB_ONLY_ABI variable
436 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
437
438 for abi in ${abis_to_run}
439 do
440 cd ${SRCDIR}-${abi}
441 oldminstalldocs $@ || die
442 done
443 }
444
445 ##
446 # multilib mbuild wrappers
447 ##
448 multilib_src_prepare()
449 {
450 munpack
451 }
452
453 multilib_src_compile()
454 {
455 mconfigure
456 mmake
457 }
458
459 multilib_src_check()
460 {
461 mmake -j1 -k check || die
462 }
463
464 multilib_src_install()
465 {
466 minstall_destdir
467
468 local i
469 for abi in ${MULTILIB_ABIS}
470 do
471 cd ${SRCDIR}-${abi}
472 for i in ABOUT-NLS AUTHORS BUGS CHANGES ChangeLog COPYING \
473 FAQ LICENSE NEWS README TODO
474 do
475 if [ -f ${SRCDIR}-${abi}/${i} ]
476 then
477 minstalldocs ${i} || die
478 fi
479 done
480 done
481 }
482
483 export_inherits multilib src_prepare src_compile src_check src_install