| 1 | # Copyright 1999-2006 Gentoo Foundation |
1 | # Copyright 1999-2006 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.250 2006/09/14 06:58:01 vapier Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.256 2006/10/31 19:29:12 agriffis Exp $ |
| 4 | # |
4 | # |
| 5 | # This eclass is for general purpose functions that most ebuilds |
5 | # This eclass is for general purpose functions that most ebuilds |
| 6 | # have to implement themselves. |
6 | # have to implement themselves. |
| 7 | # |
7 | # |
| 8 | # NB: If you add anything, please comment it! |
8 | # NB: If you add anything, please comment it! |
| … | |
… | |
| 454 | eerror "No username specified !" |
454 | eerror "No username specified !" |
| 455 | die "Cannot call enewuser without a username" |
455 | die "Cannot call enewuser without a username" |
| 456 | fi |
456 | fi |
| 457 | |
457 | |
| 458 | # lets see if the username already exists |
458 | # lets see if the username already exists |
| 459 | if [[ ${euser} == $(egetent passwd "${euser}" | cut -d: -f1) ]] ; then |
459 | if [[ -n $(egetent passwd "${euser}") ]] ; then |
| 460 | return 0 |
460 | return 0 |
| 461 | fi |
461 | fi |
| 462 | einfo "Adding user '${euser}' to your system ..." |
462 | einfo "Adding user '${euser}' to your system ..." |
| 463 | |
463 | |
| 464 | # options to pass to useradd |
464 | # options to pass to useradd |
| 465 | local opts= |
465 | local opts= |
| 466 | |
466 | |
| 467 | # handle uid |
467 | # handle uid |
| 468 | local euid=$1; shift |
468 | local euid=$1; shift |
| 469 | if [[ ! -z ${euid} ]] && [[ ${euid} != "-1" ]] ; then |
469 | if [[ -n ${euid} && ${euid} != -1 ]] ; then |
| 470 | if [[ ${euid} -gt 0 ]] ; then |
470 | if [[ ${euid} -gt 0 ]] ; then |
| 471 | if [[ ! -z $(egetent passwd ${euid}) ]] ; then |
471 | if [[ -n $(egetent passwd ${euid}) ]] ; then |
| 472 | euid="next" |
472 | euid="next" |
| 473 | fi |
473 | fi |
| 474 | else |
474 | else |
| 475 | eerror "Userid given but is not greater than 0 !" |
475 | eerror "Userid given but is not greater than 0 !" |
| 476 | die "${euid} is not a valid UID" |
476 | die "${euid} is not a valid UID" |
| 477 | fi |
477 | fi |
| 478 | else |
478 | else |
| 479 | euid="next" |
479 | euid="next" |
| 480 | fi |
480 | fi |
| 481 | if [[ ${euid} == "next" ]] ; then |
481 | if [[ ${euid} == "next" ]] ; then |
| 482 | for euid in $(seq 101 999) ; do |
482 | for ((euid = 101; euid <= 999; euid++)); do |
| 483 | [[ -z $(egetent passwd ${euid}) ]] && break |
483 | [[ -z $(egetent passwd ${euid}) ]] && break |
| 484 | done |
484 | done |
| 485 | fi |
485 | fi |
| 486 | opts="${opts} -u ${euid}" |
486 | opts="${opts} -u ${euid}" |
| 487 | einfo " - Userid: ${euid}" |
487 | einfo " - Userid: ${euid}" |
| … | |
… | |
| 501 | for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null ; do |
501 | for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null ; do |
| 502 | [[ -x ${ROOT}${shell} ]] && break |
502 | [[ -x ${ROOT}${shell} ]] && break |
| 503 | done |
503 | done |
| 504 | |
504 | |
| 505 | if [[ ${shell} == "/dev/null" ]] ; then |
505 | if [[ ${shell} == "/dev/null" ]] ; then |
| 506 | eerror "Unable to identify the shell to use" |
506 | eerror "Unable to identify the shell to use, proceeding with userland default." |
| 507 | die "Unable to identify the shell to use" |
507 | case ${USERLAND} in |
|
|
508 | GNU) shell="/bin/false" ;; |
|
|
509 | BSD) shell="/sbin/nologin" ;; |
|
|
510 | Darwin) shell="/usr/sbin/nologin" ;; |
|
|
511 | *) die "Unable to identify the default shell for userland ${USERLAND}" |
|
|
512 | esac |
| 508 | fi |
513 | fi |
| 509 | |
514 | |
| 510 | eshell=${shell} |
515 | eshell=${shell} |
| 511 | fi |
516 | fi |
| 512 | einfo " - Shell: ${eshell}" |
517 | einfo " - Shell: ${eshell}" |
| … | |
… | |
| 657 | eerror "No group specified !" |
662 | eerror "No group specified !" |
| 658 | die "Cannot call enewgroup without a group" |
663 | die "Cannot call enewgroup without a group" |
| 659 | fi |
664 | fi |
| 660 | |
665 | |
| 661 | # see if group already exists |
666 | # see if group already exists |
| 662 | if [ "${egroup}" == "`egetent group \"${egroup}\" | cut -d: -f1`" ] |
667 | if [[ -n $(egetent group "${egroup}") ]]; then |
| 663 | then |
|
|
| 664 | return 0 |
668 | return 0 |
| 665 | fi |
669 | fi |
| 666 | einfo "Adding group '${egroup}' to your system ..." |
670 | einfo "Adding group '${egroup}' to your system ..." |
| 667 | |
671 | |
| 668 | # options to pass to useradd |
672 | # options to pass to useradd |
| … | |
… | |
| 711 | fi |
715 | fi |
| 712 | |
716 | |
| 713 | # If we need the next available |
717 | # If we need the next available |
| 714 | case ${egid} in |
718 | case ${egid} in |
| 715 | *[!0-9]*) # Non numeric |
719 | *[!0-9]*) # Non numeric |
| 716 | for egid in $(seq 101 999); do |
720 | for ((egid = 101; egid <= 999; egid++)); do |
| 717 | [ -z "`egetent group ${egid}`" ] && break |
721 | [[ -z $(egetent group ${egid}) ]] && break |
| 718 | done |
722 | done |
| 719 | esac |
723 | esac |
| 720 | dscl . create /groups/${egroup} gid ${egid} |
724 | dscl . create /groups/${egroup} gid ${egid} |
| 721 | dscl . create /groups/${egroup} passwd '*' |
725 | dscl . create /groups/${egroup} passwd '*' |
| 722 | ;; |
726 | ;; |
| 723 | |
727 | |
| 724 | *-freebsd*|*-dragonfly*) |
728 | *-freebsd*|*-dragonfly*) |
| 725 | case ${egid} in |
729 | case ${egid} in |
| 726 | *[!0-9]*) # Non numeric |
730 | *[!0-9]*) # Non numeric |
| 727 | for egid in $(seq 101 999); do |
731 | for ((egid = 101; egid <= 999; egid++)); do |
| 728 | [ -z "`egetent group ${egid}`" ] && break |
732 | [[ -z $(egetent group ${egid}) ]] && break |
| 729 | done |
733 | done |
| 730 | esac |
734 | esac |
| 731 | pw groupadd ${egroup} -g ${egid} || die "enewgroup failed" |
735 | pw groupadd ${egroup} -g ${egid} || die "enewgroup failed" |
| 732 | ;; |
736 | ;; |
| 733 | |
737 | |
| 734 | *-netbsd*) |
738 | *-netbsd*) |
| 735 | case ${egid} in |
739 | case ${egid} in |
| 736 | *[!0-9]*) # Non numeric |
740 | *[!0-9]*) # Non numeric |
| 737 | for egid in $(seq 101 999); do |
741 | for ((egid = 101; egid <= 999; egid++)); do |
| 738 | [ -z "`egetent group ${egid}`" ] && break |
742 | [[ -z $(egetent group ${egid}) ]] && break |
| 739 | done |
743 | done |
| 740 | esac |
744 | esac |
| 741 | groupadd -g ${egid} ${egroup} || die "enewgroup failed" |
745 | groupadd -g ${egid} ${egroup} || die "enewgroup failed" |
| 742 | ;; |
746 | ;; |
| 743 | |
747 | |
| … | |
… | |
| 817 | games) |
821 | games) |
| 818 | case ${catmin} in |
822 | case ${catmin} in |
| 819 | action) type=ActionGame;; |
823 | action) type=ActionGame;; |
| 820 | arcade) type=ArcadeGame;; |
824 | arcade) type=ArcadeGame;; |
| 821 | board) type=BoardGame;; |
825 | board) type=BoardGame;; |
| 822 | kid) type=KidsGame;; |
826 | kids) type=KidsGame;; |
| 823 | emulation) type=Emulator;; |
827 | emulation) type=Emulator;; |
| 824 | puzzle) type=LogicGame;; |
828 | puzzle) type=LogicGame;; |
| 825 | rpg) type=RolePlaying;; |
829 | rpg) type=RolePlaying;; |
| 826 | roguelike) type=RolePlaying;; |
830 | roguelike) type=RolePlaying;; |
| 827 | simulation) type=Simulation;; |
831 | simulation) type=Simulation;; |
| … | |
… | |
| 917 | ) |
921 | ) |
| 918 | } |
922 | } |
| 919 | |
923 | |
| 920 | # Make a GDM/KDM Session file |
924 | # Make a GDM/KDM Session file |
| 921 | # |
925 | # |
| 922 | # make_desktop_entry(<title>, <command>) |
926 | # make_session_desktop(<title>, <command>) |
| 923 | # title: File to execute to start the Window Manager |
927 | # title: File to execute to start the Window Manager |
| 924 | # command: Name of the Window Manager |
928 | # command: Name of the Window Manager |
| 925 | |
929 | |
| 926 | make_session_desktop() { |
930 | make_session_desktop() { |
| 927 | [[ -z $1 ]] && eerror "make_session_desktop: You must specify the title" && return 1 |
931 | [[ -z $1 ]] && eerror "make_session_desktop: You must specify the title" && return 1 |
| … | |
… | |
| 1205 | # accepted ... if we don't find a match, we make the user accept |
1209 | # accepted ... if we don't find a match, we make the user accept |
| 1206 | local shopts=$- |
1210 | local shopts=$- |
| 1207 | local alic |
1211 | local alic |
| 1208 | set -o noglob #so that bash doesn't expand "*" |
1212 | set -o noglob #so that bash doesn't expand "*" |
| 1209 | for alic in ${ACCEPT_LICENSE} ; do |
1213 | for alic in ${ACCEPT_LICENSE} ; do |
| 1210 | if [[ ${alic} == * || ${alic} == ${l} ]]; then |
1214 | if [[ ${alic} == ${l} ]]; then |
| 1211 | set +o noglob; set -${shopts} #reset old shell opts |
1215 | set +o noglob; set -${shopts} #reset old shell opts |
| 1212 | return 0 |
1216 | return 0 |
| 1213 | fi |
1217 | fi |
| 1214 | done |
1218 | done |
| 1215 | set +o noglob; set -$shopts #reset old shell opts |
1219 | set +o noglob; set -$shopts #reset old shell opts |
| … | |
… | |
| 1608 | if [[ $1 == ${expand}_* ]] ; then |
1612 | if [[ $1 == ${expand}_* ]] ; then |
| 1609 | expand="" |
1613 | expand="" |
| 1610 | break |
1614 | break |
| 1611 | fi |
1615 | fi |
| 1612 | done |
1616 | done |
| 1613 | if [[ -z ${expand} ]] ; then |
1617 | if [[ -n ${expand} ]] ; then |
| 1614 | has $1 ${IUSE_BUILT} || die "$PKG does not actually support the $1 USE flag!" |
1618 | has $1 ${IUSE_BUILT} || die "$PKG does not actually support the $1 USE flag!" |
| 1615 | fi |
1619 | fi |
| 1616 | |
1620 | |
| 1617 | local USE_BUILT=$(<${USEFILE}) |
1621 | local USE_BUILT=$(<${USEFILE}) |
| 1618 | while [[ $# -gt 0 ]] ; do |
1622 | while [[ $# -gt 0 ]] ; do |