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

Diff of /eclass/eutils.eclass

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

Revision 1.196 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.196 2005/09/06 01:59:22 vapier 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.
9# 9#
10# NB: If you add anything, please comment it! 10# NB: If you add anything, please comment it!
11 11
12inherit multilib 12inherit multilib portability
13 13
14DEPEND="!bootstrap? ( sys-devel/patch )" 14DEPEND="!bootstrap? ( sys-devel/patch )"
15# sys-apps/shadow is needed for useradd, etc, bug #94745. 15# sys-apps/shadow is needed for useradd, etc, bug #94745.
16 16
17DESCRIPTION="Based on the ${ECLASS} eclass" 17DESCRIPTION="Based on the ${ECLASS} eclass"
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#
477 fi 485 fi
478 else 486 else
479 euid="next" 487 euid="next"
480 fi 488 fi
481 if [[ ${euid} == "next" ]] ; then 489 if [[ ${euid} == "next" ]] ; then
482 local pwrange 490 for euid in $(seq 101 999) ; do
483 if [[ ${USERLAND} == "BSD" ]] ; then
484 pwrange=$(jot 898 101)
485 else
486 pwrange=$(seq 101 999)
487 fi
488 for euid in ${pwrange} ; do
489 [[ -z $(egetent passwd ${euid}) ]] && break 491 [[ -z $(egetent passwd ${euid}) ]] && break
490 done 492 done
491 fi 493 fi
492 opts="${opts} -u ${euid}" 494 opts="${opts} -u ${euid}"
493 einfo " - Userid: ${euid}" 495 einfo " - Userid: ${euid}"
498 if [[ ! -e ${eshell} ]] ; then 500 if [[ ! -e ${eshell} ]] ; then
499 eerror "A shell was specified but it does not exist !" 501 eerror "A shell was specified but it does not exist !"
500 die "${eshell} does not exist" 502 die "${eshell} does not exist"
501 fi 503 fi
502 else 504 else
503 case ${USERLAND} in 505 for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null ; do
504 Darwin) eshell="/usr/bin/false";; 506 [[ -x ${ROOT}${shell} ]] && break
505 BSD) eshell="/usr/sbin/nologin";; 507 done
506 *) eshell="/bin/false";; 508
507 esac 509 if [[ ${shell} == "/dev/null" ]] ; then
510 eerror "Unable to identify the shell to use"
511 die "Unable to identify the shell to use"
512 fi
513
514 eshell=${shell}
508 fi 515 fi
509 einfo " - Shell: ${eshell}" 516 einfo " - Shell: ${eshell}"
510 opts="${opts} -s ${eshell}" 517 opts="${opts} -s ${eshell}"
511 518
512 # handle homedir 519 # handle homedir
549 einfo " - Groups: ${egroups}" 556 einfo " - Groups: ${egroups}"
550 557
551 # handle extra and add the user 558 # handle extra and add the user
552 local oldsandbox=${SANDBOX_ON} 559 local oldsandbox=${SANDBOX_ON}
553 export SANDBOX_ON="0" 560 export SANDBOX_ON="0"
554 case ${USERLAND} in 561 case ${CHOST} in
555 Darwin) 562 *-darwin*)
556 ### Make the user 563 ### Make the user
557 if [[ -z $@ ]] ; then 564 if [[ -z $@ ]] ; then
558 dscl . create /users/${euser} uid ${euid} 565 dscl . create /users/${euser} uid ${euid}
559 dscl . create /users/${euser} shell ${eshell} 566 dscl . create /users/${euser} shell ${eshell}
560 dscl . create /users/${euser} home ${ehome} 567 dscl . create /users/${euser} home ${ehome}
571 einfo "Please report the ebuild along with the info below" 578 einfo "Please report the ebuild along with the info below"
572 einfo "eextra: $@" 579 einfo "eextra: $@"
573 die "Required function missing" 580 die "Required function missing"
574 fi 581 fi
575 ;; 582 ;;
576 BSD) 583 *-freebsd*)
577 if [[ -z $@ ]] ; then 584 if [[ -z $@ ]] ; then
578 pw useradd ${euser} ${opts} \ 585 pw useradd ${euser} ${opts} \
579 -c "added by portage for ${PN}" \ 586 -c "added by portage for ${PN}" \
580 die "enewuser failed" 587 die "enewuser failed"
581 else 588 else
641 then 648 then
642 if [ "${egid}" -gt 0 ] 649 if [ "${egid}" -gt 0 ]
643 then 650 then
644 if [ -z "`egetent group ${egid}`" ] 651 if [ -z "`egetent group ${egid}`" ]
645 then 652 then
646 if [[ "${USERLAND}" == "Darwin" ]]; then 653 if [[ "${CHOST}" == *-darwin* ]]; then
647 opts="${opts} ${egid}" 654 opts="${opts} ${egid}"
648 else 655 else
649 opts="${opts} -g ${egid}" 656 opts="${opts} -g ${egid}"
650 fi 657 fi
651 else 658 else
665 opts="${opts} ${eextra}" 672 opts="${opts} ${eextra}"
666 673
667 # add the group 674 # add the group
668 local oldsandbox="${SANDBOX_ON}" 675 local oldsandbox="${SANDBOX_ON}"
669 export SANDBOX_ON="0" 676 export SANDBOX_ON="0"
670 if [[ "${USERLAND}" == "Darwin" ]]; then 677 case ${CHOST} in
678 *-darwin*)
671 if [ ! -z "${eextra}" ]; 679 if [ ! -z "${eextra}" ];
672 then 680 then
673 einfo "Extra options are not supported on Darwin/OS X yet" 681 einfo "Extra options are not supported on Darwin/OS X yet"
674 einfo "Please report the ebuild along with the info below" 682 einfo "Please report the ebuild along with the info below"
675 einfo "eextra: ${eextra}" 683 einfo "eextra: ${eextra}"
676 die "Required function missing" 684 die "Required function missing"
677 fi 685 fi
678 686
679 # If we need the next available 687 # If we need the next available
680 case ${egid} in 688 case ${egid} in
681 *[!0-9]*) # Non numeric 689 *[!0-9]*) # Non numeric
682 for egid in `jot 898 101`; do 690 for egid in $(seq 101 999); do
683 [ -z "`egetent group ${egid}`" ] && break 691 [ -z "`egetent group ${egid}`" ] && break
684 done 692 done
685 esac 693 esac
686 dscl . create /groups/${egroup} gid ${egid} 694 dscl . create /groups/${egroup} gid ${egid}
687 dscl . create /groups/${egroup} passwd '*' 695 dscl . create /groups/${egroup} passwd '*'
688 elif [[ "${USERLAND}" == "BSD" ]] ; then 696 ;;
697
698 *-freebsd*)
689 case ${egid} in 699 case ${egid} in
690 *[!0-9]*) # Non numeric 700 *[!0-9]*) # Non numeric
691 for egid in `jot 898 101`; do 701 for egid in $(seq 101 999); do
692 [ -z "`egetent group ${egid}`" ] && break 702 [ -z "`egetent group ${egid}`" ] && break
693 done 703 done
694 esac 704 esac
695 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed" 705 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed"
696 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 *)
697 groupadd ${opts} ${egroup} || die "enewgroup failed" 719 groupadd ${opts} ${egroup} || die "enewgroup failed"
698 fi 720 ;;
721 esac
699 export SANDBOX_ON="${oldsandbox}" 722 export SANDBOX_ON="${oldsandbox}"
700} 723}
701 724
702# Simple script to replace 'dos2unix' binaries 725# Simple script to replace 'dos2unix' binaries
703# vapier@gentoo.org 726# vapier@gentoo.org
856Exec=${exec} 879Exec=${exec}
857Path=${path} 880Path=${path}
858Icon=${icon} 881Icon=${icon}
859Categories=Application;${type};" > "${desktop}" 882Categories=Application;${type};" > "${desktop}"
860 883
884 (
885 # wrap the env here so that the 'insinto' call
886 # doesn't corrupt the env of the caller
861 insinto /usr/share/applications 887 insinto /usr/share/applications
862 doins "${desktop}" 888 doins "${desktop}"
863 889 )
864 return 0
865} 890}
866 891
867# Make a GDM/KDM Session file 892# Make a GDM/KDM Session file
868# 893#
869# make_desktop_entry(<title>, <command>) 894# make_desktop_entry(<title>, <command>)
1135check_license() { 1160check_license() {
1136 local lic=$1 1161 local lic=$1
1137 if [ -z "${lic}" ] ; then 1162 if [ -z "${lic}" ] ; then
1138 lic="${PORTDIR}/licenses/${LICENSE}" 1163 lic="${PORTDIR}/licenses/${LICENSE}"
1139 else 1164 else
1140 if [ -e "${PORTDIR}/licenses/${src}" ] ; then 1165 if [ -e "${PORTDIR}/licenses/${lic}" ] ; then
1141 lic="${PORTDIR}/licenses/${src}" 1166 lic="${PORTDIR}/licenses/${lic}"
1142 elif [ -e "${PWD}/${src}" ] ; then 1167 elif [ -e "${PWD}/${lic}" ] ; then
1143 lic="${PWD}/${src}" 1168 lic="${PWD}/${lic}"
1144 elif [ -e "${src}" ] ; then 1169 elif [ -e "${lic}" ] ; then
1145 lic="${src}" 1170 lic="${lic}"
1146 fi
1147 fi 1171 fi
1172 fi
1148 [ ! -f "${lic}" ] && die "Could not find requested license ${src}" 1173 [ ! -f "${lic}" ] && die "Could not find requested license ${lic}"
1149 local l="`basename ${lic}`" 1174 local l="`basename ${lic}`"
1150 1175
1151 # here is where we check for the licenses the user already 1176 # here is where we check for the licenses the user already
1152 # accepted ... if we don't find a match, we make the user accept 1177 # accepted ... if we don't find a match, we make the user accept
1153 local shopts=$- 1178 local shopts=$-
1583# $4 == extra LD_LIBRARY_PATH's (make it : delimited) 1608# $4 == extra LD_LIBRARY_PATH's (make it : delimited)
1584# $5 == path for wrapper 1609# $5 == path for wrapper
1585make_wrapper() { 1610make_wrapper() {
1586 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5 1611 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5
1587 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"
1588 cat << EOF > "${tmpwrapper}" 1615 cat << EOF > "${tmpwrapper}"
1589#!/bin/sh 1616#!/bin/sh
1590cd "${chdir}" 1617cd "${chdir:-.}"
1618if [ "\${LD_LIBRARY_PATH+set}" = "set" ] && [ -n "${libdir}" ] ; then
1591export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}" 1619 export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}"
1620fi
1592exec ${bin} "\$@" 1621exec ${bin} "\$@"
1593EOF 1622EOF
1594 chmod go+rx "${tmpwrapper}" 1623 chmod go+rx "${tmpwrapper}"
1595 if [ -n "${5}" ] 1624 if [[ -n ${path} ]] ; then
1596 then
1597 exeinto ${5} 1625 exeinto "${path}"
1598 newexe "${tmpwrapper}" "${wrapper}" 1626 newexe "${tmpwrapper}" "${wrapper}"
1599 else 1627 else
1600 newbin "${tmpwrapper}" "${wrapper}" 1628 newbin "${tmpwrapper}" "${wrapper}"
1601 fi 1629 fi
1602} 1630}

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

  ViewVC Help
Powered by ViewVC 1.1.20