| 1 | # Copyright 1999-2004 Gentoo Technologies, Inc. |
1 | # Copyright 1999-2004 Gentoo Technologies, Inc. |
| 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.78 2004/02/09 17:08:44 brad_mssw Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.86 2004/03/25 01:28:11 vapier 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. |
| … | |
… | |
| 10 | # NB: If you add anything, please comment it! |
10 | # NB: If you add anything, please comment it! |
| 11 | |
11 | |
| 12 | ECLASS=eutils |
12 | ECLASS=eutils |
| 13 | INHERITED="$INHERITED $ECLASS" |
13 | INHERITED="$INHERITED $ECLASS" |
| 14 | |
14 | |
| 15 | newdepend "!bootstrap? ( sys-devel/patch )" |
15 | DEPEND="!bootstrap? ( sys-devel/patch )" |
| 16 | |
16 | |
| 17 | DESCRIPTION="Based on the ${ECLASS} eclass" |
17 | DESCRIPTION="Based on the ${ECLASS} eclass" |
| 18 | |
18 | |
| 19 | # This function generate linker scripts in /usr/lib for dynamic |
19 | # This function generate linker scripts in /usr/lib for dynamic |
| 20 | # libs in /lib. This is to fix linking problems when you have |
20 | # libs in /lib. This is to fix linking problems when you have |
| … | |
… | |
| 456 | fi |
456 | fi |
| 457 | fi |
457 | fi |
| 458 | } |
458 | } |
| 459 | |
459 | |
| 460 | # Cheap replacement for when debianutils (and thus mktemp) |
460 | # Cheap replacement for when debianutils (and thus mktemp) |
| 461 | # do not exist on the users system |
461 | # does not exist on the users system |
| 462 | # vapier@gentoo.org |
462 | # vapier@gentoo.org |
| 463 | # |
463 | # |
| 464 | # Takes just 1 parameter (the directory to create tmpfile in) |
464 | # Takes just 1 parameter (the directory to create tmpfile in) |
| 465 | mymktemp() { |
465 | mymktemp() { |
| 466 | local topdir="$1" |
466 | local topdir="$1" |
| … | |
… | |
| 496 | then |
496 | then |
| 497 | eerror "No username specified !" |
497 | eerror "No username specified !" |
| 498 | die "Cannot call enewuser without a username" |
498 | die "Cannot call enewuser without a username" |
| 499 | fi |
499 | fi |
| 500 | |
500 | |
| 501 | # setup a file for testing usernames/groups |
|
|
| 502 | local tmpfile="`mymktemp ${T}`" |
|
|
| 503 | chown ${euser} ${tmpfile} >& /dev/null |
|
|
| 504 | local realuser="`ls -l ${tmpfile} | awk '{print $3}'`" |
|
|
| 505 | |
|
|
| 506 | # see if user already exists |
501 | # lets see if the username already exists |
| 507 | if [ "${euser}" == "${realuser}" ] |
502 | if [ "${euser}" == "`getent passwd \"${euser}\" | cut -d: -f1`" ] |
| 508 | then |
503 | then |
| 509 | return 0 |
504 | return 0 |
| 510 | fi |
505 | fi |
| 511 | einfo "Adding user '${euser}' to your system ..." |
506 | einfo "Adding user '${euser}' to your system ..." |
| 512 | |
507 | |
| … | |
… | |
| 517 | local euid="$1"; shift |
512 | local euid="$1"; shift |
| 518 | if [ ! -z "${euid}" ] && [ "${euid}" != "-1" ] |
513 | if [ ! -z "${euid}" ] && [ "${euid}" != "-1" ] |
| 519 | then |
514 | then |
| 520 | if [ "${euid}" -gt 0 ] |
515 | if [ "${euid}" -gt 0 ] |
| 521 | then |
516 | then |
| 522 | opts="${opts} -u ${euid}" |
517 | if [ ! -z "`getent passwd ${euid}`" ] |
|
|
518 | then |
|
|
519 | euid="next" |
|
|
520 | fi |
| 523 | else |
521 | else |
| 524 | eerror "Userid given but is not greater than 0 !" |
522 | eerror "Userid given but is not greater than 0 !" |
| 525 | die "${euid} is not a valid UID" |
523 | die "${euid} is not a valid UID" |
| 526 | fi |
524 | fi |
| 527 | else |
525 | else |
| 528 | euid="next available" |
526 | euid="next" |
| 529 | fi |
527 | fi |
|
|
528 | if [ "${euid}" == "next" ] |
|
|
529 | then |
|
|
530 | for euid in `seq 101 999` ; do |
|
|
531 | [ -z "`getent passwd ${euid}`" ] && break |
|
|
532 | done |
|
|
533 | fi |
|
|
534 | opts="${opts} -u ${euid}" |
| 530 | einfo " - Userid: ${euid}" |
535 | einfo " - Userid: ${euid}" |
| 531 | |
536 | |
| 532 | # handle shell |
537 | # handle shell |
| 533 | local eshell="$1"; shift |
538 | local eshell="$1"; shift |
| 534 | if [ ! -z "${eshell}" ] && [ "${eshell}" != "-1" ] |
539 | if [ ! -z "${eshell}" ] && [ "${eshell}" != "-1" ] |
| … | |
… | |
| 555 | |
560 | |
| 556 | # handle groups |
561 | # handle groups |
| 557 | local egroups="$1"; shift |
562 | local egroups="$1"; shift |
| 558 | if [ ! -z "${egroups}" ] |
563 | if [ ! -z "${egroups}" ] |
| 559 | then |
564 | then |
| 560 | local realgroup= |
|
|
| 561 | local oldifs="${IFS}" |
565 | local oldifs="${IFS}" |
| 562 | export IFS="," |
566 | export IFS="," |
| 563 | for g in ${egroups} |
567 | for g in ${egroups} |
| 564 | do |
568 | do |
| 565 | chgrp ${g} ${tmpfile} >& /dev/null |
569 | if [ -z "`getent group \"${g}\"`" ] |
| 566 | realgroup="`ls -l ${tmpfile} | awk '{print $4}'`" |
|
|
| 567 | if [ "${g}" != "${realgroup}" ] |
|
|
| 568 | then |
570 | then |
| 569 | eerror "You must add ${g} to the system first" |
571 | eerror "You must add group ${g} to the system first" |
| 570 | die "${g} is not a valid GID" |
572 | die "${g} is not a valid GID" |
| 571 | fi |
573 | fi |
| 572 | done |
574 | done |
| 573 | export IFS="${oldifs}" |
575 | export IFS="${oldifs}" |
| 574 | opts="${opts} -g ${egroups}" |
576 | opts="${opts} -g ${egroups}" |
| … | |
… | |
| 618 | then |
620 | then |
| 619 | eerror "No group specified !" |
621 | eerror "No group specified !" |
| 620 | die "Cannot call enewgroup without a group" |
622 | die "Cannot call enewgroup without a group" |
| 621 | fi |
623 | fi |
| 622 | |
624 | |
| 623 | # setup a file for testing groupname |
|
|
| 624 | local tmpfile="`mymktemp ${T}`" |
|
|
| 625 | chgrp ${egroup} ${tmpfile} >& /dev/null |
|
|
| 626 | local realgroup="`ls -l ${tmpfile} | awk '{print $4}'`" |
|
|
| 627 | |
|
|
| 628 | # see if group already exists |
625 | # see if group already exists |
| 629 | if [ "${egroup}" == "${realgroup}" ] |
626 | if [ "${egroup}" == "`getent group \"${egroup}\" | cut -d: -f1`" ] |
| 630 | then |
627 | then |
| 631 | return 0 |
628 | return 0 |
| 632 | fi |
629 | fi |
| 633 | einfo "Adding group '${egroup}' to your system ..." |
630 | einfo "Adding group '${egroup}' to your system ..." |
| 634 | |
631 | |
| … | |
… | |
| 639 | local egid="$1"; shift |
636 | local egid="$1"; shift |
| 640 | if [ ! -z "${egid}" ] |
637 | if [ ! -z "${egid}" ] |
| 641 | then |
638 | then |
| 642 | if [ "${egid}" -gt 0 ] |
639 | if [ "${egid}" -gt 0 ] |
| 643 | then |
640 | then |
|
|
641 | if [ -z "`getent group ${egid}`" ] |
|
|
642 | then |
| 644 | opts="${opts} -g ${egid}" |
643 | opts="${opts} -g ${egid}" |
|
|
644 | else |
|
|
645 | egid="next available; requested gid taken" |
|
|
646 | fi |
| 645 | else |
647 | else |
| 646 | eerror "Groupid given but is not greater than 0 !" |
648 | eerror "Groupid given but is not greater than 0 !" |
| 647 | die "${egid} is not a valid GID" |
649 | die "${egid} is not a valid GID" |
| 648 | fi |
650 | fi |
| 649 | else |
651 | else |
| … | |
… | |
| 696 | |
698 | |
| 697 | local exec="${1}" |
699 | local exec="${1}" |
| 698 | local name="${2:-${PN}}" |
700 | local name="${2:-${PN}}" |
| 699 | local icon="${3:-${PN}.png}" |
701 | local icon="${3:-${PN}.png}" |
| 700 | local type="${4}" |
702 | local type="${4}" |
|
|
703 | local subdir="${6}" |
| 701 | local path="${5:-${GAMES_PREFIX}}" |
704 | local path="${5:-${GAMES_PREFIX}}" |
| 702 | if [ -z "${type}" ] |
705 | if [ -z "${type}" ] |
| 703 | then |
706 | then |
| 704 | case ${CATEGORY} in |
707 | case ${CATEGORY} in |
| 705 | "app-emulation") |
708 | "app-emulation") |
| 706 | type=Emulator |
709 | type=Emulator |
|
|
710 | subdir="Emulation" |
| 707 | ;; |
711 | ;; |
| 708 | "games-"*) |
712 | "games-"*) |
| 709 | type=Game |
713 | type=Game |
|
|
714 | subdir="Games" |
| 710 | ;; |
715 | ;; |
| 711 | "net-"*) |
716 | "net-"*) |
| 712 | type=Network; |
717 | type=Network |
|
|
718 | subdir="${type}" |
| 713 | ;; |
719 | ;; |
| 714 | *) |
720 | *) |
| 715 | type= |
721 | type= |
|
|
722 | subdir= |
| 716 | ;; |
723 | ;; |
| 717 | esac |
724 | esac |
| 718 | fi |
725 | fi |
| 719 | local desktop="${T}/${exec}.desktop" |
726 | local desktop="${T}/${exec}.desktop" |
| 720 | |
727 | |
| … | |
… | |
| 750 | # done |
757 | # done |
| 751 | #fi |
758 | #fi |
| 752 | |
759 | |
| 753 | if [ -d "/usr/share/applnk" ] |
760 | if [ -d "/usr/share/applnk" ] |
| 754 | then |
761 | then |
| 755 | insinto /usr/share/applnk/${type} |
762 | insinto /usr/share/applnk/${subdir} |
| 756 | doins ${desktop} |
763 | doins ${desktop} |
| 757 | fi |
764 | fi |
| 758 | |
765 | |
| 759 | return 0 |
766 | return 0 |
| 760 | } |
767 | } |
| … | |
… | |
| 1100 | # remember, you can only go forward in the cd chain, you can't go back. |
1107 | # remember, you can only go forward in the cd chain, you can't go back. |
| 1101 | cdrom_load_next_cd() { |
1108 | cdrom_load_next_cd() { |
| 1102 | export CDROM_CURRENT_CD=$((CDROM_CURRENT_CD + 1)) |
1109 | export CDROM_CURRENT_CD=$((CDROM_CURRENT_CD + 1)) |
| 1103 | local var= |
1110 | local var= |
| 1104 | |
1111 | |
|
|
1112 | if [ ! -z "${CD_ROOT}" ] ; then |
|
|
1113 | einfo "Using same root as before for CD #${CDROM_CURRENT_CD}" |
|
|
1114 | return |
|
|
1115 | fi |
|
|
1116 | |
| 1105 | unset CDROM_ROOT |
1117 | unset CDROM_ROOT |
| 1106 | var=CDROM_ROOTS_${CDROM_CURRENT_CD} |
1118 | var=CDROM_ROOTS_${CDROM_CURRENT_CD} |
| 1107 | if [ -z "${!var}" ] ; then |
1119 | if [ -z "${!var}" ] ; then |
| 1108 | var="CDROM_CHECK_${CDROM_CURRENT_CD}" |
1120 | var="CDROM_CHECK_${CDROM_CURRENT_CD}" |
| 1109 | cdrom_locate_file_on_cd ${!var} |
1121 | cdrom_locate_file_on_cd ${!var} |