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

Diff of /eclass/eutils.eclass

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

Revision 1.203 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.203 2005/09/27 12:38:56 ka0ttic 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.
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 ;;
426 *-freebsd*)
423 local opts action="user" 427 local opts action="user"
424 [[ $1 == "passwd" ]] || action="group" 428 [[ $1 == "passwd" ]] || action="group"
425 429
426 # lookup by uid/gid 430 # lookup by uid/gid
427 if [[ $2 == [[:digit:]]* ]] ; then 431 if [[ $2 == [[:digit:]]* ]] ; then
428 [[ ${action} == "user" ]] && opts="-u" || opts="-g" 432 [[ ${action} == "user" ]] && opts="-u" || opts="-g"
429 fi 433 fi
430 434
431 pw show ${action} ${opts} "$2" -q 435 pw show ${action} ${opts} "$2" -q
432 else 436 ;;
437 *-netbsd*)
438 grep "$2:\*:" /etc/$1
439 ;;
440 *)
433 which nscd >& /dev/null && nscd -i "$1" 441 type -p nscd >& /dev/null && nscd -i "$1"
434 getent "$1" "$2" 442 getent "$1" "$2"
435 fi 443 ;;
444 esac
436} 445}
437 446
438# Simplify/standardize adding users to the system 447# Simplify/standardize adding users to the system
439# vapier@gentoo.org 448# vapier@gentoo.org
440# 449#
493 if [[ ! -e ${eshell} ]] ; then 502 if [[ ! -e ${eshell} ]] ; then
494 eerror "A shell was specified but it does not exist !" 503 eerror "A shell was specified but it does not exist !"
495 die "${eshell} does not exist" 504 die "${eshell} does not exist"
496 fi 505 fi
497 else 506 else
498 for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null; do 507 for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null ; do
499 [[ -x ${ROOT}${shell} ]] && break; 508 [[ -x ${ROOT}${shell} ]] && break
500 done 509 done
501 510
502 if [[ ${shell} == "/dev/null" ]]; then 511 if [[ ${shell} == "/dev/null" ]] ; then
503 eerror "Unable to identify the shell to use" 512 eerror "Unable to identify the shell to use"
504 die "Unable to identify the shell to use" 513 die "Unable to identify the shell to use"
505 fi 514 fi
506 515
507 eshell=${shell} 516 eshell=${shell}
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 $(seq 101 999); 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 $(seq 101 999); 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 *)
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
1588 # We don't want to quote ${bin} so that people can pass complex 1623 # We don't want to quote ${bin} so that people can pass complex
1589 # things as $bin ... "./someprog --args" 1624 # things as $bin ... "./someprog --args"
1590 cat << EOF > "${tmpwrapper}" 1625 cat << EOF > "${tmpwrapper}"
1591#!/bin/sh 1626#!/bin/sh
1592cd "${chdir:-.}" 1627cd "${chdir:-.}"
1628if [ -n "${libdir}" ] ; then
1593if [ "\${LD_LIBRARY_PATH+set}" = "set" ] && [ -n "${libdir}" ] ; then 1629 if [ "\${LD_LIBRARY_PATH+set}" = "set" ] ; then
1594 export 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
1595fi 1634fi
1596exec ${bin} "\$@" 1635exec ${bin} "\$@"
1597EOF 1636EOF
1598 chmod go+rx "${tmpwrapper}" 1637 chmod go+rx "${tmpwrapper}"
1599 if [[ -n ${path} ]] ; then 1638 if [[ -n ${path} ]] ; then

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

  ViewVC Help
Powered by ViewVC 1.1.20