/[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.206
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.206 2005/10/07 16:21:48 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
640 then 648 then
641 if [ "${egid}" -gt 0 ] 649 if [ "${egid}" -gt 0 ]
642 then 650 then
643 if [ -z "`egetent group ${egid}`" ] 651 if [ -z "`egetent group ${egid}`" ]
644 then 652 then
645 if [[ "${USERLAND}" == "Darwin" ]]; then 653 if [[ "${CHOST}" == *-darwin* ]]; then
646 opts="${opts} ${egid}" 654 opts="${opts} ${egid}"
647 else 655 else
648 opts="${opts} -g ${egid}" 656 opts="${opts} -g ${egid}"
649 fi 657 fi
650 else 658 else
664 opts="${opts} ${eextra}" 672 opts="${opts} ${eextra}"
665 673
666 # add the group 674 # add the group
667 local oldsandbox="${SANDBOX_ON}" 675 local oldsandbox="${SANDBOX_ON}"
668 export SANDBOX_ON="0" 676 export SANDBOX_ON="0"
669 if [[ "${USERLAND}" == "Darwin" ]]; then 677 case ${CHOST} in
678 *-darwin*)
670 if [ ! -z "${eextra}" ]; 679 if [ ! -z "${eextra}" ];
671 then 680 then
672 einfo "Extra options are not supported on Darwin/OS X yet" 681 einfo "Extra options are not supported on Darwin/OS X yet"
673 einfo "Please report the ebuild along with the info below" 682 einfo "Please report the ebuild along with the info below"
674 einfo "eextra: ${eextra}" 683 einfo "eextra: ${eextra}"
675 die "Required function missing" 684 die "Required function missing"
676 fi 685 fi
677 686
678 # If we need the next available 687 # If we need the next available
679 case ${egid} in 688 case ${egid} in
680 *[!0-9]*) # Non numeric 689 *[!0-9]*) # Non numeric
681 for egid in $(seq 101 999); do 690 for egid in $(seq 101 999); do
682 [ -z "`egetent group ${egid}`" ] && break 691 [ -z "`egetent group ${egid}`" ] && break
683 done 692 done
684 esac 693 esac
685 dscl . create /groups/${egroup} gid ${egid} 694 dscl . create /groups/${egroup} gid ${egid}
686 dscl . create /groups/${egroup} passwd '*' 695 dscl . create /groups/${egroup} passwd '*'
687 elif [[ "${USERLAND}" == "BSD" ]] ; then 696 ;;
697
698 *-freebsd*)
688 case ${egid} in 699 case ${egid} in
689 *[!0-9]*) # Non numeric 700 *[!0-9]*) # Non numeric
690 for egid in $(seq 101 999); do 701 for egid in $(seq 101 999); do
691 [ -z "`egetent group ${egid}`" ] && break 702 [ -z "`egetent group ${egid}`" ] && break
692 done 703 done
693 esac 704 esac
694 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed" 705 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed"
695 else 706 ;;
707
708 *-netbsd*)
709 case ${egid} in
710 *[!0-9]*) # Non numeric
711 for egid in $(seq 101 999); do
712 [ -z "`egetent group ${egid}`" ] && break
713 done
714 esac
715 groupadd ${egroup} -g ${egid} || die "enewgroup failed"
716 ;;
717
718 *)
696 groupadd ${opts} ${egroup} || die "enewgroup failed" 719 groupadd ${opts} ${egroup} || die "enewgroup failed"
697 fi 720 ;;
721 esac
698 export SANDBOX_ON="${oldsandbox}" 722 export SANDBOX_ON="${oldsandbox}"
699} 723}
700 724
701# Simple script to replace 'dos2unix' binaries 725# Simple script to replace 'dos2unix' binaries
702# vapier@gentoo.org 726# vapier@gentoo.org
855Exec=${exec} 879Exec=${exec}
856Path=${path} 880Path=${path}
857Icon=${icon} 881Icon=${icon}
858Categories=Application;${type};" > "${desktop}" 882Categories=Application;${type};" > "${desktop}"
859 883
884 (
885 # wrap the env here so that the 'insinto' call
886 # doesn't corrupt the env of the caller
860 insinto /usr/share/applications 887 insinto /usr/share/applications
861 doins "${desktop}" 888 doins "${desktop}"
862 889 )
863 return 0
864} 890}
865 891
866# Make a GDM/KDM Session file 892# Make a GDM/KDM Session file
867# 893#
868# make_desktop_entry(<title>, <command>) 894# make_desktop_entry(<title>, <command>)
1582# $4 == extra LD_LIBRARY_PATH's (make it : delimited) 1608# $4 == extra LD_LIBRARY_PATH's (make it : delimited)
1583# $5 == path for wrapper 1609# $5 == path for wrapper
1584make_wrapper() { 1610make_wrapper() {
1585 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5 1611 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5
1586 local tmpwrapper=$(emktemp) 1612 local tmpwrapper=$(emktemp)
1613 # We don't want to quote ${bin} so that people can pass complex
1614 # things as $bin ... "./someprog --args"
1587 cat << EOF > "${tmpwrapper}" 1615 cat << EOF > "${tmpwrapper}"
1588#!/bin/sh 1616#!/bin/sh
1589cd "${chdir}" 1617cd "${chdir:-.}"
1618if [ "\${LD_LIBRARY_PATH+set}" = "set" ] && [ -n "${libdir}" ] ; then
1590export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}" 1619 export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}"
1620fi
1591exec ${bin} "\$@" 1621exec ${bin} "\$@"
1592EOF 1622EOF
1593 chmod go+rx "${tmpwrapper}" 1623 chmod go+rx "${tmpwrapper}"
1594 if [ -n "${5}" ] 1624 if [[ -n ${path} ]] ; then
1595 then
1596 exeinto ${5} 1625 exeinto "${path}"
1597 newexe "${tmpwrapper}" "${wrapper}" 1626 newexe "${tmpwrapper}" "${wrapper}"
1598 else 1627 else
1599 newbin "${tmpwrapper}" "${wrapper}" 1628 newbin "${tmpwrapper}" "${wrapper}"
1600 fi 1629 fi
1601} 1630}

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

  ViewVC Help
Powered by ViewVC 1.1.20