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

Diff of /eclass/eutils.eclass

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

Revision 1.97 Revision 1.107
1# Copyright 1999-2004 Gentoo Foundation 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.97 2004/08/31 09:05:24 lv Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.107 2004/09/29 15:16:42 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.
13INHERITED="$INHERITED $ECLASS" 13INHERITED="$INHERITED $ECLASS"
14 14
15DEPEND="!bootstrap? ( sys-devel/patch )" 15DEPEND="!bootstrap? ( sys-devel/patch )"
16 16
17DESCRIPTION="Based on the ${ECLASS} eclass" 17DESCRIPTION="Based on the ${ECLASS} eclass"
18
19# Wait for the supplied number of seconds. If no argument is supplied, defaults
20# to five seconds. If the EPAUSE_IGNORE env var is set, don't wait. If we're not
21# outputting to a terminal, don't wait. For compatability purposes, the argument
22# must be an integer greater than zero.
23# Bug 62950, Ciaran McCreesh <ciaranm@gentoo.org> (05 Sep 2004)
24epause() {
25 if [ -z "$EPAUSE_IGNORE" ] && [ -t 1 ] ; then
26 sleep ${1:-5}
27 fi
28}
29
30# Beep the specified number of times (defaults to five). If our output
31# is not a terminal, don't beep. If the EBEEP_IGNORE env var is set,
32# don't beep.
33# Bug 62950, Ciaran McCreesh <ciaranm@gentoo.org> (05 Sep 2004)
34ebeep() {
35 local n
36 if [ -z "$EBEEP_IGNORE" ] && [ -t 1 ] ; then
37 for ((n=1 ; n <= ${1:-5} ; n++)) ; do
38 echo -ne "\a"
39 sleep 0.1 &>/dev/null ; sleep 0,1 &>/dev/null
40 echo -ne "\a"
41 sleep 1
42 done
43 fi
44}
18 45
19# This function simply returns the desired lib directory. With portage 46# This function simply returns the desired lib directory. With portage
20# 2.0.51, we now have support for installing libraries to lib32/lib64 47# 2.0.51, we now have support for installing libraries to lib32/lib64
21# to accomidate the needs of multilib systems. It's no longer a good idea 48# to accomidate the needs of multilib systems. It's no longer a good idea
22# to assume all libraries will end up in lib. Replace any (sane) instances 49# to assume all libraries will end up in lib. Replace any (sane) instances
23# where lib is named directly with $(get_libdir) if possible. 50# where lib is named directly with $(get_libdir) if possible.
24# 51#
25# Travis Tilley <lv@gentoo.org> (24 Aug 2004) 52# Travis Tilley <lv@gentoo.org> (24 Aug 2004)
26get_libdir() { 53get_libdir() {
54 LIBDIR_TEST=$(type econf)
27 if [ ! -z "${CONF_LIBDIR_OVERRIDE}" ] ; then 55 if [ ! -z "${CONF_LIBDIR_OVERRIDE}" ] ; then
28 # if there is an override, we want to use that... always. 56 # if there is an override, we want to use that... always.
29 CONF_LIBDIR="${CONF_LIBDIR_OVERRIDE}" 57 CONF_LIBDIR="${CONF_LIBDIR_OVERRIDE}"
58 # We don't need to know the verison of portage. We only need to know
59 # if there is support for CONF_LIBDIR in econf and co.
60 # Danny van Dyk <kugelfang@gentoo.org> 2004/17/09
30 elif portageq has_version / '<sys-apps/portage-2.0.51_pre20' ; then 61 #elif portageq has_version / '<sys-apps/portage-2.0.51_pre20' ; then
31 # and if there isnt an override, and we're using a version of 62 # # and if there isnt an override, and we're using a version of
32 # portage without CONF_LIBDIR support, force the use of lib. dolib 63 # # portage without CONF_LIBDIR support, force the use of lib. dolib
33 # and friends from portage 2.0.50 wont be too happy otherwise. 64 # # and friends from portage 2.0.50 wont be too happy otherwise.
65 # CONF_LIBDIR="lib"
66 #fi
67 elif [ "${LIBDIR_TEST/CONF_LIBDIR}" == "${LIBDIR_TEST}" ]; then # we don't have CONF_LIBDIR support
68 # will be <portage-2.0.51_pre20
34 CONF_LIBDIR="lib" 69 CONF_LIBDIR="lib"
35 fi 70 fi
36 # and of course, default to lib if CONF_LIBDIR isnt set 71 # and of course, default to lib if CONF_LIBDIR isnt set
37 echo ${CONF_LIBDIR:=lib} 72 echo ${CONF_LIBDIR:=lib}
73 unset LIBDIR_TEST
38} 74}
75
76
77get_multilibdir() {
78 echo ${CONF_MULTILIBDIR:=lib32}
79}
80
39 81
40# Sometimes you need to override the value returned by get_libdir. A good 82# Sometimes you need to override the value returned by get_libdir. A good
41# example of this is xorg-x11, where lib32 isnt a supported configuration, 83# example of this is xorg-x11, where lib32 isnt a supported configuration,
42# and where lib64 -must- be used on amd64 (for applications that need lib 84# and where lib64 -must- be used on amd64 (for applications that need lib
43# to be 32bit, such as adobe acrobat). Note that this override also bypasses 85# to be 32bit, such as adobe acrobat). Note that this override also bypasses
73# 115#
74gen_usr_ldscript() { 116gen_usr_ldscript() {
75 # Just make sure it exists 117 # Just make sure it exists
76 dodir /usr/$(get_libdir) 118 dodir /usr/$(get_libdir)
77 119
78 cat > ${D}/usr/$(get_libdir)/$1 <<"END_LDSCRIPT" 120 cat > "${D}/usr/$(get_libdir)/$1" << END_LDSCRIPT
79/* GNU ld script 121/* GNU ld script
80 Because Gentoo have critical dynamic libraries 122 Because Gentoo have critical dynamic libraries
81 in /lib, and the static versions in /usr/lib, we 123 in /lib, and the static versions in /usr/lib, we
82 need to have a "fake" dynamic lib in /usr/lib, 124 need to have a "fake" dynamic lib in /usr/lib,
83 otherwise we run into linking problems. 125 otherwise we run into linking problems.
84 See bug #4411 on http://bugs.gentoo.org/ for 126 See bug #4411 on http://bugs.gentoo.org/ for
85 more info. */ 127 more info. */
128GROUP ( /$(get_libdir)/$1 )
86END_LDSCRIPT 129END_LDSCRIPT
87
88 echo "GROUP ( /$(get_libdir)/libxxx )" >> ${D}/usr/$(get_libdir)/$1
89 dosed "s:libxxx:$1:" /usr/$(get_libdir)/$1
90
91 return 0
92} 130}
93 131
94# Simple function to draw a line consisting of '=' the same length as $* 132# Simple function to draw a line consisting of '=' the same length as $*
95# 133#
96# <azarah@gentoo.org> (11 Nov 2002) 134# <azarah@gentoo.org> (11 Nov 2002)
376# This function return true if we are using the NPTL pthreads 414# This function return true if we are using the NPTL pthreads
377# implementation. 415# implementation.
378# 416#
379# <azarah@gentoo.org> (06 March 2003) 417# <azarah@gentoo.org> (06 March 2003)
380# 418#
381
382have_NPTL() { 419have_NPTL() {
383
384 cat > ${T}/test-nptl.c <<-"END" 420 cat > ${T}/test-nptl.c <<-"END"
385 #define _XOPEN_SOURCE 421 #define _XOPEN_SOURCE
386 #include <unistd.h> 422 #include <unistd.h>
387 #include <stdio.h> 423 #include <stdio.h>
388 424
506# vapier@gentoo.org 542# vapier@gentoo.org
507# 543#
508# Takes just 1 parameter (the directory to create tmpfile in) 544# Takes just 1 parameter (the directory to create tmpfile in)
509mymktemp() { 545mymktemp() {
510 local topdir="$1" 546 local topdir="$1"
511 547
512 [ -z "${topdir}" ] && topdir=/tmp 548 [ -z "${topdir}" ] && topdir=/tmp
513 if [ "`which mktemp 2>/dev/null`" ] 549 if [ "`which mktemp 2>/dev/null`" ]
514 then 550 then
515 mktemp -p ${topdir} 551 mktemp -p ${topdir}
516 else 552 else
524# used in enewuser()/enewgroup() 560# used in enewuser()/enewgroup()
525# Joe Jezak <josejx@gmail.com> and usata@gentoo.org 561# Joe Jezak <josejx@gmail.com> and usata@gentoo.org
526# 562#
527# egetent(database, key) 563# egetent(database, key)
528egetent() { 564egetent() {
529 if [ "${ARCH}" == "macos" ] ; then 565 if use macos || use ppc-macos ; then
530 case "$2" in 566 case "$2" in
531 *[!0-9]*) # Non numeric 567 *[!0-9]*) # Non numeric
532 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }" 568 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
533 ;; 569 ;;
534 *) # Numeric 570 *) # Numeric
535 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }" 571 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
536 ;; 572 ;;
537 esac 573 esac
538 else 574 else
539 getent $1 $2 575 getent "$1" "$2"
540 fi 576 fi
541} 577}
542 578
543# Simplify/standardize adding users to the system 579# Simplify/standardize adding users to the system
544# vapier@gentoo.org 580# vapier@gentoo.org
590 euid="next" 626 euid="next"
591 fi 627 fi
592 if [ "${euid}" == "next" ] 628 if [ "${euid}" == "next" ]
593 then 629 then
594 local pwrange 630 local pwrange
595 if [ "${ARCH}" == "macos" ] ; then 631 if use macos || use ppc-macos ; then
596 pwrange="`jot 898 101`" 632 pwrange="`jot 898 101`"
597 else 633 else
598 pwrange="`seq 101 999`" 634 pwrange="`seq 101 999`"
599 fi 635 fi
600 for euid in ${pwrange} ; do 636 for euid in ${pwrange} ; do
631 # handle groups 667 # handle groups
632 local egroups="$1"; shift 668 local egroups="$1"; shift
633 if [ ! -z "${egroups}" ] 669 if [ ! -z "${egroups}" ]
634 then 670 then
635 local oldifs="${IFS}" 671 local oldifs="${IFS}"
672 local defgroup="" exgroups=""
673
636 export IFS="," 674 export IFS=","
637 for g in ${egroups} 675 for g in ${egroups}
638 do 676 do
639 if [ -z "`egetent group \"${g}\"`" ] 677 if [ -z "`egetent group \"${g}\"`" ]
640 then 678 then
641 eerror "You must add group ${g} to the system first" 679 eerror "You must add group ${g} to the system first"
642 die "${g} is not a valid GID" 680 die "${g} is not a valid GID"
643 fi 681 fi
682 if [ -z "${defgroup}" ]
683 then
684 defgroup="${g}"
685 else
686 exgroups="${exgroups},${g}"
687 fi
644 done 688 done
645 export IFS="${oldifs}" 689 export IFS="${oldifs}"
690
646 opts="${opts} -g ${egroups}" 691 opts="${opts} -g ${defgroup}"
692 if [ ! -z "${exgroups}" ]
693 then
694 opts="${opts} -G ${exgroups:1}"
695 fi
647 else 696 else
648 egroups="(none)" 697 egroups="(none)"
649 fi 698 fi
650 einfo " - Groups: ${egroups}" 699 einfo " - Groups: ${egroups}"
651 700
652 # handle extra and add the user 701 # handle extra and add the user
653 local eextra="$@" 702 local eextra="$@"
654 local oldsandbox="${SANDBOX_ON}" 703 local oldsandbox="${SANDBOX_ON}"
655 export SANDBOX_ON="0" 704 export SANDBOX_ON="0"
656 if [ "${ARCH}" == "macos" ]; 705 if use macos || use ppc-macos ;
657 then 706 then
658 ### Make the user 707 ### Make the user
659 if [ -z "${eextra}" ] 708 if [ -z "${eextra}" ]
660 then 709 then
661 dscl . create /users/${euser} uid ${euid} 710 dscl . create /users/${euser} uid ${euid}
663 dscl . create /users/${euser} home ${ehome} 712 dscl . create /users/${euser} home ${ehome}
664 dscl . create /users/${euser} realname "added by portage for ${PN}" 713 dscl . create /users/${euser} realname "added by portage for ${PN}"
665 ### Add the user to the groups specified 714 ### Add the user to the groups specified
666 for g in ${egroups} 715 for g in ${egroups}
667 do 716 do
717 # $egroups is , delimited, not space
718 ewarn "This is code is wrong; someone on the OS X team should fix it"
668 dscl . merge /groups/${g} users ${euser} 719 dscl . merge /groups/${g} users ${euser}
669 done 720 done
670 else 721 else
671 einfo "Extra options are not supported on macos yet" 722 einfo "Extra options are not supported on macos yet"
672 einfo "Please report the ebuild along with the info below" 723 einfo "Please report the ebuild along with the info below"
730 then 781 then
731 if [ "${egid}" -gt 0 ] 782 if [ "${egid}" -gt 0 ]
732 then 783 then
733 if [ -z "`egetent group ${egid}`" ] 784 if [ -z "`egetent group ${egid}`" ]
734 then 785 then
735 if [ "${ARCH}" == "macos" ] ; then 786 if use macos || use ppc-macos ; then
736 opts="${opts} ${egid}" 787 opts="${opts} ${egid}"
737 else 788 else
738 opts="${opts} -g ${egid}" 789 opts="${opts} -g ${egid}"
739 fi 790 fi
740 else 791 else
754 opts="${opts} ${eextra}" 805 opts="${opts} ${eextra}"
755 806
756 # add the group 807 # add the group
757 local oldsandbox="${SANDBOX_ON}" 808 local oldsandbox="${SANDBOX_ON}"
758 export SANDBOX_ON="0" 809 export SANDBOX_ON="0"
759 if [ "${ARCH}" == "macos" ]; 810 if use macos || use ppc-macos ;
760 then 811 then
761 if [ ! -z "${eextra}" ]; 812 if [ ! -z "${eextra}" ];
762 then 813 then
763 einfo "Extra options are not supported on macos yet" 814 einfo "Extra options are not supported on macos yet"
764 einfo "Please report the ebuild along with the info below" 815 einfo "Please report the ebuild along with the info below"
765 einfo "eextra: ${eextra}" 816 einfo "eextra: ${eextra}"
766 die "Required function missing" 817 die "Required function missing"
767 fi 818 fi
768 819
769 # If we need the next available 820 # If we need the next available
770 case ${egid} in 821 case ${egid} in
771 *[!0-9]*) # Non numeric 822 *[!0-9]*) # Non numeric
772 for egid in `jot 898 101`; do 823 for egid in `jot 898 101`; do
773 [ -z "`egetent group ${egid}`" ] && break 824 [ -z "`egetent group ${egid}`" ] && break
774 done 825 done
775 esac 826 esac
776 dscl . create /groups/${egroup} gid ${egid} 827 dscl . create /groups/${egroup} gid ${egid}
777 dscl . create /groups/${egroup} passwd '*' 828 dscl . create /groups/${egroup} passwd '*'
778 else 829 else
779 groupadd ${opts} ${egroup} || die "enewgroup failed" 830 groupadd ${opts} ${egroup} || die "enewgroup failed"
780 fi 831 fi
781 export SANDBOX_ON="${oldsandbox}" 832 export SANDBOX_ON="${oldsandbox}"
782} 833}
816 local exec="${1}" 867 local exec="${1}"
817 local name="${2:-${PN}}" 868 local name="${2:-${PN}}"
818 local icon="${3:-${PN}.png}" 869 local icon="${3:-${PN}.png}"
819 local type="${4}" 870 local type="${4}"
820 local subdir="${6}" 871 local subdir="${6}"
821 local path="${5:-${GAMES_PREFIX}}" 872 local path="${5:-${GAMES_BINDIR}}"
822 if [ -z "${type}" ] 873 if [ -z "${type}" ]
823 then 874 then
824 case ${CATEGORY} in 875 case ${CATEGORY} in
825 "app-emulation") 876 "app-emulation")
826 type=Emulator 877 type=Emulator
849Type=Application 900Type=Application
850Comment=${DESCRIPTION} 901Comment=${DESCRIPTION}
851Exec=${exec} 902Exec=${exec}
852Path=${path} 903Path=${path}
853Icon=${icon} 904Icon=${icon}
854Categories=Application;${type};" > ${desktop} 905Categories=Application;${type};" > "${desktop}"
855 906
856 if [ -d "/usr/share/applications" ] 907 if [ -d "/usr/share/applications" ]
857 then 908 then
858 insinto /usr/share/applications 909 insinto /usr/share/applications
859 doins ${desktop} 910 doins "${desktop}"
860 fi 911 fi
861 912
862 #if [ -d "/usr/share/gnome/apps" ] 913 #if [ -d "/usr/share/gnome/apps" ]
863 #then 914 #then
864 # insinto /usr/share/gnome/apps/Games 915 # insinto /usr/share/gnome/apps/Games
875 #fi 926 #fi
876 927
877 if [ -d "/usr/share/applnk" ] 928 if [ -d "/usr/share/applnk" ]
878 then 929 then
879 insinto /usr/share/applnk/${subdir} 930 insinto /usr/share/applnk/${subdir}
880 doins ${desktop} 931 doins "${desktop}"
881 fi 932 fi
882 933
883 return 0 934 return 0
884} 935}
885 936
1089 [ ! -f "${lic}" ] && die "Could not find requested license ${src}" 1140 [ ! -f "${lic}" ] && die "Could not find requested license ${src}"
1090 local l="`basename ${lic}`" 1141 local l="`basename ${lic}`"
1091 1142
1092 # here is where we check for the licenses the user already 1143 # here is where we check for the licenses the user already
1093 # accepted ... if we don't find a match, we make the user accept 1144 # accepted ... if we don't find a match, we make the user accept
1145 local shopts=$-
1094 local alic 1146 local alic
1147 set -o noglob #so that bash doesn't expand "*"
1095 for alic in "${ACCEPT_LICENSE}" ; do 1148 for alic in ${ACCEPT_LICENSE} ; do
1096 [ "${alic}" == "*" ] && return 0 1149 if [[ ${alic} == * || ${alic} == ${l} ]]; then
1097 [ "${alic}" == "${l}" ] && return 0 1150 set +o noglob; set -${shopts} #reset old shell opts
1151 return 0
1152 fi
1098 done 1153 done
1154 set +o noglob; set -$shopts #reset old shell opts
1099 1155
1100 local licmsg="`mymktemp ${T}`" 1156 local licmsg="`mymktemp ${T}`"
1101 cat << EOF > ${licmsg} 1157 cat << EOF > ${licmsg}
1102********************************************************** 1158**********************************************************
1103The following license outlines the terms of use of this 1159The following license outlines the terms of use of this
1291 read 1347 read
1292 fi 1348 fi
1293 done 1349 done
1294} 1350}
1295 1351
1296# Make sure that LINGUAS only contains languages that 1352# Make sure that LINGUAS only contains languages that
1297# a package can support 1353# a package can support
1298# 1354#
1299# usage: strip-linguas <allow LINGUAS> 1355# usage: strip-linguas <allow LINGUAS>
1300# strip-linguas -i <directories of .po files> 1356# strip-linguas -i <directories of .po files>
1301# strip-linguas -u <directories of .po files> 1357# strip-linguas -u <directories of .po files>
1302# 1358#
1303# The first form allows you to specify a list of LINGUAS. 1359# The first form allows you to specify a list of LINGUAS.
1304# The -i builds a list of po files found in all the 1360# The -i builds a list of po files found in all the
1305# directories and uses the intersection of the lists. 1361# directories and uses the intersection of the lists.
1306# The -u builds a list of po files found in all the 1362# The -u builds a list of po files found in all the
1307# directories and uses the union of the lists. 1363# directories and uses the union of the lists.
1308strip-linguas() { 1364strip-linguas() {
1309 local ls newls 1365 local ls newls
1310 if [ "$1" == "-i" ] || [ "$1" == "-u" ] ; then 1366 if [ "$1" == "-i" ] || [ "$1" == "-u" ] ; then
1311 local op="$1"; shift 1367 local op="$1"; shift

Legend:
Removed from v.1.97  
changed lines
  Added in v.1.107

  ViewVC Help
Powered by ViewVC 1.1.20