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

Diff of /eclass/eutils.eclass

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

Revision 1.1.1.1 Revision 1.200
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.1.1.1 2005/11/30 09:59:15 chriswhite Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.200 2005/09/23 20:44:26 wolf31o2 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.
166# hand its a directory, it will set EPATCH_SOURCE to this. 166# hand its a directory, it will set EPATCH_SOURCE to this.
167# 167#
168# <azarah@gentoo.org> (10 Nov 2002) 168# <azarah@gentoo.org> (10 Nov 2002)
169# 169#
170epatch() { 170epatch() {
171 _epatch_assert() { local _pipestatus=${PIPESTATUS[*]}; [[ ${_pipestatus// /} -eq 0 ]] ; }
172 local PIPE_CMD="" 171 local PIPE_CMD=""
173 local STDERR_TARGET="${T}/$$.out" 172 local STDERR_TARGET="${T}/$$.out"
174 local PATCH_TARGET="${T}/$$.patch" 173 local PATCH_TARGET="${T}/$$.patch"
175 local PATCH_SUFFIX="" 174 local PATCH_SUFFIX=""
176 local SINGLE_PATCH="no" 175 local SINGLE_PATCH="no"
314 count=5 313 count=5
315 break 314 break
316 fi 315 fi
317 fi 316 fi
318 317
319 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f ; _epatch_assert) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1 318 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1
320 then 319 then
321 draw_line "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 320 draw_line "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
322 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 321 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
323 echo "ACTUALLY APPLYING ${patchname} ..." >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 322 echo "ACTUALLY APPLYING ${patchname} ..." >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
324 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 323 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
325 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 324 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
326 325
327 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 2>&1 326 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 2>&1
328 _epatch_assert
329 327
330 if [ "$?" -ne 0 ] 328 if [ "$?" -ne 0 ]
331 then 329 then
332 cat ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 330 cat ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
333 echo 331 echo
410# Joe Jezak <josejx@gmail.com> and usata@gentoo.org 408# Joe Jezak <josejx@gmail.com> and usata@gentoo.org
411# FBSD stuff: Aaron Walker <ka0ttic@gentoo.org> 409# FBSD stuff: Aaron Walker <ka0ttic@gentoo.org>
412# 410#
413# egetent(database, key) 411# egetent(database, key)
414egetent() { 412egetent() {
415 case ${CHOST} in 413 if [[ "${USERLAND}" == "Darwin" ]] ; then
416 *-darwin*)
417 case "$2" in 414 case "$2" in
418 *[!0-9]*) # Non numeric 415 *[!0-9]*) # Non numeric
419 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }" 416 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
420 ;; 417 ;;
421 *) # Numeric 418 *) # Numeric
422 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }" 419 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
423 ;; 420 ;;
424 esac 421 esac
425 ;; 422 elif [[ "${USERLAND}" == "BSD" ]] ; then
426 *-freebsd*) 423 local action
427 local opts action="user" 424 if [ "$1" == "passwd" ]
428 [[ $1 == "passwd" ]] || action="group" 425 then
429 426 action="user"
430 # lookup by uid/gid 427 else
431 if [[ $2 == [[:digit:]]* ]] ; then 428 action="group"
432 [[ ${action} == "user" ]] && opts="-u" || opts="-g"
433 fi 429 fi
434
435 pw show ${action} ${opts} "$2" -q 430 pw show "${action}" "$2" -q
436 ;; 431 else
437 *-netbsd*|*-openbsd*)
438 grep "$2:\*:" /etc/$1
439 ;;
440 *)
441 type -p nscd >& /dev/null && nscd -i "$1" 432 which nscd >& /dev/null && nscd -i "$1"
442 getent "$1" "$2" 433 getent "$1" "$2"
443 ;; 434 fi
444 esac
445} 435}
446 436
447# Simplify/standardize adding users to the system 437# Simplify/standardize adding users to the system
448# vapier@gentoo.org 438# vapier@gentoo.org
449# 439#
502 if [[ ! -e ${eshell} ]] ; then 492 if [[ ! -e ${eshell} ]] ; then
503 eerror "A shell was specified but it does not exist !" 493 eerror "A shell was specified but it does not exist !"
504 die "${eshell} does not exist" 494 die "${eshell} does not exist"
505 fi 495 fi
506 else 496 else
507 for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null ; do 497 for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null; do
508 [[ -x ${ROOT}${shell} ]] && break 498 [[ -x ${ROOT}${shell} ]] && break;
509 done 499 done
510 500
511 if [[ ${shell} == "/dev/null" ]] ; then 501 if [[ ${shell} == "/dev/null" ]]; then
512 eerror "Unable to identify the shell to use" 502 eerror "Unable to identify the shell to use"
513 die "Unable to identify the shell to use" 503 die "Unable to identify the shell to use"
514 fi 504 fi
515 505
516 eshell=${shell} 506 eshell=${shell}
558 einfo " - Groups: ${egroups}" 548 einfo " - Groups: ${egroups}"
559 549
560 # handle extra and add the user 550 # handle extra and add the user
561 local oldsandbox=${SANDBOX_ON} 551 local oldsandbox=${SANDBOX_ON}
562 export SANDBOX_ON="0" 552 export SANDBOX_ON="0"
563 case ${CHOST} in 553 case ${USERLAND} in
564 *-darwin*) 554 Darwin)
565 ### Make the user 555 ### Make the user
566 if [[ -z $@ ]] ; then 556 if [[ -z $@ ]] ; then
567 dscl . create /users/${euser} uid ${euid} 557 dscl . create /users/${euser} uid ${euid}
568 dscl . create /users/${euser} shell ${eshell} 558 dscl . create /users/${euser} shell ${eshell}
569 dscl . create /users/${euser} home ${ehome} 559 dscl . create /users/${euser} home ${ehome}
580 einfo "Please report the ebuild along with the info below" 570 einfo "Please report the ebuild along with the info below"
581 einfo "eextra: $@" 571 einfo "eextra: $@"
582 die "Required function missing" 572 die "Required function missing"
583 fi 573 fi
584 ;; 574 ;;
585 *-freebsd*) 575 BSD)
586 if [[ -z $@ ]] ; then 576 if [[ -z $@ ]] ; then
587 pw useradd ${euser} ${opts} \ 577 pw useradd ${euser} ${opts} \
588 -c "added by portage for ${PN}" \ 578 -c "added by portage for ${PN}" \
589 die "enewuser failed" 579 die "enewuser failed"
590 else 580 else
591 einfo " - Extra: $@" 581 einfo " - Extra: $@"
592 pw useradd ${euser} ${opts} \ 582 pw useradd ${euser} ${opts} \
593 "$@" || die "enewuser failed" 583 "$@" || die "enewuser failed"
594 fi 584 fi
595 ;; 585 ;;
596
597 *-netbsd*)
598 if [[ -z $@ ]] ; then
599 useradd ${opts} ${euser} || die "enewuser failed"
600 else
601 einfo " - Extra: $@"
602 useradd ${opts} ${euser} "$@" || die "enewuser failed"
603 fi
604 ;;
605
606 *-openbsd*)
607 if [[ -z $@ ]] ; then
608 useradd -u ${euid} -s ${eshell} \
609 -d ${ehome} -c "Added by portage for ${PN}" \
610 -g ${egroups} ${euser} || die "enewuser failed"
611 else
612 einfo " - Extra: $@"
613 useradd -u ${euid} -s ${eshell} \
614 -d ${ehome} -c "Added by portage for ${PN}" \
615 -g ${egroups} ${euser} "$@" || die "enewuser failed"
616 fi
617 ;;
618
619 *) 586 *)
620 if [[ -z $@ ]] ; then 587 if [[ -z $@ ]] ; then
621 useradd ${opts} ${euser} \ 588 useradd ${opts} ${euser} \
622 -c "added by portage for ${PN}" \ 589 -c "added by portage for ${PN}" \
623 || die "enewuser failed" 590 || die "enewuser failed"
673 then 640 then
674 if [ "${egid}" -gt 0 ] 641 if [ "${egid}" -gt 0 ]
675 then 642 then
676 if [ -z "`egetent group ${egid}`" ] 643 if [ -z "`egetent group ${egid}`" ]
677 then 644 then
678 if [[ "${CHOST}" == *-darwin* ]]; then 645 if [[ "${USERLAND}" == "Darwin" ]]; then
679 opts="${opts} ${egid}" 646 opts="${opts} ${egid}"
680 else 647 else
681 opts="${opts} -g ${egid}" 648 opts="${opts} -g ${egid}"
682 fi 649 fi
683 else 650 else
697 opts="${opts} ${eextra}" 664 opts="${opts} ${eextra}"
698 665
699 # add the group 666 # add the group
700 local oldsandbox="${SANDBOX_ON}" 667 local oldsandbox="${SANDBOX_ON}"
701 export SANDBOX_ON="0" 668 export SANDBOX_ON="0"
702 case ${CHOST} in 669 if [[ "${USERLAND}" == "Darwin" ]]; then
703 *-darwin*)
704 if [ ! -z "${eextra}" ]; 670 if [ ! -z "${eextra}" ];
705 then 671 then
706 einfo "Extra options are not supported on Darwin/OS X yet" 672 einfo "Extra options are not supported on Darwin/OS X yet"
707 einfo "Please report the ebuild along with the info below" 673 einfo "Please report the ebuild along with the info below"
708 einfo "eextra: ${eextra}" 674 einfo "eextra: ${eextra}"
709 die "Required function missing" 675 die "Required function missing"
710 fi 676 fi
711 677
712 # If we need the next available 678 # If we need the next available
713 case ${egid} in 679 case ${egid} in
714 *[!0-9]*) # Non numeric 680 *[!0-9]*) # Non numeric
715 for egid in $(seq 101 999); do 681 for egid in $(seq 101 999); do
716 [ -z "`egetent group ${egid}`" ] && break 682 [ -z "`egetent group ${egid}`" ] && break
717 done 683 done
718 esac 684 esac
719 dscl . create /groups/${egroup} gid ${egid} 685 dscl . create /groups/${egroup} gid ${egid}
720 dscl . create /groups/${egroup} passwd '*' 686 dscl . create /groups/${egroup} passwd '*'
721 ;; 687 elif [[ "${USERLAND}" == "BSD" ]] ; then
722
723 *-freebsd*)
724 case ${egid} in 688 case ${egid} in
725 *[!0-9]*) # Non numeric 689 *[!0-9]*) # Non numeric
726 for egid in $(seq 101 999); do 690 for egid in $(seq 101 999); do
727 [ -z "`egetent group ${egid}`" ] && break 691 [ -z "`egetent group ${egid}`" ] && break
728 done 692 done
729 esac 693 esac
730 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed" 694 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed"
731 ;; 695 else
732
733 *-netbsd*)
734 case ${egid} in
735 *[!0-9]*) # Non numeric
736 for egid in $(seq 101 999); do
737 [ -z "`egetent group ${egid}`" ] && break
738 done
739 esac
740 groupadd -g ${egid} ${egroup} || die "enewgroup failed"
741 ;;
742
743 *)
744 groupadd ${opts} ${egroup} || die "enewgroup failed" 696 groupadd ${opts} ${egroup} || die "enewgroup failed"
745 ;; 697 fi
746 esac
747 export SANDBOX_ON="${oldsandbox}" 698 export SANDBOX_ON="${oldsandbox}"
748} 699}
749 700
750# Simple script to replace 'dos2unix' binaries 701# Simple script to replace 'dos2unix' binaries
751# vapier@gentoo.org 702# vapier@gentoo.org
862 type="Network;${type}" 813 type="Network;${type}"
863 ;; 814 ;;
864 815
865 sci) 816 sci)
866 case ${catmin} in 817 case ${catmin} in
867 astro*) type=Astronomy;; 818 astro*) type=Astronomoy;;
868 bio*) type=Biology;; 819 bio*) type=Biology;;
869 calc*) type=Calculator;; 820 calc*) type=Calculator;;
870 chem*) type=Chemistry;; 821 chem*) type=Chemistry;;
871 geo*) type=Geology;; 822 geo*) type=Geology;;
872 math*) type=Math;; 823 math*) type=Math;;
904Exec=${exec} 855Exec=${exec}
905Path=${path} 856Path=${path}
906Icon=${icon} 857Icon=${icon}
907Categories=Application;${type};" > "${desktop}" 858Categories=Application;${type};" > "${desktop}"
908 859
909 (
910 # wrap the env here so that the 'insinto' call
911 # doesn't corrupt the env of the caller
912 insinto /usr/share/applications 860 insinto /usr/share/applications
913 doins "${desktop}" 861 doins "${desktop}"
914 ) 862
863 return 0
915} 864}
916 865
917# Make a GDM/KDM Session file 866# Make a GDM/KDM Session file
918# 867#
919# make_desktop_entry(<title>, <command>) 868# make_desktop_entry(<title>, <command>)
1024 local sizeoff_t=$2 973 local sizeoff_t=$2
1025 974
1026 [[ -z ${src} ]] && die "Could not locate source for '$1'" 975 [[ -z ${src} ]] && die "Could not locate source for '$1'"
1027 [[ -z ${sizeoff_t} ]] && die "No idea what off_t size was used for this pdv :(" 976 [[ -z ${sizeoff_t} ]] && die "No idea what off_t size was used for this pdv :("
1028 977
1029 local shrtsrc=$(basename "${src}") 978 local shrtsrc="`basename ${src}`"
1030 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 979 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
1031 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"` 980 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"`
1032 local tailskip=`tail -c $((${sizeoff_t}*2)) ${src} | head -c ${sizeoff_t} | hexdump -e \"%i\"` 981 local tailskip=`tail -c $((${sizeoff_t}*2)) ${src} | head -c ${sizeoff_t} | hexdump -e \"%i\"`
1033 982
1034 # grab metadata for debug reasons 983 # grab metadata for debug reasons
1098# Usage: unpack_makeself [file to unpack] [offset] [tail|dd] 1047# Usage: unpack_makeself [file to unpack] [offset] [tail|dd]
1099# - If the file is not specified then unpack will utilize ${A}. 1048# - If the file is not specified then unpack will utilize ${A}.
1100# - If the offset is not specified then we will attempt to extract 1049# - If the offset is not specified then we will attempt to extract
1101# the proper offset from the script itself. 1050# the proper offset from the script itself.
1102unpack_makeself() { 1051unpack_makeself() {
1103 local src_input=${1:-${A}}
1104 local src=$(find_unpackable_file "${src_input}") 1052 local src=$(find_unpackable_file "$1")
1105 local skip=$2 1053 local skip=$2
1106 local exe=$3 1054 local exe=$3
1107 1055
1108 [[ -z ${src} ]] && die "Could not locate source for '${src_input}'" 1056 [[ -z ${src} ]] && die "Could not locate source for '$1'"
1109 1057
1110 local shrtsrc=$(basename "${src}") 1058 local shrtsrc=$(basename "${src}")
1111 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 1059 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
1112 if [[ -z ${skip} ]] ; then 1060 if [ -z "${skip}" ]
1061 then
1113 local ver=$(grep -a '#.*Makeself' "${src}" | awk '{print $NF}') 1062 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`"
1114 local skip=0 1063 local skip=0
1115 exe=tail 1064 exe=tail
1116 case ${ver} in 1065 case ${ver} in
1117 1.5.*) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same 1066 1.5.*) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same
1118 skip=$(grep -a ^skip= "${src}" | cut -d= -f2) 1067 skip=$(grep -a ^skip= "${src}" | cut -d= -f2)
1130 ;; 1079 ;;
1131 2.1.3) 1080 2.1.3)
1132 skip=`grep -a ^offset= "${src}" | awk '{print $3}'` 1081 skip=`grep -a ^offset= "${src}" | awk '{print $3}'`
1133 let skip="skip + 1" 1082 let skip="skip + 1"
1134 ;; 1083 ;;
1135 2.1.4|2.1.5) 1084 2.1.4)
1136 skip=$(grep -a offset=.*head.*wc "${src}" | awk '{print $3}' | head -n 1) 1085 skip=$(grep -a offset=.*head.*wc "${src}" | awk '{print $3}' | head -n 1)
1137 skip=$(head -n ${skip} "${src}" | wc -c) 1086 skip=$(head -n ${skip} "${src}" | wc -c)
1138 exe="dd" 1087 exe="dd"
1139 ;; 1088 ;;
1140 *) 1089 *)
1259 # first we figure out how many cds we're dealing with by 1208 # first we figure out how many cds we're dealing with by
1260 # the # of files they gave us 1209 # the # of files they gave us
1261 local cdcnt=0 1210 local cdcnt=0
1262 local f= 1211 local f=
1263 for f in "$@" ; do 1212 for f in "$@" ; do
1264 ((++cdcnt)) 1213 cdcnt=$((cdcnt + 1))
1265 export CDROM_CHECK_${cdcnt}="$f" 1214 export CDROM_CHECK_${cdcnt}="$f"
1266 done 1215 done
1267 export CDROM_TOTAL_CDS=${cdcnt} 1216 export CDROM_TOTAL_CDS=${cdcnt}
1268 export CDROM_CURRENT_CD=1 1217 export CDROM_CURRENT_CD=1
1269 1218
1270 # now we see if the user gave use CD_ROOT ... 1219 # now we see if the user gave use CD_ROOT ...
1271 # if they did, let's just believe them that it's correct 1220 # if they did, let's just believe them that it's correct
1221 if [[ ! -z ${CD_ROOT} ]] ; then
1222 export CDROM_ROOT=${CD_ROOT}
1223 einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}"
1224 return
1225 fi
1226 # do the same for CD_ROOT_X
1272 if [[ -n ${CD_ROOT}${CD_ROOT_1} ]] ; then 1227 if [[ ! -z ${CD_ROOT_1} ]] ; then
1273 local var= 1228 local var=
1274 cdcnt=0 1229 cdcnt=0
1275 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do 1230 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do
1276 ((++cdcnt)) 1231 cdcnt=$((cdcnt + 1))
1277 var="CD_ROOT_${cdcnt}" 1232 var="CD_ROOT_${cdcnt}"
1278 [[ -z ${!var} ]] && var="CD_ROOT"
1279 if [[ -z ${!var} ]] ; then 1233 if [[ -z ${!var} ]] ; then
1280 eerror "You must either use just the CD_ROOT" 1234 eerror "You must either use just the CD_ROOT"
1281 eerror "or specify ALL the CD_ROOT_X variables." 1235 eerror "or specify ALL the CD_ROOT_X variables."
1282 eerror "In this case, you will need ${CDROM_TOTAL_CDS} CD_ROOT_X variables." 1236 eerror "In this case, you will need ${CDROM_TOTAL_CDS} CD_ROOT_X variables."
1283 die "could not locate CD_ROOT_${cdcnt}" 1237 die "could not locate CD_ROOT_${cdcnt}"
1284 fi 1238 fi
1239 export CDROM_ROOTS_${cdcnt}="${!var}"
1285 done 1240 done
1286 export CDROM_ROOT=${CD_ROOT_1:-${CD_ROOT}} 1241 export CDROM_ROOT=${CDROM_ROOTS_1}
1287 einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}" 1242 einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}"
1288 export CDROM_SET=-1
1289 for f in ${CDROM_CHECK_1//:/ } ; do
1290 ((++CDROM_SET))
1291 [[ -e ${CD_ROOT}/${f} ]] && break
1292 done
1293 export CDROM_MATCH=${f}
1294 return 1243 return
1295 fi 1244 fi
1296 1245
1297 # User didn't help us out so lets make sure they know they can
1298 # simplify the whole process ...
1299 if [[ ${CDROM_TOTAL_CDS} -eq 1 ]] ; then 1246 if [[ ${CDROM_TOTAL_CDS} -eq 1 ]] ; then
1300 einfo "This ebuild will need the ${CDROM_NAME:-cdrom for ${PN}}" 1247 einfon "This ebuild will need the "
1248 if [[ -z ${CDROM_NAME} ]] ; then
1249 echo "cdrom for ${PN}."
1250 else
1251 echo "${CDROM_NAME}."
1252 fi
1301 echo 1253 echo
1302 einfo "If you do not have the CD, but have the data files" 1254 einfo "If you do not have the CD, but have the data files"
1303 einfo "mounted somewhere on your filesystem, just export" 1255 einfo "mounted somewhere on your filesystem, just export"
1304 einfo "the variable CD_ROOT so that it points to the" 1256 einfo "the variable CD_ROOT so that it points to the"
1305 einfo "directory containing the files." 1257 einfo "directory containing the files."
1309 echo 1261 echo
1310 else 1262 else
1311 einfo "This package will need access to ${CDROM_TOTAL_CDS} cds." 1263 einfo "This package will need access to ${CDROM_TOTAL_CDS} cds."
1312 cdcnt=0 1264 cdcnt=0
1313 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do 1265 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do
1314 ((++cdcnt)) 1266 cdcnt=$((cdcnt + 1))
1315 var="CDROM_NAME_${cdcnt}" 1267 var="CDROM_NAME_${cdcnt}"
1316 [[ ! -z ${!var} ]] && einfo " CD ${cdcnt}: ${!var}" 1268 [[ ! -z ${!var} ]] && einfo " CD ${cdcnt}: ${!var}"
1317 done 1269 done
1318 echo 1270 echo
1319 einfo "If you do not have the CDs, but have the data files" 1271 einfo "If you do not have the CDs, but have the data files"
1320 einfo "mounted somewhere on your filesystem, just export" 1272 einfo "mounted somewhere on your filesystem, just export"
1321 einfo "the following variables so they point to the right place:" 1273 einfo "the following variables so they point to the right place:"
1322 einfon "" 1274 einfon ""
1323 cdcnt=0 1275 cdcnt=0
1324 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do 1276 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do
1325 ((++cdcnt)) 1277 cdcnt=$((cdcnt + 1))
1326 echo -n " CD_ROOT_${cdcnt}" 1278 echo -n " CD_ROOT_${cdcnt}"
1327 done 1279 done
1328 echo 1280 echo
1329 einfo "Or, if you have all the files in the same place, or" 1281 einfo "Or, if you have all the files in the same place, or"
1330 einfo "you only have one cdrom, you can export CD_ROOT" 1282 einfo "you only have one cdrom, you can export CD_ROOT"
1333 echo 1285 echo
1334 einfo "For example:" 1286 einfo "For example:"
1335 einfo "export CD_ROOT_1=/mnt/cdrom" 1287 einfo "export CD_ROOT_1=/mnt/cdrom"
1336 echo 1288 echo
1337 fi 1289 fi
1338
1339 export CDROM_SET=""
1340 export CDROM_CURRENT_CD=0 1290 export CDROM_CURRENT_CD=0
1341 cdrom_load_next_cd 1291 cdrom_load_next_cd
1342} 1292}
1343 1293
1344# this is only used when you need access to more than one cd. 1294# this is only used when you need access to more than one cd.
1345# when you have finished using the first cd, just call this function. 1295# when you have finished using the first cd, just call this function.
1346# when it returns, CDROM_ROOT will be pointing to the second cd. 1296# when it returns, CDROM_ROOT will be pointing to the second cd.
1347# remember, you can only go forward in the cd chain, you can't go back. 1297# remember, you can only go forward in the cd chain, you can't go back.
1348cdrom_load_next_cd() { 1298cdrom_load_next_cd() {
1299 export CDROM_CURRENT_CD=$((CDROM_CURRENT_CD + 1))
1349 local var 1300 local var=
1350 ((++CDROM_CURRENT_CD)) 1301
1302 if [[ ! -z ${CD_ROOT} ]] ; then
1303 einfo "Using same root as before for CD #${CDROM_CURRENT_CD}"
1304 return
1305 fi
1351 1306
1352 unset CDROM_ROOT 1307 unset CDROM_ROOT
1353 var=CD_ROOT_${CDROM_CURRENT_CD} 1308 var=CDROM_ROOTS_${CDROM_CURRENT_CD}
1354 [[ -z ${!var} ]] && var="CD_ROOT"
1355 if [[ -z ${!var} ]] ; then 1309 if [[ -z ${!var} ]] ; then
1356 var="CDROM_CHECK_${CDROM_CURRENT_CD}" 1310 var="CDROM_CHECK_${CDROM_CURRENT_CD}"
1357 _cdrom_locate_file_on_cd ${!var} 1311 cdrom_locate_file_on_cd ${!var}
1358 else 1312 else
1359 export CDROM_ROOT=${!var} 1313 export CDROM_ROOT=${!var}
1360 fi 1314 fi
1361 1315
1362 einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}" 1316 einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}"
1367# all it does is try to locate a give file on a cd ... if the cd isn't 1321# all it does is try to locate a give file on a cd ... if the cd isn't
1368# found, then a message asking for the user to insert the cdrom will be 1322# found, then a message asking for the user to insert the cdrom will be
1369# displayed and we'll hang out here until: 1323# displayed and we'll hang out here until:
1370# (1) the file is found on a mounted cdrom 1324# (1) the file is found on a mounted cdrom
1371# (2) the user hits CTRL+C 1325# (2) the user hits CTRL+C
1372_cdrom_locate_file_on_cd() { 1326cdrom_locate_file_on_cd() {
1373 local mline=""
1374 local showedmsg=0
1375
1376 while [[ -z ${CDROM_ROOT} ]] ; do 1327 while [[ -z ${CDROM_ROOT} ]] ; do
1377 local i=0 1328 local dir=$(dirname "$*")
1378 local -a cdset=(${*//:/ })
1379 if [[ -n ${CDROM_SET} ]] ; then
1380 cdset=(${cdset[${CDROM_SET}]})
1381 fi
1382
1383 while [[ -n ${cdset[${i}]} ]] ; do
1384 local dir=$(dirname ${cdset[${i}]})
1385 local file=$(basename ${cdset[${i}]}) 1329 local file=$(basename "$*")
1330 local mline=""
1331 local showedmsg=0
1386 1332
1387 for mline in $(mount | gawk '/(iso|cdrom|fs=cdfss)/ {print $3}') ; do 1333 for mline in $(mount | egrep -e '(iso|cdrom)' | awk '{print $3}') ; do
1388 [[ -d ${mline}/${dir} ]] || continue 1334 [[ -d ${mline}/${dir} ]] || continue
1389 if [[ -n $(find ${mline}/${dir} -maxdepth 1 -iname ${file}) ]] ; then 1335 [[ ! -z $(find ${mline}/${dir} -maxdepth 1 -iname ${file}) ]] \
1390 export CDROM_ROOT=${mline} 1336 && export CDROM_ROOT=${mline}
1391 export CDROM_SET=${i} 1337 done
1392 export CDROM_MATCH=${cdset[${i}]} 1338
1393 return 1339 if [[ -z ${CDROM_ROOT} ]] ; then
1340 echo
1341 if [[ ${showedmsg} -eq 0 ]] ; then
1342 if [[ ${CDROM_TOTAL_CDS} -eq 1 ]] ; then
1343 if [[ -z ${CDROM_NAME} ]] ; then
1344 einfo "Please insert the cdrom for ${PN} now !"
1345 else
1346 einfo "Please insert the ${CDROM_NAME} cdrom now !"
1347 fi
1348 else
1349 if [[ -z ${CDROM_NAME_1} ]] ; then
1350 einfo "Please insert cd #${CDROM_CURRENT_CD} for ${PN} now !"
1351 else
1352 local var="CDROM_NAME_${CDROM_CURRENT_CD}"
1353 einfo "Please insert+mount the ${!var} cdrom now !"
1354 fi
1394 fi 1355 fi
1395 done 1356 showedmsg=1
1396
1397 ((++i))
1398 done
1399
1400 echo
1401 if [[ ${showedmsg} -eq 0 ]] ; then
1402 if [[ ${CDROM_TOTAL_CDS} -eq 1 ]] ; then
1403 if [[ -z ${CDROM_NAME} ]] ; then
1404 einfo "Please insert+mount the cdrom for ${PN} now !"
1405 else
1406 einfo "Please insert+mount the ${CDROM_NAME} cdrom now !"
1407 fi
1408 else
1409 if [[ -z ${CDROM_NAME_1} ]] ; then
1410 einfo "Please insert+mount cd #${CDROM_CURRENT_CD} for ${PN} now !"
1411 else
1412 local var="CDROM_NAME_${CDROM_CURRENT_CD}"
1413 einfo "Please insert+mount the ${!var} cdrom now !"
1414 fi
1415 fi 1357 fi
1416 showedmsg=1
1417 fi
1418 einfo "Press return to scan for the cd again" 1358 einfo "Press return to scan for the cd again"
1419 einfo "or hit CTRL+C to abort the emerge." 1359 einfo "or hit CTRL+C to abort the emerge."
1420 echo 1360 echo
1421 einfo "If you are having trouble with the detection" 1361 einfo "If you are having trouble with the detection"
1422 einfo "of your CD, it is possible that you do not have" 1362 einfo "of your CD, it is possible that you do not have"
1423 einfo "Joliet support enabled in your kernel. Please" 1363 einfo "Joliet support enabled in your kernel. Please"
1424 einfo "check that CONFIG_JOLIET is enabled in your kernel." 1364 einfo "check that CONFIG_JOLIET is enabled in your kernel."
1425 read 1365 read
1366 fi
1426 done 1367 done
1427} 1368}
1428 1369
1429# Make sure that LINGUAS only contains languages that 1370# Make sure that LINGUAS only contains languages that
1430# a package can support 1371# a package can support
1578 [[ ${opt:0:1} = "-" ]] && shift || opt="-a" 1519 [[ ${opt:0:1} = "-" ]] && shift || opt="-a"
1579 1520
1580 local PKG=$(best_version $1) 1521 local PKG=$(best_version $1)
1581 shift 1522 shift
1582 1523
1583 local USEFILE=${ROOT}/var/db/pkg/${PKG}/USE 1524 local USEFILE="${ROOT}/var/db/pkg/${PKG}/USE"
1584
1585 # if the USE file doesnt exist, assume the $PKG is either
1586 # injected or package.provided
1587 [[ ! -e ${USEFILE} ]] && return 0 1525 [[ ! -e ${USEFILE} ]] && return 1
1588 1526
1589 local USE_BUILT=$(<${USEFILE}) 1527 local USE_BUILT=$(<${USEFILE})
1590 while [[ $# -gt 0 ]] ; do 1528 while [[ $# -gt 0 ]] ; do
1591 if [[ ${opt} = "-o" ]] ; then 1529 if [[ ${opt} = "-o" ]] ; then
1592 has $1 ${USE_BUILT} && return 0 1530 has $1 ${USE_BUILT} && return 0
1644# $4 == extra LD_LIBRARY_PATH's (make it : delimited) 1582# $4 == extra LD_LIBRARY_PATH's (make it : delimited)
1645# $5 == path for wrapper 1583# $5 == path for wrapper
1646make_wrapper() { 1584make_wrapper() {
1647 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5 1585 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5
1648 local tmpwrapper=$(emktemp) 1586 local tmpwrapper=$(emktemp)
1649 # We don't want to quote ${bin} so that people can pass complex
1650 # things as $bin ... "./someprog --args"
1651 cat << EOF > "${tmpwrapper}" 1587 cat << EOF > "${tmpwrapper}"
1652#!/bin/sh 1588#!/bin/sh
1653cd "${chdir:-.}" 1589cd "${chdir}"
1654if [ -n "${libdir}" ] ; then
1655 if [ "\${LD_LIBRARY_PATH+set}" = "set" ] ; then
1656 export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}" 1590export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}"
1657 else
1658 export LD_LIBRARY_PATH="${libdir}"
1659 fi
1660fi
1661exec ${bin} "\$@" 1591exec ${bin} "\$@"
1662EOF 1592EOF
1663 chmod go+rx "${tmpwrapper}" 1593 chmod go+rx "${tmpwrapper}"
1664 if [[ -n ${path} ]] ; then 1594 if [ -n "${5}" ]
1595 then
1665 exeinto "${path}" 1596 exeinto ${5}
1666 newexe "${tmpwrapper}" "${wrapper}" 1597 newexe "${tmpwrapper}" "${wrapper}"
1667 else 1598 else
1668 newbin "${tmpwrapper}" "${wrapper}" 1599 newbin "${tmpwrapper}" "${wrapper}"
1669 fi 1600 fi
1670} 1601}

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.200

  ViewVC Help
Powered by ViewVC 1.1.20