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

Contents of /eclass/eutils.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.133 - (hide annotations) (download)
Wed Dec 29 18:19:04 2004 UTC (9 years, 9 months ago) by lanius
Branch: MAIN
Changes since 1.132: +80 -1 lines
bug #25756 handle menu entries

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

  ViewVC Help
Powered by ViewVC 1.1.20