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

Diff of /eclass/eutils.eclass

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

Revision 1.80 Revision 1.92
1# Copyright 1999-2004 Gentoo Technologies, Inc. 1# Copyright 1999-2004 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.80 2004/02/21 07:48:12 vapier Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.92 2004/08/03 17:24:52 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
12ECLASS=eutils 12ECLASS=eutils
13INHERITED="$INHERITED $ECLASS" 13INHERITED="$INHERITED $ECLASS"
14 14
15newdepend "!bootstrap? ( sys-devel/patch )" 15DEPEND="!bootstrap? ( sys-devel/patch )"
16 16
17DESCRIPTION="Based on the ${ECLASS} eclass" 17DESCRIPTION="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
258 else 258 else
259 PATCH_TARGET="${x}" 259 PATCH_TARGET="${x}"
260 fi 260 fi
261 261
262 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 262 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
263 echo "patch ${popts} -p${count} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 263 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
264 264
265 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 265 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
266 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 266 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
267 267
268 if [ "${PATCH_SUFFIX}" != "patch" ] 268 if [ "${PATCH_SUFFIX}" != "patch" ]
275 count=5 275 count=5
276 break 276 break
277 fi 277 fi
278 fi 278 fi
279 279
280 if (cat ${PATCH_TARGET} | patch ${popts} --dry-run -f -p${count}) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1 280 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1
281 then 281 then
282 draw_line "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 282 draw_line "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
283 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 283 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
284 echo "ACTUALLY APPLYING ${x##*/}..." >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 284 echo "ACTUALLY APPLYING ${x##*/}..." >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
285 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 285 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
286 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 286 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
287 287
288 cat ${PATCH_TARGET} | patch ${popts} -p${count} >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 2>&1 288 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 2>&1
289 289
290 if [ "$?" -ne 0 ] 290 if [ "$?" -ne 0 ]
291 then 291 then
292 cat ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 292 cat ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
293 echo 293 echo
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
471 mktemp -p ${topdir} 475 mktemp -p ${topdir}
472 else 476 else
473 local tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}" 477 local tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}"
474 touch ${tmp} 478 touch ${tmp}
475 echo ${tmp} 479 echo ${tmp}
480 fi
481}
482
483# Small wrapper for getent (Linux) and nidump (Mac OS X)
484# used in enewuser()/enewgroup()
485# Joe Jezak <josejx@gmail.com> and usata@gentoo.org
486#
487# egetent(database, key)
488egetent() {
489 if [ "${ARCH}" == "macos" ] ; then
490 case "$2" in
491 *[!0-9]*) # Non numeric
492 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
493 ;;
494 *) # Numeric
495 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
496 ;;
497 esac
498 else
499 getent $1 $2
476 fi 500 fi
477} 501}
478 502
479# Simplify/standardize adding users to the system 503# Simplify/standardize adding users to the system
480# vapier@gentoo.org 504# vapier@gentoo.org
496 then 520 then
497 eerror "No username specified !" 521 eerror "No username specified !"
498 die "Cannot call enewuser without a username" 522 die "Cannot call enewuser without a username"
499 fi 523 fi
500 524
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 525 # lets see if the username already exists
507 if [ "${euser}" == "${realuser}" ] 526 if [ "${euser}" == "`egetent passwd \"${euser}\" | cut -d: -f1`" ]
508 then 527 then
509 return 0 528 return 0
510 fi 529 fi
511 einfo "Adding user '${euser}' to your system ..." 530 einfo "Adding user '${euser}' to your system ..."
512 531
517 local euid="$1"; shift 536 local euid="$1"; shift
518 if [ ! -z "${euid}" ] && [ "${euid}" != "-1" ] 537 if [ ! -z "${euid}" ] && [ "${euid}" != "-1" ]
519 then 538 then
520 if [ "${euid}" -gt 0 ] 539 if [ "${euid}" -gt 0 ]
521 then 540 then
522 opts="${opts} -u ${euid}" 541 if [ ! -z "`egetent passwd ${euid}`" ]
542 then
543 euid="next"
544 fi
523 else 545 else
524 eerror "Userid given but is not greater than 0 !" 546 eerror "Userid given but is not greater than 0 !"
525 die "${euid} is not a valid UID" 547 die "${euid} is not a valid UID"
526 fi 548 fi
527 else 549 else
528 euid="next available" 550 euid="next"
551 fi
552 if [ "${euid}" == "next" ]
553 then
554 local pwrange
555 if [ "${ARCH}" == "macos" ] ; then
556 pwrange="`jot 898 101`"
557 else
558 pwrange="`seq 101 999`"
529 fi 559 fi
560 for euid in ${pwrange} ; do
561 [ -z "`egetent passwd ${euid}`" ] && break
562 done
563 fi
564 opts="${opts} -u ${euid}"
530 einfo " - Userid: ${euid}" 565 einfo " - Userid: ${euid}"
531 566
532 # handle shell 567 # handle shell
533 local eshell="$1"; shift 568 local eshell="$1"; shift
534 if [ ! -z "${eshell}" ] && [ "${eshell}" != "-1" ] 569 if [ ! -z "${eshell}" ] && [ "${eshell}" != "-1" ]
555 590
556 # handle groups 591 # handle groups
557 local egroups="$1"; shift 592 local egroups="$1"; shift
558 if [ ! -z "${egroups}" ] 593 if [ ! -z "${egroups}" ]
559 then 594 then
560 local realgroup=
561 local oldifs="${IFS}" 595 local oldifs="${IFS}"
562 export IFS="," 596 export IFS=","
563 for g in ${egroups} 597 for g in ${egroups}
564 do 598 do
565 chgrp ${g} ${tmpfile} >& /dev/null 599 if [ -z "`egetent group \"${g}\"`" ]
566 realgroup="`ls -l ${tmpfile} | awk '{print $4}'`"
567 if [ "${g}" != "${realgroup}" ]
568 then 600 then
569 eerror "You must add ${g} to the system first" 601 eerror "You must add group ${g} to the system first"
570 die "${g} is not a valid GID" 602 die "${g} is not a valid GID"
571 fi 603 fi
572 done 604 done
573 export IFS="${oldifs}" 605 export IFS="${oldifs}"
574 opts="${opts} -g ${egroups}" 606 opts="${opts} -g ${egroups}"
579 611
580 # handle extra and add the user 612 # handle extra and add the user
581 local eextra="$@" 613 local eextra="$@"
582 local oldsandbox="${SANDBOX_ON}" 614 local oldsandbox="${SANDBOX_ON}"
583 export SANDBOX_ON="0" 615 export SANDBOX_ON="0"
616 if [ "${ARCH}" == "macos" ];
617 then
618 ### Make the user
584 if [ -z "${eextra}" ] 619 if [ -z "${eextra}" ]
585 then 620 then
621 dscl . create /users/${euser} uid ${euid}
622 dscl . create /users/${euser} shell ${eshell}
623 dscl . create /users/${euser} home ${ehome}
624 dscl . create /users/${euser} realname "added by portage for ${PN}"
625 ### Add the user to the groups specified
626 for g in ${egroups}
627 do
628 dscl . merge /groups/${g} users ${euser}
629 done
630 else
631 einfo "Extra options are not supported on macos yet"
632 einfo "Please report the ebuild along with the info below"
633 einfo "eextra: ${eextra}"
634 die "Required function missing"
635 fi
636 else
637 if [ -z "${eextra}" ]
638 then
586 useradd ${opts} ${euser} \ 639 useradd ${opts} ${euser} \
587 -c "added by portage for ${PN}" \ 640 -c "added by portage for ${PN}" \
588 || die "enewuser failed" 641 || die "enewuser failed"
589 else 642 else
590 einfo " - Extra: ${eextra}" 643 einfo " - Extra: ${eextra}"
591 useradd ${opts} ${euser} ${eextra} \ 644 useradd ${opts} ${euser} ${eextra} \
592 || die "enewuser failed" 645 || die "enewuser failed"
646 fi
593 fi 647 fi
594 export SANDBOX_ON="${oldsandbox}" 648 export SANDBOX_ON="${oldsandbox}"
595 649
596 if [ ! -e "${ehome}" ] && [ ! -e "${D}/${ehome}" ] 650 if [ ! -e "${ehome}" ] && [ ! -e "${D}/${ehome}" ]
597 then 651 then
618 then 672 then
619 eerror "No group specified !" 673 eerror "No group specified !"
620 die "Cannot call enewgroup without a group" 674 die "Cannot call enewgroup without a group"
621 fi 675 fi
622 676
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 677 # see if group already exists
629 if [ "${egroup}" == "${realgroup}" ] 678 if [ "${egroup}" == "`egetent group \"${egroup}\" | cut -d: -f1`" ]
630 then 679 then
631 return 0 680 return 0
632 fi 681 fi
633 einfo "Adding group '${egroup}' to your system ..." 682 einfo "Adding group '${egroup}' to your system ..."
634 683
639 local egid="$1"; shift 688 local egid="$1"; shift
640 if [ ! -z "${egid}" ] 689 if [ ! -z "${egid}" ]
641 then 690 then
642 if [ "${egid}" -gt 0 ] 691 if [ "${egid}" -gt 0 ]
643 then 692 then
693 if [ -z "`egetent group ${egid}`" ]
694 then
695 if [ "${ARCH}" == "macos" ] ; then
696 opts="${opts} ${egid}"
697 else
644 opts="${opts} -g ${egid}" 698 opts="${opts} -g ${egid}"
699 fi
700 else
701 egid="next available; requested gid taken"
702 fi
645 else 703 else
646 eerror "Groupid given but is not greater than 0 !" 704 eerror "Groupid given but is not greater than 0 !"
647 die "${egid} is not a valid GID" 705 die "${egid} is not a valid GID"
648 fi 706 fi
649 else 707 else
656 opts="${opts} ${eextra}" 714 opts="${opts} ${eextra}"
657 715
658 # add the group 716 # add the group
659 local oldsandbox="${SANDBOX_ON}" 717 local oldsandbox="${SANDBOX_ON}"
660 export SANDBOX_ON="0" 718 export SANDBOX_ON="0"
719 if [ "${ARCH}" == "macos" ];
720 then
721 if [ ! -z "${eextra}" ];
722 then
723 einfo "Extra options are not supported on macos yet"
724 einfo "Please report the ebuild along with the info below"
725 einfo "eextra: ${eextra}"
726 die "Required function missing"
727 fi
728
729 # If we need the next available
730 case ${egid} in
731 *[!0-9]*) # Non numeric
732 for egid in `jot 898 101`; do
733 [ -z "`egetent group ${egid}`" ] && break
734 done
735 esac
736 dscl . create /groups/${egroup} gid ${egid}
737 dscl . create /groups/${egroup} passwd '*'
738 else
661 groupadd ${opts} ${egroup} || die "enewgroup failed" 739 groupadd ${opts} ${egroup} || die "enewgroup failed"
740 fi
662 export SANDBOX_ON="${oldsandbox}" 741 export SANDBOX_ON="${oldsandbox}"
663} 742}
664 743
665# Simple script to replace 'dos2unix' binaries 744# Simple script to replace 'dos2unix' binaries
666# vapier@gentoo.org 745# vapier@gentoo.org
687# name: the name that will show up in the menu 766# name: the name that will show up in the menu
688# icon: give your little like a pretty little icon ... 767# icon: give your little like a pretty little icon ...
689# this can be relative (to /usr/share/pixmaps) or 768# this can be relative (to /usr/share/pixmaps) or
690# a full path to an icon 769# a full path to an icon
691# type: what kind of application is this ? for categories: 770# type: what kind of application is this ? for categories:
692# http://www.freedesktop.org/standards/menu/draft/menu-spec/menu-spec.html 771# http://www.freedesktop.org/standards/menu-spec/
693# path: if your app needs to startup in a specific dir 772# path: if your app needs to startup in a specific dir
694make_desktop_entry() { 773make_desktop_entry() {
695 [ -z "$1" ] && eerror "You must specify the executable" && return 1 774 [ -z "$1" ] && eerror "You must specify the executable" && return 1
696 775
697 local exec="${1}" 776 local exec="${1}"
698 local name="${2:-${PN}}" 777 local name="${2:-${PN}}"
699 local icon="${3:-${PN}.png}" 778 local icon="${3:-${PN}.png}"
700 local type="${4}" 779 local type="${4}"
780 local subdir="${6}"
701 local path="${5:-${GAMES_PREFIX}}" 781 local path="${5:-${GAMES_PREFIX}}"
702 if [ -z "${type}" ] 782 if [ -z "${type}" ]
703 then 783 then
704 case ${CATEGORY} in 784 case ${CATEGORY} in
705 "app-emulation") 785 "app-emulation")
706 type=Emulator 786 type=Emulator
787 subdir="Emulation"
707 ;; 788 ;;
708 "games-"*) 789 "games-"*)
709 type=Game 790 type=Game
791 subdir="Games"
710 ;; 792 ;;
711 "net-"*) 793 "net-"*)
712 type=Network; 794 type=Network
795 subdir="${type}"
713 ;; 796 ;;
714 *) 797 *)
715 type= 798 type=
799 subdir=
716 ;; 800 ;;
717 esac 801 esac
718 fi 802 fi
719 local desktop="${T}/${exec}.desktop" 803 local desktop="${T}/${exec}.desktop"
720 804
750 # done 834 # done
751 #fi 835 #fi
752 836
753 if [ -d "/usr/share/applnk" ] 837 if [ -d "/usr/share/applnk" ]
754 then 838 then
755 insinto /usr/share/applnk/${type} 839 insinto /usr/share/applnk/${subdir}
756 doins ${desktop} 840 doins ${desktop}
757 fi 841 fi
758 842
759 return 0 843 return 0
760} 844}
1162 einfo "or hit CTRL+C to abort the emerge." 1246 einfo "or hit CTRL+C to abort the emerge."
1163 read 1247 read
1164 fi 1248 fi
1165 done 1249 done
1166} 1250}
1251
1252# Make sure that LINGUAS only contains languages that
1253# a package can support
1254#
1255# usage: strip-linguas <allow LINGUAS>
1256# strip-linguas -i <directories of .po files>
1257# strip-linguas -u <directories of .po files>
1258#
1259# The first form allows you to specify a list of LINGUAS.
1260# The -i builds a list of po files found in all the
1261# directories and uses the intersection of the lists.
1262# The -u builds a list of po files found in all the
1263# directories and uses the union of the lists.
1264strip-linguas() {
1265 local ls newls
1266 if [ "$1" == "-i" ] || [ "$1" == "-u" ] ; then
1267 local op="$1"; shift
1268 ls=" $(find "$1" -name '*.po' -printf '%f ') "; shift
1269 local d f
1270 for d in "$@" ; do
1271 if [ "${op}" == "-u" ] ; then
1272 newls="${ls}"
1273 else
1274 newls=""
1275 fi
1276 for f in $(find "$d" -name '*.po' -printf '%f ') ; do
1277 if [ "${op}" == "-i" ] ; then
1278 [ "${ls/ ${f} /}" != "${ls}" ] && newls="${newls} ${f}"
1279 else
1280 [ "${ls/ ${f} /}" == "${ls}" ] && newls="${newls} ${f}"
1281 fi
1282 done
1283 ls="${newls}"
1284 done
1285 ls="${ls//.po}"
1286 else
1287 ls="$@"
1288 fi
1289
1290 ls=" ${ls} "
1291 newls=""
1292 for f in ${LINGUAS} ; do
1293 if [ "${ls/ ${f} /}" != "${ls}" ] ; then
1294 nl="${newls} ${f}"
1295 else
1296 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA"
1297 fi
1298 done
1299 if [ -z "${newls}" ] ; then
1300 unset LINGUAS
1301 else
1302 export LINGUAS="${newls}"
1303 fi
1304}

Legend:
Removed from v.1.80  
changed lines
  Added in v.1.92

  ViewVC Help
Powered by ViewVC 1.1.20