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

Diff of /eclass/eutils.eclass

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

Revision 1.200 Revision 1.209
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.200 2005/09/23 20:44:26 wolf31o2 Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.209 2005/10/19 03:37:16 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 ;;
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#
492 if [[ ! -e ${eshell} ]] ; then 502 if [[ ! -e ${eshell} ]] ; then
493 eerror "A shell was specified but it does not exist !" 503 eerror "A shell was specified but it does not exist !"
494 die "${eshell} does not exist" 504 die "${eshell} does not exist"
495 fi 505 fi
496 else 506 else
497 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
498 [[ -x ${ROOT}${shell} ]] && break; 508 [[ -x ${ROOT}${shell} ]] && break
499 done 509 done
500 510
501 if [[ ${shell} == "/dev/null" ]]; then 511 if [[ ${shell} == "/dev/null" ]] ; then
502 eerror "Unable to identify the shell to use" 512 eerror "Unable to identify the shell to use"
503 die "Unable to identify the shell to use" 513 die "Unable to identify the shell to use"
504 fi 514 fi
505 515
506 eshell=${shell} 516 eshell=${shell}
548 einfo " - Groups: ${egroups}" 558 einfo " - Groups: ${egroups}"
549 559
550 # handle extra and add the user 560 # handle extra and add the user
551 local oldsandbox=${SANDBOX_ON} 561 local oldsandbox=${SANDBOX_ON}
552 export SANDBOX_ON="0" 562 export SANDBOX_ON="0"
553 case ${USERLAND} in 563 case ${CHOST} in
554 Darwin) 564 *-darwin*)
555 ### Make the user 565 ### Make the user
556 if [[ -z $@ ]] ; then 566 if [[ -z $@ ]] ; then
557 dscl . create /users/${euser} uid ${euid} 567 dscl . create /users/${euser} uid ${euid}
558 dscl . create /users/${euser} shell ${eshell} 568 dscl . create /users/${euser} shell ${eshell}
559 dscl . create /users/${euser} home ${ehome} 569 dscl . create /users/${euser} home ${ehome}
570 einfo "Please report the ebuild along with the info below" 580 einfo "Please report the ebuild along with the info below"
571 einfo "eextra: $@" 581 einfo "eextra: $@"
572 die "Required function missing" 582 die "Required function missing"
573 fi 583 fi
574 ;; 584 ;;
575 BSD) 585 *-freebsd*)
576 if [[ -z $@ ]] ; then 586 if [[ -z $@ ]] ; then
577 pw useradd ${euser} ${opts} \ 587 pw useradd ${euser} ${opts} \
578 -c "added by portage for ${PN}" \ 588 -c "added by portage for ${PN}" \
579 die "enewuser failed" 589 die "enewuser failed"
580 else 590 else
581 einfo " - Extra: $@" 591 einfo " - Extra: $@"
582 pw useradd ${euser} ${opts} \ 592 pw useradd ${euser} ${opts} \
583 "$@" || 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"
584 fi 603 fi
585 ;; 604 ;;
586 *) 605 *)
587 if [[ -z $@ ]] ; then 606 if [[ -z $@ ]] ; then
588 useradd ${opts} ${euser} \ 607 useradd ${opts} ${euser} \
640 then 659 then
641 if [ "${egid}" -gt 0 ] 660 if [ "${egid}" -gt 0 ]
642 then 661 then
643 if [ -z "`egetent group ${egid}`" ] 662 if [ -z "`egetent group ${egid}`" ]
644 then 663 then
645 if [[ "${USERLAND}" == "Darwin" ]]; then 664 if [[ "${CHOST}" == *-darwin* ]]; then
646 opts="${opts} ${egid}" 665 opts="${opts} ${egid}"
647 else 666 else
648 opts="${opts} -g ${egid}" 667 opts="${opts} -g ${egid}"
649 fi 668 fi
650 else 669 else
664 opts="${opts} ${eextra}" 683 opts="${opts} ${eextra}"
665 684
666 # add the group 685 # add the group
667 local oldsandbox="${SANDBOX_ON}" 686 local oldsandbox="${SANDBOX_ON}"
668 export SANDBOX_ON="0" 687 export SANDBOX_ON="0"
669 if [[ "${USERLAND}" == "Darwin" ]]; then 688 case ${CHOST} in
689 *-darwin*)
670 if [ ! -z "${eextra}" ]; 690 if [ ! -z "${eextra}" ];
671 then 691 then
672 einfo "Extra options are not supported on Darwin/OS X yet" 692 einfo "Extra options are not supported on Darwin/OS X yet"
673 einfo "Please report the ebuild along with the info below" 693 einfo "Please report the ebuild along with the info below"
674 einfo "eextra: ${eextra}" 694 einfo "eextra: ${eextra}"
675 die "Required function missing" 695 die "Required function missing"
676 fi 696 fi
677 697
678 # If we need the next available 698 # If we need the next available
679 case ${egid} in 699 case ${egid} in
680 *[!0-9]*) # Non numeric 700 *[!0-9]*) # Non numeric
681 for egid in $(seq 101 999); do 701 for egid in $(seq 101 999); do
682 [ -z "`egetent group ${egid}`" ] && break 702 [ -z "`egetent group ${egid}`" ] && break
683 done 703 done
684 esac 704 esac
685 dscl . create /groups/${egroup} gid ${egid} 705 dscl . create /groups/${egroup} gid ${egid}
686 dscl . create /groups/${egroup} passwd '*' 706 dscl . create /groups/${egroup} passwd '*'
687 elif [[ "${USERLAND}" == "BSD" ]] ; then 707 ;;
708
709 *-freebsd*)
688 case ${egid} in 710 case ${egid} in
689 *[!0-9]*) # Non numeric 711 *[!0-9]*) # Non numeric
690 for egid in $(seq 101 999); do 712 for egid in $(seq 101 999); do
691 [ -z "`egetent group ${egid}`" ] && break 713 [ -z "`egetent group ${egid}`" ] && break
692 done 714 done
693 esac 715 esac
694 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed" 716 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed"
695 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 *)
696 groupadd ${opts} ${egroup} || die "enewgroup failed" 730 groupadd ${opts} ${egroup} || die "enewgroup failed"
697 fi 731 ;;
732 esac
698 export SANDBOX_ON="${oldsandbox}" 733 export SANDBOX_ON="${oldsandbox}"
699} 734}
700 735
701# Simple script to replace 'dos2unix' binaries 736# Simple script to replace 'dos2unix' binaries
702# vapier@gentoo.org 737# vapier@gentoo.org
855Exec=${exec} 890Exec=${exec}
856Path=${path} 891Path=${path}
857Icon=${icon} 892Icon=${icon}
858Categories=Application;${type};" > "${desktop}" 893Categories=Application;${type};" > "${desktop}"
859 894
895 (
896 # wrap the env here so that the 'insinto' call
897 # doesn't corrupt the env of the caller
860 insinto /usr/share/applications 898 insinto /usr/share/applications
861 doins "${desktop}" 899 doins "${desktop}"
862 900 )
863 return 0
864} 901}
865 902
866# Make a GDM/KDM Session file 903# Make a GDM/KDM Session file
867# 904#
868# make_desktop_entry(<title>, <command>) 905# make_desktop_entry(<title>, <command>)
1328 local dir=$(dirname "$*") 1365 local dir=$(dirname "$*")
1329 local file=$(basename "$*") 1366 local file=$(basename "$*")
1330 local mline="" 1367 local mline=""
1331 local showedmsg=0 1368 local showedmsg=0
1332 1369
1333 for mline in $(mount | egrep -e '(iso|cdrom)' | awk '{print $3}') ; do 1370 for mline in $(mount | egrep -e '(iso|cdrom|fs=cdfss)' | awk '{print $3}') ; do
1334 [[ -d ${mline}/${dir} ]] || continue 1371 [[ -d ${mline}/${dir} ]] || continue
1335 [[ ! -z $(find ${mline}/${dir} -maxdepth 1 -iname ${file}) ]] \ 1372 [[ ! -z $(find ${mline}/${dir} -maxdepth 1 -iname ${file}) ]] \
1336 && export CDROM_ROOT=${mline} 1373 && export CDROM_ROOT=${mline}
1337 done 1374 done
1338 1375
1582# $4 == extra LD_LIBRARY_PATH's (make it : delimited) 1619# $4 == extra LD_LIBRARY_PATH's (make it : delimited)
1583# $5 == path for wrapper 1620# $5 == path for wrapper
1584make_wrapper() { 1621make_wrapper() {
1585 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5 1622 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5
1586 local tmpwrapper=$(emktemp) 1623 local tmpwrapper=$(emktemp)
1624 # We don't want to quote ${bin} so that people can pass complex
1625 # things as $bin ... "./someprog --args"
1587 cat << EOF > "${tmpwrapper}" 1626 cat << EOF > "${tmpwrapper}"
1588#!/bin/sh 1627#!/bin/sh
1589cd "${chdir}" 1628cd "${chdir:-.}"
1629if [ "\${LD_LIBRARY_PATH+set}" = "set" ] && [ -n "${libdir}" ] ; then
1590export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}" 1630 export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}"
1631fi
1591exec ${bin} "\$@" 1632exec ${bin} "\$@"
1592EOF 1633EOF
1593 chmod go+rx "${tmpwrapper}" 1634 chmod go+rx "${tmpwrapper}"
1594 if [ -n "${5}" ] 1635 if [[ -n ${path} ]] ; then
1595 then
1596 exeinto ${5} 1636 exeinto "${path}"
1597 newexe "${tmpwrapper}" "${wrapper}" 1637 newexe "${tmpwrapper}" "${wrapper}"
1598 else 1638 else
1599 newbin "${tmpwrapper}" "${wrapper}" 1639 newbin "${tmpwrapper}" "${wrapper}"
1600 fi 1640 fi
1601} 1641}

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

  ViewVC Help
Powered by ViewVC 1.1.20