| 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.247 2006/08/11 02:21:47 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! |
| … | |
… | |
| 55 | # to point to the latest version of the library present. |
55 | # to point to the latest version of the library present. |
| 56 | # |
56 | # |
| 57 | # <azarah@gentoo.org> (26 Oct 2002) |
57 | # <azarah@gentoo.org> (26 Oct 2002) |
| 58 | # |
58 | # |
| 59 | gen_usr_ldscript() { |
59 | gen_usr_ldscript() { |
|
|
60 | if [[ $(type -t _tc_gen_usr_ldscript) == "function" ]] ; then |
|
|
61 | _tc_gen_usr_ldscript "$@" |
|
|
62 | return $? |
|
|
63 | fi |
|
|
64 | |
|
|
65 | ewarn "QA Notice: Please upgrade your ebuild to use toolchain-funcs" |
|
|
66 | ewarn "QA Notice: rather than gen_usr_ldscript() from eutils" |
|
|
67 | |
| 60 | local lib libdir=$(get_libdir) |
68 | local lib libdir=$(get_libdir) |
| 61 | # Just make sure it exists |
69 | # Just make sure it exists |
| 62 | dodir /usr/${libdir} |
70 | dodir /usr/${libdir} |
| 63 | |
71 | |
| 64 | for lib in "${@}" ; do |
72 | for lib in "${@}" ; do |
| … | |
… | |
| 446 | eerror "No username specified !" |
454 | eerror "No username specified !" |
| 447 | die "Cannot call enewuser without a username" |
455 | die "Cannot call enewuser without a username" |
| 448 | fi |
456 | fi |
| 449 | |
457 | |
| 450 | # lets see if the username already exists |
458 | # lets see if the username already exists |
| 451 | if [[ ${euser} == $(egetent passwd "${euser}" | cut -d: -f1) ]] ; then |
459 | if [[ -n $(egetent passwd "${euser}") ]] ; then |
| 452 | return 0 |
460 | return 0 |
| 453 | fi |
461 | fi |
| 454 | einfo "Adding user '${euser}' to your system ..." |
462 | einfo "Adding user '${euser}' to your system ..." |
| 455 | |
463 | |
| 456 | # options to pass to useradd |
464 | # options to pass to useradd |
| 457 | local opts= |
465 | local opts= |
| 458 | |
466 | |
| 459 | # handle uid |
467 | # handle uid |
| 460 | local euid=$1; shift |
468 | local euid=$1; shift |
| 461 | if [[ ! -z ${euid} ]] && [[ ${euid} != "-1" ]] ; then |
469 | if [[ -n ${euid} && ${euid} != -1 ]] ; then |
| 462 | if [[ ${euid} -gt 0 ]] ; then |
470 | if [[ ${euid} -gt 0 ]] ; then |
| 463 | if [[ ! -z $(egetent passwd ${euid}) ]] ; then |
471 | if [[ -n $(egetent passwd ${euid}) ]] ; then |
| 464 | euid="next" |
472 | euid="next" |
| 465 | fi |
473 | fi |
| 466 | else |
474 | else |
| 467 | eerror "Userid given but is not greater than 0 !" |
475 | eerror "Userid given but is not greater than 0 !" |
| 468 | die "${euid} is not a valid UID" |
476 | die "${euid} is not a valid UID" |
| 469 | fi |
477 | fi |
| 470 | else |
478 | else |
| 471 | euid="next" |
479 | euid="next" |
| 472 | fi |
480 | fi |
| 473 | if [[ ${euid} == "next" ]] ; then |
481 | if [[ ${euid} == "next" ]] ; then |
| 474 | for euid in $(seq 101 999) ; do |
482 | for ((euid = 101; euid <= 999; euid++)); do |
| 475 | [[ -z $(egetent passwd ${euid}) ]] && break |
483 | [[ -z $(egetent passwd ${euid}) ]] && break |
| 476 | done |
484 | done |
| 477 | fi |
485 | fi |
| 478 | opts="${opts} -u ${euid}" |
486 | opts="${opts} -u ${euid}" |
| 479 | einfo " - Userid: ${euid}" |
487 | einfo " - Userid: ${euid}" |
| … | |
… | |
| 493 | 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 |
| 494 | [[ -x ${ROOT}${shell} ]] && break |
502 | [[ -x ${ROOT}${shell} ]] && break |
| 495 | done |
503 | done |
| 496 | |
504 | |
| 497 | if [[ ${shell} == "/dev/null" ]] ; then |
505 | if [[ ${shell} == "/dev/null" ]] ; then |
| 498 | eerror "Unable to identify the shell to use" |
506 | eerror "Unable to identify the shell to use, proceeding with userland default." |
| 499 | 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 |
| 500 | fi |
513 | fi |
| 501 | |
514 | |
| 502 | eshell=${shell} |
515 | eshell=${shell} |
| 503 | fi |
516 | fi |
| 504 | einfo " - Shell: ${eshell}" |
517 | einfo " - Shell: ${eshell}" |
| … | |
… | |
| 649 | eerror "No group specified !" |
662 | eerror "No group specified !" |
| 650 | die "Cannot call enewgroup without a group" |
663 | die "Cannot call enewgroup without a group" |
| 651 | fi |
664 | fi |
| 652 | |
665 | |
| 653 | # see if group already exists |
666 | # see if group already exists |
| 654 | if [ "${egroup}" == "`egetent group \"${egroup}\" | cut -d: -f1`" ] |
667 | if [[ -n $(egetent group "${egroup}") ]]; then |
| 655 | then |
|
|
| 656 | return 0 |
668 | return 0 |
| 657 | fi |
669 | fi |
| 658 | einfo "Adding group '${egroup}' to your system ..." |
670 | einfo "Adding group '${egroup}' to your system ..." |
| 659 | |
671 | |
| 660 | # options to pass to useradd |
672 | # options to pass to useradd |
| … | |
… | |
| 703 | fi |
715 | fi |
| 704 | |
716 | |
| 705 | # If we need the next available |
717 | # If we need the next available |
| 706 | case ${egid} in |
718 | case ${egid} in |
| 707 | *[!0-9]*) # Non numeric |
719 | *[!0-9]*) # Non numeric |
| 708 | for egid in $(seq 101 999); do |
720 | for ((egid = 101; egid <= 999; egid++)); do |
| 709 | [ -z "`egetent group ${egid}`" ] && break |
721 | [[ -z $(egetent group ${egid}) ]] && break |
| 710 | done |
722 | done |
| 711 | esac |
723 | esac |
| 712 | dscl . create /groups/${egroup} gid ${egid} |
724 | dscl . create /groups/${egroup} gid ${egid} |
| 713 | dscl . create /groups/${egroup} passwd '*' |
725 | dscl . create /groups/${egroup} passwd '*' |
| 714 | ;; |
726 | ;; |
| 715 | |
727 | |
| 716 | *-freebsd*|*-dragonfly*) |
728 | *-freebsd*|*-dragonfly*) |
| 717 | case ${egid} in |
729 | case ${egid} in |
| 718 | *[!0-9]*) # Non numeric |
730 | *[!0-9]*) # Non numeric |
| 719 | for egid in $(seq 101 999); do |
731 | for ((egid = 101; egid <= 999; egid++)); do |
| 720 | [ -z "`egetent group ${egid}`" ] && break |
732 | [[ -z $(egetent group ${egid}) ]] && break |
| 721 | done |
733 | done |
| 722 | esac |
734 | esac |
| 723 | pw groupadd ${egroup} -g ${egid} || die "enewgroup failed" |
735 | pw groupadd ${egroup} -g ${egid} || die "enewgroup failed" |
| 724 | ;; |
736 | ;; |
| 725 | |
737 | |
| 726 | *-netbsd*) |
738 | *-netbsd*) |
| 727 | case ${egid} in |
739 | case ${egid} in |
| 728 | *[!0-9]*) # Non numeric |
740 | *[!0-9]*) # Non numeric |
| 729 | for egid in $(seq 101 999); do |
741 | for ((egid = 101; egid <= 999; egid++)); do |
| 730 | [ -z "`egetent group ${egid}`" ] && break |
742 | [[ -z $(egetent group ${egid}) ]] && break |
| 731 | done |
743 | done |
| 732 | esac |
744 | esac |
| 733 | groupadd -g ${egid} ${egroup} || die "enewgroup failed" |
745 | groupadd -g ${egid} ${egroup} || die "enewgroup failed" |
| 734 | ;; |
746 | ;; |
| 735 | |
747 | |
| … | |
… | |
| 809 | games) |
821 | games) |
| 810 | case ${catmin} in |
822 | case ${catmin} in |
| 811 | action) type=ActionGame;; |
823 | action) type=ActionGame;; |
| 812 | arcade) type=ArcadeGame;; |
824 | arcade) type=ArcadeGame;; |
| 813 | board) type=BoardGame;; |
825 | board) type=BoardGame;; |
| 814 | kid) type=KidsGame;; |
826 | kids) type=KidsGame;; |
| 815 | emulation) type=Emulator;; |
827 | emulation) type=Emulator;; |
| 816 | puzzle) type=LogicGame;; |
828 | puzzle) type=LogicGame;; |
| 817 | rpg) type=RolePlaying;; |
829 | rpg) type=RolePlaying;; |
| 818 | roguelike) type=RolePlaying;; |
830 | roguelike) type=RolePlaying;; |
| 819 | simulation) type=Simulation;; |
831 | simulation) type=Simulation;; |
| … | |
… | |
| 909 | ) |
921 | ) |
| 910 | } |
922 | } |
| 911 | |
923 | |
| 912 | # Make a GDM/KDM Session file |
924 | # Make a GDM/KDM Session file |
| 913 | # |
925 | # |
| 914 | # make_desktop_entry(<title>, <command>) |
926 | # make_session_desktop(<title>, <command>) |
| 915 | # title: File to execute to start the Window Manager |
927 | # title: File to execute to start the Window Manager |
| 916 | # command: Name of the Window Manager |
928 | # command: Name of the Window Manager |
| 917 | |
929 | |
| 918 | make_session_desktop() { |
930 | make_session_desktop() { |
| 919 | [[ -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 |
| … | |
… | |
| 1197 | # 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 |
| 1198 | local shopts=$- |
1210 | local shopts=$- |
| 1199 | local alic |
1211 | local alic |
| 1200 | set -o noglob #so that bash doesn't expand "*" |
1212 | set -o noglob #so that bash doesn't expand "*" |
| 1201 | for alic in ${ACCEPT_LICENSE} ; do |
1213 | for alic in ${ACCEPT_LICENSE} ; do |
| 1202 | if [[ ${alic} == * || ${alic} == ${l} ]]; then |
1214 | if [[ ${alic} == ${l} ]]; then |
| 1203 | set +o noglob; set -${shopts} #reset old shell opts |
1215 | set +o noglob; set -${shopts} #reset old shell opts |
| 1204 | return 0 |
1216 | return 0 |
| 1205 | fi |
1217 | fi |
| 1206 | done |
1218 | done |
| 1207 | set +o noglob; set -$shopts #reset old shell opts |
1219 | set +o noglob; set -$shopts #reset old shell opts |
| … | |
… | |
| 1585 | local PKG=$(best_version $1) |
1597 | local PKG=$(best_version $1) |
| 1586 | [[ -z ${PKG} ]] && die "Unable to resolve $1 to an installed package" |
1598 | [[ -z ${PKG} ]] && die "Unable to resolve $1 to an installed package" |
| 1587 | shift |
1599 | shift |
| 1588 | |
1600 | |
| 1589 | local USEFILE=${ROOT}/var/db/pkg/${PKG}/USE |
1601 | local USEFILE=${ROOT}/var/db/pkg/${PKG}/USE |
|
|
1602 | local IUSEFILE=${ROOT}/var/db/pkg/${PKG}/IUSE |
| 1590 | |
1603 | |
| 1591 | # if the USE file doesnt exist, assume the $PKG is either |
1604 | # if the USE file doesnt exist, assume the $PKG is either |
| 1592 | # injected or package.provided |
1605 | # injected or package.provided |
| 1593 | [[ ! -e ${USEFILE} ]] && die "Unable to determine what USE flags $PKG was built with" |
1606 | [[ ! -e ${USEFILE} ]] && die "Unable to determine what USE flags $PKG was built with" |
|
|
1607 | |
|
|
1608 | local IUSE_BUILT=$(<${IUSEFILE}) |
|
|
1609 | # Don't check USE_EXPAND #147237 |
|
|
1610 | local expand |
|
|
1611 | for expand in $(echo ${USE_EXPAND} | tr '[:upper:]' '[:lower:]') ; do |
|
|
1612 | if [[ $1 == ${expand}_* ]] ; then |
|
|
1613 | expand="" |
|
|
1614 | break |
|
|
1615 | fi |
|
|
1616 | done |
|
|
1617 | if [[ -n ${expand} ]] ; then |
|
|
1618 | has $1 ${IUSE_BUILT} || die "$PKG does not actually support the $1 USE flag!" |
|
|
1619 | fi |
| 1594 | |
1620 | |
| 1595 | local USE_BUILT=$(<${USEFILE}) |
1621 | local USE_BUILT=$(<${USEFILE}) |
| 1596 | while [[ $# -gt 0 ]] ; do |
1622 | while [[ $# -gt 0 ]] ; do |
| 1597 | if [[ ${opt} = "-o" ]] ; then |
1623 | if [[ ${opt} = "-o" ]] ; then |
| 1598 | has $1 ${USE_BUILT} && return 0 |
1624 | has $1 ${USE_BUILT} && return 0 |