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

Diff of /eclass/eutils.eclass

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

Revision 1.89 Revision 1.95
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.89 2004/06/22 22:36:22 vapier Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.95 2004/08/15 03:25:19 lv 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.
33# to point to the latest version of the library present. 33# to point to the latest version of the library present.
34# 34#
35# <azarah@gentoo.org> (26 Oct 2002) 35# <azarah@gentoo.org> (26 Oct 2002)
36# 36#
37gen_usr_ldscript() { 37gen_usr_ldscript() {
38 # this adds support for installing to lib64/lib32. since only portage
39 # 2.0.51 will have this functionality supported in dolib and friends,
40 # and since it isnt expected that many profiles will define it, we need
41 # to make this variable default to lib.
42 [ -z "${CONF_LIBDIR}" ] && CONF_LIBDIR="lib"
38 43
39 # Just make sure it exists 44 # Just make sure it exists
40 dodir /usr/lib 45 dodir /usr/${CONF_LIBDIR}
41 46
42 cat > ${D}/usr/lib/$1 <<"END_LDSCRIPT" 47 cat > ${D}/usr/${CONF_LIBDIR}/$1 <<"END_LDSCRIPT"
43/* GNU ld script 48/* GNU ld script
44 Because Gentoo have critical dynamic libraries 49 Because Gentoo have critical dynamic libraries
45 in /lib, and the static versions in /usr/lib, we 50 in /lib, and the static versions in /usr/lib, we
46 need to have a "fake" dynamic lib in /usr/lib, 51 need to have a "fake" dynamic lib in /usr/lib,
47 otherwise we run into linking problems. 52 otherwise we run into linking problems.
48 See bug #4411 on http://bugs.gentoo.org/ for 53 See bug #4411 on http://bugs.gentoo.org/ for
49 more info. */ 54 more info. */
50GROUP ( /lib/libxxx )
51END_LDSCRIPT 55END_LDSCRIPT
52 56
57 echo "GROUP ( /${CONF_LIBDIR}/libxxx )" >> ${D}/usr/${CONF_LIBDIR}/$1
53 dosed "s:libxxx:$1:" /usr/lib/$1 58 dosed "s:libxxx:$1:" /usr/${CONF_LIBDIR}/$1
54 59
55 return 0 60 return 0
56} 61}
57 62
58# Simple function to draw a line consisting of '=' the same length as $* 63# Simple function to draw a line consisting of '=' the same length as $*
144 local SINGLE_PATCH="no" 149 local SINGLE_PATCH="no"
145 local x="" 150 local x=""
146 151
147 if [ "$#" -gt 1 ] 152 if [ "$#" -gt 1 ]
148 then 153 then
149 eerror "Invalid arguments to epatch()" 154 local m=""
150 die "Invalid arguments to epatch()" 155 einfo "${#} patches to apply..."
156 for m in "$@" ; do
157 epatch "${m}"
158 done
159 return 0
151 fi 160 fi
152 161
153 if [ -n "$1" -a -f "$1" ] 162 if [ -n "$1" -a -f "$1" ]
154 then 163 then
155 SINGLE_PATCH="yes" 164 SINGLE_PATCH="yes"
478 touch ${tmp} 487 touch ${tmp}
479 echo ${tmp} 488 echo ${tmp}
480 fi 489 fi
481} 490}
482 491
492# Small wrapper for getent (Linux) and nidump (Mac OS X)
493# used in enewuser()/enewgroup()
494# Joe Jezak <josejx@gmail.com> and usata@gentoo.org
495#
496# egetent(database, key)
497egetent() {
498 if [ "${ARCH}" == "macos" ] ; then
499 case "$2" in
500 *[!0-9]*) # Non numeric
501 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
502 ;;
503 *) # Numeric
504 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
505 ;;
506 esac
507 else
508 getent $1 $2
509 fi
510}
511
483# Simplify/standardize adding users to the system 512# Simplify/standardize adding users to the system
484# vapier@gentoo.org 513# vapier@gentoo.org
485# 514#
486# enewuser(username, uid, shell, homedir, groups, extra options) 515# enewuser(username, uid, shell, homedir, groups, extra options)
487# 516#
501 eerror "No username specified !" 530 eerror "No username specified !"
502 die "Cannot call enewuser without a username" 531 die "Cannot call enewuser without a username"
503 fi 532 fi
504 533
505 # lets see if the username already exists 534 # lets see if the username already exists
506 if [ "${euser}" == "`getent passwd \"${euser}\" | cut -d: -f1`" ] 535 if [ "${euser}" == "`egetent passwd \"${euser}\" | cut -d: -f1`" ]
507 then 536 then
508 return 0 537 return 0
509 fi 538 fi
510 einfo "Adding user '${euser}' to your system ..." 539 einfo "Adding user '${euser}' to your system ..."
511 540
516 local euid="$1"; shift 545 local euid="$1"; shift
517 if [ ! -z "${euid}" ] && [ "${euid}" != "-1" ] 546 if [ ! -z "${euid}" ] && [ "${euid}" != "-1" ]
518 then 547 then
519 if [ "${euid}" -gt 0 ] 548 if [ "${euid}" -gt 0 ]
520 then 549 then
521 if [ ! -z "`getent passwd ${euid}`" ] 550 if [ ! -z "`egetent passwd ${euid}`" ]
522 then 551 then
523 euid="next" 552 euid="next"
524 fi 553 fi
525 else 554 else
526 eerror "Userid given but is not greater than 0 !" 555 eerror "Userid given but is not greater than 0 !"
529 else 558 else
530 euid="next" 559 euid="next"
531 fi 560 fi
532 if [ "${euid}" == "next" ] 561 if [ "${euid}" == "next" ]
533 then 562 then
534 for euid in `seq 101 999` ; do 563 local pwrange
564 if [ "${ARCH}" == "macos" ] ; then
565 pwrange="`jot 898 101`"
566 else
567 pwrange="`seq 101 999`"
568 fi
569 for euid in ${pwrange} ; do
535 [ -z "`getent passwd ${euid}`" ] && break 570 [ -z "`egetent passwd ${euid}`" ] && break
536 done 571 done
537 fi 572 fi
538 opts="${opts} -u ${euid}" 573 opts="${opts} -u ${euid}"
539 einfo " - Userid: ${euid}" 574 einfo " - Userid: ${euid}"
540 575
568 then 603 then
569 local oldifs="${IFS}" 604 local oldifs="${IFS}"
570 export IFS="," 605 export IFS=","
571 for g in ${egroups} 606 for g in ${egroups}
572 do 607 do
573 if [ -z "`getent group \"${g}\"`" ] 608 if [ -z "`egetent group \"${g}\"`" ]
574 then 609 then
575 eerror "You must add group ${g} to the system first" 610 eerror "You must add group ${g} to the system first"
576 die "${g} is not a valid GID" 611 die "${g} is not a valid GID"
577 fi 612 fi
578 done 613 done
585 620
586 # handle extra and add the user 621 # handle extra and add the user
587 local eextra="$@" 622 local eextra="$@"
588 local oldsandbox="${SANDBOX_ON}" 623 local oldsandbox="${SANDBOX_ON}"
589 export SANDBOX_ON="0" 624 export SANDBOX_ON="0"
625 if [ "${ARCH}" == "macos" ];
626 then
627 ### Make the user
590 if [ -z "${eextra}" ] 628 if [ -z "${eextra}" ]
591 then 629 then
630 dscl . create /users/${euser} uid ${euid}
631 dscl . create /users/${euser} shell ${eshell}
632 dscl . create /users/${euser} home ${ehome}
633 dscl . create /users/${euser} realname "added by portage for ${PN}"
634 ### Add the user to the groups specified
635 for g in ${egroups}
636 do
637 dscl . merge /groups/${g} users ${euser}
638 done
639 else
640 einfo "Extra options are not supported on macos yet"
641 einfo "Please report the ebuild along with the info below"
642 einfo "eextra: ${eextra}"
643 die "Required function missing"
644 fi
645 else
646 if [ -z "${eextra}" ]
647 then
592 useradd ${opts} ${euser} \ 648 useradd ${opts} ${euser} \
593 -c "added by portage for ${PN}" \ 649 -c "added by portage for ${PN}" \
594 || die "enewuser failed" 650 || die "enewuser failed"
595 else 651 else
596 einfo " - Extra: ${eextra}" 652 einfo " - Extra: ${eextra}"
597 useradd ${opts} ${euser} ${eextra} \ 653 useradd ${opts} ${euser} ${eextra} \
598 || die "enewuser failed" 654 || die "enewuser failed"
655 fi
599 fi 656 fi
600 export SANDBOX_ON="${oldsandbox}" 657 export SANDBOX_ON="${oldsandbox}"
601 658
602 if [ ! -e "${ehome}" ] && [ ! -e "${D}/${ehome}" ] 659 if [ ! -e "${ehome}" ] && [ ! -e "${D}/${ehome}" ]
603 then 660 then
625 eerror "No group specified !" 682 eerror "No group specified !"
626 die "Cannot call enewgroup without a group" 683 die "Cannot call enewgroup without a group"
627 fi 684 fi
628 685
629 # see if group already exists 686 # see if group already exists
630 if [ "${egroup}" == "`getent group \"${egroup}\" | cut -d: -f1`" ] 687 if [ "${egroup}" == "`egetent group \"${egroup}\" | cut -d: -f1`" ]
631 then 688 then
632 return 0 689 return 0
633 fi 690 fi
634 einfo "Adding group '${egroup}' to your system ..." 691 einfo "Adding group '${egroup}' to your system ..."
635 692
640 local egid="$1"; shift 697 local egid="$1"; shift
641 if [ ! -z "${egid}" ] 698 if [ ! -z "${egid}" ]
642 then 699 then
643 if [ "${egid}" -gt 0 ] 700 if [ "${egid}" -gt 0 ]
644 then 701 then
645 if [ -z "`getent group ${egid}`" ] 702 if [ -z "`egetent group ${egid}`" ]
646 then 703 then
704 if [ "${ARCH}" == "macos" ] ; then
705 opts="${opts} ${egid}"
706 else
647 opts="${opts} -g ${egid}" 707 opts="${opts} -g ${egid}"
708 fi
648 else 709 else
649 egid="next available; requested gid taken" 710 egid="next available; requested gid taken"
650 fi 711 fi
651 else 712 else
652 eerror "Groupid given but is not greater than 0 !" 713 eerror "Groupid given but is not greater than 0 !"
662 opts="${opts} ${eextra}" 723 opts="${opts} ${eextra}"
663 724
664 # add the group 725 # add the group
665 local oldsandbox="${SANDBOX_ON}" 726 local oldsandbox="${SANDBOX_ON}"
666 export SANDBOX_ON="0" 727 export SANDBOX_ON="0"
728 if [ "${ARCH}" == "macos" ];
729 then
730 if [ ! -z "${eextra}" ];
731 then
732 einfo "Extra options are not supported on macos yet"
733 einfo "Please report the ebuild along with the info below"
734 einfo "eextra: ${eextra}"
735 die "Required function missing"
736 fi
737
738 # If we need the next available
739 case ${egid} in
740 *[!0-9]*) # Non numeric
741 for egid in `jot 898 101`; do
742 [ -z "`egetent group ${egid}`" ] && break
743 done
744 esac
745 dscl . create /groups/${egroup} gid ${egid}
746 dscl . create /groups/${egroup} passwd '*'
747 else
667 groupadd ${opts} ${egroup} || die "enewgroup failed" 748 groupadd ${opts} ${egroup} || die "enewgroup failed"
749 fi
668 export SANDBOX_ON="${oldsandbox}" 750 export SANDBOX_ON="${oldsandbox}"
669} 751}
670 752
671# Simple script to replace 'dos2unix' binaries 753# Simple script to replace 'dos2unix' binaries
672# vapier@gentoo.org 754# vapier@gentoo.org
943 tail -n +${skip} ${src} | bzip2 -dc | tar --no-same-owner -xf - 1025 tail -n +${skip} ${src} | bzip2 -dc | tar --no-same-owner -xf -
944 ;; 1026 ;;
945 gzip*) 1027 gzip*)
946 tail -n +${skip} ${src} | tar --no-same-owner -xzf - 1028 tail -n +${skip} ${src} | tar --no-same-owner -xzf -
947 ;; 1029 ;;
1030 compress*)
1031 tail -n +${skip} ${src} | gunzip | tar --no-same-owner -xf -
1032 ;;
948 *) 1033 *)
1034 eerror "Unknown filetype \"${filetype}\" ?"
949 false 1035 false
950 ;; 1036 ;;
951 esac 1037 esac
952 assert "failure unpacking (${filetype}) makeself ${shrtsrc} ('${ver}' +${skip})" 1038 assert "failure unpacking (${filetype}) makeself ${shrtsrc} ('${ver}' +${skip})"
953} 1039}
1173 einfo "or hit CTRL+C to abort the emerge." 1259 einfo "or hit CTRL+C to abort the emerge."
1174 read 1260 read
1175 fi 1261 fi
1176 done 1262 done
1177} 1263}
1264
1265# Make sure that LINGUAS only contains languages that
1266# a package can support
1267#
1268# usage: strip-linguas <allow LINGUAS>
1269# strip-linguas -i <directories of .po files>
1270# strip-linguas -u <directories of .po files>
1271#
1272# The first form allows you to specify a list of LINGUAS.
1273# The -i builds a list of po files found in all the
1274# directories and uses the intersection of the lists.
1275# The -u builds a list of po files found in all the
1276# directories and uses the union of the lists.
1277strip-linguas() {
1278 local ls newls
1279 if [ "$1" == "-i" ] || [ "$1" == "-u" ] ; then
1280 local op="$1"; shift
1281 ls=" $(find "$1" -name '*.po' -printf '%f ') "; shift
1282 local d f
1283 for d in "$@" ; do
1284 if [ "${op}" == "-u" ] ; then
1285 newls="${ls}"
1286 else
1287 newls=""
1288 fi
1289 for f in $(find "$d" -name '*.po' -printf '%f ') ; do
1290 if [ "${op}" == "-i" ] ; then
1291 [ "${ls/ ${f} /}" != "${ls}" ] && newls="${newls} ${f}"
1292 else
1293 [ "${ls/ ${f} /}" == "${ls}" ] && newls="${newls} ${f}"
1294 fi
1295 done
1296 ls="${newls}"
1297 done
1298 ls="${ls//.po}"
1299 else
1300 ls="$@"
1301 fi
1302
1303 ls=" ${ls} "
1304 newls=""
1305 for f in ${LINGUAS} ; do
1306 if [ "${ls/ ${f} /}" != "${ls}" ] ; then
1307 nl="${newls} ${f}"
1308 else
1309 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA"
1310 fi
1311 done
1312 if [ -z "${newls}" ] ; then
1313 unset LINGUAS
1314 else
1315 export LINGUAS="${newls}"
1316 fi
1317}

Legend:
Removed from v.1.89  
changed lines
  Added in v.1.95

  ViewVC Help
Powered by ViewVC 1.1.20