/[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.207
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.207 2005/10/12 13:52:01 flameeyes 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.
408# Joe Jezak <josejx@gmail.com> and usata@gentoo.org 408# Joe Jezak <josejx@gmail.com> and usata@gentoo.org
409# FBSD stuff: Aaron Walker <ka0ttic@gentoo.org> 409# FBSD stuff: Aaron Walker <ka0ttic@gentoo.org>
410# 410#
411# egetent(database, key) 411# egetent(database, key)
412egetent() { 412egetent() {
413 if [[ "${USERLAND}" == "Darwin" ]] ; then 413 case ${CHOST} in
414 *-darwin*)
414 case "$2" in 415 case "$2" in
415 *[!0-9]*) # Non numeric 416 *[!0-9]*) # Non numeric
416 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }" 417 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
417 ;; 418 ;;
418 *) # Numeric 419 *) # Numeric
419 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }" 420 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
420 ;; 421 ;;
421 esac 422 esac
422 elif [[ "${USERLAND}" == "BSD" ]] ; then 423 ;;
423 local action 424 *-freebsd*)
424 if [ "$1" == "passwd" ] 425 local opts action="user"
425 then 426 [[ $1 == "passwd" ]] || action="group"
426 action="user" 427
427 else 428 # lookup by uid/gid
428 action="group" 429 if [[ $2 == [[:digit:]]* ]] ; then
430 [[ ${action} == "user" ]] && opts="-u" || opts="-g"
429 fi 431 fi
432
430 pw show "${action}" "$2" -q 433 pw show ${action} ${opts} "$2" -q
431 else 434 ;;
435 *-netbsd*)
436 grep "$2:\*:" /etc/$1
437 ;;
438 *)
432 which nscd >& /dev/null && nscd -i "$1" 439 type -p nscd >& /dev/null && nscd -i "$1"
433 getent "$1" "$2" 440 getent "$1" "$2"
434 fi 441 ;;
442 esac
435} 443}
436 444
437# Simplify/standardize adding users to the system 445# Simplify/standardize adding users to the system
438# vapier@gentoo.org 446# vapier@gentoo.org
439# 447#
492 if [[ ! -e ${eshell} ]] ; then 500 if [[ ! -e ${eshell} ]] ; then
493 eerror "A shell was specified but it does not exist !" 501 eerror "A shell was specified but it does not exist !"
494 die "${eshell} does not exist" 502 die "${eshell} does not exist"
495 fi 503 fi
496 else 504 else
497 for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null; do 505 for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null ; do
498 [[ -x ${ROOT}${shell} ]] && break; 506 [[ -x ${ROOT}${shell} ]] && break
499 done 507 done
500 508
501 if [[ ${shell} == "/dev/null" ]]; then 509 if [[ ${shell} == "/dev/null" ]] ; then
502 eerror "Unable to identify the shell to use" 510 eerror "Unable to identify the shell to use"
503 die "Unable to identify the shell to use" 511 die "Unable to identify the shell to use"
504 fi 512 fi
505 513
506 eshell=${shell} 514 eshell=${shell}
548 einfo " - Groups: ${egroups}" 556 einfo " - Groups: ${egroups}"
549 557
550 # handle extra and add the user 558 # handle extra and add the user
551 local oldsandbox=${SANDBOX_ON} 559 local oldsandbox=${SANDBOX_ON}
552 export SANDBOX_ON="0" 560 export SANDBOX_ON="0"
553 case ${USERLAND} in 561 case ${CHOST} in
554 Darwin) 562 *-darwin*)
555 ### Make the user 563 ### Make the user
556 if [[ -z $@ ]] ; then 564 if [[ -z $@ ]] ; then
557 dscl . create /users/${euser} uid ${euid} 565 dscl . create /users/${euser} uid ${euid}
558 dscl . create /users/${euser} shell ${eshell} 566 dscl . create /users/${euser} shell ${eshell}
559 dscl . create /users/${euser} home ${ehome} 567 dscl . create /users/${euser} home ${ehome}
570 einfo "Please report the ebuild along with the info below" 578 einfo "Please report the ebuild along with the info below"
571 einfo "eextra: $@" 579 einfo "eextra: $@"
572 die "Required function missing" 580 die "Required function missing"
573 fi 581 fi
574 ;; 582 ;;
575 BSD) 583 *-freebsd*)
576 if [[ -z $@ ]] ; then 584 if [[ -z $@ ]] ; then
577 pw useradd ${euser} ${opts} \ 585 pw useradd ${euser} ${opts} \
578 -c "added by portage for ${PN}" \ 586 -c "added by portage for ${PN}" \
579 die "enewuser failed" 587 die "enewuser failed"
580 else 588 else
581 einfo " - Extra: $@" 589 einfo " - Extra: $@"
582 pw useradd ${euser} ${opts} \ 590 pw useradd ${euser} ${opts} \
583 "$@" || die "enewuser failed" 591 "$@" || die "enewuser failed"
592 fi
593 ;;
594
595 *-netbsd*)
596 if [[ -z $@ ]] ; then
597 useradd ${opts} ${euser} || die "enewuser failed"
598 else
599 einfo " - Extra: $@"
600 useradd ${opts} ${euser} "$@" || die "enewuser failed"
584 fi 601 fi
585 ;; 602 ;;
586 *) 603 *)
587 if [[ -z $@ ]] ; then 604 if [[ -z $@ ]] ; then
588 useradd ${opts} ${euser} \ 605 useradd ${opts} ${euser} \
640 then 657 then
641 if [ "${egid}" -gt 0 ] 658 if [ "${egid}" -gt 0 ]
642 then 659 then
643 if [ -z "`egetent group ${egid}`" ] 660 if [ -z "`egetent group ${egid}`" ]
644 then 661 then
645 if [[ "${USERLAND}" == "Darwin" ]]; then 662 if [[ "${CHOST}" == *-darwin* ]]; then
646 opts="${opts} ${egid}" 663 opts="${opts} ${egid}"
647 else 664 else
648 opts="${opts} -g ${egid}" 665 opts="${opts} -g ${egid}"
649 fi 666 fi
650 else 667 else
664 opts="${opts} ${eextra}" 681 opts="${opts} ${eextra}"
665 682
666 # add the group 683 # add the group
667 local oldsandbox="${SANDBOX_ON}" 684 local oldsandbox="${SANDBOX_ON}"
668 export SANDBOX_ON="0" 685 export SANDBOX_ON="0"
669 if [[ "${USERLAND}" == "Darwin" ]]; then 686 case ${CHOST} in
687 *-darwin*)
670 if [ ! -z "${eextra}" ]; 688 if [ ! -z "${eextra}" ];
671 then 689 then
672 einfo "Extra options are not supported on Darwin/OS X yet" 690 einfo "Extra options are not supported on Darwin/OS X yet"
673 einfo "Please report the ebuild along with the info below" 691 einfo "Please report the ebuild along with the info below"
674 einfo "eextra: ${eextra}" 692 einfo "eextra: ${eextra}"
675 die "Required function missing" 693 die "Required function missing"
676 fi 694 fi
677 695
678 # If we need the next available 696 # If we need the next available
679 case ${egid} in 697 case ${egid} in
680 *[!0-9]*) # Non numeric 698 *[!0-9]*) # Non numeric
681 for egid in $(seq 101 999); do 699 for egid in $(seq 101 999); do
682 [ -z "`egetent group ${egid}`" ] && break 700 [ -z "`egetent group ${egid}`" ] && break
683 done 701 done
684 esac 702 esac
685 dscl . create /groups/${egroup} gid ${egid} 703 dscl . create /groups/${egroup} gid ${egid}
686 dscl . create /groups/${egroup} passwd '*' 704 dscl . create /groups/${egroup} passwd '*'
687 elif [[ "${USERLAND}" == "BSD" ]] ; then 705 ;;
706
707 *-freebsd*)
688 case ${egid} in 708 case ${egid} in
689 *[!0-9]*) # Non numeric 709 *[!0-9]*) # Non numeric
690 for egid in $(seq 101 999); do 710 for egid in $(seq 101 999); do
691 [ -z "`egetent group ${egid}`" ] && break 711 [ -z "`egetent group ${egid}`" ] && break
692 done 712 done
693 esac 713 esac
694 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed" 714 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed"
695 else 715 ;;
716
717 *-netbsd*)
718 case ${egid} in
719 *[!0-9]*) # Non numeric
720 for egid in $(seq 101 999); do
721 [ -z "`egetent group ${egid}`" ] && break
722 done
723 esac
724 groupadd -g ${egid} ${egroup} || die "enewgroup failed"
725 ;;
726
727 *)
696 groupadd ${opts} ${egroup} || die "enewgroup failed" 728 groupadd ${opts} ${egroup} || die "enewgroup failed"
697 fi 729 ;;
730 esac
698 export SANDBOX_ON="${oldsandbox}" 731 export SANDBOX_ON="${oldsandbox}"
699} 732}
700 733
701# Simple script to replace 'dos2unix' binaries 734# Simple script to replace 'dos2unix' binaries
702# vapier@gentoo.org 735# vapier@gentoo.org
855Exec=${exec} 888Exec=${exec}
856Path=${path} 889Path=${path}
857Icon=${icon} 890Icon=${icon}
858Categories=Application;${type};" > "${desktop}" 891Categories=Application;${type};" > "${desktop}"
859 892
893 (
894 # wrap the env here so that the 'insinto' call
895 # doesn't corrupt the env of the caller
860 insinto /usr/share/applications 896 insinto /usr/share/applications
861 doins "${desktop}" 897 doins "${desktop}"
862 898 )
863 return 0
864} 899}
865 900
866# Make a GDM/KDM Session file 901# Make a GDM/KDM Session file
867# 902#
868# make_desktop_entry(<title>, <command>) 903# make_desktop_entry(<title>, <command>)
1582# $4 == extra LD_LIBRARY_PATH's (make it : delimited) 1617# $4 == extra LD_LIBRARY_PATH's (make it : delimited)
1583# $5 == path for wrapper 1618# $5 == path for wrapper
1584make_wrapper() { 1619make_wrapper() {
1585 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5 1620 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5
1586 local tmpwrapper=$(emktemp) 1621 local tmpwrapper=$(emktemp)
1622 # We don't want to quote ${bin} so that people can pass complex
1623 # things as $bin ... "./someprog --args"
1587 cat << EOF > "${tmpwrapper}" 1624 cat << EOF > "${tmpwrapper}"
1588#!/bin/sh 1625#!/bin/sh
1589cd "${chdir}" 1626cd "${chdir:-.}"
1627if [ "\${LD_LIBRARY_PATH+set}" = "set" ] && [ -n "${libdir}" ] ; then
1590export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}" 1628 export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}"
1629fi
1591exec ${bin} "\$@" 1630exec ${bin} "\$@"
1592EOF 1631EOF
1593 chmod go+rx "${tmpwrapper}" 1632 chmod go+rx "${tmpwrapper}"
1594 if [ -n "${5}" ] 1633 if [[ -n ${path} ]] ; then
1595 then
1596 exeinto ${5} 1634 exeinto "${path}"
1597 newexe "${tmpwrapper}" "${wrapper}" 1635 newexe "${tmpwrapper}" "${wrapper}"
1598 else 1636 else
1599 newbin "${tmpwrapper}" "${wrapper}" 1637 newbin "${tmpwrapper}" "${wrapper}"
1600 fi 1638 fi
1601} 1639}

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

  ViewVC Help
Powered by ViewVC 1.1.20