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

Diff of /eclass/eutils.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.137 Revision 1.191
1# Copyright 1999-2004 Gentoo Foundation 1# Copyright 1999-2005 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.137 2005/01/07 11:21:42 eradicator Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.191 2005/07/13 19:15:05 eradicator Exp $
4# 4#
5# Author: Martin Schlemmer <azarah@gentoo.org> 5# Author: Martin Schlemmer <azarah@gentoo.org>
6# 6#
7# This eclass is for general purpose functions that most ebuilds 7# This eclass is for general purpose functions that most ebuilds
8# have to implement themselves. 8# have to implement themselves.
9# 9#
10# NB: If you add anything, please comment it! 10# NB: If you add anything, please comment it!
11 11
12ECLASS=eutils 12inherit multilib
13INHERITED="$INHERITED $ECLASS"
14 13
15DEPEND="!bootstrap? ( sys-devel/patch )" 14DEPEND="!bootstrap? ( sys-devel/patch )"
15# sys-apps/shadow is needed for useradd, etc, bug #94745.
16 16
17DESCRIPTION="Based on the ${ECLASS} eclass" 17DESCRIPTION="Based on the ${ECLASS} eclass"
18 18
19# Wait for the supplied number of seconds. If no argument is supplied, defaults 19# 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 20# to five seconds. If the EPAUSE_IGNORE env var is set, don't wait. If we're not
41 sleep 1 41 sleep 1
42 done 42 done
43 fi 43 fi
44} 44}
45 45
46# 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#
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...
59get_libdir() {
60 LIBDIR_TEST=$(type econf)
61 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 # 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 elif [ -n "$(get_abi_LIBDIR)" ]; then # Using eradicator's LIBDIR_<abi> approach...
74 CONF_LIBDIR="$(get_abi_LIBDIR)"
75 elif [ "${LIBDIR_TEST/CONF_LIBDIR}" == "${LIBDIR_TEST}" ]; then # we don't have CONF_LIBDIR support
76 # will be <portage-2.0.51_pre20
77 CONF_LIBDIR="lib"
78 fi
79 # and of course, default to lib if CONF_LIBDIR isnt set
80 echo ${CONF_LIBDIR:=lib}
81 unset LIBDIR_TEST
82}
83
84get_multilibdir() {
85 [ -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 echo ${CONF_MULTILIBDIR:=lib32}
87}
88
89# 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)
100get_libdir_override() {
101 [ -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 CONF_LIBDIR="$1"
103 CONF_LIBDIR_OVERRIDE="$1"
104}
105
106# This function generate linker scripts in /usr/lib for dynamic 46# This function generate linker scripts in /usr/lib for dynamic
107# libs in /lib. This is to fix linking problems when you have 47# 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 48# 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 49# 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 50# instead of the .so in /lib due to gcc/libtool tweaking ld's
124gen_usr_ldscript() { 64gen_usr_ldscript() {
125 local libdir="$(get_libdir)" 65 local libdir="$(get_libdir)"
126 # Just make sure it exists 66 # Just make sure it exists
127 dodir /usr/${libdir} 67 dodir /usr/${libdir}
128 68
69 for lib in "${@}" ; do
129 cat > "${D}/usr/${libdir}/${1}" << END_LDSCRIPT 70 cat > "${D}/usr/${libdir}/${lib}" <<-END_LDSCRIPT
130/* GNU ld script 71 /* GNU ld script
131 Because Gentoo have critical dynamic libraries 72 Since Gentoo has critical dynamic libraries
132 in /lib, and the static versions in /usr/lib, we 73 in /lib, and the static versions in /usr/lib,
133 need to have a "fake" dynamic lib in /usr/lib, 74 we need to have a "fake" dynamic lib in /usr/lib,
134 otherwise we run into linking problems. 75 otherwise we run into linking problems.
135 See bug #4411 on http://bugs.gentoo.org/ for 76
136 more info. */ 77 See bug http://bugs.gentoo.org/4411 for more info.
78 */
137GROUP ( /${libdir}/${1} ) 79 GROUP ( /${libdir}/${lib} )
138END_LDSCRIPT 80 END_LDSCRIPT
139 fperms a+x "/usr/${libdir}/${1}" 81 fperms a+x "/usr/${libdir}/${lib}"
82 done
140} 83}
141 84
142# Simple function to draw a line consisting of '=' the same length as $* 85# Simple function to draw a line consisting of '=' the same length as $*
86# - only to be used by epatch()
143# 87#
144# <azarah@gentoo.org> (11 Nov 2002) 88# <azarah@gentoo.org> (11 Nov 2002)
145# 89#
146draw_line() { 90draw_line() {
147 local i=0 91 local i=0
173EPATCH_SOURCE="${WORKDIR}/patch" 117EPATCH_SOURCE="${WORKDIR}/patch"
174# Default extension for patches 118# Default extension for patches
175EPATCH_SUFFIX="patch.bz2" 119EPATCH_SUFFIX="patch.bz2"
176# Default options for patch 120# Default options for patch
177# Set -g0 to keep RCS, ClearCase, Perforce and SCCS happy. Bug #24571 121# Set -g0 to keep RCS, ClearCase, Perforce and SCCS happy. Bug #24571
178EPATCH_OPTS="-g0" 122# Set --no-backup-if-mismatch so we don't leave '.orig' files behind.
123EPATCH_OPTS="-g0 --no-backup-if-mismatch"
179# List of patches not to apply. Not this is only file names, 124# List of patches not to apply. Not this is only file names,
180# and not the full path .. 125# and not the full path ..
181EPATCH_EXCLUDE="" 126EPATCH_EXCLUDE=""
182# Change the printed message for a single patch. 127# Change the printed message for a single patch.
183EPATCH_SINGLE_MSG="" 128EPATCH_SINGLE_MSG=""
129# Change the printed message for multiple patches.
130EPATCH_MULTI_MSG="Applying various patches (bugfixes/updates) ..."
184# Force applying bulk patches even if not following the style: 131# Force applying bulk patches even if not following the style:
185# 132#
186# ??_${ARCH}_foo.${EPATCH_SUFFIX} 133# ??_${ARCH}_foo.${EPATCH_SUFFIX}
187# 134#
188EPATCH_FORCE="no" 135EPATCH_FORCE="no"
229 local x="" 176 local x=""
230 177
231 if [ "$#" -gt 1 ] 178 if [ "$#" -gt 1 ]
232 then 179 then
233 local m="" 180 local m=""
234 einfo "${#} patches to apply ..."
235 for m in "$@" ; do 181 for m in "$@" ; do
236 epatch "${m}" 182 epatch "${m}"
237 done 183 done
238 return 0 184 return 0
239 fi 185 fi
264 210
265 echo 211 echo
266 eerror "Cannot find \$EPATCH_SOURCE! Value for \$EPATCH_SOURCE is:" 212 eerror "Cannot find \$EPATCH_SOURCE! Value for \$EPATCH_SOURCE is:"
267 eerror 213 eerror
268 eerror " ${EPATCH_SOURCE}" 214 eerror " ${EPATCH_SOURCE}"
215 eerror " ( ${EPATCH_SOURCE##*/} )"
269 echo 216 echo
270 die "Cannot find \$EPATCH_SOURCE!" 217 die "Cannot find \$EPATCH_SOURCE!"
271 fi 218 fi
272 219
273 local EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}" 220 local EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}"
292 ;; 239 ;;
293 esac 240 esac
294 241
295 if [ "${SINGLE_PATCH}" = "no" ] 242 if [ "${SINGLE_PATCH}" = "no" ]
296 then 243 then
297 einfo "Applying various patches (bugfixes/updates) ..." 244 einfo "${EPATCH_MULTI_MSG}"
298 fi 245 fi
299 for x in ${EPATCH_SOURCE} 246 for x in ${EPATCH_SOURCE}
300 do 247 do
301 # New ARCH dependant patch naming scheme ... 248 # New ARCH dependant patch naming scheme ...
302 # 249 #
303 # ???_arch_foo.patch 250 # ???_arch_foo.patch
304 # 251 #
305 if [ -f ${x} ] && \ 252 if [ -f ${x} ] && \
306 ([ "${SINGLE_PATCH}" = "yes" -o "${x/_all_}" != "${x}" -o "`eval echo \$\{x/_${ARCH}_\}`" != "${x}" ] || \ 253 ([ "${SINGLE_PATCH}" = "yes" -o "${x/_all_}" != "${x}" -o "${x/_${ARCH}_}" != "${x}" ] || \
307 [ "${EPATCH_FORCE}" = "yes" ]) 254 [ "${EPATCH_FORCE}" = "yes" ])
308 then 255 then
309 local count=0 256 local count=0
310 local popts="${EPATCH_OPTS}" 257 local popts="${EPATCH_OPTS}"
258 local patchname=${x##*/}
311 259
312 if [ -n "${EPATCH_EXCLUDE}" ] 260 if [ -n "${EPATCH_EXCLUDE}" ]
313 then 261 then
314 if [ "`eval echo \$\{EPATCH_EXCLUDE/${x##*/}\}`" != "${EPATCH_EXCLUDE}" ] 262 if [ "${EPATCH_EXCLUDE/${patchname}}" != "${EPATCH_EXCLUDE}" ]
315 then 263 then
316 continue 264 continue
317 fi 265 fi
318 fi 266 fi
319 267
321 then 269 then
322 if [ -n "${EPATCH_SINGLE_MSG}" ] 270 if [ -n "${EPATCH_SINGLE_MSG}" ]
323 then 271 then
324 einfo "${EPATCH_SINGLE_MSG}" 272 einfo "${EPATCH_SINGLE_MSG}"
325 else 273 else
326 einfo "Applying ${x##*/} ..." 274 einfo "Applying ${patchname} ..."
327 fi 275 fi
328 else 276 else
329 einfo " ${x##*/} ..." 277 einfo " ${patchname} ..."
330 fi 278 fi
331 279
332 echo "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 280 echo "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
333 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 281 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
334 282
335 # Allow for prefix to differ ... im lazy, so shoot me :/ 283 # Allow for prefix to differ ... im lazy, so shoot me :/
336 while [ "${count}" -lt 5 ] 284 while [ "${count}" -lt 5 ]
337 do 285 do
338 # Generate some useful debug info ... 286 # Generate some useful debug info ...
339 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 287 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
340 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 288 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
341 289
342 if [ "${PATCH_SUFFIX}" != "patch" ] 290 if [ "${PATCH_SUFFIX}" != "patch" ]
343 then 291 then
344 echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 292 echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
345 echo "${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 293 echo "${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
346 else 294 else
347 PATCH_TARGET="${x}" 295 PATCH_TARGET="${x}"
348 fi 296 fi
349 297
350 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 298 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
351 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 299 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
352 300
353 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 301 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
354 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 302 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
355 303
356 if [ "${PATCH_SUFFIX}" != "patch" ] 304 if [ "${PATCH_SUFFIX}" != "patch" ]
357 then 305 then
358 if ! (${PIPE_CMD} ${x} > ${PATCH_TARGET}) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1 306 if ! (${PIPE_CMD} ${x} > ${PATCH_TARGET}) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1
359 then 307 then
360 echo 308 echo
361 eerror "Could not extract patch!" 309 eerror "Could not extract patch!"
362 #die "Could not extract patch!" 310 #die "Could not extract patch!"
363 count=5 311 count=5
364 break 312 break
365 fi 313 fi
366 fi 314 fi
367 315
368 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1 316 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1
369 then 317 then
370 draw_line "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 318 draw_line "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
371 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 319 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
372 echo "ACTUALLY APPLYING ${x##*/} ..." >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 320 echo "ACTUALLY APPLYING ${patchname} ..." >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
373 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 321 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
374 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 322 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
375 323
376 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 2>&1 324 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 2>&1
377 325
378 if [ "$?" -ne 0 ] 326 if [ "$?" -ne 0 ]
379 then 327 then
380 cat ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 328 cat ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
381 echo 329 echo
382 eerror "A dry-run of patch command succeeded, but actually" 330 eerror "A dry-run of patch command succeeded, but actually"
383 eerror "applying the patch failed!" 331 eerror "applying the patch failed!"
384 #die "Real world sux compared to the dreamworld!" 332 #die "Real world sux compared to the dreamworld!"
385 count=5 333 count=5
386 fi 334 fi
387 335
388 rm -f ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 336 rm -f ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
389 337
390 break 338 break
391 fi 339 fi
392 340
393 count=$((count + 1)) 341 count=$((count + 1))
399 fi 347 fi
400 348
401 if [ "${count}" -eq 5 ] 349 if [ "${count}" -eq 5 ]
402 then 350 then
403 echo 351 echo
404 eerror "Failed Patch: ${x##*/}!" 352 eerror "Failed Patch: ${patchname} !"
353 eerror " ( ${PATCH_TARGET} )"
405 eerror 354 eerror
406 eerror "Include in your bugreport the contents of:" 355 eerror "Include in your bugreport the contents of:"
407 eerror 356 eerror
408 eerror " ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}" 357 eerror " ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}"
409 echo 358 echo
410 die "Failed Patch: ${x##*/}!" 359 die "Failed Patch: ${patchname}!"
411 fi 360 fi
412 361
413 rm -f ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 362 rm -f ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
414 363
415 eend 0 364 eend 0
416 fi 365 fi
417 done 366 done
418 if [ "${SINGLE_PATCH}" = "no" ] 367 if [ "${SINGLE_PATCH}" = "no" ]
419 then 368 then
420 einfo "Done with patching" 369 einfo "Done with patching"
421 fi
422}
423
424# This function return true if we are using the NPTL pthreads
425# implementation.
426#
427# <azarah@gentoo.org> (06 March 2003)
428#
429have_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 einfon "Checking for _CS_GNU_LIBPTHREAD_VERSION support in glibc ..."
452 if gcc -o ${T}/nptl ${T}/test-nptl.c &> /dev/null
453 then
454 echo "yes"
455 einfon "Checking what PTHREADS implementation we have ..."
456 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}
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#
474get_number_of_jobs() {
475 local jobs=0
476
477 if [ ! -r /proc/cpuinfo ]
478 then
479 return 1
480 fi
481
482 # 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 ADMINPARAM="`echo ${ADMINOPTS} | gawk '{match($0, /-j *[0-9]*/, opt); print opt[0]}'`"
487 ADMINPARAM="${ADMINPARAM/-j}"
488 fi
489
490 export MAKEOPTS="`echo ${MAKEOPTS} | sed -e 's:-j *[0-9]*::g'`"
491
492 if [ "${ARCH}" = "amd64" -o "${ARCH}" = "x86" -o "${ARCH}" = "hppa" -o \
493 "${ARCH}" = "arm" -o "${ARCH}" = "mips" -o "${ARCH}" = "ia64" ]
494 then
495 # these archs will always have "[Pp]rocessor"
496 jobs="$((`grep -c ^[Pp]rocessor /proc/cpuinfo` * 2))"
497
498 elif [ "${ARCH}" = "sparc" -o "${ARCH}" = "sparc64" ]
499 then
500 # sparc always has "ncpus active"
501 jobs="$((`grep "^ncpus active" /proc/cpuinfo | sed -e "s/^.*: //"` * 2))"
502
503 elif [ "${ARCH}" = "alpha" ]
504 then
505 # alpha has "cpus active", but only when compiled with SMP
506 if [ "`grep -c "^cpus active" /proc/cpuinfo`" -eq 1 ]
507 then
508 jobs="$((`grep "^cpus active" /proc/cpuinfo | sed -e "s/^.*: //"` * 2))"
509 else
510 jobs=2
511 fi
512
513 elif [ "${ARCH}" = "ppc" -o "${ARCH}" = "ppc64" ]
514 then
515 # ppc has "processor", but only when compiled with SMP
516 if [ "`grep -c "^processor" /proc/cpuinfo`" -eq 1 ]
517 then
518 jobs="$((`grep -c ^processor /proc/cpuinfo` * 2))"
519 else
520 jobs=2
521 fi
522 elif [ "${ARCH}" = "s390" ]
523 then
524 # s390 has "# processors : "
525 jobs="$((`grep "^\# processors" /proc/cpuinfo | sed -e "s/^.*: //"` * 2))"
526 else
527 jobs="$((`grep -c ^cpu /proc/cpuinfo` * 2))"
528 die "Unknown ARCH -- ${ARCH}!"
529 fi
530
531 # Make sure the number is valid ...
532 if [ "${jobs}" -lt 1 ]
533 then
534 jobs=1
535 fi
536
537 if [ -n "${ADMINPARAM}" ]
538 then
539 if [ "${jobs}" -gt "${ADMINPARAM}" ]
540 then
541 einfo "Setting make jobs to \"-j${ADMINPARAM}\" to ensure successful merge ..."
542 export MAKEOPTS="${MAKEOPTS} -j${ADMINPARAM}"
543 else
544 einfo "Setting make jobs to \"-j${jobs}\" to ensure successful merge ..."
545 export MAKEOPTS="${MAKEOPTS} -j${jobs}"
546 fi
547 fi 370 fi
548} 371}
549 372
550# Cheap replacement for when debianutils (and thus mktemp) 373# Cheap replacement for when debianutils (and thus mktemp)
551# does not exist on the users system 374# does not exist on the users system
585# Joe Jezak <josejx@gmail.com> and usata@gentoo.org 408# Joe Jezak <josejx@gmail.com> and usata@gentoo.org
586# FBSD stuff: Aaron Walker <ka0ttic@gentoo.org> 409# FBSD stuff: Aaron Walker <ka0ttic@gentoo.org>
587# 410#
588# egetent(database, key) 411# egetent(database, key)
589egetent() { 412egetent() {
590 if useq ppc-macos ; then 413 if [[ "${USERLAND}" == "Darwin" ]] ; then
591 case "$2" in 414 case "$2" in
592 *[!0-9]*) # Non numeric 415 *[!0-9]*) # Non numeric
593 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }" 416 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
594 ;; 417 ;;
595 *) # Numeric 418 *) # Numeric
596 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }" 419 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
597 ;; 420 ;;
598 esac 421 esac
599 elif useq x86-fbsd ; then 422 elif [[ "${USERLAND}" == "BSD" ]] ; then
600 local action 423 local action
601 if [ "$1" == "passwd" ] 424 if [ "$1" == "passwd" ]
602 then 425 then
603 action="user" 426 action="user"
604 else 427 else
624# homedir: /dev/null 447# homedir: /dev/null
625# groups: none 448# groups: none
626# extra: comment of 'added by portage for ${PN}' 449# extra: comment of 'added by portage for ${PN}'
627enewuser() { 450enewuser() {
628 # get the username 451 # get the username
629 local euser="$1"; shift 452 local euser=$1; shift
630 if [ -z "${euser}" ] 453 if [[ -z ${euser} ]] ; then
631 then
632 eerror "No username specified !" 454 eerror "No username specified !"
633 die "Cannot call enewuser without a username" 455 die "Cannot call enewuser without a username"
634 fi 456 fi
635 457
636 # lets see if the username already exists 458 # lets see if the username already exists
637 if [ "${euser}" == "`egetent passwd \"${euser}\" | cut -d: -f1`" ] 459 if [[ ${euser} == $(egetent passwd "${euser}" | cut -d: -f1) ]] ; then
638 then
639 return 0 460 return 0
640 fi 461 fi
641 einfo "Adding user '${euser}' to your system ..." 462 einfo "Adding user '${euser}' to your system ..."
642 463
643 # options to pass to useradd 464 # options to pass to useradd
644 local opts= 465 local opts=
645 466
646 # handle uid 467 # handle uid
647 local euid="$1"; shift 468 local euid=$1; shift
648 if [ ! -z "${euid}" ] && [ "${euid}" != "-1" ] 469 if [[ ! -z ${euid} ]] && [[ ${euid} != "-1" ]] ; then
649 then
650 if [ "${euid}" -gt 0 ] 470 if [[ ${euid} -gt 0 ]] ; then
651 then
652 if [ ! -z "`egetent passwd ${euid}`" ] 471 if [[ ! -z $(egetent passwd ${euid}) ]] ; then
653 then
654 euid="next" 472 euid="next"
655 fi 473 fi
656 else 474 else
657 eerror "Userid given but is not greater than 0 !" 475 eerror "Userid given but is not greater than 0 !"
658 die "${euid} is not a valid UID" 476 die "${euid} is not a valid UID"
659 fi 477 fi
660 else 478 else
661 euid="next" 479 euid="next"
662 fi 480 fi
663 if [ "${euid}" == "next" ] 481 if [[ ${euid} == "next" ]] ; then
664 then
665 local pwrange 482 local pwrange
666 if [ "${USERLAND}" == "BSD" ] ; then 483 if [[ ${USERLAND} == "BSD" ]] ; then
667 pwrange="`jot 898 101`" 484 pwrange=$(jot 898 101)
668 else 485 else
669 pwrange="`seq 101 999`" 486 pwrange=$(seq 101 999)
670 fi 487 fi
671 for euid in ${pwrange} ; do 488 for euid in ${pwrange} ; do
672 [ -z "`egetent passwd ${euid}`" ] && break 489 [[ -z $(egetent passwd ${euid}) ]] && break
673 done 490 done
674 fi 491 fi
675 opts="${opts} -u ${euid}" 492 opts="${opts} -u ${euid}"
676 einfo " - Userid: ${euid}" 493 einfo " - Userid: ${euid}"
677 494
678 # handle shell 495 # handle shell
679 local eshell="$1"; shift 496 local eshell=$1; shift
680 if [ ! -z "${eshell}" ] && [ "${eshell}" != "-1" ] 497 if [[ ! -z ${eshell} ]] && [[ ${eshell} != "-1" ]] ; then
681 then
682 if [ ! -e "${eshell}" ] 498 if [[ ! -e ${eshell} ]] ; then
683 then
684 eerror "A shell was specified but it does not exist !" 499 eerror "A shell was specified but it does not exist !"
685 die "${eshell} does not exist" 500 die "${eshell} does not exist"
686 fi 501 fi
687 else 502 else
688 if [ "${USERLAND}" == "BSD" ] 503 case ${USERLAND} in
689 then
690 eshell="/usr/bin/false" 504 Darwin) eshell="/usr/bin/false";;
691 else 505 BSD) eshell="/usr/sbin/nologin";;
692 eshell="/bin/false" 506 *) eshell="/bin/false";;
693 fi 507 esac
694 fi 508 fi
695 einfo " - Shell: ${eshell}" 509 einfo " - Shell: ${eshell}"
696 opts="${opts} -s ${eshell}" 510 opts="${opts} -s ${eshell}"
697 511
698 # handle homedir 512 # handle homedir
699 local ehome="$1"; shift 513 local ehome=$1; shift
700 if [ -z "${ehome}" ] && [ "${eshell}" != "-1" ] 514 if [[ -z ${ehome} ]] || [[ ${ehome} == "-1" ]] ; then
701 then
702 ehome="/dev/null" 515 ehome="/dev/null"
703 fi 516 fi
704 einfo " - Home: ${ehome}" 517 einfo " - Home: ${ehome}"
705 opts="${opts} -d ${ehome}" 518 opts="${opts} -d ${ehome}"
706 519
707 # handle groups 520 # handle groups
708 local egroups="$1"; shift 521 local egroups=$1; shift
709 if [ ! -z "${egroups}" ] 522 if [[ ! -z ${egroups} ]] ; then
710 then
711 local oldifs="${IFS}" 523 local oldifs=${IFS}
712 local defgroup="" exgroups="" 524 local defgroup="" exgroups=""
713 525
714 export IFS="," 526 export IFS=","
715 for g in ${egroups} 527 for g in ${egroups} ; do
716 do
717 export IFS="${oldifs}" 528 export IFS=${oldifs}
718 if [ -z "`egetent group \"${g}\"`" ] 529 if [[ -z $(egetent group "${g}") ]] ; then
719 then
720 eerror "You must add group ${g} to the system first" 530 eerror "You must add group ${g} to the system first"
721 die "${g} is not a valid GID" 531 die "${g} is not a valid GID"
722 fi 532 fi
723 if [ -z "${defgroup}" ] 533 if [[ -z ${defgroup} ]] ; then
724 then
725 defgroup="${g}" 534 defgroup=${g}
726 else 535 else
727 exgroups="${exgroups},${g}" 536 exgroups="${exgroups},${g}"
728 fi 537 fi
729 export IFS="," 538 export IFS=","
730 done 539 done
731 export IFS="${oldifs}" 540 export IFS=${oldifs}
732 541
733 opts="${opts} -g ${defgroup}" 542 opts="${opts} -g ${defgroup}"
734 if [ ! -z "${exgroups}" ] 543 if [[ ! -z ${exgroups} ]] ; then
735 then
736 opts="${opts} -G ${exgroups:1}" 544 opts="${opts} -G ${exgroups:1}"
737 fi 545 fi
738 else 546 else
739 egroups="(none)" 547 egroups="(none)"
740 fi 548 fi
741 einfo " - Groups: ${egroups}" 549 einfo " - Groups: ${egroups}"
742 550
743 # handle extra and add the user 551 # handle extra and add the user
744 local eextra="$@"
745 local oldsandbox="${SANDBOX_ON}" 552 local oldsandbox=${SANDBOX_ON}
746 export SANDBOX_ON="0" 553 export SANDBOX_ON="0"
747 if useq ppc-macos 554 case ${USERLAND} in
748 then 555 Darwin)
749 ### Make the user 556 ### Make the user
750 if [ -z "${eextra}" ] 557 if [[ -z $@ ]] ; then
751 then
752 dscl . create /users/${euser} uid ${euid} 558 dscl . create /users/${euser} uid ${euid}
753 dscl . create /users/${euser} shell ${eshell} 559 dscl . create /users/${euser} shell ${eshell}
754 dscl . create /users/${euser} home ${ehome} 560 dscl . create /users/${euser} home ${ehome}
755 dscl . create /users/${euser} realname "added by portage for ${PN}" 561 dscl . create /users/${euser} realname "added by portage for ${PN}"
756 ### Add the user to the groups specified 562 ### Add the user to the groups specified
757 local oldifs="${IFS}" 563 local oldifs=${IFS}
758 export IFS="," 564 export IFS=","
759 for g in ${egroups} 565 for g in ${egroups} ; do
760 do
761 dscl . merge /groups/${g} users ${euser} 566 dscl . merge /groups/${g} users ${euser}
762 done 567 done
763 export IFS="${oldifs}" 568 export IFS=${oldifs}
764 else 569 else
765 einfo "Extra options are not supported on macos yet" 570 einfo "Extra options are not supported on Darwin yet"
766 einfo "Please report the ebuild along with the info below" 571 einfo "Please report the ebuild along with the info below"
767 einfo "eextra: ${eextra}" 572 einfo "eextra: $@"
768 die "Required function missing" 573 die "Required function missing"
769 fi 574 fi
770 elif use x86-fbsd ; then 575 ;;
771 if [ -z "${eextra}" ] 576 BSD)
772 then 577 if [[ -z $@ ]] ; then
773 pw useradd ${euser} ${opts} \ 578 pw useradd ${euser} ${opts} \
774 -c "added by portage for ${PN}" \ 579 -c "added by portage for ${PN}" \
775 die "enewuser failed" 580 die "enewuser failed"
776 else 581 else
777 einfo " - Extra: ${eextra}" 582 einfo " - Extra: $@"
778 pw useradd ${euser} ${opts} \ 583 pw useradd ${euser} ${opts} \
779 -c ${eextra} || die "enewuser failed" 584 "$@" || die "enewuser failed"
780 fi 585 fi
781 else 586 ;;
782 if [ -z "${eextra}" ] 587 *)
783 then 588 if [[ -z $@ ]] ; then
784 useradd ${opts} ${euser} \ 589 useradd ${opts} ${euser} \
785 -c "added by portage for ${PN}" \ 590 -c "added by portage for ${PN}" \
786 || die "enewuser failed" 591 || die "enewuser failed"
787 else 592 else
788 einfo " - Extra: ${eextra}" 593 einfo " - Extra: $@"
789 useradd ${opts} ${euser} ${eextra} \ 594 useradd ${opts} ${euser} "$@" \
790 || die "enewuser failed" 595 || die "enewuser failed"
791 fi 596 fi
792 fi 597 ;;
598 esac
793 export SANDBOX_ON="${oldsandbox}" 599 export SANDBOX_ON=${oldsandbox}
794 600
795 if [ ! -e "${ehome}" ] && [ ! -e "${D}/${ehome}" ] 601 if [ ! -e "${ehome}" ] && [ ! -e "${D}/${ehome}" ]
796 then 602 then
797 einfo " - Creating ${ehome} in ${D}" 603 einfo " - Creating ${ehome} in ${D}"
798 dodir ${ehome} 604 dodir ${ehome}
835 then 641 then
836 if [ "${egid}" -gt 0 ] 642 if [ "${egid}" -gt 0 ]
837 then 643 then
838 if [ -z "`egetent group ${egid}`" ] 644 if [ -z "`egetent group ${egid}`" ]
839 then 645 then
840 if useq ppc-macos ; then 646 if [[ "${USERLAND}" == "Darwin" ]]; then
841 opts="${opts} ${egid}" 647 opts="${opts} ${egid}"
842 else 648 else
843 opts="${opts} -g ${egid}" 649 opts="${opts} -g ${egid}"
844 fi 650 fi
845 else 651 else
859 opts="${opts} ${eextra}" 665 opts="${opts} ${eextra}"
860 666
861 # add the group 667 # add the group
862 local oldsandbox="${SANDBOX_ON}" 668 local oldsandbox="${SANDBOX_ON}"
863 export SANDBOX_ON="0" 669 export SANDBOX_ON="0"
864 if useq ppc-macos ; then 670 if [[ "${USERLAND}" == "Darwin" ]]; then
865 if [ ! -z "${eextra}" ]; 671 if [ ! -z "${eextra}" ];
866 then 672 then
867 einfo "Extra options are not supported on macos yet" 673 einfo "Extra options are not supported on Darwin/OS X yet"
868 einfo "Please report the ebuild along with the info below" 674 einfo "Please report the ebuild along with the info below"
869 einfo "eextra: ${eextra}" 675 einfo "eextra: ${eextra}"
870 die "Required function missing" 676 die "Required function missing"
871 fi 677 fi
872 678
877 [ -z "`egetent group ${egid}`" ] && break 683 [ -z "`egetent group ${egid}`" ] && break
878 done 684 done
879 esac 685 esac
880 dscl . create /groups/${egroup} gid ${egid} 686 dscl . create /groups/${egroup} gid ${egid}
881 dscl . create /groups/${egroup} passwd '*' 687 dscl . create /groups/${egroup} passwd '*'
882 elif use x86-fbsd ; then 688 elif [[ "${USERLAND}" == "BSD" ]] ; then
883 case ${egid} in 689 case ${egid} in
884 *[!0-9]*) # Non numeric 690 *[!0-9]*) # Non numeric
885 for egid in `jot 898 101`; do 691 for egid in `jot 898 101`; do
886 [ -z "`egetent group ${egid}`" ] && break 692 [ -z "`egetent group ${egid}`" ] && break
887 done 693 done
922# name: the name that will show up in the menu 728# name: the name that will show up in the menu
923# icon: give your little like a pretty little icon ... 729# icon: give your little like a pretty little icon ...
924# this can be relative (to /usr/share/pixmaps) or 730# this can be relative (to /usr/share/pixmaps) or
925# a full path to an icon 731# a full path to an icon
926# type: what kind of application is this ? for categories: 732# type: what kind of application is this ? for categories:
927# http://www.freedesktop.org/standards/menu-spec/ 733# http://www.freedesktop.org/wiki/Standards_2fmenu_2dspec
928# path: if your app needs to startup in a specific dir 734# path: if your app needs to startup in a specific dir
929make_desktop_entry() { 735make_desktop_entry() {
930 [ -z "$1" ] && eerror "make_desktop_entry: You must specify the executable" && return 1 736 [[ -z $1 ]] && eerror "make_desktop_entry: You must specify the executable" && return 1
931 737
932 local exec="${1}" 738 local exec=${1}
933 local name="${2:-${PN}}" 739 local name=${2:-${PN}}
934 local icon="${3:-${PN}.png}" 740 local icon=${3:-${PN}.png}
935 local type="${4}" 741 local type=${4}
936 local subdir="${6}" 742 local path=${5}
937 local path="${5:-${GAMES_BINDIR}}" 743
938 if [ -z "${type}" ] 744 if [[ -z ${type} ]] ; then
939 then 745 local catmaj=${CATEGORY%%-*}
940 case ${CATEGORY} in 746 local catmin=${CATEGORY##*-}
941 "app-emulation") 747 case ${catmaj} in
942 type=Emulator 748 app)
943 subdir="Emulation" 749 case ${catmin} in
750 admin) type=System;;
751 cdr) type=DiscBurning;;
752 dicts) type=Dictionary;;
753 editors) type=TextEditor;;
754 emacs) type=TextEditor;;
755 emulation) type=Emulator;;
756 laptop) type=HardwareSettings;;
757 office) type=Office;;
758 vim) type=TextEditor;;
759 xemacs) type=TextEditor;;
760 *) type=;;
761 esac
944 ;; 762 ;;
945 "games-"*) 763
946 type=Game 764 dev)
947 subdir="Games" 765 type="Development"
948 ;; 766 ;;
949 "net-"*) 767
950 type=Network 768 games)
951 subdir="${type}" 769 [[ -z ${path} ]] && path=${GAMES_BINDIR}
770
771 case ${catmin} in
772 action) type=ActionGame;;
773 arcade) type=ArcadeGame;;
774 board) type=BoardGame;;
775 kid) type=KidsGame;;
776 emulation) type=Emulator;;
777 puzzle) type=LogicGame;;
778 rpg) type=RolePlaying;;
779 roguelike) type=RolePlaying;;
780 simulation) type=Simulation;;
781 sports) type=SportsGame;;
782 strategy) type=StrategyGame;;
783 *) type=;;
784 esac
785 type="Game;${type}"
952 ;; 786 ;;
787
788 mail)
789 type="Network;Email"
790 ;;
791
792 media)
793 case ${catmin} in
794 gfx) type=Graphics;;
795 radio) type=Tuner;;
796 sound) type=Audio;;
797 tv) type=TV;;
798 video) type=Video;;
799 *) type=;;
800 esac
801 type="AudioVideo;${type}"
802 ;;
803
804 net)
805 case ${catmin} in
806 dialup) type=Dialup;;
807 ftp) type=FileTransfer;;
808 im) type=InstantMessaging;;
809 irc) type=IRCClient;;
810 mail) type=Email;;
811 news) type=News;;
812 nntp) type=News;;
813 p2p) type=FileTransfer;;
814 *) type=;;
815 esac
816 type="Network;${type}"
817 ;;
818
819 sci)
820 case ${catmin} in
821 astro*) type=Astronomoy;;
822 bio*) type=Biology;;
823 calc*) type=Calculator;;
824 chem*) type=Chemistry;;
825 geo*) type=Geology;;
826 math*) type=Math;;
827 *) type=;;
828 esac
829 type="Science;${type}"
830 ;;
831
832 www)
833 case ${catmin} in
834 client) type=WebBrowser;;
835 *) type=;;
836 esac
837 type="Network"
838 ;;
839
953 *) 840 *)
954 type= 841 type=
955 subdir=
956 ;; 842 ;;
957 esac 843 esac
958 fi 844 fi
845 if [ "${SLOT}" == "0" ] ; then
846 local desktop_name="${PN}"
847 else
848 local desktop_name="${PN}-${SLOT}"
849 fi
959 local desktop="${T}/${exec}.desktop" 850 local desktop=${T}/${exec%% *}-${desktop_name}.desktop
960 851
961echo "[Desktop Entry] 852echo "[Desktop Entry]
962Encoding=UTF-8 853Encoding=UTF-8
963Version=0.9.2 854Version=0.9.2
964Name=${name} 855Name=${name}
980# make_desktop_entry(<title>, <command>) 871# make_desktop_entry(<title>, <command>)
981# title: File to execute to start the Window Manager 872# title: File to execute to start the Window Manager
982# command: Name of the Window Manager 873# command: Name of the Window Manager
983 874
984make_session_desktop() { 875make_session_desktop() {
985
986 [ -z "$1" ] && eerror "make_session_desktop: You must specify the title" && return 1 876 [[ -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 877 [[ -z $2 ]] && eerror "make_session_desktop: You must specify the command" && return 1
988 878
989 local title="${1}" 879 local title=$1
990 local command="${2}" 880 local command=$2
991 local desktop="${T}/${wm}.desktop" 881 local desktop=${T}/${wm}.desktop
992 882
993echo "[Desktop Entry] 883echo "[Desktop Entry]
994Encoding=UTF-8 884Encoding=UTF-8
995Name=${title} 885Name=${title}
996Comment=This session logs you into ${title} 886Comment=This session logs you into ${title}
998TryExec=${command} 888TryExec=${command}
999Type=Application" > "${desktop}" 889Type=Application" > "${desktop}"
1000 890
1001 insinto /usr/share/xsessions 891 insinto /usr/share/xsessions
1002 doins "${desktop}" 892 doins "${desktop}"
1003
1004 return 0
1005} 893}
1006 894
1007domenu() { 895domenu() {
1008 local i 896 local i j
1009 local j
1010 insinto /usr/share/applications 897 insinto /usr/share/applications
1011 for i in ${@} 898 for i in "$@" ; do
1012 do
1013 if [ -f "${i}" ]; 899 if [[ -f ${i} ]] ; then
1014 then
1015 doins ${i} 900 doins "${i}"
1016 elif [ -d "${i}" ]; 901 elif [[ -d ${i} ]] ; then
1017 then
1018 for j in ${i}/*.desktop 902 for j in "${i}"/*.desktop ; do
1019 do
1020 doins ${j} 903 doins "${j}"
1021 done 904 done
1022 fi 905 fi
1023 done 906 done
1024} 907}
908newmenu() {
909 insinto /usr/share/applications
910 newins "$1" "$2"
911}
1025 912
1026doicon() { 913doicon() {
1027 local i 914 local i j
1028 local j
1029 insinto /usr/share/pixmaps 915 insinto /usr/share/pixmaps
1030 for i in ${@} 916 for i in "$@" ; do
1031 do
1032 if [ -f "${i}" ]; 917 if [[ -f ${i} ]] ; then
1033 then
1034 doins ${i} 918 doins "${i}"
1035 elif [ -d "${i}" ]; 919 elif [[ -d ${i} ]] ; then
1036 then
1037 for j in ${i}/*.png 920 for j in "${i}"/*.png ; do
1038 do
1039 doins ${j} 921 doins "${j}"
1040 done 922 done
1041 fi 923 fi
1042 done 924 done
925}
926newicon() {
927 insinto /usr/share/pixmaps
928 newins "$1" "$2"
1043} 929}
1044 930
1045############################################################## 931##############################################################
1046# END: Handle .desktop files and menu entries # 932# END: Handle .desktop files and menu entries #
1047############################################################## 933##############################################################
1448 local mline="" 1334 local mline=""
1449 local showedmsg=0 1335 local showedmsg=0
1450 1336
1451 for mline in $(mount | egrep -e '(iso|cdrom)' | awk '{print $3}') ; do 1337 for mline in $(mount | egrep -e '(iso|cdrom)' | awk '{print $3}') ; do
1452 [[ -d ${mline}/${dir} ]] || continue 1338 [[ -d ${mline}/${dir} ]] || continue
1453 [[ ! -z $(find ${mline}/${dir} -iname ${file} -maxdepth 1) ]] \ 1339 [[ ! -z $(find ${mline}/${dir} -maxdepth 1 -iname ${file}) ]] \
1454 && export CDROM_ROOT=${mline} 1340 && export CDROM_ROOT=${mline}
1455 done 1341 done
1456 1342
1457 if [[ -z ${CDROM_ROOT} ]] ; then 1343 if [[ -z ${CDROM_ROOT} ]] ; then
1458 echo 1344 echo
1473 fi 1359 fi
1474 showedmsg=1 1360 showedmsg=1
1475 fi 1361 fi
1476 einfo "Press return to scan for the cd again" 1362 einfo "Press return to scan for the cd again"
1477 einfo "or hit CTRL+C to abort the emerge." 1363 einfo "or hit CTRL+C to abort the emerge."
1364 echo
1365 einfo "If you are having trouble with the detection"
1366 einfo "of your CD, it is possible that you do not have"
1367 einfo "Joliet support enabled in your kernel. Please"
1368 einfo "check that CONFIG_JOLIET is enabled in your kernel."
1478 read 1369 read
1479 fi 1370 fi
1480 done 1371 done
1481} 1372}
1482 1373
1492# directories and uses the intersection of the lists. 1383# directories and uses the intersection of the lists.
1493# The -u builds a list of po files found in all the 1384# The -u builds a list of po files found in all the
1494# directories and uses the union of the lists. 1385# directories and uses the union of the lists.
1495strip-linguas() { 1386strip-linguas() {
1496 local ls newls 1387 local ls newls
1497 if [ "$1" == "-i" ] || [ "$1" == "-u" ] ; then 1388 if [[ $1 == "-i" ]] || [[ $1 == "-u" ]] ; then
1498 local op="$1"; shift 1389 local op=$1; shift
1499 ls=" $(find "$1" -name '*.po' -printf '%f ') "; shift 1390 ls=" $(find "$1" -name '*.po' -printf '%f ') "; shift
1500 local d f 1391 local d f
1501 for d in "$@" ; do 1392 for d in "$@" ; do
1502 if [ "${op}" == "-u" ] ; then 1393 if [[ ${op} == "-u" ]] ; then
1503 newls="${ls}" 1394 newls=${ls}
1504 else 1395 else
1505 newls="" 1396 newls=""
1506 fi 1397 fi
1507 for f in $(find "$d" -name '*.po' -printf '%f ') ; do 1398 for f in $(find "$d" -name '*.po' -printf '%f ') ; do
1508 if [ "${op}" == "-i" ] ; then 1399 if [[ ${op} == "-i" ]] ; then
1509 [ "${ls/ ${f} /}" != "${ls}" ] && newls="${newls} ${f}" 1400 [[ ${ls/ ${f} /} != ${ls} ]] && newls="${newls} ${f}"
1510 else 1401 else
1511 [ "${ls/ ${f} /}" == "${ls}" ] && newls="${newls} ${f}" 1402 [[ ${ls/ ${f} /} == ${ls} ]] && newls="${newls} ${f}"
1512 fi 1403 fi
1513 done 1404 done
1514 ls="${newls}" 1405 ls=${newls}
1515 done 1406 done
1516 ls="${ls//.po}" 1407 ls=${ls//.po}
1517 else 1408 else
1518 ls="$@" 1409 ls=$@
1519 fi 1410 fi
1520 1411
1521 ls=" ${ls} " 1412 ls=" ${ls} "
1522 newls="" 1413 newls=""
1523 for f in ${LINGUAS} ; do 1414 for f in ${LINGUAS} ; do
1524 if [ "${ls/ ${f} /}" != "${ls}" ] ; then 1415 if [[ ${ls/ ${f} /} != ${ls} ]] ; then
1525 newls="${newls} ${f}" 1416 newls="${newls} ${f}"
1526 else 1417 else
1527 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA" 1418 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA"
1528 fi 1419 fi
1529 done 1420 done
1530 if [ -z "${newls}" ] ; then 1421 if [[ -z ${newls} ]] ; then
1531 unset LINGUAS 1422 export LINGUAS=""
1532 else 1423 else
1533 export LINGUAS="${newls}" 1424 export LINGUAS=${newls:1}
1534 fi 1425 fi
1535} 1426}
1536 1427
1537# moved from kernel.eclass since they are generally useful outside of 1428# moved from kernel.eclass since they are generally useful outside of
1538# kernel.eclass -iggy (20041002) 1429# kernel.eclass -iggy (20041002)
1540# the following functions are useful in kernel module ebuilds, etc. 1431# the following functions are useful in kernel module ebuilds, etc.
1541# for an example see ivtv or drbd ebuilds 1432# for an example see ivtv or drbd ebuilds
1542 1433
1543# set's ARCH to match what the kernel expects 1434# set's ARCH to match what the kernel expects
1544set_arch_to_kernel() { 1435set_arch_to_kernel() {
1436 i=10
1437 while ((i--)) ; do
1438 ewarn "PLEASE UPDATE TO YOUR PACKAGE TO USE linux-info.eclass"
1439 done
1545 export EUTILS_ECLASS_PORTAGE_ARCH="${ARCH}" 1440 export EUTILS_ECLASS_PORTAGE_ARCH="${ARCH}"
1546 case ${ARCH} in 1441 case ${ARCH} in
1547 x86) export ARCH="i386";; 1442 x86) export ARCH="i386";;
1548 amd64) export ARCH="x86_64";; 1443 amd64) export ARCH="x86_64";;
1549 hppa) export ARCH="parisc";; 1444 hppa) export ARCH="parisc";;
1550 mips) export ARCH="mips";; 1445 mips) export ARCH="mips";;
1446 sparc) export ARCH="$(tc-arch-kernel)";; # Yeah this is ugly, but it's even WORSE if you don't do this. linux-info.eclass's set_arch_to_kernel is fixed, but won't get used over this one!
1551 *) export ARCH="${ARCH}";; 1447 *) export ARCH="${ARCH}";;
1552 esac 1448 esac
1553} 1449}
1554 1450
1555# set's ARCH back to what portage expects 1451# set's ARCH back to what portage expects
1556set_arch_to_portage() { 1452set_arch_to_portage() {
1453 i=10
1454 while ((i--)) ; do
1455 ewarn "PLEASE UPDATE TO YOUR PACKAGE TO USE linux-info.eclass"
1456 done
1557 export ARCH="${EUTILS_ECLASS_PORTAGE_ARCH}" 1457 export ARCH="${EUTILS_ECLASS_PORTAGE_ARCH}"
1558} 1458}
1559 1459
1560# Jeremy Huddleston <eradicator@gentoo.org>: 1460# Jeremy Huddleston <eradicator@gentoo.org>:
1561# preserve_old_lib /path/to/libblah.so.0 1461# preserve_old_lib /path/to/libblah.so.0
1596 LIB=$1 1496 LIB=$1
1597 1497
1598 if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then 1498 if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then
1599 SONAME=`basename ${LIB}` 1499 SONAME=`basename ${LIB}`
1600 1500
1601 einfo "An old version of an installed library was detected on your system." 1501 ewarn "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" 1502 ewarn "In order to avoid breaking packages that link against it, this older version"
1603 einfo "is not being removed. In order to make full use of this newer version," 1503 ewarn "is not being removed. In order to make full use of this newer version,"
1604 einfo "you will need to execute the following command:" 1504 ewarn "you will need to execute the following command:"
1605 einfo " revdep-rebuild --soname ${SONAME}" 1505 ewarn " revdep-rebuild --soname ${SONAME}"
1606 einfo 1506 ewarn
1607 einfo "After doing that, you can safely remove ${LIB}" 1507 ewarn "After doing that, you can safely remove ${LIB}"
1608 einfo "Note: 'emerge gentoolkit' to get revdep-rebuild" 1508 ewarn "Note: 'emerge gentoolkit' to get revdep-rebuild"
1609 fi 1509 fi
1610} 1510}
1611 1511
1612# Hack for people to figure out if a package was built with 1512# Hack for people to figure out if a package was built with
1613# certain USE flags 1513# certain USE flags
1614# 1514#
1615# Usage: built_with_use [-a|-o] <DEPEND ATOM> <List of USE flags> 1515# Usage: built_with_use [-a|-o] <DEPEND ATOM> <List of USE flags>
1616# ex: built_with_use xchat gtk2 1516# ex: built_with_use xchat gtk2
1617# 1517#
1638 shift 1538 shift
1639 done 1539 done
1640 [[ ${opt} = "-a" ]] 1540 [[ ${opt} = "-a" ]]
1641} 1541}
1642 1542
1643# Many configure scripts wrongly bail when a C++ compiler 1543# Many configure scripts wrongly bail when a C++ compiler
1644# could not be detected. #73450 1544# could not be detected. #73450
1645epunt_cxx() { 1545epunt_cxx() {
1646 local dir=$1 1546 local dir=$1
1647 [[ -z ${dir} ]] && dir=${S} 1547 [[ -z ${dir} ]] && dir=${S}
1648 ebegin "Removing useless C++ checks" 1548 ebegin "Removing useless C++ checks"
1651 patch -p0 "${f}" "${PORTDIR}/eclass/ELT-patches/nocxx/nocxx.patch" > /dev/null 1551 patch -p0 "${f}" "${PORTDIR}/eclass/ELT-patches/nocxx/nocxx.patch" > /dev/null
1652 done 1552 done
1653 eend 0 1553 eend 0
1654} 1554}
1655 1555
1656# get_abi_var <VAR> [<ABI>] 1556# dopamd <file> [more files]
1657# returns the value of ${<VAR>_<ABI>} which should be set in make.defaults
1658# 1557#
1659# ex: 1558# Install pam auth config file in /etc/pam.d
1660# CFLAGS=$(get_abi_var CFLAGS sparc32) # CFLAGS=-m32 1559dopamd() {
1661# 1560 [[ -z $1 ]] && die "dopamd requires at least one argument"
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>
1670get_abi_var() {
1671 local flag=${1}
1672 local abi
1673 if [ $# -gt 1 ]; then
1674 abi=${2}
1675 elif [ -n "${ABI}" ]; then
1676 abi=${ABI}
1677 elif [ -n "${DEFAULT_ABI}" ]; then
1678 abi=${DEFAULT_ABI}
1679 else
1680 return 1
1681 fi
1682 1561
1683 local var="${flag}_${abi}" 1562 use pam || return 0
1684 echo ${!var}
1685}
1686 1563
1687get_abi_CFLAGS() { get_abi_var CFLAGS ${@}; } 1564 INSDESTTREE=/etc/pam.d \
1688get_abi_CXXFLAGS() { get_abi_var CXXFLAGS ${@}; } 1565 doins "$@" || die "failed to install $@"
1689get_abi_ASFLAGS() { get_abi_var ASFLAGS ${@}; } 1566}
1690get_abi_LIBDIR() { get_abi_var LIBDIR ${@}; } 1567# newpamd <old name> <new name>
1568#
1569# Install pam file <old name> as <new name> in /etc/pam.d
1570newpamd() {
1571 [[ $# -ne 2 ]] && die "newpamd requires two arguements"
1572
1573 use pam || return 0
1574
1575 INSDESTTREE=/etc/pam.d \
1576 newins "$1" "$2" || die "failed to install $1 as $2"
1577}
1578
1579# make a wrapper script ...
1580# NOTE: this was originally games_make_wrapper, but I noticed other places where
1581# this could be used, so I have moved it here and made it not games-specific
1582# -- wolf31o2
1583# $1 == wrapper name
1584# $2 == binary to run
1585# $3 == directory to chdir before running binary
1586# $4 == extra LD_LIBRARY_PATH's (make it : delimited)
1587# $5 == path for wrapper
1588make_wrapper() {
1589 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5
1590 local tmpwrapper=$(emktemp)
1591 cat << EOF > "${tmpwrapper}"
1592#!/bin/sh
1593cd "${chdir}"
1594export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}"
1595exec ${bin} "\$@"
1596EOF
1597 chmod go+rx "${tmpwrapper}"
1598 if [ -n "${5}" ]
1599 then
1600 exeinto ${5}
1601 newexe "${tmpwrapper}" "${wrapper}"
1602 else
1603 newbin "${tmpwrapper}" "${wrapper}"
1604 fi
1605}

Legend:
Removed from v.1.137  
changed lines
  Added in v.1.191

  ViewVC Help
Powered by ViewVC 1.1.20