/[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.205
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.205 2005/10/07 15:31:46 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 *)
432 which nscd >& /dev/null && nscd -i "$1" 436 type -p nscd >& /dev/null && nscd -i "$1"
433 getent "$1" "$2" 437 getent "$1" "$2"
434 fi 438 ;;
439 esac
435} 440}
436 441
437# Simplify/standardize adding users to the system 442# Simplify/standardize adding users to the system
438# vapier@gentoo.org 443# vapier@gentoo.org
439# 444#
492 if [[ ! -e ${eshell} ]] ; then 497 if [[ ! -e ${eshell} ]] ; then
493 eerror "A shell was specified but it does not exist !" 498 eerror "A shell was specified but it does not exist !"
494 die "${eshell} does not exist" 499 die "${eshell} does not exist"
495 fi 500 fi
496 else 501 else
497 for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null; do 502 for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null ; do
498 [[ -x ${ROOT}${shell} ]] && break; 503 [[ -x ${ROOT}${shell} ]] && break
499 done 504 done
500 505
501 if [[ ${shell} == "/dev/null" ]]; then 506 if [[ ${shell} == "/dev/null" ]] ; then
502 eerror "Unable to identify the shell to use" 507 eerror "Unable to identify the shell to use"
503 die "Unable to identify the shell to use" 508 die "Unable to identify the shell to use"
504 fi 509 fi
505 510
506 eshell=${shell} 511 eshell=${shell}
548 einfo " - Groups: ${egroups}" 553 einfo " - Groups: ${egroups}"
549 554
550 # handle extra and add the user 555 # handle extra and add the user
551 local oldsandbox=${SANDBOX_ON} 556 local oldsandbox=${SANDBOX_ON}
552 export SANDBOX_ON="0" 557 export SANDBOX_ON="0"
553 case ${USERLAND} in 558 case ${CHOST} in
554 Darwin) 559 *-darwin*)
555 ### Make the user 560 ### Make the user
556 if [[ -z $@ ]] ; then 561 if [[ -z $@ ]] ; then
557 dscl . create /users/${euser} uid ${euid} 562 dscl . create /users/${euser} uid ${euid}
558 dscl . create /users/${euser} shell ${eshell} 563 dscl . create /users/${euser} shell ${eshell}
559 dscl . create /users/${euser} home ${ehome} 564 dscl . create /users/${euser} home ${ehome}
570 einfo "Please report the ebuild along with the info below" 575 einfo "Please report the ebuild along with the info below"
571 einfo "eextra: $@" 576 einfo "eextra: $@"
572 die "Required function missing" 577 die "Required function missing"
573 fi 578 fi
574 ;; 579 ;;
575 BSD) 580 *-freebsd*)
576 if [[ -z $@ ]] ; then 581 if [[ -z $@ ]] ; then
577 pw useradd ${euser} ${opts} \ 582 pw useradd ${euser} ${opts} \
578 -c "added by portage for ${PN}" \ 583 -c "added by portage for ${PN}" \
579 die "enewuser failed" 584 die "enewuser failed"
580 else 585 else
640 then 645 then
641 if [ "${egid}" -gt 0 ] 646 if [ "${egid}" -gt 0 ]
642 then 647 then
643 if [ -z "`egetent group ${egid}`" ] 648 if [ -z "`egetent group ${egid}`" ]
644 then 649 then
645 if [[ "${USERLAND}" == "Darwin" ]]; then 650 if [[ "${CHOST}" == *-darwin* ]]; then
646 opts="${opts} ${egid}" 651 opts="${opts} ${egid}"
647 else 652 else
648 opts="${opts} -g ${egid}" 653 opts="${opts} -g ${egid}"
649 fi 654 fi
650 else 655 else
664 opts="${opts} ${eextra}" 669 opts="${opts} ${eextra}"
665 670
666 # add the group 671 # add the group
667 local oldsandbox="${SANDBOX_ON}" 672 local oldsandbox="${SANDBOX_ON}"
668 export SANDBOX_ON="0" 673 export SANDBOX_ON="0"
669 if [[ "${USERLAND}" == "Darwin" ]]; then 674 case ${CHOST} in
675 *-darwin*)
670 if [ ! -z "${eextra}" ]; 676 if [ ! -z "${eextra}" ];
671 then 677 then
672 einfo "Extra options are not supported on Darwin/OS X yet" 678 einfo "Extra options are not supported on Darwin/OS X yet"
673 einfo "Please report the ebuild along with the info below" 679 einfo "Please report the ebuild along with the info below"
674 einfo "eextra: ${eextra}" 680 einfo "eextra: ${eextra}"
675 die "Required function missing" 681 die "Required function missing"
676 fi 682 fi
677 683
678 # If we need the next available 684 # If we need the next available
679 case ${egid} in 685 case ${egid} in
680 *[!0-9]*) # Non numeric 686 *[!0-9]*) # Non numeric
681 for egid in $(seq 101 999); do 687 for egid in $(seq 101 999); do
682 [ -z "`egetent group ${egid}`" ] && break 688 [ -z "`egetent group ${egid}`" ] && break
683 done 689 done
684 esac 690 esac
685 dscl . create /groups/${egroup} gid ${egid} 691 dscl . create /groups/${egroup} gid ${egid}
686 dscl . create /groups/${egroup} passwd '*' 692 dscl . create /groups/${egroup} passwd '*'
687 elif [[ "${USERLAND}" == "BSD" ]] ; then 693 ;;
694
695 *-freebsd*)
688 case ${egid} in 696 case ${egid} in
689 *[!0-9]*) # Non numeric 697 *[!0-9]*) # Non numeric
690 for egid in $(seq 101 999); do 698 for egid in $(seq 101 999); do
691 [ -z "`egetent group ${egid}`" ] && break 699 [ -z "`egetent group ${egid}`" ] && break
692 done 700 done
693 esac 701 esac
694 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed" 702 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed"
695 else 703 ;;
704 *)
696 groupadd ${opts} ${egroup} || die "enewgroup failed" 705 groupadd ${opts} ${egroup} || die "enewgroup failed"
697 fi 706 ;;
707 esac
698 export SANDBOX_ON="${oldsandbox}" 708 export SANDBOX_ON="${oldsandbox}"
699} 709}
700 710
701# Simple script to replace 'dos2unix' binaries 711# Simple script to replace 'dos2unix' binaries
702# vapier@gentoo.org 712# vapier@gentoo.org
855Exec=${exec} 865Exec=${exec}
856Path=${path} 866Path=${path}
857Icon=${icon} 867Icon=${icon}
858Categories=Application;${type};" > "${desktop}" 868Categories=Application;${type};" > "${desktop}"
859 869
870 (
871 # wrap the env here so that the 'insinto' call
872 # doesn't corrupt the env of the caller
860 insinto /usr/share/applications 873 insinto /usr/share/applications
861 doins "${desktop}" 874 doins "${desktop}"
862 875 )
863 return 0
864} 876}
865 877
866# Make a GDM/KDM Session file 878# Make a GDM/KDM Session file
867# 879#
868# make_desktop_entry(<title>, <command>) 880# make_desktop_entry(<title>, <command>)
1582# $4 == extra LD_LIBRARY_PATH's (make it : delimited) 1594# $4 == extra LD_LIBRARY_PATH's (make it : delimited)
1583# $5 == path for wrapper 1595# $5 == path for wrapper
1584make_wrapper() { 1596make_wrapper() {
1585 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5 1597 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5
1586 local tmpwrapper=$(emktemp) 1598 local tmpwrapper=$(emktemp)
1599 # We don't want to quote ${bin} so that people can pass complex
1600 # things as $bin ... "./someprog --args"
1587 cat << EOF > "${tmpwrapper}" 1601 cat << EOF > "${tmpwrapper}"
1588#!/bin/sh 1602#!/bin/sh
1589cd "${chdir}" 1603cd "${chdir:-.}"
1604if [ "\${LD_LIBRARY_PATH+set}" = "set" ] && [ -n "${libdir}" ] ; then
1590export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}" 1605 export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}"
1606fi
1591exec ${bin} "\$@" 1607exec ${bin} "\$@"
1592EOF 1608EOF
1593 chmod go+rx "${tmpwrapper}" 1609 chmod go+rx "${tmpwrapper}"
1594 if [ -n "${5}" ] 1610 if [[ -n ${path} ]] ; then
1595 then
1596 exeinto ${5} 1611 exeinto "${path}"
1597 newexe "${tmpwrapper}" "${wrapper}" 1612 newexe "${tmpwrapper}" "${wrapper}"
1598 else 1613 else
1599 newbin "${tmpwrapper}" "${wrapper}" 1614 newbin "${tmpwrapper}" "${wrapper}"
1600 fi 1615 fi
1601} 1616}

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

  ViewVC Help
Powered by ViewVC 1.1.20