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

Diff of /eclass/eutils.eclass

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

Revision 1.182 Revision 1.220
1# Copyright 1999-2005 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.182 2005/06/11 00:02:26 vapier Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.220 2005/12/13 14:08:29 flameeyes 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
12inherit multilib 12inherit multilib portability
13ECLASS=eutils
14INHERITED="$INHERITED $ECLASS"
15 13
16DEPEND="!bootstrap? ( sys-devel/patch userland_GNU? ( sys-apps/shadow ) )" 14DEPEND="!bootstrap? ( sys-devel/patch )"
17# sys-apps/shadow is needed for useradd, etc, bug #94745. 15# sys-apps/shadow is needed for useradd, etc, bug #94745.
18 16
19DESCRIPTION="Based on the ${ECLASS} eclass" 17DESCRIPTION="Based on the ${ECLASS} eclass"
20 18
21# 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
62# to point to the latest version of the library present. 60# to point to the latest version of the library present.
63# 61#
64# <azarah@gentoo.org> (26 Oct 2002) 62# <azarah@gentoo.org> (26 Oct 2002)
65# 63#
66gen_usr_ldscript() { 64gen_usr_ldscript() {
67 local libdir="$(get_libdir)" 65 local lib libdir=$(get_libdir)
68 # Just make sure it exists 66 # Just make sure it exists
69 dodir /usr/${libdir} 67 dodir /usr/${libdir}
70 68
71 for lib in "${@}" ; do 69 for lib in "${@}" ; do
72 cat > "${D}/usr/${libdir}/${lib}" <<-END_LDSCRIPT 70 cat > "${D}/usr/${libdir}/${lib}" <<-END_LDSCRIPT
73 /* GNU ld script 71 /* GNU ld script
74 Since Gentoo has critical dynamic libraries 72 Since Gentoo has critical dynamic libraries
75 in /lib, and the static versions in /usr/lib, 73 in /lib, and the static versions in /usr/lib,
76 we need to have a "fake" dynamic lib in /usr/lib, 74 we need to have a "fake" dynamic lib in /usr/lib,
77 otherwise we run into linking problems. 75 otherwise we run into linking problems.
78 76
79 See bug http://bugs.gentoo.org/4411 for more info. 77 See bug http://bugs.gentoo.org/4411 for more info.
80 */ 78 */
81 GROUP ( /${libdir}/${lib} ) 79 GROUP ( /${libdir}/${lib} )
82 END_LDSCRIPT 80 END_LDSCRIPT
83 fperms a+x "/usr/${libdir}/${lib}" 81 fperms a+x "/usr/${libdir}/${lib}" || die "could not change perms on ${lib}"
84 done 82 done
85} 83}
86 84
87# Simple function to draw a line consisting of '=' the same length as $*
88# - only to be used by epatch()
89#
90# <azarah@gentoo.org> (11 Nov 2002)
91#
92draw_line() {
93 local i=0
94 local str_length=""
95
96 # Handle calls that do not have args, or wc not being installed ...
97 if [ -z "$1" -o ! -x "$(which wc 2>/dev/null)" ]
98 then
99 echo "==============================================================="
100 return 0
101 fi
102
103 # Get the length of $*
104 str_length="$(echo -n "$*" | wc -m)"
105
106 while [ "$i" -lt "${str_length}" ]
107 do
108 echo -n "="
109
110 i=$((i + 1))
111 done
112
113 echo
114
115 return 0
116}
117 85
118# Default directory where patches are located 86# Default directory where patches are located
119EPATCH_SOURCE="${WORKDIR}/patch" 87EPATCH_SOURCE="${WORKDIR}/patch"
120# Default extension for patches 88# Default extension for patches
121EPATCH_SUFFIX="patch.bz2" 89EPATCH_SUFFIX="patch.bz2"
168# hand its a directory, it will set EPATCH_SOURCE to this. 136# hand its a directory, it will set EPATCH_SOURCE to this.
169# 137#
170# <azarah@gentoo.org> (10 Nov 2002) 138# <azarah@gentoo.org> (10 Nov 2002)
171# 139#
172epatch() { 140epatch() {
141 _epatch_draw_line() {
142 local i=0 str_length="" str_out=""
143
144 # Handle calls that do not have args, or wc not being installed ...
145 if [[ -z $1 ]] || ! type -p wc >/dev/null ; then
146 str_length=65
147 else
148 str_length=$(echo -n "$*" | wc -m)
149 fi
150
151 while ((i++ < ${str_length})) ; do
152 str_out="${str_out}="
153 done
154 echo ${str_out}
155
156 return 0
157 }
158 _epatch_assert() { local _pipestatus=${PIPESTATUS[*]}; [[ ${_pipestatus// /} -eq 0 ]] ; }
173 local PIPE_CMD="" 159 local PIPE_CMD=""
174 local STDERR_TARGET="${T}/$$.out" 160 local STDERR_TARGET="${T}/$$.out"
175 local PATCH_TARGET="${T}/$$.patch" 161 local PATCH_TARGET="${T}/$$.patch"
176 local PATCH_SUFFIX="" 162 local PATCH_SUFFIX=""
177 local SINGLE_PATCH="no" 163 local SINGLE_PATCH="no"
178 local x="" 164 local x=""
165
166 unset P4CONFIG P4PORT P4USER # keep perforce at bay #56402
179 167
180 if [ "$#" -gt 1 ] 168 if [ "$#" -gt 1 ]
181 then 169 then
182 local m="" 170 local m=""
183 for m in "$@" ; do 171 for m in "$@" ; do
284 272
285 # Allow for prefix to differ ... im lazy, so shoot me :/ 273 # Allow for prefix to differ ... im lazy, so shoot me :/
286 while [ "${count}" -lt 5 ] 274 while [ "${count}" -lt 5 ]
287 do 275 do
288 # Generate some useful debug info ... 276 # Generate some useful debug info ...
289 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 277 _epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
290 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 278 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
291 279
292 if [ "${PATCH_SUFFIX}" != "patch" ] 280 if [ "${PATCH_SUFFIX}" != "patch" ]
293 then 281 then
294 echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 282 echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
299 287
300 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 288 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
301 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 289 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
302 290
303 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 291 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
304 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 292 _epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
305 293
306 if [ "${PATCH_SUFFIX}" != "patch" ] 294 if [ "${PATCH_SUFFIX}" != "patch" ]
307 then 295 then
308 if ! (${PIPE_CMD} ${x} > ${PATCH_TARGET}) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1 296 if ! (${PIPE_CMD} ${x} > ${PATCH_TARGET}) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1
309 then 297 then
313 count=5 301 count=5
314 break 302 break
315 fi 303 fi
316 fi 304 fi
317 305
318 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1 306 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f ; _epatch_assert) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1
319 then 307 then
320 draw_line "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 308 _epatch_draw_line "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
321 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 309 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
322 echo "ACTUALLY APPLYING ${patchname} ..." >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 310 echo "ACTUALLY APPLYING ${patchname} ..." >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
323 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 311 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
324 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 312 _epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
325 313
326 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 2>&1 314 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 2>&1
315 _epatch_assert
327 316
328 if [ "$?" -ne 0 ] 317 if [ "$?" -ne 0 ]
329 then 318 then
330 cat ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 319 cat ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
331 echo 320 echo
377# vapier@gentoo.org 366# vapier@gentoo.org
378# 367#
379# Takes just 1 optional parameter (the directory to create tmpfile in) 368# Takes just 1 optional parameter (the directory to create tmpfile in)
380emktemp() { 369emktemp() {
381 local exe="touch" 370 local exe="touch"
382 [ "$1" == "-d" ] && exe="mkdir" && shift 371 [[ $1 == -d ]] && exe="mkdir" && shift
383 local topdir="$1" 372 local topdir=$1
384 373
385 if [ -z "${topdir}" ] 374 if [[ -z ${topdir} ]] ; then
386 then
387 [ -z "${T}" ] \ 375 [[ -z ${T} ]] \
388 && topdir="/tmp" \ 376 && topdir="/tmp" \
389 || topdir="${T}" 377 || topdir=${T}
390 fi 378 fi
391 379
392 if [ -z "$(type -p mktemp)" ] 380 if [[ -z $(type -p mktemp) ]] ; then
393 then
394 local tmp=/ 381 local tmp=/
395 while [ -e "${tmp}" ] ; do 382 while [[ -e ${tmp} ]] ; do
396 tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}" 383 tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}
397 done 384 done
398 ${exe} "${tmp}" 385 ${exe} "${tmp}" || ${exe} -p "${tmp}"
399 echo "${tmp}" 386 echo "${tmp}"
400 else 387 else
401 [ "${exe}" == "touch" ] \ 388 [[ ${exe} == "touch" ]] \
402 && exe="-p" \ 389 && exe="-p" \
403 || exe="-d" 390 || exe="-d"
404 mktemp ${exe} "${topdir}" 391 mktemp ${exe} "${topdir}"
405 fi 392 fi
406} 393}
410# Joe Jezak <josejx@gmail.com> and usata@gentoo.org 397# Joe Jezak <josejx@gmail.com> and usata@gentoo.org
411# FBSD stuff: Aaron Walker <ka0ttic@gentoo.org> 398# FBSD stuff: Aaron Walker <ka0ttic@gentoo.org>
412# 399#
413# egetent(database, key) 400# egetent(database, key)
414egetent() { 401egetent() {
415 if [[ "${USERLAND}" == "Darwin" ]] ; then 402 case ${CHOST} in
403 *-darwin*)
416 case "$2" in 404 case "$2" in
417 *[!0-9]*) # Non numeric 405 *[!0-9]*) # Non numeric
418 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }" 406 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
419 ;; 407 ;;
420 *) # Numeric 408 *) # Numeric
421 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }" 409 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
422 ;; 410 ;;
423 esac 411 esac
424 elif [[ "${USERLAND}" == "BSD" ]] ; then 412 ;;
425 local action 413 *-freebsd*|*-dragonfly*)
426 if [ "$1" == "passwd" ] 414 local opts action="user"
427 then 415 [[ $1 == "passwd" ]] || action="group"
428 action="user" 416
429 else 417 # lookup by uid/gid
430 action="group" 418 if [[ $2 == [[:digit:]]* ]] ; then
419 [[ ${action} == "user" ]] && opts="-u" || opts="-g"
431 fi 420 fi
421
432 pw show "${action}" "$2" -q 422 pw show ${action} ${opts} "$2" -q
433 else 423 ;;
424 *-netbsd*|*-openbsd*)
425 grep "$2:\*:" /etc/$1
426 ;;
427 *)
434 which nscd >& /dev/null && nscd -i "$1" 428 type -p nscd >& /dev/null && nscd -i "$1"
435 getent "$1" "$2" 429 getent "$1" "$2"
436 fi 430 ;;
431 esac
437} 432}
438 433
439# Simplify/standardize adding users to the system 434# Simplify/standardize adding users to the system
440# vapier@gentoo.org 435# vapier@gentoo.org
441# 436#
479 fi 474 fi
480 else 475 else
481 euid="next" 476 euid="next"
482 fi 477 fi
483 if [[ ${euid} == "next" ]] ; then 478 if [[ ${euid} == "next" ]] ; then
484 local pwrange 479 for euid in $(seq 101 999) ; do
485 if [[ ${USERLAND} == "BSD" ]] ; then
486 pwrange=$(jot 898 101)
487 else
488 pwrange=$(seq 101 999)
489 fi
490 for euid in ${pwrange} ; do
491 [[ -z $(egetent passwd ${euid}) ]] && break 480 [[ -z $(egetent passwd ${euid}) ]] && break
492 done 481 done
493 fi 482 fi
494 opts="${opts} -u ${euid}" 483 opts="${opts} -u ${euid}"
495 einfo " - Userid: ${euid}" 484 einfo " - Userid: ${euid}"
500 if [[ ! -e ${eshell} ]] ; then 489 if [[ ! -e ${eshell} ]] ; then
501 eerror "A shell was specified but it does not exist !" 490 eerror "A shell was specified but it does not exist !"
502 die "${eshell} does not exist" 491 die "${eshell} does not exist"
503 fi 492 fi
504 else 493 else
505 case ${USERLAND} in 494 for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null ; do
506 Darwin) eshell="/usr/bin/false";; 495 [[ -x ${ROOT}${shell} ]] && break
507 BSD) eshell="/usr/sbin/nologin";; 496 done
508 *) eshell="/bin/false";; 497
509 esac 498 if [[ ${shell} == "/dev/null" ]] ; then
499 eerror "Unable to identify the shell to use"
500 die "Unable to identify the shell to use"
501 fi
502
503 eshell=${shell}
510 fi 504 fi
511 einfo " - Shell: ${eshell}" 505 einfo " - Shell: ${eshell}"
512 opts="${opts} -s ${eshell}" 506 opts="${opts} -s ${eshell}"
513 507
514 # handle homedir 508 # handle homedir
551 einfo " - Groups: ${egroups}" 545 einfo " - Groups: ${egroups}"
552 546
553 # handle extra and add the user 547 # handle extra and add the user
554 local oldsandbox=${SANDBOX_ON} 548 local oldsandbox=${SANDBOX_ON}
555 export SANDBOX_ON="0" 549 export SANDBOX_ON="0"
556 case ${USERLAND} in 550 case ${CHOST} in
557 Darwin) 551 *-darwin*)
558 ### Make the user 552 ### Make the user
559 if [[ -z $@ ]] ; then 553 if [[ -z $@ ]] ; then
560 dscl . create /users/${euser} uid ${euid} 554 dscl . create /users/${euser} uid ${euid}
561 dscl . create /users/${euser} shell ${eshell} 555 dscl . create /users/${euser} shell ${eshell}
562 dscl . create /users/${euser} home ${ehome} 556 dscl . create /users/${euser} home ${ehome}
573 einfo "Please report the ebuild along with the info below" 567 einfo "Please report the ebuild along with the info below"
574 einfo "eextra: $@" 568 einfo "eextra: $@"
575 die "Required function missing" 569 die "Required function missing"
576 fi 570 fi
577 ;; 571 ;;
578 BSD) 572 *-freebsd*|*-dragonfly*)
579 if [[ -z $@ ]] ; then 573 if [[ -z $@ ]] ; then
580 pw useradd ${euser} ${opts} \ 574 pw useradd ${euser} ${opts} \
581 -c "added by portage for ${PN}" \ 575 -c "added by portage for ${PN}" \
582 die "enewuser failed" 576 die "enewuser failed"
583 else 577 else
584 einfo " - Extra: $@" 578 einfo " - Extra: $@"
585 pw useradd ${euser} ${opts} \ 579 pw useradd ${euser} ${opts} \
586 "$@" || die "enewuser failed" 580 "$@" || die "enewuser failed"
587 fi 581 fi
588 ;; 582 ;;
583
584 *-netbsd*)
585 if [[ -z $@ ]] ; then
586 useradd ${opts} ${euser} || die "enewuser failed"
587 else
588 einfo " - Extra: $@"
589 useradd ${opts} ${euser} "$@" || die "enewuser failed"
590 fi
591 ;;
592
593 *-openbsd*)
594 if [[ -z $@ ]] ; then
595 useradd -u ${euid} -s ${eshell} \
596 -d ${ehome} -c "Added by portage for ${PN}" \
597 -g ${egroups} ${euser} || die "enewuser failed"
598 else
599 einfo " - Extra: $@"
600 useradd -u ${euid} -s ${eshell} \
601 -d ${ehome} -c "Added by portage for ${PN}" \
602 -g ${egroups} ${euser} "$@" || die "enewuser failed"
603 fi
604 ;;
605
589 *) 606 *)
590 if [[ -z $@ ]] ; then 607 if [[ -z $@ ]] ; then
591 useradd ${opts} ${euser} \ 608 useradd ${opts} ${euser} \
592 -c "added by portage for ${PN}" \ 609 -c "added by portage for ${PN}" \
593 || die "enewuser failed" 610 || die "enewuser failed"
596 useradd ${opts} ${euser} "$@" \ 613 useradd ${opts} ${euser} "$@" \
597 || die "enewuser failed" 614 || die "enewuser failed"
598 fi 615 fi
599 ;; 616 ;;
600 esac 617 esac
618
619 if [[ ! -e ${ROOT}/${ehome} ]] ; then
620 einfo " - Creating ${ehome} in ${ROOT}"
621 mkdir -p "${ROOT}/${ehome}"
622 chown ${euser} "${ROOT}/${ehome}"
623 chmod 755 "${ROOT}/${ehome}"
624 fi
625
601 export SANDBOX_ON=${oldsandbox} 626 export SANDBOX_ON=${oldsandbox}
602
603 if [ ! -e "${ehome}" ] && [ ! -e "${D}/${ehome}" ]
604 then
605 einfo " - Creating ${ehome} in ${D}"
606 dodir ${ehome}
607 fowners ${euser} ${ehome}
608 fperms 755 ${ehome}
609 fi
610} 627}
611 628
612# Simplify/standardize adding groups to the system 629# Simplify/standardize adding groups to the system
613# vapier@gentoo.org 630# vapier@gentoo.org
614# 631#
643 then 660 then
644 if [ "${egid}" -gt 0 ] 661 if [ "${egid}" -gt 0 ]
645 then 662 then
646 if [ -z "`egetent group ${egid}`" ] 663 if [ -z "`egetent group ${egid}`" ]
647 then 664 then
648 if [[ "${USERLAND}" == "Darwin" ]]; then 665 if [[ "${CHOST}" == *-darwin* ]]; then
649 opts="${opts} ${egid}" 666 opts="${opts} ${egid}"
650 else 667 else
651 opts="${opts} -g ${egid}" 668 opts="${opts} -g ${egid}"
652 fi 669 fi
653 else 670 else
667 opts="${opts} ${eextra}" 684 opts="${opts} ${eextra}"
668 685
669 # add the group 686 # add the group
670 local oldsandbox="${SANDBOX_ON}" 687 local oldsandbox="${SANDBOX_ON}"
671 export SANDBOX_ON="0" 688 export SANDBOX_ON="0"
672 if [[ "${USERLAND}" == "Darwin" ]]; then 689 case ${CHOST} in
690 *-darwin*)
673 if [ ! -z "${eextra}" ]; 691 if [ ! -z "${eextra}" ];
674 then 692 then
675 einfo "Extra options are not supported on Darwin/OS X yet" 693 einfo "Extra options are not supported on Darwin/OS X yet"
676 einfo "Please report the ebuild along with the info below" 694 einfo "Please report the ebuild along with the info below"
677 einfo "eextra: ${eextra}" 695 einfo "eextra: ${eextra}"
678 die "Required function missing" 696 die "Required function missing"
679 fi 697 fi
680 698
681 # If we need the next available 699 # If we need the next available
682 case ${egid} in 700 case ${egid} in
683 *[!0-9]*) # Non numeric 701 *[!0-9]*) # Non numeric
684 for egid in `jot 898 101`; do 702 for egid in $(seq 101 999); do
685 [ -z "`egetent group ${egid}`" ] && break 703 [ -z "`egetent group ${egid}`" ] && break
686 done 704 done
687 esac 705 esac
688 dscl . create /groups/${egroup} gid ${egid} 706 dscl . create /groups/${egroup} gid ${egid}
689 dscl . create /groups/${egroup} passwd '*' 707 dscl . create /groups/${egroup} passwd '*'
690 elif [[ "${USERLAND}" == "BSD" ]] ; then 708 ;;
709
710 *-freebsd*|*-dragonfly*)
691 case ${egid} in 711 case ${egid} in
692 *[!0-9]*) # Non numeric 712 *[!0-9]*) # Non numeric
693 for egid in `jot 898 101`; do 713 for egid in $(seq 101 999); do
694 [ -z "`egetent group ${egid}`" ] && break 714 [ -z "`egetent group ${egid}`" ] && break
695 done 715 done
696 esac 716 esac
697 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed" 717 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed"
698 else 718 ;;
719
720 *-netbsd*)
721 case ${egid} in
722 *[!0-9]*) # Non numeric
723 for egid in $(seq 101 999); do
724 [ -z "`egetent group ${egid}`" ] && break
725 done
726 esac
727 groupadd -g ${egid} ${egroup} || die "enewgroup failed"
728 ;;
729
730 *)
699 groupadd ${opts} ${egroup} || die "enewgroup failed" 731 groupadd ${opts} ${egroup} || die "enewgroup failed"
700 fi 732 ;;
733 esac
701 export SANDBOX_ON="${oldsandbox}" 734 export SANDBOX_ON="${oldsandbox}"
702} 735}
703 736
704# Simple script to replace 'dos2unix' binaries 737# Simple script to replace 'dos2unix' binaries
705# vapier@gentoo.org 738# vapier@gentoo.org
730# name: the name that will show up in the menu 763# name: the name that will show up in the menu
731# icon: give your little like a pretty little icon ... 764# icon: give your little like a pretty little icon ...
732# this can be relative (to /usr/share/pixmaps) or 765# this can be relative (to /usr/share/pixmaps) or
733# a full path to an icon 766# a full path to an icon
734# type: what kind of application is this ? for categories: 767# type: what kind of application is this ? for categories:
735# http://www.freedesktop.org/wiki/Standards_2fmenu_2dspec 768# http://www.freedesktop.org/Standards/desktop-entry-spec
736# path: if your app needs to startup in a specific dir 769# path: if your app needs to startup in a specific dir
737make_desktop_entry() { 770make_desktop_entry() {
738 [[ -z $1 ]] && eerror "make_desktop_entry: You must specify the executable" && return 1 771 [[ -z $1 ]] && eerror "make_desktop_entry: You must specify the executable" && return 1
739 772
740 local exec=${1} 773 local exec=${1}
766 dev) 799 dev)
767 type="Development" 800 type="Development"
768 ;; 801 ;;
769 802
770 games) 803 games)
771 [[ -z ${path} ]] && path=${GAMES_BINDIR}
772
773 case ${catmin} in 804 case ${catmin} in
774 action) type=ActionGame;; 805 action) type=ActionGame;;
775 arcade) type=ArcadeGame;; 806 arcade) type=ArcadeGame;;
776 board) type=BoardGame;; 807 board) type=BoardGame;;
777 kid) type=KidsGame;; 808 kid) type=KidsGame;;
818 type="Network;${type}" 849 type="Network;${type}"
819 ;; 850 ;;
820 851
821 sci) 852 sci)
822 case ${catmin} in 853 case ${catmin} in
823 astro*) type=Astronomoy;; 854 astro*) type=Astronomy;;
824 bio*) type=Biology;; 855 bio*) type=Biology;;
825 calc*) type=Calculator;; 856 calc*) type=Calculator;;
826 chem*) type=Chemistry;; 857 chem*) type=Chemistry;;
827 geo*) type=Geology;; 858 geo*) type=Geology;;
828 math*) type=Math;; 859 math*) type=Math;;
860Exec=${exec} 891Exec=${exec}
861Path=${path} 892Path=${path}
862Icon=${icon} 893Icon=${icon}
863Categories=Application;${type};" > "${desktop}" 894Categories=Application;${type};" > "${desktop}"
864 895
896 (
897 # wrap the env here so that the 'insinto' call
898 # doesn't corrupt the env of the caller
865 insinto /usr/share/applications 899 insinto /usr/share/applications
866 doins "${desktop}" 900 doins "${desktop}"
867 901 )
868 return 0
869} 902}
870 903
871# Make a GDM/KDM Session file 904# Make a GDM/KDM Session file
872# 905#
873# make_desktop_entry(<title>, <command>) 906# make_desktop_entry(<title>, <command>)
902 doins "${i}" 935 doins "${i}"
903 elif [[ -d ${i} ]] ; then 936 elif [[ -d ${i} ]] ; then
904 for j in "${i}"/*.desktop ; do 937 for j in "${i}"/*.desktop ; do
905 doins "${j}" 938 doins "${j}"
906 done 939 done
907 fi 940 fi
908 done 941 done
909} 942}
910newmenu() { 943newmenu() {
911 insinto /usr/share/applications 944 insinto /usr/share/applications
912 newins "$1" "$2" 945 newins "$1" "$2"
920 doins "${i}" 953 doins "${i}"
921 elif [[ -d ${i} ]] ; then 954 elif [[ -d ${i} ]] ; then
922 for j in "${i}"/*.png ; do 955 for j in "${i}"/*.png ; do
923 doins "${j}" 956 doins "${j}"
924 done 957 done
925 fi 958 fi
926 done 959 done
927} 960}
928newicon() { 961newicon() {
929 insinto /usr/share/pixmaps 962 insinto /usr/share/pixmaps
930 newins "$1" "$2" 963 newins "$1" "$2"
935############################################################## 968##############################################################
936 969
937 970
938# for internal use only (unpack_pdv and unpack_makeself) 971# for internal use only (unpack_pdv and unpack_makeself)
939find_unpackable_file() { 972find_unpackable_file() {
940 local src="$1" 973 local src=$1
941 if [ -z "${src}" ] 974 if [[ -z ${src} ]] ; then
942 then
943 src="${DISTDIR}/${A}" 975 src=${DISTDIR}/${A}
944 else 976 else
945 if [ -e "${DISTDIR}/${src}" ] 977 if [[ -e ${DISTDIR}/${src} ]] ; then
946 then
947 src="${DISTDIR}/${src}" 978 src=${DISTDIR}/${src}
948 elif [ -e "${PWD}/${src}" ] 979 elif [[ -e ${PWD}/${src} ]] ; then
949 then
950 src="${PWD}/${src}" 980 src=${PWD}/${src}
951 elif [ -e "${src}" ] 981 elif [[ -e ${src} ]] ; then
952 then
953 src="${src}" 982 src=${src}
954 fi
955 fi 983 fi
956 [ ! -e "${src}" ] && die "Could not find requested archive ${src}" 984 fi
985 [[ ! -e ${src} ]] && return 1
957 echo "${src}" 986 echo "${src}"
958} 987}
959 988
960# Unpack those pesky pdv generated files ... 989# Unpack those pesky pdv generated files ...
961# They're self-unpacking programs with the binary package stuffed in 990# They're self-unpacking programs with the binary package stuffed in
976# lseek 1005# lseek
977# root@vapier 0 pdv_unpack # strace -elseek ./hldsupdatetool.bin 1006# root@vapier 0 pdv_unpack # strace -elseek ./hldsupdatetool.bin
978# lseek(3, -4, SEEK_END) = 2981250 1007# lseek(3, -4, SEEK_END) = 2981250
979# thus we would pass in the value of '4' as the second parameter. 1008# thus we would pass in the value of '4' as the second parameter.
980unpack_pdv() { 1009unpack_pdv() {
981 local src="`find_unpackable_file $1`" 1010 local src=$(find_unpackable_file $1)
982 local sizeoff_t="$2" 1011 local sizeoff_t=$2
983 1012
1013 [[ -z ${src} ]] && die "Could not locate source for '$1'"
984 [ -z "${sizeoff_t}" ] && die "No idea what off_t size was used for this pdv :(" 1014 [[ -z ${sizeoff_t} ]] && die "No idea what off_t size was used for this pdv :("
985 1015
986 local shrtsrc="`basename ${src}`" 1016 local shrtsrc=$(basename "${src}")
987 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 1017 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
988 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"` 1018 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"`
989 local tailskip=`tail -c $((${sizeoff_t}*2)) ${src} | head -c ${sizeoff_t} | hexdump -e \"%i\"` 1019 local tailskip=`tail -c $((${sizeoff_t}*2)) ${src} | head -c ${sizeoff_t} | hexdump -e \"%i\"`
990 1020
991 # grab metadata for debug reasons 1021 # grab metadata for debug reasons
1055# Usage: unpack_makeself [file to unpack] [offset] [tail|dd] 1085# Usage: unpack_makeself [file to unpack] [offset] [tail|dd]
1056# - If the file is not specified then unpack will utilize ${A}. 1086# - If the file is not specified then unpack will utilize ${A}.
1057# - If the offset is not specified then we will attempt to extract 1087# - If the offset is not specified then we will attempt to extract
1058# the proper offset from the script itself. 1088# the proper offset from the script itself.
1059unpack_makeself() { 1089unpack_makeself() {
1090 local src_input=${1:-${A}}
1060 local src="$(find_unpackable_file "$1")" 1091 local src=$(find_unpackable_file "${src_input}")
1061 local skip="$2" 1092 local skip=$2
1062 local exe="$3" 1093 local exe=$3
1063 1094
1095 [[ -z ${src} ]] && die "Could not locate source for '${src_input}'"
1096
1064 local shrtsrc="$(basename "${src}")" 1097 local shrtsrc=$(basename "${src}")
1065 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 1098 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
1066 if [ -z "${skip}" ] 1099 if [[ -z ${skip} ]] ; then
1067 then
1068 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`" 1100 local ver=$(grep -a '#.*Makeself' "${src}" | awk '{print $NF}')
1069 local skip=0 1101 local skip=0
1070 exe=tail 1102 exe=tail
1071 case ${ver} in 1103 case ${ver} in
1072 1.5.*) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same 1104 1.5.*) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same
1073 skip=$(grep -a ^skip= "${src}" | cut -d= -f2) 1105 skip=$(grep -a ^skip= "${src}" | cut -d= -f2)
1085 ;; 1117 ;;
1086 2.1.3) 1118 2.1.3)
1087 skip=`grep -a ^offset= "${src}" | awk '{print $3}'` 1119 skip=`grep -a ^offset= "${src}" | awk '{print $3}'`
1088 let skip="skip + 1" 1120 let skip="skip + 1"
1089 ;; 1121 ;;
1090 2.1.4) 1122 2.1.4|2.1.5)
1091 skip=$(grep -a offset=.*head.*wc "${src}" | awk '{print $3}' | head -n 1) 1123 skip=$(grep -a offset=.*head.*wc "${src}" | awk '{print $3}' | head -n 1)
1092 skip=$(head -n ${skip} "${src}" | wc -c) 1124 skip=$(head -n ${skip} "${src}" | wc -c)
1093 exe="dd" 1125 exe="dd"
1094 ;; 1126 ;;
1095 *) 1127 *)
1140check_license() { 1172check_license() {
1141 local lic=$1 1173 local lic=$1
1142 if [ -z "${lic}" ] ; then 1174 if [ -z "${lic}" ] ; then
1143 lic="${PORTDIR}/licenses/${LICENSE}" 1175 lic="${PORTDIR}/licenses/${LICENSE}"
1144 else 1176 else
1145 if [ -e "${PORTDIR}/licenses/${src}" ] ; then 1177 if [ -e "${PORTDIR}/licenses/${lic}" ] ; then
1146 lic="${PORTDIR}/licenses/${src}" 1178 lic="${PORTDIR}/licenses/${lic}"
1147 elif [ -e "${PWD}/${src}" ] ; then 1179 elif [ -e "${PWD}/${lic}" ] ; then
1148 lic="${PWD}/${src}" 1180 lic="${PWD}/${lic}"
1149 elif [ -e "${src}" ] ; then 1181 elif [ -e "${lic}" ] ; then
1150 lic="${src}" 1182 lic="${lic}"
1151 fi
1152 fi 1183 fi
1184 fi
1153 [ ! -f "${lic}" ] && die "Could not find requested license ${src}" 1185 [ ! -f "${lic}" ] && die "Could not find requested license ${lic}"
1154 local l="`basename ${lic}`" 1186 local l="`basename ${lic}`"
1155 1187
1156 # here is where we check for the licenses the user already 1188 # here is where we check for the licenses the user already
1157 # accepted ... if we don't find a match, we make the user accept 1189 # accepted ... if we don't find a match, we make the user accept
1158 local shopts=$- 1190 local shopts=$-
1214 # first we figure out how many cds we're dealing with by 1246 # first we figure out how many cds we're dealing with by
1215 # the # of files they gave us 1247 # the # of files they gave us
1216 local cdcnt=0 1248 local cdcnt=0
1217 local f= 1249 local f=
1218 for f in "$@" ; do 1250 for f in "$@" ; do
1219 cdcnt=$((cdcnt + 1)) 1251 ((++cdcnt))
1220 export CDROM_CHECK_${cdcnt}="$f" 1252 export CDROM_CHECK_${cdcnt}="$f"
1221 done 1253 done
1222 export CDROM_TOTAL_CDS=${cdcnt} 1254 export CDROM_TOTAL_CDS=${cdcnt}
1223 export CDROM_CURRENT_CD=1 1255 export CDROM_CURRENT_CD=1
1224 1256
1225 # now we see if the user gave use CD_ROOT ... 1257 # now we see if the user gave use CD_ROOT ...
1226 # if they did, let's just believe them that it's correct 1258 # if they did, let's just believe them that it's correct
1227 if [[ ! -z ${CD_ROOT} ]] ; then
1228 export CDROM_ROOT=${CD_ROOT}
1229 einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}"
1230 return
1231 fi
1232 # do the same for CD_ROOT_X
1233 if [[ ! -z ${CD_ROOT_1} ]] ; then 1259 if [[ -n ${CD_ROOT}${CD_ROOT_1} ]] ; then
1234 local var= 1260 local var=
1235 cdcnt=0 1261 cdcnt=0
1236 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do 1262 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do
1237 cdcnt=$((cdcnt + 1)) 1263 ((++cdcnt))
1238 var="CD_ROOT_${cdcnt}" 1264 var="CD_ROOT_${cdcnt}"
1265 [[ -z ${!var} ]] && var="CD_ROOT"
1239 if [[ -z ${!var} ]] ; then 1266 if [[ -z ${!var} ]] ; then
1240 eerror "You must either use just the CD_ROOT" 1267 eerror "You must either use just the CD_ROOT"
1241 eerror "or specify ALL the CD_ROOT_X variables." 1268 eerror "or specify ALL the CD_ROOT_X variables."
1242 eerror "In this case, you will need ${CDROM_TOTAL_CDS} CD_ROOT_X variables." 1269 eerror "In this case, you will need ${CDROM_TOTAL_CDS} CD_ROOT_X variables."
1243 die "could not locate CD_ROOT_${cdcnt}" 1270 die "could not locate CD_ROOT_${cdcnt}"
1244 fi 1271 fi
1245 export CDROM_ROOTS_${cdcnt}="${!var}"
1246 done 1272 done
1247 export CDROM_ROOT=${CDROM_ROOTS_1} 1273 export CDROM_ROOT=${CD_ROOT_1:-${CD_ROOT}}
1248 einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}" 1274 einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}"
1275 export CDROM_SET=-1
1276 for f in ${CDROM_CHECK_1//:/ } ; do
1277 ((++CDROM_SET))
1278 [[ -e ${CD_ROOT}/${f} ]] && break
1279 done
1280 export CDROM_MATCH=${f}
1249 return 1281 return
1250 fi 1282 fi
1251 1283
1284 # User didn't help us out so lets make sure they know they can
1285 # simplify the whole process ...
1252 if [[ ${CDROM_TOTAL_CDS} -eq 1 ]] ; then 1286 if [[ ${CDROM_TOTAL_CDS} -eq 1 ]] ; then
1253 einfon "This ebuild will need the " 1287 einfo "This ebuild will need the ${CDROM_NAME:-cdrom for ${PN}}"
1254 if [[ -z ${CDROM_NAME} ]] ; then
1255 echo "cdrom for ${PN}."
1256 else
1257 echo "${CDROM_NAME}."
1258 fi
1259 echo 1288 echo
1260 einfo "If you do not have the CD, but have the data files" 1289 einfo "If you do not have the CD, but have the data files"
1261 einfo "mounted somewhere on your filesystem, just export" 1290 einfo "mounted somewhere on your filesystem, just export"
1262 einfo "the variable CD_ROOT so that it points to the" 1291 einfo "the variable CD_ROOT so that it points to the"
1263 einfo "directory containing the files." 1292 einfo "directory containing the files."
1267 echo 1296 echo
1268 else 1297 else
1269 einfo "This package will need access to ${CDROM_TOTAL_CDS} cds." 1298 einfo "This package will need access to ${CDROM_TOTAL_CDS} cds."
1270 cdcnt=0 1299 cdcnt=0
1271 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do 1300 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do
1272 cdcnt=$((cdcnt + 1)) 1301 ((++cdcnt))
1273 var="CDROM_NAME_${cdcnt}" 1302 var="CDROM_NAME_${cdcnt}"
1274 [[ ! -z ${!var} ]] && einfo " CD ${cdcnt}: ${!var}" 1303 [[ ! -z ${!var} ]] && einfo " CD ${cdcnt}: ${!var}"
1275 done 1304 done
1276 echo 1305 echo
1277 einfo "If you do not have the CDs, but have the data files" 1306 einfo "If you do not have the CDs, but have the data files"
1278 einfo "mounted somewhere on your filesystem, just export" 1307 einfo "mounted somewhere on your filesystem, just export"
1279 einfo "the following variables so they point to the right place:" 1308 einfo "the following variables so they point to the right place:"
1280 einfon "" 1309 einfon ""
1281 cdcnt=0 1310 cdcnt=0
1282 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do 1311 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do
1283 cdcnt=$((cdcnt + 1)) 1312 ((++cdcnt))
1284 echo -n " CD_ROOT_${cdcnt}" 1313 echo -n " CD_ROOT_${cdcnt}"
1285 done 1314 done
1286 echo 1315 echo
1287 einfo "Or, if you have all the files in the same place, or" 1316 einfo "Or, if you have all the files in the same place, or"
1288 einfo "you only have one cdrom, you can export CD_ROOT" 1317 einfo "you only have one cdrom, you can export CD_ROOT"
1291 echo 1320 echo
1292 einfo "For example:" 1321 einfo "For example:"
1293 einfo "export CD_ROOT_1=/mnt/cdrom" 1322 einfo "export CD_ROOT_1=/mnt/cdrom"
1294 echo 1323 echo
1295 fi 1324 fi
1325
1326 export CDROM_SET=""
1296 export CDROM_CURRENT_CD=0 1327 export CDROM_CURRENT_CD=0
1297 cdrom_load_next_cd 1328 cdrom_load_next_cd
1298} 1329}
1299 1330
1300# this is only used when you need access to more than one cd. 1331# this is only used when you need access to more than one cd.
1301# when you have finished using the first cd, just call this function. 1332# when you have finished using the first cd, just call this function.
1302# when it returns, CDROM_ROOT will be pointing to the second cd. 1333# when it returns, CDROM_ROOT will be pointing to the second cd.
1303# remember, you can only go forward in the cd chain, you can't go back. 1334# remember, you can only go forward in the cd chain, you can't go back.
1304cdrom_load_next_cd() { 1335cdrom_load_next_cd() {
1305 export CDROM_CURRENT_CD=$((CDROM_CURRENT_CD + 1))
1306 local var= 1336 local var
1307 1337 ((++CDROM_CURRENT_CD))
1308 if [[ ! -z ${CD_ROOT} ]] ; then
1309 einfo "Using same root as before for CD #${CDROM_CURRENT_CD}"
1310 return
1311 fi
1312 1338
1313 unset CDROM_ROOT 1339 unset CDROM_ROOT
1314 var=CDROM_ROOTS_${CDROM_CURRENT_CD} 1340 var=CD_ROOT_${CDROM_CURRENT_CD}
1341 [[ -z ${!var} ]] && var="CD_ROOT"
1315 if [[ -z ${!var} ]] ; then 1342 if [[ -z ${!var} ]] ; then
1316 var="CDROM_CHECK_${CDROM_CURRENT_CD}" 1343 var="CDROM_CHECK_${CDROM_CURRENT_CD}"
1317 cdrom_locate_file_on_cd ${!var} 1344 _cdrom_locate_file_on_cd ${!var}
1318 else 1345 else
1319 export CDROM_ROOT=${!var} 1346 export CDROM_ROOT=${!var}
1320 fi 1347 fi
1321 1348
1322 einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}" 1349 einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}"
1327# all it does is try to locate a give file on a cd ... if the cd isn't 1354# all it does is try to locate a give file on a cd ... if the cd isn't
1328# found, then a message asking for the user to insert the cdrom will be 1355# found, then a message asking for the user to insert the cdrom will be
1329# displayed and we'll hang out here until: 1356# displayed and we'll hang out here until:
1330# (1) the file is found on a mounted cdrom 1357# (1) the file is found on a mounted cdrom
1331# (2) the user hits CTRL+C 1358# (2) the user hits CTRL+C
1332cdrom_locate_file_on_cd() { 1359_cdrom_locate_file_on_cd() {
1360 local mline=""
1361 local showedmsg=0
1362
1333 while [[ -z ${CDROM_ROOT} ]] ; do 1363 while [[ -z ${CDROM_ROOT} ]] ; do
1364 local i=0
1365 local -a cdset=(${*//:/ })
1366 if [[ -n ${CDROM_SET} ]] ; then
1367 cdset=(${cdset[${CDROM_SET}]})
1368 fi
1369
1370 while [[ -n ${cdset[${i}]} ]] ; do
1334 local dir="$(dirname ${@})" 1371 local dir=$(dirname ${cdset[${i}]})
1335 local file="$(basename ${@})" 1372 local file=$(basename ${cdset[${i}]})
1336 local mline=""
1337 local showedmsg=0
1338 1373
1339 for mline in $(mount | egrep -e '(iso|cdrom)' | awk '{print $3}') ; do 1374 for mline in $(mount | gawk '/(iso|cdrom|fs=cdfss)/ {print $3}') ; do
1340 [[ -d ${mline}/${dir} ]] || continue 1375 [[ -d ${mline}/${dir} ]] || continue
1341 [[ ! -z $(find ${mline}/${dir} -maxdepth 1 -iname ${file}) ]] \ 1376 if [[ -n $(find ${mline}/${dir} -maxdepth 1 -iname ${file}) ]] ; then
1342 && export CDROM_ROOT=${mline} 1377 export CDROM_ROOT=${mline}
1378 export CDROM_SET=${i}
1379 export CDROM_MATCH=${cdset[${i}]}
1380 return
1381 fi
1382 done
1383
1384 ((++i))
1343 done 1385 done
1344 1386
1345 if [[ -z ${CDROM_ROOT} ]] ; then
1346 echo 1387 echo
1347 if [[ ${showedmsg} -eq 0 ]] ; then 1388 if [[ ${showedmsg} -eq 0 ]] ; then
1348 if [[ ${CDROM_TOTAL_CDS} -eq 1 ]] ; then 1389 if [[ ${CDROM_TOTAL_CDS} -eq 1 ]] ; then
1349 if [[ -z ${CDROM_NAME} ]] ; then 1390 if [[ -z ${CDROM_NAME} ]] ; then
1350 einfo "Please insert the cdrom for ${PN} now !" 1391 einfo "Please insert+mount the cdrom for ${PN} now !"
1351 else
1352 einfo "Please insert the ${CDROM_NAME} cdrom now !"
1353 fi
1354 else 1392 else
1355 if [[ -z ${CDROM_NAME_1} ]] ; then
1356 einfo "Please insert cd #${CDROM_CURRENT_CD} for ${PN} now !"
1357 else
1358 local var="CDROM_NAME_${CDROM_CURRENT_CD}"
1359 einfo "Please insert+mount the ${!var} cdrom now !" 1393 einfo "Please insert+mount the ${CDROM_NAME} cdrom now !"
1360 fi
1361 fi 1394 fi
1362 showedmsg=1 1395 else
1396 if [[ -z ${CDROM_NAME_1} ]] ; then
1397 einfo "Please insert+mount cd #${CDROM_CURRENT_CD} for ${PN} now !"
1398 else
1399 local var="CDROM_NAME_${CDROM_CURRENT_CD}"
1400 einfo "Please insert+mount the ${!var} cdrom now !"
1401 fi
1363 fi 1402 fi
1403 showedmsg=1
1404 fi
1364 einfo "Press return to scan for the cd again" 1405 einfo "Press return to scan for the cd again"
1365 einfo "or hit CTRL+C to abort the emerge." 1406 einfo "or hit CTRL+C to abort the emerge."
1407 echo
1408 einfo "If you are having trouble with the detection"
1409 einfo "of your CD, it is possible that you do not have"
1410 einfo "Joliet support enabled in your kernel. Please"
1411 einfo "check that CONFIG_JOLIET is enabled in your kernel."
1366 read 1412 read
1367 fi
1368 done 1413 done
1369} 1414}
1370 1415
1371# Make sure that LINGUAS only contains languages that 1416# Make sure that LINGUAS only contains languages that
1372# a package can support 1417# a package can support
1493 LIB=$1 1538 LIB=$1
1494 1539
1495 if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then 1540 if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then
1496 SONAME=`basename ${LIB}` 1541 SONAME=`basename ${LIB}`
1497 1542
1498 einfo "An old version of an installed library was detected on your system." 1543 ewarn "An old version of an installed library was detected on your system."
1499 einfo "In order to avoid breaking packages that link against is, this older version" 1544 ewarn "In order to avoid breaking packages that link against it, this older version"
1500 einfo "is not being removed. In order to make full use of this newer version," 1545 ewarn "is not being removed. In order to make full use of this newer version,"
1501 einfo "you will need to execute the following command:" 1546 ewarn "you will need to execute the following command:"
1502 einfo " revdep-rebuild --soname ${SONAME}" 1547 ewarn " revdep-rebuild --soname ${SONAME}"
1503 einfo 1548 ewarn
1504 einfo "After doing that, you can safely remove ${LIB}" 1549 ewarn "After doing that, you can safely remove ${LIB}"
1505 einfo "Note: 'emerge gentoolkit' to get revdep-rebuild" 1550 ewarn "Note: 'emerge gentoolkit' to get revdep-rebuild"
1506 fi 1551 fi
1507} 1552}
1508 1553
1509# Hack for people to figure out if a package was built with 1554# Hack for people to figure out if a package was built with
1510# certain USE flags 1555# certain USE flags
1520 [[ ${opt:0:1} = "-" ]] && shift || opt="-a" 1565 [[ ${opt:0:1} = "-" ]] && shift || opt="-a"
1521 1566
1522 local PKG=$(best_version $1) 1567 local PKG=$(best_version $1)
1523 shift 1568 shift
1524 1569
1525 local USEFILE="${ROOT}/var/db/pkg/${PKG}/USE" 1570 local USEFILE=${ROOT}/var/db/pkg/${PKG}/USE
1571
1572 # if the USE file doesnt exist, assume the $PKG is either
1573 # injected or package.provided
1526 [[ ! -e ${USEFILE} ]] && return 1 1574 [[ ! -e ${USEFILE} ]] && return 0
1527 1575
1528 local USE_BUILT=$(<${USEFILE}) 1576 local USE_BUILT=$(<${USEFILE})
1529 while [[ $# -gt 0 ]] ; do 1577 while [[ $# -gt 0 ]] ; do
1530 if [[ ${opt} = "-o" ]] ; then 1578 if [[ ${opt} = "-o" ]] ; then
1531 has $1 ${USE_BUILT} && return 0 1579 has $1 ${USE_BUILT} && return 0
1583# $4 == extra LD_LIBRARY_PATH's (make it : delimited) 1631# $4 == extra LD_LIBRARY_PATH's (make it : delimited)
1584# $5 == path for wrapper 1632# $5 == path for wrapper
1585make_wrapper() { 1633make_wrapper() {
1586 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5 1634 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5
1587 local tmpwrapper=$(emktemp) 1635 local tmpwrapper=$(emktemp)
1636 # We don't want to quote ${bin} so that people can pass complex
1637 # things as $bin ... "./someprog --args"
1588 cat << EOF > "${tmpwrapper}" 1638 cat << EOF > "${tmpwrapper}"
1589#!/bin/sh 1639#!/bin/sh
1590cd "${chdir}" 1640cd "${chdir:-.}"
1641if [ -n "${libdir}" ] ; then
1642 if [ "\${LD_LIBRARY_PATH+set}" = "set" ] ; then
1591export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}" 1643 export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}"
1644 else
1645 export LD_LIBRARY_PATH="${libdir}"
1646 fi
1647fi
1592exec ${bin} "\$@" 1648exec ${bin} "\$@"
1593EOF 1649EOF
1594 chmod go+rx "${tmpwrapper}" 1650 chmod go+rx "${tmpwrapper}"
1595 if [ -n "${5}" ] 1651 if [[ -n ${path} ]] ; then
1596 then
1597 exeinto ${5} 1652 exeinto "${path}"
1598 newexe "${tmpwrapper}" "${wrapper}" 1653 newexe "${tmpwrapper}" "${wrapper}"
1599 else 1654 else
1600 newbin "${tmpwrapper}" "${wrapper}" 1655 newbin "${tmpwrapper}" "${wrapper}"
1601 fi 1656 fi
1602} 1657}

Legend:
Removed from v.1.182  
changed lines
  Added in v.1.220

  ViewVC Help
Powered by ViewVC 1.1.20