/[gentoo-x86]/eclass/eutils.eclass
Gentoo

Contents of /eclass/eutils.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.137 - (hide annotations) (download)
Fri Jan 7 11:21:42 2005 UTC (9 years, 6 months ago) by eradicator
Branch: MAIN
Changes since 1.136: +7 -8 lines
Fix bug when ABI is passed as an arg to get_abi_var.

1 vapier 1.90 # Copyright 1999-2004 Gentoo Foundation
2 azarah 1.1 # Distributed under the terms of the GNU General Public License v2
3 eradicator 1.137 # $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.136 2005/01/07 11:13:38 eradicator Exp $
4 vapier 1.18 #
5 azarah 1.1 # Author: Martin Schlemmer <azarah@gentoo.org>
6 vapier 1.18 #
7 azarah 1.1 # This eclass is for general purpose functions that most ebuilds
8 vapier 1.7 # have to implement themselves.
9 azarah 1.1 #
10     # NB: If you add anything, please comment it!
11    
12     ECLASS=eutils
13     INHERITED="$INHERITED $ECLASS"
14    
15 vapier 1.83 DEPEND="!bootstrap? ( sys-devel/patch )"
16 azarah 1.1
17 vapier 1.22 DESCRIPTION="Based on the ${ECLASS} eclass"
18 azarah 1.1
19 ciaranm 1.98 # Wait for the supplied number of seconds. If no argument is supplied, defaults
20     # to five seconds. If the EPAUSE_IGNORE env var is set, don't wait. If we're not
21     # outputting to a terminal, don't wait. For compatability purposes, the argument
22     # must be an integer greater than zero.
23     # Bug 62950, Ciaran McCreesh <ciaranm@gentoo.org> (05 Sep 2004)
24     epause() {
25     if [ -z "$EPAUSE_IGNORE" ] && [ -t 1 ] ; then
26     sleep ${1:-5}
27     fi
28     }
29    
30     # Beep the specified number of times (defaults to five). If our output
31     # is not a terminal, don't beep. If the EBEEP_IGNORE env var is set,
32     # don't beep.
33     # Bug 62950, Ciaran McCreesh <ciaranm@gentoo.org> (05 Sep 2004)
34     ebeep() {
35     local n
36     if [ -z "$EBEEP_IGNORE" ] && [ -t 1 ] ; then
37     for ((n=1 ; n <= ${1:-5} ; n++)) ; do
38     echo -ne "\a"
39     sleep 0.1 &>/dev/null ; sleep 0,1 &>/dev/null
40     echo -ne "\a"
41     sleep 1
42     done
43     fi
44     }
45    
46 lv 1.96 # This function simply returns the desired lib directory. With portage
47     # 2.0.51, we now have support for installing libraries to lib32/lib64
48     # to accomidate the needs of multilib systems. It's no longer a good idea
49     # to assume all libraries will end up in lib. Replace any (sane) instances
50     # where lib is named directly with $(get_libdir) if possible.
51     #
52     # Travis Tilley <lv@gentoo.org> (24 Aug 2004)
53 eradicator 1.128 #
54     # Jeremy Huddleston <eradicator@gentoo.org> (23 Dec 2004):
55     # Added support for ${ABI} and ${DEFAULT_ABI}. If they're both not set,
56     # fall back on old behavior. Any profile that has these set should also
57     # depend on a newer version of portage (not yet released) which uses these
58     # over CONF_LIBDIR in econf, dolib, etc...
59 lv 1.96 get_libdir() {
60 kugelfang 1.103 LIBDIR_TEST=$(type econf)
61 lv 1.97 if [ ! -z "${CONF_LIBDIR_OVERRIDE}" ] ; then
62     # if there is an override, we want to use that... always.
63     CONF_LIBDIR="${CONF_LIBDIR_OVERRIDE}"
64 kugelfang 1.103 # We don't need to know the verison of portage. We only need to know
65     # if there is support for CONF_LIBDIR in econf and co.
66     # Danny van Dyk <kugelfang@gentoo.org> 2004/17/09
67     #elif portageq has_version / '<sys-apps/portage-2.0.51_pre20' ; then
68     # # and if there isnt an override, and we're using a version of
69     # # portage without CONF_LIBDIR support, force the use of lib. dolib
70     # # and friends from portage 2.0.50 wont be too happy otherwise.
71     # CONF_LIBDIR="lib"
72     #fi
73 eradicator 1.135 elif [ -n "$(get_abi_LIBDIR)" ]; then # Using eradicator's LIBDIR_<abi> approach...
74 eradicator 1.128 CONF_LIBDIR="$(get_abi_LIBDIR)"
75 kugelfang 1.103 elif [ "${LIBDIR_TEST/CONF_LIBDIR}" == "${LIBDIR_TEST}" ]; then # we don't have CONF_LIBDIR support
76     # will be <portage-2.0.51_pre20
77 lv 1.97 CONF_LIBDIR="lib"
78     fi
79     # and of course, default to lib if CONF_LIBDIR isnt set
80 lv 1.96 echo ${CONF_LIBDIR:=lib}
81 kugelfang 1.103 unset LIBDIR_TEST
82 lv 1.96 }
83    
84 lv 1.101 get_multilibdir() {
85 eradicator 1.135 [ -n "$(get_abi_LIBDIR)" ] && die "get_multilibdir called, but it shouldn't be needed with the new multilib approach. Please file a bug at http://bugs.gentoo.org and assign it to eradicator@gentoo.org"
86 lv 1.101 echo ${CONF_MULTILIBDIR:=lib32}
87     }
88    
89 lv 1.97 # Sometimes you need to override the value returned by get_libdir. A good
90     # example of this is xorg-x11, where lib32 isnt a supported configuration,
91     # and where lib64 -must- be used on amd64 (for applications that need lib
92     # to be 32bit, such as adobe acrobat). Note that this override also bypasses
93     # portage version sanity checking.
94     # get_libdir_override expects one argument, the result get_libdir should
95     # return:
96     #
97     # get_libdir_override lib64
98     #
99     # Travis Tilley <lv@gentoo.org> (31 Aug 2004)
100     get_libdir_override() {
101 eradicator 1.135 [ -n "$(get_abi_LIBDIR)" ] && die "get_libdir_override called, but it shouldn't be needed with the new multilib approach. Please file a bug at http://bugs.gentoo.org and assign it to eradicator@gentoo.org"
102 lv 1.97 CONF_LIBDIR="$1"
103     CONF_LIBDIR_OVERRIDE="$1"
104     }
105    
106 azarah 1.1 # This function generate linker scripts in /usr/lib for dynamic
107     # libs in /lib. This is to fix linking problems when you have
108     # the .so in /lib, and the .a in /usr/lib. What happens is that
109     # in some cases when linking dynamic, the .a in /usr/lib is used
110     # instead of the .so in /lib due to gcc/libtool tweaking ld's
111     # library search path. This cause many builds to fail.
112     # See bug #4411 for more info.
113     #
114     # To use, simply call:
115     #
116     # gen_usr_ldscript libfoo.so
117     #
118     # Note that you should in general use the unversioned name of
119     # the library, as ldconfig should usually update it correctly
120     # to point to the latest version of the library present.
121     #
122     # <azarah@gentoo.org> (26 Oct 2002)
123     #
124     gen_usr_ldscript() {
125 vapier 1.109 local libdir="$(get_libdir)"
126 azarah 1.1 # Just make sure it exists
127 vapier 1.109 dodir /usr/${libdir}
128 danarmak 1.32
129 vapier 1.109 cat > "${D}/usr/${libdir}/${1}" << END_LDSCRIPT
130 azarah 1.1 /* GNU ld script
131     Because Gentoo have critical dynamic libraries
132     in /lib, and the static versions in /usr/lib, we
133     need to have a "fake" dynamic lib in /usr/lib,
134     otherwise we run into linking problems.
135     See bug #4411 on http://bugs.gentoo.org/ for
136     more info. */
137 vapier 1.109 GROUP ( /${libdir}/${1} )
138 azarah 1.1 END_LDSCRIPT
139 vapier 1.109 fperms a+x "/usr/${libdir}/${1}"
140 azarah 1.2 }
141    
142 azarah 1.5 # Simple function to draw a line consisting of '=' the same length as $*
143     #
144     # <azarah@gentoo.org> (11 Nov 2002)
145     #
146     draw_line() {
147     local i=0
148     local str_length=""
149    
150     # Handle calls that do not have args, or wc not being installed ...
151     if [ -z "$1" -o ! -x "$(which wc 2>/dev/null)" ]
152     then
153     echo "==============================================================="
154     return 0
155     fi
156    
157     # Get the length of $*
158     str_length="$(echo -n "$*" | wc -m)"
159 danarmak 1.32
160 azarah 1.5 while [ "$i" -lt "${str_length}" ]
161     do
162     echo -n "="
163 danarmak 1.32
164 azarah 1.5 i=$((i + 1))
165     done
166    
167     echo
168    
169     return 0
170     }
171 azarah 1.2
172     # Default directory where patches are located
173     EPATCH_SOURCE="${WORKDIR}/patch"
174     # Default extension for patches
175     EPATCH_SUFFIX="patch.bz2"
176     # Default options for patch
177 solar 1.55 # Set -g0 to keep RCS, ClearCase, Perforce and SCCS happy. Bug #24571
178     EPATCH_OPTS="-g0"
179 azarah 1.6 # List of patches not to apply. Not this is only file names,
180     # and not the full path ..
181     EPATCH_EXCLUDE=""
182 azarah 1.9 # Change the printed message for a single patch.
183     EPATCH_SINGLE_MSG=""
184 azarah 1.29 # Force applying bulk patches even if not following the style:
185     #
186     # ??_${ARCH}_foo.${EPATCH_SUFFIX}
187     #
188     EPATCH_FORCE="no"
189 azarah 1.2
190     # This function is for bulk patching, or in theory for just one
191     # or two patches.
192     #
193     # It should work with .bz2, .gz, .zip and plain text patches.
194     # Currently all patches should be the same format.
195     #
196     # You do not have to specify '-p' option to patch, as it will
197     # try with -p0 to -p5 until it succeed, or fail at -p5.
198     #
199     # Above EPATCH_* variables can be used to control various defaults,
200     # bug they should be left as is to ensure an ebuild can rely on
201     # them for.
202     #
203 azarah 1.3 # Patches are applied in current directory.
204     #
205     # Bulk Patches should preferibly have the form of:
206 azarah 1.2 #
207     # ??_${ARCH}_foo.${EPATCH_SUFFIX}
208     #
209     # For example:
210     #
211     # 01_all_misc-fix.patch.bz2
212     # 02_sparc_another-fix.patch.bz2
213     #
214     # This ensures that there are a set order, and you can have ARCH
215     # specific patches.
216     #
217 azarah 1.3 # If you however give an argument to epatch(), it will treat it as a
218     # single patch that need to be applied if its a file. If on the other
219     # hand its a directory, it will set EPATCH_SOURCE to this.
220     #
221 azarah 1.2 # <azarah@gentoo.org> (10 Nov 2002)
222     #
223     epatch() {
224     local PIPE_CMD=""
225     local STDERR_TARGET="${T}/$$.out"
226 azarah 1.8 local PATCH_TARGET="${T}/$$.patch"
227     local PATCH_SUFFIX=""
228 azarah 1.3 local SINGLE_PATCH="no"
229 azarah 1.4 local x=""
230 azarah 1.3
231     if [ "$#" -gt 1 ]
232     then
233 vapier 1.94 local m=""
234 vapier 1.121 einfo "${#} patches to apply ..."
235 vapier 1.94 for m in "$@" ; do
236     epatch "${m}"
237     done
238     return 0
239 azarah 1.3 fi
240    
241     if [ -n "$1" -a -f "$1" ]
242     then
243     SINGLE_PATCH="yes"
244 danarmak 1.32
245 azarah 1.4 local EPATCH_SOURCE="$1"
246     local EPATCH_SUFFIX="${1##*\.}"
247 danarmak 1.32
248 azarah 1.3 elif [ -n "$1" -a -d "$1" ]
249     then
250 azarah 1.29 # Allow no extension if EPATCH_FORCE=yes ... used by vim for example ...
251     if [ "${EPATCH_FORCE}" = "yes" ] && [ -z "${EPATCH_SUFFIX}" ]
252     then
253     local EPATCH_SOURCE="$1/*"
254     else
255     local EPATCH_SOURCE="$1/*.${EPATCH_SUFFIX}"
256     fi
257 azarah 1.3 else
258 vapier 1.123 if [ ! -d ${EPATCH_SOURCE} ] || [ -n "$1" ]
259 azarah 1.8 then
260 azarah 1.19 if [ -n "$1" -a "${EPATCH_SOURCE}" = "${WORKDIR}/patch" ]
261     then
262     EPATCH_SOURCE="$1"
263     fi
264    
265 azarah 1.8 echo
266 azarah 1.11 eerror "Cannot find \$EPATCH_SOURCE! Value for \$EPATCH_SOURCE is:"
267     eerror
268     eerror " ${EPATCH_SOURCE}"
269 azarah 1.8 echo
270     die "Cannot find \$EPATCH_SOURCE!"
271     fi
272 danarmak 1.32
273 azarah 1.4 local EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}"
274 azarah 1.3 fi
275 azarah 1.2
276     case ${EPATCH_SUFFIX##*\.} in
277     bz2)
278     PIPE_CMD="bzip2 -dc"
279 azarah 1.8 PATCH_SUFFIX="bz2"
280 azarah 1.2 ;;
281 azarah 1.6 gz|Z|z)
282 azarah 1.2 PIPE_CMD="gzip -dc"
283 azarah 1.8 PATCH_SUFFIX="gz"
284 azarah 1.2 ;;
285 azarah 1.6 ZIP|zip)
286 azarah 1.2 PIPE_CMD="unzip -p"
287 azarah 1.8 PATCH_SUFFIX="zip"
288 azarah 1.2 ;;
289     *)
290     PIPE_CMD="cat"
291 azarah 1.8 PATCH_SUFFIX="patch"
292 azarah 1.2 ;;
293     esac
294    
295 azarah 1.3 if [ "${SINGLE_PATCH}" = "no" ]
296     then
297 vapier 1.121 einfo "Applying various patches (bugfixes/updates) ..."
298 azarah 1.3 fi
299     for x in ${EPATCH_SOURCE}
300 azarah 1.2 do
301 vapier 1.121 # New ARCH dependant patch naming scheme ...
302 azarah 1.2 #
303     # ???_arch_foo.patch
304     #
305     if [ -f ${x} ] && \
306 azarah 1.29 ([ "${SINGLE_PATCH}" = "yes" -o "${x/_all_}" != "${x}" -o "`eval echo \$\{x/_${ARCH}_\}`" != "${x}" ] || \
307     [ "${EPATCH_FORCE}" = "yes" ])
308 azarah 1.2 then
309     local count=0
310     local popts="${EPATCH_OPTS}"
311 azarah 1.6
312     if [ -n "${EPATCH_EXCLUDE}" ]
313     then
314 azarah 1.9 if [ "`eval echo \$\{EPATCH_EXCLUDE/${x##*/}\}`" != "${EPATCH_EXCLUDE}" ]
315 azarah 1.6 then
316     continue
317     fi
318     fi
319 danarmak 1.32
320 azarah 1.3 if [ "${SINGLE_PATCH}" = "yes" ]
321     then
322 azarah 1.9 if [ -n "${EPATCH_SINGLE_MSG}" ]
323     then
324     einfo "${EPATCH_SINGLE_MSG}"
325     else
326 vapier 1.121 einfo "Applying ${x##*/} ..."
327 azarah 1.9 fi
328 azarah 1.3 else
329 vapier 1.121 einfo " ${x##*/} ..."
330 azarah 1.3 fi
331 azarah 1.2
332 azarah 1.8 echo "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
333     echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
334 azarah 1.2
335     # Allow for prefix to differ ... im lazy, so shoot me :/
336     while [ "${count}" -lt 5 ]
337     do
338 azarah 1.5 # Generate some useful debug info ...
339 azarah 1.8 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
340     echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
341    
342     if [ "${PATCH_SUFFIX}" != "patch" ]
343     then
344     echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
345     echo "${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
346     else
347     PATCH_TARGET="${x}"
348     fi
349 danarmak 1.32
350 azarah 1.8 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
351 vapier 1.88 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
352 danarmak 1.32
353 azarah 1.8 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
354     draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
355    
356     if [ "${PATCH_SUFFIX}" != "patch" ]
357     then
358     if ! (${PIPE_CMD} ${x} > ${PATCH_TARGET}) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1
359     then
360     echo
361     eerror "Could not extract patch!"
362     #die "Could not extract patch!"
363     count=5
364     break
365     fi
366     fi
367 danarmak 1.32
368 vapier 1.88 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1
369 azarah 1.2 then
370 azarah 1.8 draw_line "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
371     echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
372 vapier 1.121 echo "ACTUALLY APPLYING ${x##*/} ..." >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
373 azarah 1.8 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
374     draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
375    
376 vapier 1.88 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 2>&1
377 azarah 1.8
378     if [ "$?" -ne 0 ]
379     then
380     cat ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
381     echo
382     eerror "A dry-run of patch command succeeded, but actually"
383     eerror "applying the patch failed!"
384     #die "Real world sux compared to the dreamworld!"
385     count=5
386     fi
387    
388     rm -f ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
389 danarmak 1.32
390 azarah 1.2 break
391     fi
392    
393     count=$((count + 1))
394     done
395    
396 azarah 1.8 if [ "${PATCH_SUFFIX}" != "patch" ]
397     then
398     rm -f ${PATCH_TARGET}
399     fi
400    
401 azarah 1.2 if [ "${count}" -eq 5 ]
402     then
403 azarah 1.8 echo
404 azarah 1.2 eerror "Failed Patch: ${x##*/}!"
405     eerror
406     eerror "Include in your bugreport the contents of:"
407     eerror
408 azarah 1.8 eerror " ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}"
409     echo
410 azarah 1.2 die "Failed Patch: ${x##*/}!"
411     fi
412 azarah 1.8
413     rm -f ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
414 azarah 1.3
415     eend 0
416 azarah 1.2 fi
417     done
418 azarah 1.3 if [ "${SINGLE_PATCH}" = "no" ]
419     then
420     einfo "Done with patching"
421 azarah 1.10 fi
422 azarah 1.26 }
423    
424     # This function return true if we are using the NPTL pthreads
425     # implementation.
426     #
427     # <azarah@gentoo.org> (06 March 2003)
428     #
429     have_NPTL() {
430     cat > ${T}/test-nptl.c <<-"END"
431     #define _XOPEN_SOURCE
432     #include <unistd.h>
433     #include <stdio.h>
434    
435     int main()
436     {
437     char buf[255];
438     char *str = buf;
439    
440     confstr(_CS_GNU_LIBPTHREAD_VERSION, str, 255);
441     if (NULL != str) {
442     printf("%s\n", str);
443     if (NULL != strstr(str, "NPTL"))
444     return 0;
445     }
446    
447     return 1;
448     }
449     END
450    
451 vapier 1.121 einfon "Checking for _CS_GNU_LIBPTHREAD_VERSION support in glibc ..."
452 azarah 1.26 if gcc -o ${T}/nptl ${T}/test-nptl.c &> /dev/null
453     then
454     echo "yes"
455 vapier 1.121 einfon "Checking what PTHREADS implementation we have ..."
456 azarah 1.26 if ${T}/nptl
457     then
458     return 0
459     else
460     return 1
461     fi
462     else
463     echo "no"
464     fi
465    
466     return 1
467 azarah 1.10 }
468    
469     # This function check how many cpu's are present, and then set
470     # -j in MAKEOPTS accordingly.
471     #
472     # Thanks to nall <nall@gentoo.org> for this.
473     #
474     get_number_of_jobs() {
475 azarah 1.13 local jobs=0
476    
477 azarah 1.10 if [ ! -r /proc/cpuinfo ]
478     then
479     return 1
480     fi
481    
482 azarah 1.14 # This bit is from H?kan Wessberg <nacka-gentoo@refug.org>, bug #13565.
483     if [ "`egrep "^[[:space:]]*MAKEOPTS=" /etc/make.conf | wc -l`" -gt 0 ]
484     then
485     ADMINOPTS="`egrep "^[[:space:]]*MAKEOPTS=" /etc/make.conf | cut -d= -f2 | sed 's/\"//g'`"
486 azarah 1.17 ADMINPARAM="`echo ${ADMINOPTS} | gawk '{match($0, /-j *[0-9]*/, opt); print opt[0]}'`"
487     ADMINPARAM="${ADMINPARAM/-j}"
488 azarah 1.14 fi
489    
490 azarah 1.17 export MAKEOPTS="`echo ${MAKEOPTS} | sed -e 's:-j *[0-9]*::g'`"
491 danarmak 1.32
492 drobbins 1.35 if [ "${ARCH}" = "amd64" -o "${ARCH}" = "x86" -o "${ARCH}" = "hppa" -o \
493 avenj 1.54 "${ARCH}" = "arm" -o "${ARCH}" = "mips" -o "${ARCH}" = "ia64" ]
494 azarah 1.10 then
495 zwelch 1.21 # these archs will always have "[Pp]rocessor"
496     jobs="$((`grep -c ^[Pp]rocessor /proc/cpuinfo` * 2))"
497 danarmak 1.32
498 azarah 1.10 elif [ "${ARCH}" = "sparc" -o "${ARCH}" = "sparc64" ]
499     then
500     # sparc always has "ncpus active"
501 azarah 1.13 jobs="$((`grep "^ncpus active" /proc/cpuinfo | sed -e "s/^.*: //"` * 2))"
502 danarmak 1.32
503 azarah 1.10 elif [ "${ARCH}" = "alpha" ]
504     then
505     # alpha has "cpus active", but only when compiled with SMP
506 azarah 1.13 if [ "`grep -c "^cpus active" /proc/cpuinfo`" -eq 1 ]
507 azarah 1.10 then
508 azarah 1.13 jobs="$((`grep "^cpus active" /proc/cpuinfo | sed -e "s/^.*: //"` * 2))"
509 azarah 1.10 else
510 azarah 1.13 jobs=2
511 azarah 1.10 fi
512 danarmak 1.32
513 brad_mssw 1.78 elif [ "${ARCH}" = "ppc" -o "${ARCH}" = "ppc64" ]
514 azarah 1.10 then
515     # ppc has "processor", but only when compiled with SMP
516 azarah 1.13 if [ "`grep -c "^processor" /proc/cpuinfo`" -eq 1 ]
517 azarah 1.10 then
518 azarah 1.13 jobs="$((`grep -c ^processor /proc/cpuinfo` * 2))"
519 azarah 1.10 else
520 azarah 1.13 jobs=2
521 azarah 1.10 fi
522 iggy 1.87 elif [ "${ARCH}" = "s390" ]
523     then
524     # s390 has "# processors : "
525     jobs="$((`grep "^\# processors" /proc/cpuinfo | sed -e "s/^.*: //"` * 2))"
526 azarah 1.10 else
527 azarah 1.13 jobs="$((`grep -c ^cpu /proc/cpuinfo` * 2))"
528 azarah 1.10 die "Unknown ARCH -- ${ARCH}!"
529 azarah 1.3 fi
530 azarah 1.13
531     # Make sure the number is valid ...
532     if [ "${jobs}" -lt 1 ]
533     then
534     jobs=1
535     fi
536 danarmak 1.32
537 azarah 1.15 if [ -n "${ADMINPARAM}" ]
538 azarah 1.14 then
539 azarah 1.15 if [ "${jobs}" -gt "${ADMINPARAM}" ]
540     then
541 vapier 1.121 einfo "Setting make jobs to \"-j${ADMINPARAM}\" to ensure successful merge ..."
542 azarah 1.15 export MAKEOPTS="${MAKEOPTS} -j${ADMINPARAM}"
543     else
544 vapier 1.121 einfo "Setting make jobs to \"-j${jobs}\" to ensure successful merge ..."
545 azarah 1.15 export MAKEOPTS="${MAKEOPTS} -j${jobs}"
546     fi
547 azarah 1.14 fi
548 azarah 1.1 }
549    
550 vapier 1.52 # Cheap replacement for when debianutils (and thus mktemp)
551 vapier 1.80 # does not exist on the users system
552 vapier 1.52 # vapier@gentoo.org
553     #
554 vapier 1.117 # Takes just 1 optional parameter (the directory to create tmpfile in)
555     emktemp() {
556 vapier 1.119 local exe="touch"
557     [ "$1" == "-d" ] && exe="mkdir" && shift
558 azarah 1.59 local topdir="$1"
559 mr_bones_ 1.100
560 vapier 1.117 if [ -z "${topdir}" ]
561 azarah 1.59 then
562 vapier 1.117 [ -z "${T}" ] \
563     && topdir="/tmp" \
564     || topdir="${T}"
565     fi
566    
567     if [ -z "$(type -p mktemp)" ]
568     then
569     local tmp=/
570     while [ -e "${tmp}" ] ; do
571     tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}"
572     done
573 vapier 1.119 ${exe} "${tmp}"
574 vapier 1.117 echo "${tmp}"
575 vapier 1.52 else
576 vapier 1.119 [ "${exe}" == "touch" ] \
577     && exe="-p" \
578     || exe="-d"
579     mktemp ${exe} "${topdir}"
580 vapier 1.52 fi
581     }
582    
583 ka0ttic 1.108 # Small wrapper for getent (Linux), nidump (Mac OS X),
584     # and pw (FreeBSD) used in enewuser()/enewgroup()
585 usata 1.91 # Joe Jezak <josejx@gmail.com> and usata@gentoo.org
586 ka0ttic 1.108 # FBSD stuff: Aaron Walker <ka0ttic@gentoo.org>
587 usata 1.91 #
588     # egetent(database, key)
589     egetent() {
590 usata 1.124 if useq ppc-macos ; then
591 usata 1.91 case "$2" in
592     *[!0-9]*) # Non numeric
593     nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
594     ;;
595     *) # Numeric
596     nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
597     ;;
598     esac
599 ka0ttic 1.108 elif useq x86-fbsd ; then
600     local action
601     if [ "$1" == "passwd" ]
602     then
603     action="user"
604     else
605     action="group"
606     fi
607     pw show "${action}" "$2" -q
608 usata 1.91 else
609 vapier 1.113 which nscd >& /dev/null && nscd -i "$1"
610 vapier 1.107 getent "$1" "$2"
611 usata 1.91 fi
612     }
613    
614 vapier 1.23 # Simplify/standardize adding users to the system
615     # vapier@gentoo.org
616     #
617     # enewuser(username, uid, shell, homedir, groups, extra options)
618     #
619     # Default values if you do not specify any:
620     # username: REQUIRED !
621     # uid: next available (see useradd(8))
622 vapier 1.27 # note: pass -1 to get default behavior
623 vapier 1.23 # shell: /bin/false
624     # homedir: /dev/null
625     # groups: none
626     # extra: comment of 'added by portage for ${PN}'
627     enewuser() {
628     # get the username
629     local euser="$1"; shift
630 azarah 1.59 if [ -z "${euser}" ]
631     then
632 vapier 1.23 eerror "No username specified !"
633     die "Cannot call enewuser without a username"
634     fi
635    
636 vapier 1.84 # lets see if the username already exists
637 usata 1.91 if [ "${euser}" == "`egetent passwd \"${euser}\" | cut -d: -f1`" ]
638 azarah 1.59 then
639 vapier 1.23 return 0
640     fi
641 wolf31o2 1.44 einfo "Adding user '${euser}' to your system ..."
642 vapier 1.23
643     # options to pass to useradd
644 azarah 1.59 local opts=
645 vapier 1.23
646     # handle uid
647     local euid="$1"; shift
648 azarah 1.59 if [ ! -z "${euid}" ] && [ "${euid}" != "-1" ]
649     then
650     if [ "${euid}" -gt 0 ]
651     then
652 usata 1.91 if [ ! -z "`egetent passwd ${euid}`" ]
653 vapier 1.82 then
654 vapier 1.84 euid="next"
655 vapier 1.82 fi
656 vapier 1.23 else
657     eerror "Userid given but is not greater than 0 !"
658     die "${euid} is not a valid UID"
659     fi
660     else
661 vapier 1.84 euid="next"
662     fi
663     if [ "${euid}" == "next" ]
664     then
665 usata 1.91 local pwrange
666 usata 1.114 if [ "${USERLAND}" == "BSD" ] ; then
667 usata 1.91 pwrange="`jot 898 101`"
668     else
669     pwrange="`seq 101 999`"
670     fi
671     for euid in ${pwrange} ; do
672     [ -z "`egetent passwd ${euid}`" ] && break
673 vapier 1.84 done
674 vapier 1.23 fi
675 vapier 1.84 opts="${opts} -u ${euid}"
676 vapier 1.23 einfo " - Userid: ${euid}"
677    
678     # handle shell
679     local eshell="$1"; shift
680 vapier 1.67 if [ ! -z "${eshell}" ] && [ "${eshell}" != "-1" ]
681 azarah 1.59 then
682     if [ ! -e "${eshell}" ]
683     then
684 vapier 1.23 eerror "A shell was specified but it does not exist !"
685     die "${eshell} does not exist"
686     fi
687     else
688 ka0ttic 1.108 if [ "${USERLAND}" == "BSD" ]
689     then
690     eshell="/usr/bin/false"
691     else
692     eshell="/bin/false"
693     fi
694 vapier 1.23 fi
695     einfo " - Shell: ${eshell}"
696     opts="${opts} -s ${eshell}"
697    
698     # handle homedir
699     local ehome="$1"; shift
700 vapier 1.67 if [ -z "${ehome}" ] && [ "${eshell}" != "-1" ]
701 azarah 1.59 then
702     ehome="/dev/null"
703 vapier 1.23 fi
704     einfo " - Home: ${ehome}"
705     opts="${opts} -d ${ehome}"
706    
707     # handle groups
708     local egroups="$1"; shift
709 azarah 1.59 if [ ! -z "${egroups}" ]
710     then
711 vapier 1.23 local oldifs="${IFS}"
712 vapier 1.107 local defgroup="" exgroups=""
713    
714 vapier 1.23 export IFS=","
715 azarah 1.59 for g in ${egroups}
716     do
717 usata 1.115 export IFS="${oldifs}"
718 usata 1.91 if [ -z "`egetent group \"${g}\"`" ]
719 azarah 1.59 then
720 vapier 1.85 eerror "You must add group ${g} to the system first"
721 vapier 1.23 die "${g} is not a valid GID"
722     fi
723 vapier 1.107 if [ -z "${defgroup}" ]
724     then
725     defgroup="${g}"
726     else
727     exgroups="${exgroups},${g}"
728     fi
729 usata 1.115 export IFS=","
730 vapier 1.23 done
731     export IFS="${oldifs}"
732 vapier 1.107
733     opts="${opts} -g ${defgroup}"
734     if [ ! -z "${exgroups}" ]
735     then
736     opts="${opts} -G ${exgroups:1}"
737     fi
738 vapier 1.23 else
739     egroups="(none)"
740     fi
741     einfo " - Groups: ${egroups}"
742    
743     # handle extra and add the user
744     local eextra="$@"
745 azarah 1.59 local oldsandbox="${SANDBOX_ON}"
746 vapier 1.23 export SANDBOX_ON="0"
747 usata 1.124 if useq ppc-macos
748 azarah 1.59 then
749 usata 1.91 ### Make the user
750     if [ -z "${eextra}" ]
751     then
752     dscl . create /users/${euser} uid ${euid}
753     dscl . create /users/${euser} shell ${eshell}
754     dscl . create /users/${euser} home ${ehome}
755     dscl . create /users/${euser} realname "added by portage for ${PN}"
756     ### Add the user to the groups specified
757 usata 1.115 local oldifs="${IFS}"
758     export IFS=","
759 usata 1.91 for g in ${egroups}
760     do
761     dscl . merge /groups/${g} users ${euser}
762     done
763 usata 1.115 export IFS="${oldifs}"
764 usata 1.91 else
765     einfo "Extra options are not supported on macos yet"
766     einfo "Please report the ebuild along with the info below"
767     einfo "eextra: ${eextra}"
768     die "Required function missing"
769     fi
770 ka0ttic 1.108 elif use x86-fbsd ; then
771     if [ -z "${eextra}" ]
772     then
773     pw useradd ${euser} ${opts} \
774     -c "added by portage for ${PN}" \
775     die "enewuser failed"
776     else
777     einfo " - Extra: ${eextra}"
778     pw useradd ${euser} ${opts} \
779     -c ${eextra} || die "enewuser failed"
780     fi
781 vapier 1.23 else
782 usata 1.91 if [ -z "${eextra}" ]
783     then
784     useradd ${opts} ${euser} \
785     -c "added by portage for ${PN}" \
786     || die "enewuser failed"
787     else
788     einfo " - Extra: ${eextra}"
789     useradd ${opts} ${euser} ${eextra} \
790     || die "enewuser failed"
791     fi
792 vapier 1.23 fi
793     export SANDBOX_ON="${oldsandbox}"
794    
795 azarah 1.59 if [ ! -e "${ehome}" ] && [ ! -e "${D}/${ehome}" ]
796     then
797 vapier 1.23 einfo " - Creating ${ehome} in ${D}"
798     dodir ${ehome}
799 vapier 1.37 fowners ${euser} ${ehome}
800 vapier 1.38 fperms 755 ${ehome}
801 vapier 1.23 fi
802     }
803    
804     # Simplify/standardize adding groups to the system
805     # vapier@gentoo.org
806     #
807     # enewgroup(group, gid)
808     #
809     # Default values if you do not specify any:
810     # groupname: REQUIRED !
811     # gid: next available (see groupadd(8))
812     # extra: none
813     enewgroup() {
814     # get the group
815     local egroup="$1"; shift
816 azarah 1.59 if [ -z "${egroup}" ]
817     then
818 vapier 1.23 eerror "No group specified !"
819     die "Cannot call enewgroup without a group"
820     fi
821    
822     # see if group already exists
823 usata 1.91 if [ "${egroup}" == "`egetent group \"${egroup}\" | cut -d: -f1`" ]
824 azarah 1.59 then
825 vapier 1.23 return 0
826     fi
827 wolf31o2 1.44 einfo "Adding group '${egroup}' to your system ..."
828 vapier 1.23
829     # options to pass to useradd
830 azarah 1.59 local opts=
831 vapier 1.23
832     # handle gid
833     local egid="$1"; shift
834 azarah 1.59 if [ ! -z "${egid}" ]
835     then
836     if [ "${egid}" -gt 0 ]
837     then
838 usata 1.91 if [ -z "`egetent group ${egid}`" ]
839 vapier 1.83 then
840 usata 1.124 if useq ppc-macos ; then
841 usata 1.91 opts="${opts} ${egid}"
842     else
843     opts="${opts} -g ${egid}"
844     fi
845 vapier 1.83 else
846 vapier 1.84 egid="next available; requested gid taken"
847 vapier 1.83 fi
848 vapier 1.23 else
849     eerror "Groupid given but is not greater than 0 !"
850     die "${egid} is not a valid GID"
851     fi
852     else
853     egid="next available"
854     fi
855     einfo " - Groupid: ${egid}"
856    
857     # handle extra
858     local eextra="$@"
859     opts="${opts} ${eextra}"
860    
861     # add the group
862 azarah 1.59 local oldsandbox="${SANDBOX_ON}"
863 vapier 1.23 export SANDBOX_ON="0"
864 usata 1.124 if useq ppc-macos ; then
865 usata 1.91 if [ ! -z "${eextra}" ];
866     then
867     einfo "Extra options are not supported on macos yet"
868     einfo "Please report the ebuild along with the info below"
869     einfo "eextra: ${eextra}"
870     die "Required function missing"
871     fi
872 mr_bones_ 1.100
873 usata 1.91 # If we need the next available
874     case ${egid} in
875     *[!0-9]*) # Non numeric
876     for egid in `jot 898 101`; do
877     [ -z "`egetent group ${egid}`" ] && break
878     done
879     esac
880     dscl . create /groups/${egroup} gid ${egid}
881 mr_bones_ 1.100 dscl . create /groups/${egroup} passwd '*'
882 ka0ttic 1.108 elif use x86-fbsd ; then
883     case ${egid} in
884     *[!0-9]*) # Non numeric
885     for egid in `jot 898 101`; do
886     [ -z "`egetent group ${egid}`" ] && break
887     done
888     esac
889     pw groupadd ${egroup} -g ${egid} || die "enewgroup failed"
890 usata 1.91 else
891     groupadd ${opts} ${egroup} || die "enewgroup failed"
892     fi
893 vapier 1.23 export SANDBOX_ON="${oldsandbox}"
894 vapier 1.24 }
895    
896     # Simple script to replace 'dos2unix' binaries
897     # vapier@gentoo.org
898     #
899 vapier 1.121 # edos2unix(file, <more files> ...)
900 vapier 1.24 edos2unix() {
901 vapier 1.61 for f in "$@"
902 azarah 1.59 do
903 vapier 1.61 cp "${f}" ${T}/edos2unix
904     sed 's/\r$//' ${T}/edos2unix > "${f}"
905 vapier 1.24 done
906 vapier 1.39 }
907    
908 lanius 1.133
909     ##############################################################
910     # START: Handle .desktop files and menu entries #
911     # maybe this should be separated into a new eclass some time #
912     # lanius@gentoo.org #
913     ##############################################################
914    
915 vapier 1.39 # Make a desktop file !
916     # Great for making those icons in kde/gnome startmenu !
917     # Amaze your friends ! Get the women ! Join today !
918     #
919     # make_desktop_entry(<binary>, [name], [icon], [type], [path])
920     #
921     # binary: what binary does the app run with ?
922     # name: the name that will show up in the menu
923     # icon: give your little like a pretty little icon ...
924 vapier 1.118 # this can be relative (to /usr/share/pixmaps) or
925     # a full path to an icon
926 vapier 1.39 # type: what kind of application is this ? for categories:
927 vapier 1.118 # http://www.freedesktop.org/standards/menu-spec/
928 vapier 1.39 # path: if your app needs to startup in a specific dir
929     make_desktop_entry() {
930 vapier 1.118 [ -z "$1" ] && eerror "make_desktop_entry: You must specify the executable" && return 1
931 vapier 1.39
932 azarah 1.59 local exec="${1}"
933     local name="${2:-${PN}}"
934     local icon="${3:-${PN}.png}"
935     local type="${4}"
936 vapier 1.81 local subdir="${6}"
937 mr_bones_ 1.100 local path="${5:-${GAMES_BINDIR}}"
938 azarah 1.59 if [ -z "${type}" ]
939     then
940 vapier 1.39 case ${CATEGORY} in
941 azarah 1.59 "app-emulation")
942     type=Emulator
943 vapier 1.86 subdir="Emulation"
944 azarah 1.59 ;;
945     "games-"*)
946     type=Game
947 vapier 1.81 subdir="Games"
948 wolf31o2 1.65 ;;
949     "net-"*)
950 vapier 1.81 type=Network
951     subdir="${type}"
952 azarah 1.59 ;;
953     *)
954     type=
955 vapier 1.81 subdir=
956 azarah 1.59 ;;
957 vapier 1.39 esac
958     fi
959 azarah 1.59 local desktop="${T}/${exec}.desktop"
960 vapier 1.39
961     echo "[Desktop Entry]
962     Encoding=UTF-8
963     Version=0.9.2
964     Name=${name}
965     Type=Application
966     Comment=${DESCRIPTION}
967     Exec=${exec}
968     Path=${path}
969     Icon=${icon}
970 vapier 1.99 Categories=Application;${type};" > "${desktop}"
971 vapier 1.39
972 vapier 1.118 insinto /usr/share/applications
973     doins "${desktop}"
974 vapier 1.39
975     return 0
976 danarmak 1.32 }
977    
978 lanius 1.133 # Make a GDM/KDM Session file
979     #
980     # make_desktop_entry(<title>, <command>)
981     # title: File to execute to start the Window Manager
982     # command: Name of the Window Manager
983    
984     make_session_desktop() {
985    
986     [ -z "$1" ] && eerror "make_session_desktop: You must specify the title" && return 1
987     [ -z "$2" ] && eerror "make_session_desktop: You must specify the command" && return 1
988    
989     local title="${1}"
990     local command="${2}"
991     local desktop="${T}/${wm}.desktop"
992    
993     echo "[Desktop Entry]
994     Encoding=UTF-8
995     Name=${title}
996     Comment=This session logs you into ${title}
997     Exec=${command}
998     TryExec=${command}
999     Type=Application" > "${desktop}"
1000    
1001     insinto /usr/share/xsessions
1002     doins "${desktop}"
1003    
1004     return 0
1005     }
1006    
1007     domenu() {
1008     local i
1009     local j
1010     insinto /usr/share/applications
1011     for i in ${@}
1012     do
1013     if [ -f "${i}" ];
1014     then
1015     doins ${i}
1016     elif [ -d "${i}" ];
1017     then
1018     for j in ${i}/*.desktop
1019     do
1020     doins ${j}
1021     done
1022     fi
1023     done
1024     }
1025    
1026     doicon() {
1027     local i
1028     local j
1029     insinto /usr/share/pixmaps
1030     for i in ${@}
1031     do
1032     if [ -f "${i}" ];
1033     then
1034     doins ${i}
1035     elif [ -d "${i}" ];
1036     then
1037     for j in ${i}/*.png
1038     do
1039     doins ${j}
1040     done
1041     fi
1042     done
1043     }
1044    
1045     ##############################################################
1046     # END: Handle .desktop files and menu entries #
1047     ##############################################################
1048    
1049    
1050 vapier 1.70 # for internal use only (unpack_pdv and unpack_makeself)
1051     find_unpackable_file() {
1052 azarah 1.59 local src="$1"
1053     if [ -z "${src}" ]
1054     then
1055 vapier 1.50 src="${DISTDIR}/${A}"
1056     else
1057 azarah 1.59 if [ -e "${DISTDIR}/${src}" ]
1058     then
1059 vapier 1.50 src="${DISTDIR}/${src}"
1060 azarah 1.59 elif [ -e "${PWD}/${src}" ]
1061     then
1062 vapier 1.50 src="${PWD}/${src}"
1063 azarah 1.59 elif [ -e "${src}" ]
1064     then
1065 vapier 1.50 src="${src}"
1066     fi
1067     fi
1068 vapier 1.70 [ ! -e "${src}" ] && die "Could not find requested archive ${src}"
1069     echo "${src}"
1070     }
1071    
1072     # Unpack those pesky pdv generated files ...
1073     # They're self-unpacking programs with the binary package stuffed in
1074     # the middle of the archive. Valve seems to use it a lot ... too bad
1075     # it seems to like to segfault a lot :(. So lets take it apart ourselves.
1076     #
1077     # Usage: unpack_pdv [file to unpack] [size of off_t]
1078     # - you have to specify the off_t size ... i have no idea how to extract that
1079     # information out of the binary executable myself. basically you pass in
1080     # the size of the off_t type (in bytes) on the machine that built the pdv
1081     # archive. one way to determine this is by running the following commands:
1082     # strings <pdv archive> | grep lseek
1083     # strace -elseek <pdv archive>
1084     # basically look for the first lseek command (we do the strings/grep because
1085     # sometimes the function call is _llseek or something) and steal the 2nd
1086     # parameter. here is an example:
1087     # root@vapier 0 pdv_unpack # strings hldsupdatetool.bin | grep lseek
1088     # lseek
1089     # root@vapier 0 pdv_unpack # strace -elseek ./hldsupdatetool.bin
1090     # lseek(3, -4, SEEK_END) = 2981250
1091     # thus we would pass in the value of '4' as the second parameter.
1092     unpack_pdv() {
1093     local src="`find_unpackable_file $1`"
1094     local sizeoff_t="$2"
1095    
1096     [ -z "${sizeoff_t}" ] && die "No idea what off_t size was used for this pdv :("
1097    
1098     local shrtsrc="`basename ${src}`"
1099     echo ">>> Unpacking ${shrtsrc} to ${PWD}"
1100     local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"`
1101     local tailskip=`tail -c $((${sizeoff_t}*2)) ${src} | head -c ${sizeoff_t} | hexdump -e \"%i\"`
1102    
1103     # grab metadata for debug reasons
1104 vapier 1.117 local metafile="$(emktemp)"
1105 vapier 1.70 tail -c +$((${metaskip}+1)) ${src} > ${metafile}
1106    
1107     # rip out the final file name from the metadata
1108     local datafile="`tail -c +$((${metaskip}+1)) ${src} | strings | head -n 1`"
1109     datafile="`basename ${datafile}`"
1110    
1111 vapier 1.71 # now lets uncompress/untar the file if need be
1112 vapier 1.117 local tmpfile="$(emktemp)"
1113 vapier 1.70 tail -c +$((${tailskip}+1)) ${src} 2>/dev/null | head -c 512 > ${tmpfile}
1114 vapier 1.71
1115     local iscompressed="`file -b ${tmpfile}`"
1116     if [ "${iscompressed:0:8}" == "compress" ] ; then
1117     iscompressed=1
1118     mv ${tmpfile}{,.Z}
1119     gunzip ${tmpfile}
1120     else
1121     iscompressed=0
1122     fi
1123     local istar="`file -b ${tmpfile}`"
1124     if [ "${istar:0:9}" == "POSIX tar" ] ; then
1125     istar=1
1126     else
1127     istar=0
1128     fi
1129    
1130     #for some reason gzip dies with this ... dd cant provide buffer fast enough ?
1131     #dd if=${src} ibs=${metaskip} count=1 \
1132     # | dd ibs=${tailskip} skip=1 \
1133     # | gzip -dc \
1134     # > ${datafile}
1135     if [ ${iscompressed} -eq 1 ] ; then
1136     if [ ${istar} -eq 1 ] ; then
1137     tail -c +$((${tailskip}+1)) ${src} 2>/dev/null \
1138     | head -c $((${metaskip}-${tailskip})) \
1139     | tar -xzf -
1140     else
1141 vapier 1.70 tail -c +$((${tailskip}+1)) ${src} 2>/dev/null \
1142     | head -c $((${metaskip}-${tailskip})) \
1143     | gzip -dc \
1144     > ${datafile}
1145 vapier 1.71 fi
1146     else
1147     if [ ${istar} -eq 1 ] ; then
1148     tail -c +$((${tailskip}+1)) ${src} 2>/dev/null \
1149     | head -c $((${metaskip}-${tailskip})) \
1150 vapier 1.73 | tar --no-same-owner -xf -
1151 vapier 1.71 else
1152 vapier 1.70 tail -c +$((${tailskip}+1)) ${src} 2>/dev/null \
1153     | head -c $((${metaskip}-${tailskip})) \
1154     > ${datafile}
1155 vapier 1.71 fi
1156     fi
1157     true
1158     #[ -s "${datafile}" ] || die "failure unpacking pdv ('${metaskip}' '${tailskip}' '${datafile}')"
1159 vapier 1.70 #assert "failure unpacking pdv ('${metaskip}' '${tailskip}' '${datafile}')"
1160     }
1161    
1162     # Unpack those pesky makeself generated files ...
1163     # They're shell scripts with the binary package tagged onto
1164     # the end of the archive. Loki utilized the format as does
1165     # many other game companies.
1166     #
1167 vapier 1.112 # Usage: unpack_makeself [file to unpack] [offset] [tail|dd]
1168 vapier 1.70 # - If the file is not specified then unpack will utilize ${A}.
1169     # - If the offset is not specified then we will attempt to extract
1170     # the proper offset from the script itself.
1171     unpack_makeself() {
1172 vapier 1.112 local src="$(find_unpackable_file "$1")"
1173 vapier 1.70 local skip="$2"
1174 vapier 1.112 local exe="$3"
1175 vapier 1.50
1176 vapier 1.112 local shrtsrc="$(basename "${src}")"
1177 vapier 1.41 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
1178 azarah 1.59 if [ -z "${skip}" ]
1179     then
1180 vapier 1.41 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`"
1181     local skip=0
1182 vapier 1.112 exe=tail
1183 vapier 1.41 case ${ver} in
1184     1.5.*) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same
1185 vapier 1.112 skip=$(grep -a ^skip= "${src}" | cut -d= -f2)
1186 vapier 1.41 ;;
1187     2.0|2.0.1)
1188 vapier 1.112 skip=$(grep -a ^$'\t'tail "${src}" | awk '{print $2}' | cut -b2-)
1189 vapier 1.41 ;;
1190 wolf31o2 1.48 2.1.1)
1191 vapier 1.112 skip=$(grep -a ^offset= "${src}" | awk '{print $2}' | cut -b2-)
1192 wolf31o2 1.48 let skip="skip + 1"
1193     ;;
1194 vapier 1.49 2.1.2)
1195 vapier 1.112 skip=$(grep -a ^offset= "${src}" | awk '{print $3}' | head -n 1)
1196 vapier 1.49 let skip="skip + 1"
1197     ;;
1198 wolf31o2 1.48 2.1.3)
1199 vapier 1.112 skip=`grep -a ^offset= "${src}" | awk '{print $3}'`
1200 vapier 1.41 let skip="skip + 1"
1201     ;;
1202 vapier 1.112 2.1.4)
1203     skip=$(grep -a offset=.*head.*wc "${src}" | awk '{print $3}' | head -n 1)
1204     skip=$(head -n ${skip} "${src}" | wc -c)
1205     exe="dd"
1206     ;;
1207 vapier 1.41 *)
1208     eerror "I'm sorry, but I was unable to support the Makeself file."
1209     eerror "The version I detected was '${ver}'."
1210     eerror "Please file a bug about the file ${shrtsrc} at"
1211     eerror "http://bugs.gentoo.org/ so that support can be added."
1212     die "makeself version '${ver}' not supported"
1213     ;;
1214     esac
1215     debug-print "Detected Makeself version ${ver} ... using ${skip} as offset"
1216     fi
1217 vapier 1.112 case ${exe} in
1218     tail) exe="tail -n +${skip} '${src}'";;
1219     dd) exe="dd ibs=${skip} skip=1 obs=1024 conv=sync if='${src}'";;
1220     *) die "makeself cant handle exe '${exe}'"
1221     esac
1222 vapier 1.41
1223 vapier 1.68 # lets grab the first few bytes of the file to figure out what kind of archive it is
1224 vapier 1.117 local tmpfile="$(emktemp)"
1225 vapier 1.112 eval ${exe} 2>/dev/null | head -c 512 > "${tmpfile}"
1226     local filetype="$(file -b "${tmpfile}")"
1227 vapier 1.68 case ${filetype} in
1228     *tar\ archive)
1229 vapier 1.112 eval ${exe} | tar --no-same-owner -xf -
1230 vapier 1.68 ;;
1231     bzip2*)
1232 vapier 1.112 eval ${exe} | bzip2 -dc | tar --no-same-owner -xf -
1233 mr_bones_ 1.69 ;;
1234 vapier 1.68 gzip*)
1235 vapier 1.112 eval ${exe} | tar --no-same-owner -xzf -
1236 vapier 1.68 ;;
1237 vapier 1.93 compress*)
1238 vapier 1.112 eval ${exe} | gunzip | tar --no-same-owner -xf -
1239 vapier 1.93 ;;
1240 vapier 1.68 *)
1241 vapier 1.93 eerror "Unknown filetype \"${filetype}\" ?"
1242 vapier 1.68 false
1243     ;;
1244     esac
1245     assert "failure unpacking (${filetype}) makeself ${shrtsrc} ('${ver}' +${skip})"
1246 wolf31o2 1.56 }
1247    
1248     # Display a license for user to accept.
1249     #
1250     # Usage: check_license [license]
1251     # - If the file is not specified then ${LICENSE} is used.
1252     check_license() {
1253 vapier 1.60 local lic=$1
1254     if [ -z "${lic}" ] ; then
1255     lic="${PORTDIR}/licenses/${LICENSE}"
1256 wolf31o2 1.56 else
1257 vapier 1.60 if [ -e "${PORTDIR}/licenses/${src}" ] ; then
1258     lic="${PORTDIR}/licenses/${src}"
1259     elif [ -e "${PWD}/${src}" ] ; then
1260     lic="${PWD}/${src}"
1261     elif [ -e "${src}" ] ; then
1262     lic="${src}"
1263 wolf31o2 1.56 fi
1264     fi
1265 vapier 1.60 [ ! -f "${lic}" ] && die "Could not find requested license ${src}"
1266 vapier 1.64 local l="`basename ${lic}`"
1267 wolf31o2 1.56
1268 vapier 1.60 # here is where we check for the licenses the user already
1269     # accepted ... if we don't find a match, we make the user accept
1270 wolf31o2 1.106 local shopts=$-
1271 vapier 1.60 local alic
1272 wolf31o2 1.106 set -o noglob #so that bash doesn't expand "*"
1273 wolf31o2 1.104 for alic in ${ACCEPT_LICENSE} ; do
1274 wolf31o2 1.106 if [[ ${alic} == * || ${alic} == ${l} ]]; then
1275     set +o noglob; set -${shopts} #reset old shell opts
1276     return 0
1277     fi
1278 vapier 1.60 done
1279 wolf31o2 1.106 set +o noglob; set -$shopts #reset old shell opts
1280 vapier 1.60
1281 vapier 1.117 local licmsg="$(emktemp)"
1282 vapier 1.60 cat << EOF > ${licmsg}
1283     **********************************************************
1284     The following license outlines the terms of use of this
1285     package. You MUST accept this license for installation to
1286     continue. When you are done viewing, hit 'q'. If you
1287     CTRL+C out of this, the install will not run!
1288     **********************************************************
1289    
1290     EOF
1291     cat ${lic} >> ${licmsg}
1292     ${PAGER:-less} ${licmsg} || die "Could not execute pager (${PAGER}) to accept ${lic}"
1293 vapier 1.64 einfon "Do you accept the terms of this license (${l})? [yes/no] "
1294 vapier 1.60 read alic
1295     case ${alic} in
1296     yes|Yes|y|Y)
1297     return 0
1298     ;;
1299     *)
1300     echo;echo;echo
1301     eerror "You MUST accept the license to continue! Exiting!"
1302     die "Failed to accept license"
1303     ;;
1304     esac
1305 vapier 1.23 }
1306 vapier 1.75
1307     # Aquire cd(s) for those lovely cd-based emerges. Yes, this violates
1308     # the whole 'non-interactive' policy, but damnit I want CD support !
1309     #
1310     # with these cdrom functions we handle all the user interaction and
1311     # standardize everything. all you have to do is call cdrom_get_cds()
1312     # and when the function returns, you can assume that the cd has been
1313     # found at CDROM_ROOT.
1314     #
1315     # normally the cdrom functions will refer to the cds as 'cd #1', 'cd #2',
1316     # etc... if you want to give the cds better names, then just export
1317     # the CDROM_NAME_X variables before calling cdrom_get_cds().
1318     #
1319     # for those multi cd ebuilds, see the cdrom_load_next_cd() below.
1320     #
1321     # Usage: cdrom_get_cds <file on cd1> [file on cd2] [file on cd3] [...]
1322     # - this will attempt to locate a cd based upon a file that is on
1323     # the cd ... the more files you give this function, the more cds
1324     # the cdrom functions will handle
1325     cdrom_get_cds() {
1326     # first we figure out how many cds we're dealing with by
1327     # the # of files they gave us
1328     local cdcnt=0
1329     local f=
1330     for f in "$@" ; do
1331     cdcnt=$((cdcnt + 1))
1332     export CDROM_CHECK_${cdcnt}="$f"
1333     done
1334     export CDROM_TOTAL_CDS=${cdcnt}
1335     export CDROM_CURRENT_CD=1
1336    
1337     # now we see if the user gave use CD_ROOT ...
1338     # if they did, let's just believe them that it's correct
1339 vapier 1.131 if [[ ! -z ${CD_ROOT} ]] ; then
1340     export CDROM_ROOT=${CD_ROOT}
1341 vapier 1.75 einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}"
1342     return
1343     fi
1344     # do the same for CD_ROOT_X
1345 vapier 1.131 if [[ ! -z ${CD_ROOT_1} ]] ; then
1346 vapier 1.75 local var=
1347     cdcnt=0
1348 vapier 1.131 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do
1349 vapier 1.75 cdcnt=$((cdcnt + 1))
1350     var="CD_ROOT_${cdcnt}"
1351 vapier 1.131 if [[ -z ${!var} ]] ; then
1352 vapier 1.75 eerror "You must either use just the CD_ROOT"
1353     eerror "or specify ALL the CD_ROOT_X variables."
1354     eerror "In this case, you will need ${CDROM_TOTAL_CDS} CD_ROOT_X variables."
1355     die "could not locate CD_ROOT_${cdcnt}"
1356     fi
1357     export CDROM_ROOTS_${cdcnt}="${!var}"
1358     done
1359     export CDROM_ROOT=${CDROM_ROOTS_1}
1360     einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}"
1361     return
1362     fi
1363    
1364 vapier 1.131 if [[ ${CDROM_TOTAL_CDS} -eq 1 ]] ; then
1365 vapier 1.75 einfon "This ebuild will need the "
1366 vapier 1.131 if [[ -z ${CDROM_NAME} ]] ; then
1367 vapier 1.75 echo "cdrom for ${PN}."
1368     else
1369     echo "${CDROM_NAME}."
1370     fi
1371     echo
1372     einfo "If you do not have the CD, but have the data files"
1373     einfo "mounted somewhere on your filesystem, just export"
1374     einfo "the variable CD_ROOT so that it points to the"
1375     einfo "directory containing the files."
1376     echo
1377 vapier 1.132 einfo "For example:"
1378     einfo "export CD_ROOT=/mnt/cdrom"
1379     echo
1380 vapier 1.75 else
1381     einfo "This package will need access to ${CDROM_TOTAL_CDS} cds."
1382     cdcnt=0
1383 vapier 1.131 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do
1384 vapier 1.75 cdcnt=$((cdcnt + 1))
1385     var="CDROM_NAME_${cdcnt}"
1386 vapier 1.131 [[ ! -z ${!var} ]] && einfo " CD ${cdcnt}: ${!var}"
1387 vapier 1.75 done
1388     echo
1389     einfo "If you do not have the CDs, but have the data files"
1390     einfo "mounted somewhere on your filesystem, just export"
1391     einfo "the following variables so they point to the right place:"
1392     einfon ""
1393     cdcnt=0
1394 vapier 1.131 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do
1395 vapier 1.75 cdcnt=$((cdcnt + 1))
1396     echo -n " CD_ROOT_${cdcnt}"
1397     done
1398     echo
1399     einfo "Or, if you have all the files in the same place, or"
1400     einfo "you only have one cdrom, you can export CD_ROOT"
1401     einfo "and that place will be used as the same data source"
1402     einfo "for all the CDs."
1403     echo
1404 vapier 1.132 einfo "For example:"
1405     einfo "export CD_ROOT_1=/mnt/cdrom"
1406     echo
1407 vapier 1.75 fi
1408     export CDROM_CURRENT_CD=0
1409     cdrom_load_next_cd
1410     }
1411    
1412     # this is only used when you need access to more than one cd.
1413     # when you have finished using the first cd, just call this function.
1414     # when it returns, CDROM_ROOT will be pointing to the second cd.
1415     # remember, you can only go forward in the cd chain, you can't go back.
1416     cdrom_load_next_cd() {
1417     export CDROM_CURRENT_CD=$((CDROM_CURRENT_CD + 1))
1418     local var=
1419    
1420 vapier 1.131 if [[ ! -z ${CD_ROOT} ]] ; then
1421 vapier 1.79 einfo "Using same root as before for CD #${CDROM_CURRENT_CD}"
1422     return
1423     fi
1424    
1425 vapier 1.75 unset CDROM_ROOT
1426     var=CDROM_ROOTS_${CDROM_CURRENT_CD}
1427 vapier 1.131 if [[ -z ${!var} ]] ; then
1428 vapier 1.75 var="CDROM_CHECK_${CDROM_CURRENT_CD}"
1429     cdrom_locate_file_on_cd ${!var}
1430     else
1431 vapier 1.131 export CDROM_ROOT=${!var}
1432 vapier 1.75 fi
1433    
1434     einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}"
1435     }
1436    
1437     # this is used internally by the cdrom_get_cds() and cdrom_load_next_cd()
1438     # functions. this should *never* be called from an ebuild.
1439     # all it does is try to locate a give file on a cd ... if the cd isn't
1440     # found, then a message asking for the user to insert the cdrom will be
1441     # displayed and we'll hang out here until:
1442     # (1) the file is found on a mounted cdrom
1443     # (2) the user hits CTRL+C
1444     cdrom_locate_file_on_cd() {
1445 vapier 1.131 while [[ -z ${CDROM_ROOT} ]] ; do
1446 vapier 1.75 local dir="$(dirname ${@})"
1447     local file="$(basename ${@})"
1448     local mline=""
1449     local showedmsg=0
1450    
1451 vapier 1.131 for mline in $(mount | egrep -e '(iso|cdrom)' | awk '{print $3}') ; do
1452     [[ -d ${mline}/${dir} ]] || continue
1453     [[ ! -z $(find ${mline}/${dir} -iname ${file} -maxdepth 1) ]] \
1454 vapier 1.75 && export CDROM_ROOT=${mline}
1455     done
1456    
1457 vapier 1.131 if [[ -z ${CDROM_ROOT} ]] ; then
1458 vapier 1.75 echo
1459 vapier 1.131 if [[ ${showedmsg} -eq 0 ]] ; then
1460     if [[ ${CDROM_TOTAL_CDS} -eq 1 ]] ; then
1461     if [[ -z ${CDROM_NAME} ]] ; then
1462 vapier 1.75 einfo "Please insert the cdrom for ${PN} now !"
1463     else
1464     einfo "Please insert the ${CDROM_NAME} cdrom now !"
1465     fi
1466     else
1467 vapier 1.131 if [[ -z ${CDROM_NAME_1} ]] ; then
1468 vapier 1.75 einfo "Please insert cd #${CDROM_CURRENT_CD} for ${PN} now !"
1469     else
1470     local var="CDROM_NAME_${CDROM_CURRENT_CD}"
1471     einfo "Please insert+mount the ${!var} cdrom now !"
1472     fi
1473     fi
1474     showedmsg=1
1475     fi
1476     einfo "Press return to scan for the cd again"
1477     einfo "or hit CTRL+C to abort the emerge."
1478     read
1479     fi
1480     done
1481     }
1482 vapier 1.92
1483 mr_bones_ 1.100 # Make sure that LINGUAS only contains languages that
1484 vapier 1.92 # a package can support
1485     #
1486     # usage: strip-linguas <allow LINGUAS>
1487     # strip-linguas -i <directories of .po files>
1488     # strip-linguas -u <directories of .po files>
1489     #
1490     # The first form allows you to specify a list of LINGUAS.
1491 mr_bones_ 1.100 # The -i builds a list of po files found in all the
1492 vapier 1.92 # directories and uses the intersection of the lists.
1493 mr_bones_ 1.100 # The -u builds a list of po files found in all the
1494 vapier 1.92 # directories and uses the union of the lists.
1495     strip-linguas() {
1496     local ls newls
1497     if [ "$1" == "-i" ] || [ "$1" == "-u" ] ; then
1498     local op="$1"; shift
1499     ls=" $(find "$1" -name '*.po' -printf '%f ') "; shift
1500     local d f
1501     for d in "$@" ; do
1502     if [ "${op}" == "-u" ] ; then
1503     newls="${ls}"
1504     else
1505     newls=""
1506     fi
1507     for f in $(find "$d" -name '*.po' -printf '%f ') ; do
1508     if [ "${op}" == "-i" ] ; then
1509     [ "${ls/ ${f} /}" != "${ls}" ] && newls="${newls} ${f}"
1510     else
1511     [ "${ls/ ${f} /}" == "${ls}" ] && newls="${newls} ${f}"
1512     fi
1513     done
1514     ls="${newls}"
1515     done
1516     ls="${ls//.po}"
1517     else
1518     ls="$@"
1519     fi
1520    
1521     ls=" ${ls} "
1522     newls=""
1523     for f in ${LINGUAS} ; do
1524     if [ "${ls/ ${f} /}" != "${ls}" ] ; then
1525 vapier 1.120 newls="${newls} ${f}"
1526 vapier 1.92 else
1527     ewarn "Sorry, but ${PN} does not support the ${f} LINGUA"
1528     fi
1529     done
1530     if [ -z "${newls}" ] ; then
1531     unset LINGUAS
1532     else
1533     export LINGUAS="${newls}"
1534     fi
1535     }
1536 iggy 1.110
1537     # moved from kernel.eclass since they are generally useful outside of
1538     # kernel.eclass -iggy (20041002)
1539    
1540     # the following functions are useful in kernel module ebuilds, etc.
1541     # for an example see ivtv or drbd ebuilds
1542    
1543     # set's ARCH to match what the kernel expects
1544     set_arch_to_kernel() {
1545     export EUTILS_ECLASS_PORTAGE_ARCH="${ARCH}"
1546     case ${ARCH} in
1547     x86) export ARCH="i386";;
1548     amd64) export ARCH="x86_64";;
1549     hppa) export ARCH="parisc";;
1550     mips) export ARCH="mips";;
1551     *) export ARCH="${ARCH}";;
1552     esac
1553     }
1554    
1555     # set's ARCH back to what portage expects
1556     set_arch_to_portage() {
1557     export ARCH="${EUTILS_ECLASS_PORTAGE_ARCH}"
1558     }
1559 eradicator 1.111
1560     # Jeremy Huddleston <eradicator@gentoo.org>:
1561     # preserve_old_lib /path/to/libblah.so.0
1562     # preserve_old_lib_notify /path/to/libblah.so.0
1563     #
1564     # These functions are useful when a lib in your package changes --soname. Such
1565     # an example might be from libogg.so.0 to libogg.so.1. Removing libogg.so.0
1566     # would break packages that link against it. Most people get around this
1567     # by using the portage SLOT mechanism, but that is not always a relevant
1568     # solution, so instead you can add the following to your ebuilds:
1569     #
1570     # src_install() {
1571     # ...
1572     # preserve_old_lib /usr/$(get_libdir)/libogg.so.0
1573     # ...
1574     # }
1575     #
1576     # pkg_postinst() {
1577     # ...
1578     # preserve_old_lib_notify /usr/$(get_libdir)/libogg.so.0
1579     # ...
1580     # }
1581    
1582     preserve_old_lib() {
1583     LIB=$1
1584    
1585     if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then
1586     SONAME=`basename ${LIB}`
1587     DIRNAME=`dirname ${LIB}`
1588    
1589     dodir ${DIRNAME}
1590     cp ${ROOT}${LIB} ${D}${DIRNAME}
1591     touch ${D}${LIB}
1592     fi
1593     }
1594    
1595     preserve_old_lib_notify() {
1596 seemant 1.134 LIB=$1
1597 eradicator 1.111
1598 seemant 1.134 if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then
1599     SONAME=`basename ${LIB}`
1600 eradicator 1.111
1601     einfo "An old version of an installed library was detected on your system."
1602     einfo "In order to avoid breaking packages that link against is, this older version"
1603     einfo "is not being removed. In order to make full use of this newer version,"
1604     einfo "you will need to execute the following command:"
1605     einfo " revdep-rebuild --soname ${SONAME}"
1606     einfo
1607     einfo "After doing that, you can safely remove ${LIB}"
1608 eradicator 1.116 einfo "Note: 'emerge gentoolkit' to get revdep-rebuild"
1609 seemant 1.134 fi
1610 eradicator 1.111 }
1611 vapier 1.125
1612     # Hack for people to figure out if a package was built with
1613     # certain USE flags
1614     #
1615 vapier 1.130 # Usage: built_with_use [-a|-o] <DEPEND ATOM> <List of USE flags>
1616 vapier 1.125 # ex: built_with_use xchat gtk2
1617 vapier 1.130 #
1618     # Flags: -a all USE flags should be utilized
1619     # -o at least one USE flag should be utilized
1620     # Note: the default flag is '-a'
1621 vapier 1.125 built_with_use() {
1622 vapier 1.130 local opt=$1
1623     [[ ${opt:0:1} = "-" ]] && shift || opt="-a"
1624    
1625     local PKG=$(best_version $1)
1626     shift
1627    
1628 vapier 1.125 local USEFILE="${ROOT}/var/db/pkg/${PKG}/USE"
1629     [[ ! -e ${USEFILE} ]] && return 1
1630    
1631     local USE_BUILT=$(<${USEFILE})
1632 vapier 1.130 while [[ $# -gt 0 ]] ; do
1633     if [[ ${opt} = "-o" ]] ; then
1634     has $1 ${USE_BUILT} && return 0
1635     else
1636     has $1 ${USE_BUILT} || return 1
1637     fi
1638 vapier 1.125 shift
1639     done
1640 vapier 1.130 [[ ${opt} = "-a" ]]
1641 vapier 1.125 }
1642 vapier 1.126
1643     # Many configure scripts wrongly bail when a C++ compiler
1644     # could not be detected. #73450
1645     epunt_cxx() {
1646 vapier 1.127 local dir=$1
1647     [[ -z ${dir} ]] && dir=${S}
1648     ebegin "Removing useless C++ checks"
1649     local f
1650     for f in $(find ${dir} -name configure) ; do
1651     patch -p0 "${f}" "${PORTDIR}/eclass/ELT-patches/nocxx/nocxx.patch" > /dev/null
1652     done
1653     eend 0
1654 vapier 1.126 }
1655 eradicator 1.128
1656     # get_abi_var <VAR> [<ABI>]
1657     # returns the value of ${<VAR>_<ABI>} which should be set in make.defaults
1658     #
1659     # ex:
1660     # CFLAGS=$(get_abi_var CFLAGS sparc32) # CFLAGS=-m32
1661     #
1662     # Note that the prefered method is to set CC="$(tc-getCC) $(get_abi_CFLAGS)"
1663     # This will hopefully be added to portage soon...
1664     #
1665     # If <ABI> is not specified, ${ABI} is used.
1666     # If <ABI> is not specified and ${ABI} is not defined, ${DEFAULT_ABI} is used.
1667     # If <ABI> is not specified and ${ABI} and ${DEFAULT_ABI} are not defined, we return an empty string.
1668     #
1669     # Jeremy Huddleston <eradicator@gentoo.org>
1670     get_abi_var() {
1671 eradicator 1.137 local flag=${1}
1672 eradicator 1.128 local abi
1673     if [ $# -gt 1 ]; then
1674 eradicator 1.137 abi=${2}
1675 eradicator 1.128 elif [ -n "${ABI}" ]; then
1676     abi=${ABI}
1677     elif [ -n "${DEFAULT_ABI}" ]; then
1678     abi=${DEFAULT_ABI}
1679     else
1680 eradicator 1.129 return 1
1681 eradicator 1.128 fi
1682 eradicator 1.136
1683     local var="${flag}_${abi}"
1684     echo ${!var}
1685 eradicator 1.128 }
1686    
1687 eradicator 1.137 get_abi_CFLAGS() { get_abi_var CFLAGS ${@}; }
1688     get_abi_CXXFLAGS() { get_abi_var CXXFLAGS ${@}; }
1689     get_abi_ASFLAGS() { get_abi_var ASFLAGS ${@}; }
1690     get_abi_LIBDIR() { get_abi_var LIBDIR ${@}; }

  ViewVC Help
Powered by ViewVC 1.1.20