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

Diff of /eclass/eutils.eclass

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

Revision 1.78 Revision 1.96
1# Copyright 1999-2004 Gentoo Technologies, Inc. 1# Copyright 1999-2004 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.78 2004/02/09 17:08:44 brad_mssw Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.96 2004/08/24 11:51:28 lv 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.
10# NB: If you add anything, please comment it! 10# NB: If you add anything, please comment it!
11 11
12ECLASS=eutils 12ECLASS=eutils
13INHERITED="$INHERITED $ECLASS" 13INHERITED="$INHERITED $ECLASS"
14 14
15newdepend "!bootstrap? ( sys-devel/patch )" 15DEPEND="!bootstrap? ( sys-devel/patch )"
16 16
17DESCRIPTION="Based on the ${ECLASS} eclass" 17DESCRIPTION="Based on the ${ECLASS} eclass"
18
19# This function simply returns the desired lib directory. With portage
20# 2.0.51, we now have support for installing libraries to lib32/lib64
21# to accomidate the needs of multilib systems. It's no longer a good idea
22# to assume all libraries will end up in lib. Replace any (sane) instances
23# where lib is named directly with $(get_libdir) if possible.
24#
25# Travis Tilley <lv@gentoo.org> (24 Aug 2004)
26get_libdir() {
27 # CONF_LIBDIR wasnt supported until 2.0.51_pre18, so for all versions of
28 # portage prior to that lib would need to be used even if CONF_LIBDIR is
29 # set. dolib and friends will ignore CONF_LIBDIR in <2.0.51_pre20
30 portageq has_version / '<sys-apps/portage-2.0.51_pre20' && CONF_LIBDIR="lib"
31 # and of course, we need to default to lib when CONF_LIBDIR isnt set
32 echo ${CONF_LIBDIR:=lib}
33}
18 34
19# This function generate linker scripts in /usr/lib for dynamic 35# This function generate linker scripts in /usr/lib for dynamic
20# libs in /lib. This is to fix linking problems when you have 36# libs in /lib. This is to fix linking problems when you have
21# the .so in /lib, and the .a in /usr/lib. What happens is that 37# the .so in /lib, and the .a in /usr/lib. What happens is that
22# in some cases when linking dynamic, the .a in /usr/lib is used 38# in some cases when linking dynamic, the .a in /usr/lib is used
33# to point to the latest version of the library present. 49# to point to the latest version of the library present.
34# 50#
35# <azarah@gentoo.org> (26 Oct 2002) 51# <azarah@gentoo.org> (26 Oct 2002)
36# 52#
37gen_usr_ldscript() { 53gen_usr_ldscript() {
38
39 # Just make sure it exists 54 # Just make sure it exists
40 dodir /usr/lib 55 dodir /usr/$(get_libdir)
41 56
42 cat > ${D}/usr/lib/$1 <<"END_LDSCRIPT" 57 cat > ${D}/usr/$(get_libdir)/$1 <<"END_LDSCRIPT"
43/* GNU ld script 58/* GNU ld script
44 Because Gentoo have critical dynamic libraries 59 Because Gentoo have critical dynamic libraries
45 in /lib, and the static versions in /usr/lib, we 60 in /lib, and the static versions in /usr/lib, we
46 need to have a "fake" dynamic lib in /usr/lib, 61 need to have a "fake" dynamic lib in /usr/lib,
47 otherwise we run into linking problems. 62 otherwise we run into linking problems.
48 See bug #4411 on http://bugs.gentoo.org/ for 63 See bug #4411 on http://bugs.gentoo.org/ for
49 more info. */ 64 more info. */
50GROUP ( /lib/libxxx )
51END_LDSCRIPT 65END_LDSCRIPT
52 66
67 echo "GROUP ( /$(get_libdir)/libxxx )" >> ${D}/usr/$(get_libdir)/$1
53 dosed "s:libxxx:$1:" /usr/lib/$1 68 dosed "s:libxxx:$1:" /usr/$(get_libdir)/$1
54 69
55 return 0 70 return 0
56} 71}
57 72
58# Simple function to draw a line consisting of '=' the same length as $* 73# Simple function to draw a line consisting of '=' the same length as $*
144 local SINGLE_PATCH="no" 159 local SINGLE_PATCH="no"
145 local x="" 160 local x=""
146 161
147 if [ "$#" -gt 1 ] 162 if [ "$#" -gt 1 ]
148 then 163 then
149 eerror "Invalid arguments to epatch()" 164 local m=""
150 die "Invalid arguments to epatch()" 165 einfo "${#} patches to apply..."
166 for m in "$@" ; do
167 epatch "${m}"
168 done
169 return 0
151 fi 170 fi
152 171
153 if [ -n "$1" -a -f "$1" ] 172 if [ -n "$1" -a -f "$1" ]
154 then 173 then
155 SINGLE_PATCH="yes" 174 SINGLE_PATCH="yes"
258 else 277 else
259 PATCH_TARGET="${x}" 278 PATCH_TARGET="${x}"
260 fi 279 fi
261 280
262 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 281 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
263 echo "patch ${popts} -p${count} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 282 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
264 283
265 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 284 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
266 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 285 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
267 286
268 if [ "${PATCH_SUFFIX}" != "patch" ] 287 if [ "${PATCH_SUFFIX}" != "patch" ]
275 count=5 294 count=5
276 break 295 break
277 fi 296 fi
278 fi 297 fi
279 298
280 if (cat ${PATCH_TARGET} | patch ${popts} --dry-run -f -p${count}) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1 299 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1
281 then 300 then
282 draw_line "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 301 draw_line "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
283 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 302 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
284 echo "ACTUALLY APPLYING ${x##*/}..." >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 303 echo "ACTUALLY APPLYING ${x##*/}..." >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
285 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 304 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
286 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 305 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
287 306
288 cat ${PATCH_TARGET} | patch ${popts} -p${count} >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 2>&1 307 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 2>&1
289 308
290 if [ "$?" -ne 0 ] 309 if [ "$?" -ne 0 ]
291 then 310 then
292 cat ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 311 cat ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
293 echo 312 echo
431 then 450 then
432 jobs="$((`grep -c ^processor /proc/cpuinfo` * 2))" 451 jobs="$((`grep -c ^processor /proc/cpuinfo` * 2))"
433 else 452 else
434 jobs=2 453 jobs=2
435 fi 454 fi
455 elif [ "${ARCH}" = "s390" ]
456 then
457 # s390 has "# processors : "
458 jobs="$((`grep "^\# processors" /proc/cpuinfo | sed -e "s/^.*: //"` * 2))"
436 else 459 else
437 jobs="$((`grep -c ^cpu /proc/cpuinfo` * 2))" 460 jobs="$((`grep -c ^cpu /proc/cpuinfo` * 2))"
438 die "Unknown ARCH -- ${ARCH}!" 461 die "Unknown ARCH -- ${ARCH}!"
439 fi 462 fi
440 463
456 fi 479 fi
457 fi 480 fi
458} 481}
459 482
460# Cheap replacement for when debianutils (and thus mktemp) 483# Cheap replacement for when debianutils (and thus mktemp)
461# do not exist on the users system 484# does not exist on the users system
462# vapier@gentoo.org 485# vapier@gentoo.org
463# 486#
464# Takes just 1 parameter (the directory to create tmpfile in) 487# Takes just 1 parameter (the directory to create tmpfile in)
465mymktemp() { 488mymktemp() {
466 local topdir="$1" 489 local topdir="$1"
471 mktemp -p ${topdir} 494 mktemp -p ${topdir}
472 else 495 else
473 local tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}" 496 local tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}"
474 touch ${tmp} 497 touch ${tmp}
475 echo ${tmp} 498 echo ${tmp}
499 fi
500}
501
502# Small wrapper for getent (Linux) and nidump (Mac OS X)
503# used in enewuser()/enewgroup()
504# Joe Jezak <josejx@gmail.com> and usata@gentoo.org
505#
506# egetent(database, key)
507egetent() {
508 if [ "${ARCH}" == "macos" ] ; then
509 case "$2" in
510 *[!0-9]*) # Non numeric
511 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
512 ;;
513 *) # Numeric
514 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
515 ;;
516 esac
517 else
518 getent $1 $2
476 fi 519 fi
477} 520}
478 521
479# Simplify/standardize adding users to the system 522# Simplify/standardize adding users to the system
480# vapier@gentoo.org 523# vapier@gentoo.org
496 then 539 then
497 eerror "No username specified !" 540 eerror "No username specified !"
498 die "Cannot call enewuser without a username" 541 die "Cannot call enewuser without a username"
499 fi 542 fi
500 543
501 # setup a file for testing usernames/groups
502 local tmpfile="`mymktemp ${T}`"
503 chown ${euser} ${tmpfile} >& /dev/null
504 local realuser="`ls -l ${tmpfile} | awk '{print $3}'`"
505
506 # see if user already exists 544 # lets see if the username already exists
507 if [ "${euser}" == "${realuser}" ] 545 if [ "${euser}" == "`egetent passwd \"${euser}\" | cut -d: -f1`" ]
508 then 546 then
509 return 0 547 return 0
510 fi 548 fi
511 einfo "Adding user '${euser}' to your system ..." 549 einfo "Adding user '${euser}' to your system ..."
512 550
517 local euid="$1"; shift 555 local euid="$1"; shift
518 if [ ! -z "${euid}" ] && [ "${euid}" != "-1" ] 556 if [ ! -z "${euid}" ] && [ "${euid}" != "-1" ]
519 then 557 then
520 if [ "${euid}" -gt 0 ] 558 if [ "${euid}" -gt 0 ]
521 then 559 then
522 opts="${opts} -u ${euid}" 560 if [ ! -z "`egetent passwd ${euid}`" ]
561 then
562 euid="next"
563 fi
523 else 564 else
524 eerror "Userid given but is not greater than 0 !" 565 eerror "Userid given but is not greater than 0 !"
525 die "${euid} is not a valid UID" 566 die "${euid} is not a valid UID"
526 fi 567 fi
527 else 568 else
528 euid="next available" 569 euid="next"
570 fi
571 if [ "${euid}" == "next" ]
572 then
573 local pwrange
574 if [ "${ARCH}" == "macos" ] ; then
575 pwrange="`jot 898 101`"
576 else
577 pwrange="`seq 101 999`"
529 fi 578 fi
579 for euid in ${pwrange} ; do
580 [ -z "`egetent passwd ${euid}`" ] && break
581 done
582 fi
583 opts="${opts} -u ${euid}"
530 einfo " - Userid: ${euid}" 584 einfo " - Userid: ${euid}"
531 585
532 # handle shell 586 # handle shell
533 local eshell="$1"; shift 587 local eshell="$1"; shift
534 if [ ! -z "${eshell}" ] && [ "${eshell}" != "-1" ] 588 if [ ! -z "${eshell}" ] && [ "${eshell}" != "-1" ]
555 609
556 # handle groups 610 # handle groups
557 local egroups="$1"; shift 611 local egroups="$1"; shift
558 if [ ! -z "${egroups}" ] 612 if [ ! -z "${egroups}" ]
559 then 613 then
560 local realgroup=
561 local oldifs="${IFS}" 614 local oldifs="${IFS}"
562 export IFS="," 615 export IFS=","
563 for g in ${egroups} 616 for g in ${egroups}
564 do 617 do
565 chgrp ${g} ${tmpfile} >& /dev/null 618 if [ -z "`egetent group \"${g}\"`" ]
566 realgroup="`ls -l ${tmpfile} | awk '{print $4}'`"
567 if [ "${g}" != "${realgroup}" ]
568 then 619 then
569 eerror "You must add ${g} to the system first" 620 eerror "You must add group ${g} to the system first"
570 die "${g} is not a valid GID" 621 die "${g} is not a valid GID"
571 fi 622 fi
572 done 623 done
573 export IFS="${oldifs}" 624 export IFS="${oldifs}"
574 opts="${opts} -g ${egroups}" 625 opts="${opts} -g ${egroups}"
579 630
580 # handle extra and add the user 631 # handle extra and add the user
581 local eextra="$@" 632 local eextra="$@"
582 local oldsandbox="${SANDBOX_ON}" 633 local oldsandbox="${SANDBOX_ON}"
583 export SANDBOX_ON="0" 634 export SANDBOX_ON="0"
635 if [ "${ARCH}" == "macos" ];
636 then
637 ### Make the user
584 if [ -z "${eextra}" ] 638 if [ -z "${eextra}" ]
585 then 639 then
640 dscl . create /users/${euser} uid ${euid}
641 dscl . create /users/${euser} shell ${eshell}
642 dscl . create /users/${euser} home ${ehome}
643 dscl . create /users/${euser} realname "added by portage for ${PN}"
644 ### Add the user to the groups specified
645 for g in ${egroups}
646 do
647 dscl . merge /groups/${g} users ${euser}
648 done
649 else
650 einfo "Extra options are not supported on macos yet"
651 einfo "Please report the ebuild along with the info below"
652 einfo "eextra: ${eextra}"
653 die "Required function missing"
654 fi
655 else
656 if [ -z "${eextra}" ]
657 then
586 useradd ${opts} ${euser} \ 658 useradd ${opts} ${euser} \
587 -c "added by portage for ${PN}" \ 659 -c "added by portage for ${PN}" \
588 || die "enewuser failed" 660 || die "enewuser failed"
589 else 661 else
590 einfo " - Extra: ${eextra}" 662 einfo " - Extra: ${eextra}"
591 useradd ${opts} ${euser} ${eextra} \ 663 useradd ${opts} ${euser} ${eextra} \
592 || die "enewuser failed" 664 || die "enewuser failed"
665 fi
593 fi 666 fi
594 export SANDBOX_ON="${oldsandbox}" 667 export SANDBOX_ON="${oldsandbox}"
595 668
596 if [ ! -e "${ehome}" ] && [ ! -e "${D}/${ehome}" ] 669 if [ ! -e "${ehome}" ] && [ ! -e "${D}/${ehome}" ]
597 then 670 then
618 then 691 then
619 eerror "No group specified !" 692 eerror "No group specified !"
620 die "Cannot call enewgroup without a group" 693 die "Cannot call enewgroup without a group"
621 fi 694 fi
622 695
623 # setup a file for testing groupname
624 local tmpfile="`mymktemp ${T}`"
625 chgrp ${egroup} ${tmpfile} >& /dev/null
626 local realgroup="`ls -l ${tmpfile} | awk '{print $4}'`"
627
628 # see if group already exists 696 # see if group already exists
629 if [ "${egroup}" == "${realgroup}" ] 697 if [ "${egroup}" == "`egetent group \"${egroup}\" | cut -d: -f1`" ]
630 then 698 then
631 return 0 699 return 0
632 fi 700 fi
633 einfo "Adding group '${egroup}' to your system ..." 701 einfo "Adding group '${egroup}' to your system ..."
634 702
639 local egid="$1"; shift 707 local egid="$1"; shift
640 if [ ! -z "${egid}" ] 708 if [ ! -z "${egid}" ]
641 then 709 then
642 if [ "${egid}" -gt 0 ] 710 if [ "${egid}" -gt 0 ]
643 then 711 then
712 if [ -z "`egetent group ${egid}`" ]
713 then
714 if [ "${ARCH}" == "macos" ] ; then
715 opts="${opts} ${egid}"
716 else
644 opts="${opts} -g ${egid}" 717 opts="${opts} -g ${egid}"
718 fi
719 else
720 egid="next available; requested gid taken"
721 fi
645 else 722 else
646 eerror "Groupid given but is not greater than 0 !" 723 eerror "Groupid given but is not greater than 0 !"
647 die "${egid} is not a valid GID" 724 die "${egid} is not a valid GID"
648 fi 725 fi
649 else 726 else
656 opts="${opts} ${eextra}" 733 opts="${opts} ${eextra}"
657 734
658 # add the group 735 # add the group
659 local oldsandbox="${SANDBOX_ON}" 736 local oldsandbox="${SANDBOX_ON}"
660 export SANDBOX_ON="0" 737 export SANDBOX_ON="0"
738 if [ "${ARCH}" == "macos" ];
739 then
740 if [ ! -z "${eextra}" ];
741 then
742 einfo "Extra options are not supported on macos yet"
743 einfo "Please report the ebuild along with the info below"
744 einfo "eextra: ${eextra}"
745 die "Required function missing"
746 fi
747
748 # If we need the next available
749 case ${egid} in
750 *[!0-9]*) # Non numeric
751 for egid in `jot 898 101`; do
752 [ -z "`egetent group ${egid}`" ] && break
753 done
754 esac
755 dscl . create /groups/${egroup} gid ${egid}
756 dscl . create /groups/${egroup} passwd '*'
757 else
661 groupadd ${opts} ${egroup} || die "enewgroup failed" 758 groupadd ${opts} ${egroup} || die "enewgroup failed"
759 fi
662 export SANDBOX_ON="${oldsandbox}" 760 export SANDBOX_ON="${oldsandbox}"
663} 761}
664 762
665# Simple script to replace 'dos2unix' binaries 763# Simple script to replace 'dos2unix' binaries
666# vapier@gentoo.org 764# vapier@gentoo.org
687# name: the name that will show up in the menu 785# name: the name that will show up in the menu
688# icon: give your little like a pretty little icon ... 786# icon: give your little like a pretty little icon ...
689# this can be relative (to /usr/share/pixmaps) or 787# this can be relative (to /usr/share/pixmaps) or
690# a full path to an icon 788# a full path to an icon
691# type: what kind of application is this ? for categories: 789# type: what kind of application is this ? for categories:
692# http://www.freedesktop.org/standards/menu/draft/menu-spec/menu-spec.html 790# http://www.freedesktop.org/standards/menu-spec/
693# path: if your app needs to startup in a specific dir 791# path: if your app needs to startup in a specific dir
694make_desktop_entry() { 792make_desktop_entry() {
695 [ -z "$1" ] && eerror "You must specify the executable" && return 1 793 [ -z "$1" ] && eerror "You must specify the executable" && return 1
696 794
697 local exec="${1}" 795 local exec="${1}"
698 local name="${2:-${PN}}" 796 local name="${2:-${PN}}"
699 local icon="${3:-${PN}.png}" 797 local icon="${3:-${PN}.png}"
700 local type="${4}" 798 local type="${4}"
799 local subdir="${6}"
701 local path="${5:-${GAMES_PREFIX}}" 800 local path="${5:-${GAMES_PREFIX}}"
702 if [ -z "${type}" ] 801 if [ -z "${type}" ]
703 then 802 then
704 case ${CATEGORY} in 803 case ${CATEGORY} in
705 "app-emulation") 804 "app-emulation")
706 type=Emulator 805 type=Emulator
806 subdir="Emulation"
707 ;; 807 ;;
708 "games-"*) 808 "games-"*)
709 type=Game 809 type=Game
810 subdir="Games"
710 ;; 811 ;;
711 "net-"*) 812 "net-"*)
712 type=Network; 813 type=Network
814 subdir="${type}"
713 ;; 815 ;;
714 *) 816 *)
715 type= 817 type=
818 subdir=
716 ;; 819 ;;
717 esac 820 esac
718 fi 821 fi
719 local desktop="${T}/${exec}.desktop" 822 local desktop="${T}/${exec}.desktop"
720 823
750 # done 853 # done
751 #fi 854 #fi
752 855
753 if [ -d "/usr/share/applnk" ] 856 if [ -d "/usr/share/applnk" ]
754 then 857 then
755 insinto /usr/share/applnk/${type} 858 insinto /usr/share/applnk/${subdir}
756 doins ${desktop} 859 doins ${desktop}
757 fi 860 fi
758 861
759 return 0 862 return 0
760} 863}
932 tail -n +${skip} ${src} | bzip2 -dc | tar --no-same-owner -xf - 1035 tail -n +${skip} ${src} | bzip2 -dc | tar --no-same-owner -xf -
933 ;; 1036 ;;
934 gzip*) 1037 gzip*)
935 tail -n +${skip} ${src} | tar --no-same-owner -xzf - 1038 tail -n +${skip} ${src} | tar --no-same-owner -xzf -
936 ;; 1039 ;;
1040 compress*)
1041 tail -n +${skip} ${src} | gunzip | tar --no-same-owner -xf -
1042 ;;
937 *) 1043 *)
1044 eerror "Unknown filetype \"${filetype}\" ?"
938 false 1045 false
939 ;; 1046 ;;
940 esac 1047 esac
941 assert "failure unpacking (${filetype}) makeself ${shrtsrc} ('${ver}' +${skip})" 1048 assert "failure unpacking (${filetype}) makeself ${shrtsrc} ('${ver}' +${skip})"
942} 1049}
1100# remember, you can only go forward in the cd chain, you can't go back. 1207# remember, you can only go forward in the cd chain, you can't go back.
1101cdrom_load_next_cd() { 1208cdrom_load_next_cd() {
1102 export CDROM_CURRENT_CD=$((CDROM_CURRENT_CD + 1)) 1209 export CDROM_CURRENT_CD=$((CDROM_CURRENT_CD + 1))
1103 local var= 1210 local var=
1104 1211
1212 if [ ! -z "${CD_ROOT}" ] ; then
1213 einfo "Using same root as before for CD #${CDROM_CURRENT_CD}"
1214 return
1215 fi
1216
1105 unset CDROM_ROOT 1217 unset CDROM_ROOT
1106 var=CDROM_ROOTS_${CDROM_CURRENT_CD} 1218 var=CDROM_ROOTS_${CDROM_CURRENT_CD}
1107 if [ -z "${!var}" ] ; then 1219 if [ -z "${!var}" ] ; then
1108 var="CDROM_CHECK_${CDROM_CURRENT_CD}" 1220 var="CDROM_CHECK_${CDROM_CURRENT_CD}"
1109 cdrom_locate_file_on_cd ${!var} 1221 cdrom_locate_file_on_cd ${!var}
1157 einfo "or hit CTRL+C to abort the emerge." 1269 einfo "or hit CTRL+C to abort the emerge."
1158 read 1270 read
1159 fi 1271 fi
1160 done 1272 done
1161} 1273}
1274
1275# Make sure that LINGUAS only contains languages that
1276# a package can support
1277#
1278# usage: strip-linguas <allow LINGUAS>
1279# strip-linguas -i <directories of .po files>
1280# strip-linguas -u <directories of .po files>
1281#
1282# The first form allows you to specify a list of LINGUAS.
1283# The -i builds a list of po files found in all the
1284# directories and uses the intersection of the lists.
1285# The -u builds a list of po files found in all the
1286# directories and uses the union of the lists.
1287strip-linguas() {
1288 local ls newls
1289 if [ "$1" == "-i" ] || [ "$1" == "-u" ] ; then
1290 local op="$1"; shift
1291 ls=" $(find "$1" -name '*.po' -printf '%f ') "; shift
1292 local d f
1293 for d in "$@" ; do
1294 if [ "${op}" == "-u" ] ; then
1295 newls="${ls}"
1296 else
1297 newls=""
1298 fi
1299 for f in $(find "$d" -name '*.po' -printf '%f ') ; do
1300 if [ "${op}" == "-i" ] ; then
1301 [ "${ls/ ${f} /}" != "${ls}" ] && newls="${newls} ${f}"
1302 else
1303 [ "${ls/ ${f} /}" == "${ls}" ] && newls="${newls} ${f}"
1304 fi
1305 done
1306 ls="${newls}"
1307 done
1308 ls="${ls//.po}"
1309 else
1310 ls="$@"
1311 fi
1312
1313 ls=" ${ls} "
1314 newls=""
1315 for f in ${LINGUAS} ; do
1316 if [ "${ls/ ${f} /}" != "${ls}" ] ; then
1317 nl="${newls} ${f}"
1318 else
1319 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA"
1320 fi
1321 done
1322 if [ -z "${newls}" ] ; then
1323 unset LINGUAS
1324 else
1325 export LINGUAS="${newls}"
1326 fi
1327}

Legend:
Removed from v.1.78  
changed lines
  Added in v.1.96

  ViewVC Help
Powered by ViewVC 1.1.20