Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1900 - (show annotations) (download)
Wed Nov 9 09:30:34 2011 UTC (12 years, 5 months ago) by niro
File size: 10003 byte(s)
-sync with upstream
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 }
264
265 if [[ ! -z $(typeset -f munpack) ]]
266 then
267 # rename the old one
268 old_munpack=old$(typeset -f munpack)
269 eval "${old_munpack}"
270 fi
271 munpack()
272 {
273 local abi
274 local abis_to_run="${MULTILIB_ABIS}"
275
276 # respect MULTILIB_ONLY_ABI variable
277 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
278
279 for abi in ${abis_to_run}
280 do
281 echo -e "${COLBLUE}*** ${COLGREEN}unpacking for ABI -${abi}${COLDEFAULT}"
282 oldmunpack ${SRCFILE} || die
283 mv ${SRCDIR} ${SRCDIR}-${abi} || die
284 done
285 }
286
287 if [[ ! -z $(typeset -f mmake) ]]
288 then
289 # rename the old one
290 old_mmake=old$(typeset -f mmake)
291 eval "${old_mmake}"
292 fi
293 mmake()
294 {
295 local abi
296 local abis_to_run="${MULTILIB_ABIS}"
297
298 # respect MULTILIB_ONLY_ABI variable
299 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
300
301 for abi in ${abis_to_run}
302 do
303 echo -e "${COLBLUE}*** ${COLGREEN}compiling for ABI -${abi}${COLDEFAULT}"
304 cd ${SRCDIR}-${abi}
305 abi-${abi} oldmmake $@ || die
306 done
307 }
308
309 if [[ ! -z $(typeset -f minstall) ]]
310 then
311 # rename the old one
312 old_minstall=old$(typeset -f minstall)
313 eval "${old_minstall}"
314 fi
315 minstall()
316 {
317 local abi
318 local abis_to_run="${MULTILIB_ABIS}"
319
320 # respect MULTILIB_ONLY_ABI variable
321 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
322
323 for abi in ${abis_to_run}
324 do
325 echo -e "${COLBLUE}*** ${COLGREEN}installing for ABI -${abi}${COLDEFAULT}"
326 cd ${SRCDIR}-${abi}
327 abi-${abi} oldminstall $@ || die
328 done
329 }
330
331 minstall_destdir()
332 {
333 local abi
334 local abis_to_run="${MULTILIB_ABIS}"
335
336 # respect MULTILIB_ONLY_ABI variable
337 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
338
339 for abi in ${abis_to_run}
340 do
341 echo -e "${COLBLUE}*** ${COLGREEN}installing for ABI -${abi}${COLDEFAULT}"
342 cd ${SRCDIR}-${abi}
343 make DESTDIR=${BINDIR} $@ install || die
344 done
345 }
346
347 if [[ ! -z $(typeset -f mpatch) ]]
348 then
349 # rename the old one
350 old_mpatch=old$(typeset -f mpatch)
351 eval "${old_mpatch}"
352 fi
353 mpatch()
354 {
355 local abi
356 local abis_to_run="${MULTILIB_ABIS}"
357
358 # respect MULTILIB_ONLY_ABI variable
359 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
360
361 for abi in ${abis_to_run}
362 do
363 echo -e "${COLBLUE}*** ${COLGREEN}appling patch for ABI -${abi}${COLDEFAULT}"
364 cd ${SRCDIR}-${abi}
365 oldmpatch $@ || die
366 done
367 }
368
369 if [[ ! -z $(typeset -f mlibtoolize) ]]
370 then
371 # rename the old one
372 old_mlibtoolize=old$(typeset -f mlibtoolize)
373 eval "${old_mlibtoolize}"
374 fi
375 mlibtoolize()
376 {
377 local abi
378 local abis_to_run="${MULTILIB_ABIS}"
379
380 # respect MULTILIB_ONLY_ABI variable
381 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
382
383 for abi in ${abis_to_run}
384 do
385 echo -e "${COLBLUE}*** ${COLGREEN}running mlibtoolize for ABI -${abi}${COLDEFAULT}"
386 cd ${SRCDIR}-${abi}
387 oldmlibtoolize $@ || die
388 done
389 }
390
391 minstalldocs()
392 {
393 local abi
394 local docfiles
395 docfiles="$@"
396
397 local abis_to_run="${MULTILIB_ABIS}"
398
399 # respect MULTILIB_ONLY_ABI variable
400 [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}"
401
402 for abi in ${abis_to_run}
403 do
404 cd ${SRCDIR}-${abi}
405 if [ ! -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} ]
406 then
407 install -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "creating doc dirs."
408 fi
409
410 for i in ${docfiles}
411 do
412 cat ${SRCDIR}-${abi}/${i} | gzip -9c > ${SRCDIR}-${abi}/${i}.gz || die "gzipping docs."
413 install -m 0644 ${SRCDIR}-${abi}/${i}.gz \
414 ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "coping docs."
415 done
416 done
417 }
418
419 ##
420 # multilib mbuild wrappers
421 ##
422 multilib_src_prepare()
423 {
424 munpack
425 }
426
427 multilib_src_compile()
428 {
429 mconfigure
430 mmake
431 }
432
433 multilib_src_install()
434 {
435 minstall_destdir
436
437 local i
438 for abi in ${MULTILIB_ABIS}
439 do
440 cd ${SRCDIR}-${abi}
441 for i in ABOUT-NLS AUTHORS BUGS CHANGES ChangeLog COPYING \
442 FAQ LICENSE NEWS README TODO
443 do
444 if [ -f ${SRCDIR}-${abi}/${i} ]
445 then
446 minstalldocs ${i} || die
447 fi
448 done
449 done
450 }
451
452 export_inherits multilib src_prepare src_compile src_install