| 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.87 2004/04/01 20:50:43 iggy 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 |
| … | |
… | |
| 431 | then |
431 | then |
| 432 | jobs="$((`grep -c ^processor /proc/cpuinfo` * 2))" |
432 | jobs="$((`grep -c ^processor /proc/cpuinfo` * 2))" |
| 433 | else |
433 | else |
| 434 | jobs=2 |
434 | jobs=2 |
| 435 | fi |
435 | fi |
|
|
436 | elif [ "${ARCH}" = "s390" ] |
|
|
437 | then |
|
|
438 | # s390 has "# processors : " |
|
|
439 | jobs="$((`grep "^\# processors" /proc/cpuinfo | sed -e "s/^.*: //"` * 2))" |
| 436 | else |
440 | else |
| 437 | jobs="$((`grep -c ^cpu /proc/cpuinfo` * 2))" |
441 | jobs="$((`grep -c ^cpu /proc/cpuinfo` * 2))" |
| 438 | die "Unknown ARCH -- ${ARCH}!" |
442 | die "Unknown ARCH -- ${ARCH}!" |
| 439 | fi |
443 | fi |
| 440 | |
444 | |
| … | |
… | |
| 456 | fi |
460 | fi |
| 457 | fi |
461 | fi |
| 458 | } |
462 | } |
| 459 | |
463 | |
| 460 | # Cheap replacement for when debianutils (and thus mktemp) |
464 | # Cheap replacement for when debianutils (and thus mktemp) |
| 461 | # do not exist on the users system |
465 | # does not exist on the users system |
| 462 | # vapier@gentoo.org |
466 | # vapier@gentoo.org |
| 463 | # |
467 | # |
| 464 | # Takes just 1 parameter (the directory to create tmpfile in) |
468 | # Takes just 1 parameter (the directory to create tmpfile in) |
| 465 | mymktemp() { |
469 | mymktemp() { |
| 466 | local topdir="$1" |
470 | local topdir="$1" |
| … | |
… | |
| 496 | then |
500 | then |
| 497 | eerror "No username specified !" |
501 | eerror "No username specified !" |
| 498 | die "Cannot call enewuser without a username" |
502 | die "Cannot call enewuser without a username" |
| 499 | fi |
503 | fi |
| 500 | |
504 | |
| 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 |
505 | # lets see if the username already exists |
| 507 | if [ "${euser}" == "${realuser}" ] |
506 | if [ "${euser}" == "`getent passwd \"${euser}\" | cut -d: -f1`" ] |
| 508 | then |
507 | then |
| 509 | return 0 |
508 | return 0 |
| 510 | fi |
509 | fi |
| 511 | einfo "Adding user '${euser}' to your system ..." |
510 | einfo "Adding user '${euser}' to your system ..." |
| 512 | |
511 | |
| … | |
… | |
| 517 | local euid="$1"; shift |
516 | local euid="$1"; shift |
| 518 | if [ ! -z "${euid}" ] && [ "${euid}" != "-1" ] |
517 | if [ ! -z "${euid}" ] && [ "${euid}" != "-1" ] |
| 519 | then |
518 | then |
| 520 | if [ "${euid}" -gt 0 ] |
519 | if [ "${euid}" -gt 0 ] |
| 521 | then |
520 | then |
| 522 | opts="${opts} -u ${euid}" |
521 | if [ ! -z "`getent passwd ${euid}`" ] |
|
|
522 | then |
|
|
523 | euid="next" |
|
|
524 | fi |
| 523 | else |
525 | else |
| 524 | eerror "Userid given but is not greater than 0 !" |
526 | eerror "Userid given but is not greater than 0 !" |
| 525 | die "${euid} is not a valid UID" |
527 | die "${euid} is not a valid UID" |
| 526 | fi |
528 | fi |
| 527 | else |
529 | else |
| 528 | euid="next available" |
530 | euid="next" |
| 529 | fi |
531 | fi |
|
|
532 | if [ "${euid}" == "next" ] |
|
|
533 | then |
|
|
534 | for euid in `seq 101 999` ; do |
|
|
535 | [ -z "`getent passwd ${euid}`" ] && break |
|
|
536 | done |
|
|
537 | fi |
|
|
538 | opts="${opts} -u ${euid}" |
| 530 | einfo " - Userid: ${euid}" |
539 | einfo " - Userid: ${euid}" |
| 531 | |
540 | |
| 532 | # handle shell |
541 | # handle shell |
| 533 | local eshell="$1"; shift |
542 | local eshell="$1"; shift |
| 534 | if [ ! -z "${eshell}" ] && [ "${eshell}" != "-1" ] |
543 | if [ ! -z "${eshell}" ] && [ "${eshell}" != "-1" ] |
| … | |
… | |
| 555 | |
564 | |
| 556 | # handle groups |
565 | # handle groups |
| 557 | local egroups="$1"; shift |
566 | local egroups="$1"; shift |
| 558 | if [ ! -z "${egroups}" ] |
567 | if [ ! -z "${egroups}" ] |
| 559 | then |
568 | then |
| 560 | local realgroup= |
|
|
| 561 | local oldifs="${IFS}" |
569 | local oldifs="${IFS}" |
| 562 | export IFS="," |
570 | export IFS="," |
| 563 | for g in ${egroups} |
571 | for g in ${egroups} |
| 564 | do |
572 | do |
| 565 | chgrp ${g} ${tmpfile} >& /dev/null |
573 | if [ -z "`getent group \"${g}\"`" ] |
| 566 | realgroup="`ls -l ${tmpfile} | awk '{print $4}'`" |
|
|
| 567 | if [ "${g}" != "${realgroup}" ] |
|
|
| 568 | then |
574 | then |
| 569 | eerror "You must add ${g} to the system first" |
575 | eerror "You must add group ${g} to the system first" |
| 570 | die "${g} is not a valid GID" |
576 | die "${g} is not a valid GID" |
| 571 | fi |
577 | fi |
| 572 | done |
578 | done |
| 573 | export IFS="${oldifs}" |
579 | export IFS="${oldifs}" |
| 574 | opts="${opts} -g ${egroups}" |
580 | opts="${opts} -g ${egroups}" |
| … | |
… | |
| 618 | then |
624 | then |
| 619 | eerror "No group specified !" |
625 | eerror "No group specified !" |
| 620 | die "Cannot call enewgroup without a group" |
626 | die "Cannot call enewgroup without a group" |
| 621 | fi |
627 | fi |
| 622 | |
628 | |
| 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 |
629 | # see if group already exists |
| 629 | if [ "${egroup}" == "${realgroup}" ] |
630 | if [ "${egroup}" == "`getent group \"${egroup}\" | cut -d: -f1`" ] |
| 630 | then |
631 | then |
| 631 | return 0 |
632 | return 0 |
| 632 | fi |
633 | fi |
| 633 | einfo "Adding group '${egroup}' to your system ..." |
634 | einfo "Adding group '${egroup}' to your system ..." |
| 634 | |
635 | |
| … | |
… | |
| 639 | local egid="$1"; shift |
640 | local egid="$1"; shift |
| 640 | if [ ! -z "${egid}" ] |
641 | if [ ! -z "${egid}" ] |
| 641 | then |
642 | then |
| 642 | if [ "${egid}" -gt 0 ] |
643 | if [ "${egid}" -gt 0 ] |
| 643 | then |
644 | then |
|
|
645 | if [ -z "`getent group ${egid}`" ] |
|
|
646 | then |
| 644 | opts="${opts} -g ${egid}" |
647 | opts="${opts} -g ${egid}" |
|
|
648 | else |
|
|
649 | egid="next available; requested gid taken" |
|
|
650 | fi |
| 645 | else |
651 | else |
| 646 | eerror "Groupid given but is not greater than 0 !" |
652 | eerror "Groupid given but is not greater than 0 !" |
| 647 | die "${egid} is not a valid GID" |
653 | die "${egid} is not a valid GID" |
| 648 | fi |
654 | fi |
| 649 | else |
655 | else |
| … | |
… | |
| 696 | |
702 | |
| 697 | local exec="${1}" |
703 | local exec="${1}" |
| 698 | local name="${2:-${PN}}" |
704 | local name="${2:-${PN}}" |
| 699 | local icon="${3:-${PN}.png}" |
705 | local icon="${3:-${PN}.png}" |
| 700 | local type="${4}" |
706 | local type="${4}" |
|
|
707 | local subdir="${6}" |
| 701 | local path="${5:-${GAMES_PREFIX}}" |
708 | local path="${5:-${GAMES_PREFIX}}" |
| 702 | if [ -z "${type}" ] |
709 | if [ -z "${type}" ] |
| 703 | then |
710 | then |
| 704 | case ${CATEGORY} in |
711 | case ${CATEGORY} in |
| 705 | "app-emulation") |
712 | "app-emulation") |
| 706 | type=Emulator |
713 | type=Emulator |
|
|
714 | subdir="Emulation" |
| 707 | ;; |
715 | ;; |
| 708 | "games-"*) |
716 | "games-"*) |
| 709 | type=Game |
717 | type=Game |
|
|
718 | subdir="Games" |
| 710 | ;; |
719 | ;; |
| 711 | "net-"*) |
720 | "net-"*) |
| 712 | type=Network; |
721 | type=Network |
|
|
722 | subdir="${type}" |
| 713 | ;; |
723 | ;; |
| 714 | *) |
724 | *) |
| 715 | type= |
725 | type= |
|
|
726 | subdir= |
| 716 | ;; |
727 | ;; |
| 717 | esac |
728 | esac |
| 718 | fi |
729 | fi |
| 719 | local desktop="${T}/${exec}.desktop" |
730 | local desktop="${T}/${exec}.desktop" |
| 720 | |
731 | |
| … | |
… | |
| 750 | # done |
761 | # done |
| 751 | #fi |
762 | #fi |
| 752 | |
763 | |
| 753 | if [ -d "/usr/share/applnk" ] |
764 | if [ -d "/usr/share/applnk" ] |
| 754 | then |
765 | then |
| 755 | insinto /usr/share/applnk/${type} |
766 | insinto /usr/share/applnk/${subdir} |
| 756 | doins ${desktop} |
767 | doins ${desktop} |
| 757 | fi |
768 | fi |
| 758 | |
769 | |
| 759 | return 0 |
770 | return 0 |
| 760 | } |
771 | } |
| … | |
… | |
| 1100 | # remember, you can only go forward in the cd chain, you can't go back. |
1111 | # remember, you can only go forward in the cd chain, you can't go back. |
| 1101 | cdrom_load_next_cd() { |
1112 | cdrom_load_next_cd() { |
| 1102 | export CDROM_CURRENT_CD=$((CDROM_CURRENT_CD + 1)) |
1113 | export CDROM_CURRENT_CD=$((CDROM_CURRENT_CD + 1)) |
| 1103 | local var= |
1114 | local var= |
| 1104 | |
1115 | |
|
|
1116 | if [ ! -z "${CD_ROOT}" ] ; then |
|
|
1117 | einfo "Using same root as before for CD #${CDROM_CURRENT_CD}" |
|
|
1118 | return |
|
|
1119 | fi |
|
|
1120 | |
| 1105 | unset CDROM_ROOT |
1121 | unset CDROM_ROOT |
| 1106 | var=CDROM_ROOTS_${CDROM_CURRENT_CD} |
1122 | var=CDROM_ROOTS_${CDROM_CURRENT_CD} |
| 1107 | if [ -z "${!var}" ] ; then |
1123 | if [ -z "${!var}" ] ; then |
| 1108 | var="CDROM_CHECK_${CDROM_CURRENT_CD}" |
1124 | var="CDROM_CHECK_${CDROM_CURRENT_CD}" |
| 1109 | cdrom_locate_file_on_cd ${!var} |
1125 | cdrom_locate_file_on_cd ${!var} |