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

Diff of /eclass/eutils.eclass

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

Revision 1.196 Revision 1.212
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.196 2005/09/06 01:59:22 vapier Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.212 2005/10/22 02:32:48 vapier 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
13 13
14DEPEND="!bootstrap? ( sys-devel/patch )" 14DEPEND="!bootstrap? ( sys-devel/patch )"
15# sys-apps/shadow is needed for useradd, etc, bug #94745. 15# sys-apps/shadow is needed for useradd, etc, bug #94745.
16 16
17DESCRIPTION="Based on the ${ECLASS} eclass" 17DESCRIPTION="Based on the ${ECLASS} eclass"
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 ]] ; }
171 local PIPE_CMD="" 172 local PIPE_CMD=""
172 local STDERR_TARGET="${T}/$$.out" 173 local STDERR_TARGET="${T}/$$.out"
173 local PATCH_TARGET="${T}/$$.patch" 174 local PATCH_TARGET="${T}/$$.patch"
174 local PATCH_SUFFIX="" 175 local PATCH_SUFFIX=""
175 local SINGLE_PATCH="no" 176 local SINGLE_PATCH="no"
313 count=5 314 count=5
314 break 315 break
315 fi 316 fi
316 fi 317 fi
317 318
318 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1 319 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f ; _epatch_assert) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1
319 then 320 then
320 draw_line "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 321 draw_line "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
321 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 322 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
322 echo "ACTUALLY APPLYING ${patchname} ..." >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 323 echo "ACTUALLY APPLYING ${patchname} ..." >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
323 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 324 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
324 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 325 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
325 326
326 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 2>&1 327 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 2>&1
328 _epatch_assert
327 329
328 if [ "$?" -ne 0 ] 330 if [ "$?" -ne 0 ]
329 then 331 then
330 cat ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 332 cat ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
331 echo 333 echo
408# Joe Jezak <josejx@gmail.com> and usata@gentoo.org 410# Joe Jezak <josejx@gmail.com> and usata@gentoo.org
409# FBSD stuff: Aaron Walker <ka0ttic@gentoo.org> 411# FBSD stuff: Aaron Walker <ka0ttic@gentoo.org>
410# 412#
411# egetent(database, key) 413# egetent(database, key)
412egetent() { 414egetent() {
413 if [[ "${USERLAND}" == "Darwin" ]] ; then 415 case ${CHOST} in
416 *-darwin*)
414 case "$2" in 417 case "$2" in
415 *[!0-9]*) # Non numeric 418 *[!0-9]*) # Non numeric
416 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }" 419 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
417 ;; 420 ;;
418 *) # Numeric 421 *) # Numeric
419 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }" 422 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
420 ;; 423 ;;
421 esac 424 esac
422 elif [[ "${USERLAND}" == "BSD" ]] ; then 425 ;;
423 local action 426 *-freebsd*)
424 if [ "$1" == "passwd" ] 427 local opts action="user"
425 then 428 [[ $1 == "passwd" ]] || action="group"
426 action="user" 429
427 else 430 # lookup by uid/gid
428 action="group" 431 if [[ $2 == [[:digit:]]* ]] ; then
432 [[ ${action} == "user" ]] && opts="-u" || opts="-g"
429 fi 433 fi
434
430 pw show "${action}" "$2" -q 435 pw show ${action} ${opts} "$2" -q
431 else 436 ;;
437 *-netbsd*)
438 grep "$2:\*:" /etc/$1
439 ;;
440 *)
432 which nscd >& /dev/null && nscd -i "$1" 441 type -p nscd >& /dev/null && nscd -i "$1"
433 getent "$1" "$2" 442 getent "$1" "$2"
434 fi 443 ;;
444 esac
435} 445}
436 446
437# Simplify/standardize adding users to the system 447# Simplify/standardize adding users to the system
438# vapier@gentoo.org 448# vapier@gentoo.org
439# 449#
477 fi 487 fi
478 else 488 else
479 euid="next" 489 euid="next"
480 fi 490 fi
481 if [[ ${euid} == "next" ]] ; then 491 if [[ ${euid} == "next" ]] ; then
482 local pwrange 492 for euid in $(seq 101 999) ; do
483 if [[ ${USERLAND} == "BSD" ]] ; then
484 pwrange=$(jot 898 101)
485 else
486 pwrange=$(seq 101 999)
487 fi
488 for euid in ${pwrange} ; do
489 [[ -z $(egetent passwd ${euid}) ]] && break 493 [[ -z $(egetent passwd ${euid}) ]] && break
490 done 494 done
491 fi 495 fi
492 opts="${opts} -u ${euid}" 496 opts="${opts} -u ${euid}"
493 einfo " - Userid: ${euid}" 497 einfo " - Userid: ${euid}"
498 if [[ ! -e ${eshell} ]] ; then 502 if [[ ! -e ${eshell} ]] ; then
499 eerror "A shell was specified but it does not exist !" 503 eerror "A shell was specified but it does not exist !"
500 die "${eshell} does not exist" 504 die "${eshell} does not exist"
501 fi 505 fi
502 else 506 else
503 case ${USERLAND} in 507 for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null ; do
504 Darwin) eshell="/usr/bin/false";; 508 [[ -x ${ROOT}${shell} ]] && break
505 BSD) eshell="/usr/sbin/nologin";; 509 done
506 *) eshell="/bin/false";; 510
507 esac 511 if [[ ${shell} == "/dev/null" ]] ; then
512 eerror "Unable to identify the shell to use"
513 die "Unable to identify the shell to use"
514 fi
515
516 eshell=${shell}
508 fi 517 fi
509 einfo " - Shell: ${eshell}" 518 einfo " - Shell: ${eshell}"
510 opts="${opts} -s ${eshell}" 519 opts="${opts} -s ${eshell}"
511 520
512 # handle homedir 521 # handle homedir
549 einfo " - Groups: ${egroups}" 558 einfo " - Groups: ${egroups}"
550 559
551 # handle extra and add the user 560 # handle extra and add the user
552 local oldsandbox=${SANDBOX_ON} 561 local oldsandbox=${SANDBOX_ON}
553 export SANDBOX_ON="0" 562 export SANDBOX_ON="0"
554 case ${USERLAND} in 563 case ${CHOST} in
555 Darwin) 564 *-darwin*)
556 ### Make the user 565 ### Make the user
557 if [[ -z $@ ]] ; then 566 if [[ -z $@ ]] ; then
558 dscl . create /users/${euser} uid ${euid} 567 dscl . create /users/${euser} uid ${euid}
559 dscl . create /users/${euser} shell ${eshell} 568 dscl . create /users/${euser} shell ${eshell}
560 dscl . create /users/${euser} home ${ehome} 569 dscl . create /users/${euser} home ${ehome}
571 einfo "Please report the ebuild along with the info below" 580 einfo "Please report the ebuild along with the info below"
572 einfo "eextra: $@" 581 einfo "eextra: $@"
573 die "Required function missing" 582 die "Required function missing"
574 fi 583 fi
575 ;; 584 ;;
576 BSD) 585 *-freebsd*)
577 if [[ -z $@ ]] ; then 586 if [[ -z $@ ]] ; then
578 pw useradd ${euser} ${opts} \ 587 pw useradd ${euser} ${opts} \
579 -c "added by portage for ${PN}" \ 588 -c "added by portage for ${PN}" \
580 die "enewuser failed" 589 die "enewuser failed"
581 else 590 else
582 einfo " - Extra: $@" 591 einfo " - Extra: $@"
583 pw useradd ${euser} ${opts} \ 592 pw useradd ${euser} ${opts} \
584 "$@" || die "enewuser failed" 593 "$@" || die "enewuser failed"
594 fi
595 ;;
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"
585 fi 603 fi
586 ;; 604 ;;
587 *) 605 *)
588 if [[ -z $@ ]] ; then 606 if [[ -z $@ ]] ; then
589 useradd ${opts} ${euser} \ 607 useradd ${opts} ${euser} \
641 then 659 then
642 if [ "${egid}" -gt 0 ] 660 if [ "${egid}" -gt 0 ]
643 then 661 then
644 if [ -z "`egetent group ${egid}`" ] 662 if [ -z "`egetent group ${egid}`" ]
645 then 663 then
646 if [[ "${USERLAND}" == "Darwin" ]]; then 664 if [[ "${CHOST}" == *-darwin* ]]; then
647 opts="${opts} ${egid}" 665 opts="${opts} ${egid}"
648 else 666 else
649 opts="${opts} -g ${egid}" 667 opts="${opts} -g ${egid}"
650 fi 668 fi
651 else 669 else
665 opts="${opts} ${eextra}" 683 opts="${opts} ${eextra}"
666 684
667 # add the group 685 # add the group
668 local oldsandbox="${SANDBOX_ON}" 686 local oldsandbox="${SANDBOX_ON}"
669 export SANDBOX_ON="0" 687 export SANDBOX_ON="0"
670 if [[ "${USERLAND}" == "Darwin" ]]; then 688 case ${CHOST} in
689 *-darwin*)
671 if [ ! -z "${eextra}" ]; 690 if [ ! -z "${eextra}" ];
672 then 691 then
673 einfo "Extra options are not supported on Darwin/OS X yet" 692 einfo "Extra options are not supported on Darwin/OS X yet"
674 einfo "Please report the ebuild along with the info below" 693 einfo "Please report the ebuild along with the info below"
675 einfo "eextra: ${eextra}" 694 einfo "eextra: ${eextra}"
676 die "Required function missing" 695 die "Required function missing"
677 fi 696 fi
678 697
679 # If we need the next available 698 # If we need the next available
680 case ${egid} in 699 case ${egid} in
681 *[!0-9]*) # Non numeric 700 *[!0-9]*) # Non numeric
682 for egid in `jot 898 101`; do 701 for egid in $(seq 101 999); do
683 [ -z "`egetent group ${egid}`" ] && break 702 [ -z "`egetent group ${egid}`" ] && break
684 done 703 done
685 esac 704 esac
686 dscl . create /groups/${egroup} gid ${egid} 705 dscl . create /groups/${egroup} gid ${egid}
687 dscl . create /groups/${egroup} passwd '*' 706 dscl . create /groups/${egroup} passwd '*'
688 elif [[ "${USERLAND}" == "BSD" ]] ; then 707 ;;
708
709 *-freebsd*)
689 case ${egid} in 710 case ${egid} in
690 *[!0-9]*) # Non numeric 711 *[!0-9]*) # Non numeric
691 for egid in `jot 898 101`; do 712 for egid in $(seq 101 999); do
692 [ -z "`egetent group ${egid}`" ] && break 713 [ -z "`egetent group ${egid}`" ] && break
693 done 714 done
694 esac 715 esac
695 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed" 716 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed"
696 else 717 ;;
718
719 *-netbsd*)
720 case ${egid} in
721 *[!0-9]*) # Non numeric
722 for egid in $(seq 101 999); do
723 [ -z "`egetent group ${egid}`" ] && break
724 done
725 esac
726 groupadd -g ${egid} ${egroup} || die "enewgroup failed"
727 ;;
728
729 *)
697 groupadd ${opts} ${egroup} || die "enewgroup failed" 730 groupadd ${opts} ${egroup} || die "enewgroup failed"
698 fi 731 ;;
732 esac
699 export SANDBOX_ON="${oldsandbox}" 733 export SANDBOX_ON="${oldsandbox}"
700} 734}
701 735
702# Simple script to replace 'dos2unix' binaries 736# Simple script to replace 'dos2unix' binaries
703# vapier@gentoo.org 737# vapier@gentoo.org
856Exec=${exec} 890Exec=${exec}
857Path=${path} 891Path=${path}
858Icon=${icon} 892Icon=${icon}
859Categories=Application;${type};" > "${desktop}" 893Categories=Application;${type};" > "${desktop}"
860 894
895 (
896 # wrap the env here so that the 'insinto' call
897 # doesn't corrupt the env of the caller
861 insinto /usr/share/applications 898 insinto /usr/share/applications
862 doins "${desktop}" 899 doins "${desktop}"
863 900 )
864 return 0
865} 901}
866 902
867# Make a GDM/KDM Session file 903# Make a GDM/KDM Session file
868# 904#
869# make_desktop_entry(<title>, <command>) 905# make_desktop_entry(<title>, <command>)
974 local sizeoff_t=$2 1010 local sizeoff_t=$2
975 1011
976 [[ -z ${src} ]] && die "Could not locate source for '$1'" 1012 [[ -z ${src} ]] && die "Could not locate source for '$1'"
977 [[ -z ${sizeoff_t} ]] && die "No idea what off_t size was used for this pdv :(" 1013 [[ -z ${sizeoff_t} ]] && die "No idea what off_t size was used for this pdv :("
978 1014
979 local shrtsrc="`basename ${src}`" 1015 local shrtsrc=$(basename "${src}")
980 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 1016 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
981 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"` 1017 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"`
982 local tailskip=`tail -c $((${sizeoff_t}*2)) ${src} | head -c ${sizeoff_t} | hexdump -e \"%i\"` 1018 local tailskip=`tail -c $((${sizeoff_t}*2)) ${src} | head -c ${sizeoff_t} | hexdump -e \"%i\"`
983 1019
984 # grab metadata for debug reasons 1020 # grab metadata for debug reasons
1056 1092
1057 [[ -z ${src} ]] && die "Could not locate source for '$1'" 1093 [[ -z ${src} ]] && die "Could not locate source for '$1'"
1058 1094
1059 local shrtsrc=$(basename "${src}") 1095 local shrtsrc=$(basename "${src}")
1060 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 1096 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
1061 if [ -z "${skip}" ] 1097 if [[ -z ${skip} ]] ; then
1062 then
1063 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`" 1098 local ver=$(grep -a '#.*Makeself' "${src}" | awk '{print $NF}')
1064 local skip=0 1099 local skip=0
1065 exe=tail 1100 exe=tail
1066 case ${ver} in 1101 case ${ver} in
1067 1.5.*) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same 1102 1.5.*) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same
1068 skip=$(grep -a ^skip= "${src}" | cut -d= -f2) 1103 skip=$(grep -a ^skip= "${src}" | cut -d= -f2)
1080 ;; 1115 ;;
1081 2.1.3) 1116 2.1.3)
1082 skip=`grep -a ^offset= "${src}" | awk '{print $3}'` 1117 skip=`grep -a ^offset= "${src}" | awk '{print $3}'`
1083 let skip="skip + 1" 1118 let skip="skip + 1"
1084 ;; 1119 ;;
1085 2.1.4) 1120 2.1.4|2.1.5)
1086 skip=$(grep -a offset=.*head.*wc "${src}" | awk '{print $3}' | head -n 1) 1121 skip=$(grep -a offset=.*head.*wc "${src}" | awk '{print $3}' | head -n 1)
1087 skip=$(head -n ${skip} "${src}" | wc -c) 1122 skip=$(head -n ${skip} "${src}" | wc -c)
1088 exe="dd" 1123 exe="dd"
1089 ;; 1124 ;;
1090 *) 1125 *)
1135check_license() { 1170check_license() {
1136 local lic=$1 1171 local lic=$1
1137 if [ -z "${lic}" ] ; then 1172 if [ -z "${lic}" ] ; then
1138 lic="${PORTDIR}/licenses/${LICENSE}" 1173 lic="${PORTDIR}/licenses/${LICENSE}"
1139 else 1174 else
1140 if [ -e "${PORTDIR}/licenses/${src}" ] ; then 1175 if [ -e "${PORTDIR}/licenses/${lic}" ] ; then
1141 lic="${PORTDIR}/licenses/${src}" 1176 lic="${PORTDIR}/licenses/${lic}"
1142 elif [ -e "${PWD}/${src}" ] ; then 1177 elif [ -e "${PWD}/${lic}" ] ; then
1143 lic="${PWD}/${src}" 1178 lic="${PWD}/${lic}"
1144 elif [ -e "${src}" ] ; then 1179 elif [ -e "${lic}" ] ; then
1145 lic="${src}" 1180 lic="${lic}"
1146 fi
1147 fi 1181 fi
1182 fi
1148 [ ! -f "${lic}" ] && die "Could not find requested license ${src}" 1183 [ ! -f "${lic}" ] && die "Could not find requested license ${lic}"
1149 local l="`basename ${lic}`" 1184 local l="`basename ${lic}`"
1150 1185
1151 # here is where we check for the licenses the user already 1186 # here is where we check for the licenses the user already
1152 # accepted ... if we don't find a match, we make the user accept 1187 # accepted ... if we don't find a match, we make the user accept
1153 local shopts=$- 1188 local shopts=$-
1329 local dir=$(dirname "$*") 1364 local dir=$(dirname "$*")
1330 local file=$(basename "$*") 1365 local file=$(basename "$*")
1331 local mline="" 1366 local mline=""
1332 local showedmsg=0 1367 local showedmsg=0
1333 1368
1334 for mline in $(mount | egrep -e '(iso|cdrom)' | awk '{print $3}') ; do 1369 for mline in $(mount | egrep -e '(iso|cdrom|fs=cdfss)' | awk '{print $3}') ; do
1335 [[ -d ${mline}/${dir} ]] || continue 1370 [[ -d ${mline}/${dir} ]] || continue
1336 [[ ! -z $(find ${mline}/${dir} -maxdepth 1 -iname ${file}) ]] \ 1371 [[ ! -z $(find ${mline}/${dir} -maxdepth 1 -iname ${file}) ]] \
1337 && export CDROM_ROOT=${mline} 1372 && export CDROM_ROOT=${mline}
1338 done 1373 done
1339 1374
1583# $4 == extra LD_LIBRARY_PATH's (make it : delimited) 1618# $4 == extra LD_LIBRARY_PATH's (make it : delimited)
1584# $5 == path for wrapper 1619# $5 == path for wrapper
1585make_wrapper() { 1620make_wrapper() {
1586 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5 1621 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5
1587 local tmpwrapper=$(emktemp) 1622 local tmpwrapper=$(emktemp)
1623 # We don't want to quote ${bin} so that people can pass complex
1624 # things as $bin ... "./someprog --args"
1588 cat << EOF > "${tmpwrapper}" 1625 cat << EOF > "${tmpwrapper}"
1589#!/bin/sh 1626#!/bin/sh
1590cd "${chdir}" 1627cd "${chdir:-.}"
1628if [ -n "${libdir}" ] ; then
1629 if [ "\${LD_LIBRARY_PATH+set}" = "set" ] ; then
1591export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}" 1630 export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}"
1631 else
1632 export LD_LIBRARY_PATH="${libdir}"
1633 fi
1634fi
1592exec ${bin} "\$@" 1635exec ${bin} "\$@"
1593EOF 1636EOF
1594 chmod go+rx "${tmpwrapper}" 1637 chmod go+rx "${tmpwrapper}"
1595 if [ -n "${5}" ] 1638 if [[ -n ${path} ]] ; then
1596 then
1597 exeinto ${5} 1639 exeinto "${path}"
1598 newexe "${tmpwrapper}" "${wrapper}" 1640 newexe "${tmpwrapper}" "${wrapper}"
1599 else 1641 else
1600 newbin "${tmpwrapper}" "${wrapper}" 1642 newbin "${tmpwrapper}" "${wrapper}"
1601 fi 1643 fi
1602} 1644}

Legend:
Removed from v.1.196  
changed lines
  Added in v.1.212

  ViewVC Help
Powered by ViewVC 1.1.20