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

Diff of /eclass/eutils.eclass

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

Revision 1.92 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.92 2004/08/03 17:24:52 vapier 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}
45
46# This function simply returns the desired lib directory. With portage
47# 2.0.51, we now have support for installing libraries to lib32/lib64
48# to accomidate the needs of multilib systems. It's no longer a good idea
49# to assume all libraries will end up in lib. Replace any (sane) instances
50# where lib is named directly with $(get_libdir) if possible.
51#
52# Travis Tilley <lv@gentoo.org> (24 Aug 2004)
53get_libdir() {
54 LIBDIR_TEST=$(type econf)
55 if [ ! -z "${CONF_LIBDIR_OVERRIDE}" ] ; then
56 # if there is an override, we want to use that... always.
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
61 #elif portageq has_version / '<sys-apps/portage-2.0.51_pre20' ; then
62 # # and if there isnt an override, and we're using a version of
63 # # portage without CONF_LIBDIR support, force the use of lib. dolib
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
69 CONF_LIBDIR="lib"
70 fi
71 # and of course, default to lib if CONF_LIBDIR isnt set
72 echo ${CONF_LIBDIR:=lib}
73 unset LIBDIR_TEST
74}
75
76
77get_multilibdir() {
78 echo ${CONF_MULTILIBDIR:=lib32}
79}
80
81
82# Sometimes you need to override the value returned by get_libdir. A good
83# example of this is xorg-x11, where lib32 isnt a supported configuration,
84# and where lib64 -must- be used on amd64 (for applications that need lib
85# to be 32bit, such as adobe acrobat). Note that this override also bypasses
86# portage version sanity checking.
87# get_libdir_override expects one argument, the result get_libdir should
88# return:
89#
90# get_libdir_override lib64
91#
92# Travis Tilley <lv@gentoo.org> (31 Aug 2004)
93get_libdir_override() {
94 CONF_LIBDIR="$1"
95 CONF_LIBDIR_OVERRIDE="$1"
96}
18 97
19# This function generate linker scripts in /usr/lib for dynamic 98# This function generate linker scripts in /usr/lib for dynamic
20# libs in /lib. This is to fix linking problems when you have 99# libs in /lib. This is to fix linking problems when you have
21# the .so in /lib, and the .a in /usr/lib. What happens is that 100# the .so in /lib, and the .a in /usr/lib. What happens is that
22# in some cases when linking dynamic, the .a in /usr/lib is used 101# in some cases when linking dynamic, the .a in /usr/lib is used
33# to point to the latest version of the library present. 112# to point to the latest version of the library present.
34# 113#
35# <azarah@gentoo.org> (26 Oct 2002) 114# <azarah@gentoo.org> (26 Oct 2002)
36# 115#
37gen_usr_ldscript() { 116gen_usr_ldscript() {
38
39 # Just make sure it exists 117 # Just make sure it exists
40 dodir /usr/lib 118 dodir /usr/$(get_libdir)
41 119
42 cat > ${D}/usr/lib/$1 <<"END_LDSCRIPT" 120 cat > "${D}/usr/$(get_libdir)/$1" << END_LDSCRIPT
43/* GNU ld script 121/* GNU ld script
44 Because Gentoo have critical dynamic libraries 122 Because Gentoo have critical dynamic libraries
45 in /lib, and the static versions in /usr/lib, we 123 in /lib, and the static versions in /usr/lib, we
46 need to have a "fake" dynamic lib in /usr/lib, 124 need to have a "fake" dynamic lib in /usr/lib,
47 otherwise we run into linking problems. 125 otherwise we run into linking problems.
48 See bug #4411 on http://bugs.gentoo.org/ for 126 See bug #4411 on http://bugs.gentoo.org/ for
49 more info. */ 127 more info. */
50GROUP ( /lib/libxxx ) 128GROUP ( /$(get_libdir)/$1 )
51END_LDSCRIPT 129END_LDSCRIPT
52
53 dosed "s:libxxx:$1:" /usr/lib/$1
54
55 return 0
56} 130}
57 131
58# 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 $*
59# 133#
60# <azarah@gentoo.org> (11 Nov 2002) 134# <azarah@gentoo.org> (11 Nov 2002)
144 local SINGLE_PATCH="no" 218 local SINGLE_PATCH="no"
145 local x="" 219 local x=""
146 220
147 if [ "$#" -gt 1 ] 221 if [ "$#" -gt 1 ]
148 then 222 then
149 eerror "Invalid arguments to epatch()" 223 local m=""
150 die "Invalid arguments to epatch()" 224 einfo "${#} patches to apply..."
225 for m in "$@" ; do
226 epatch "${m}"
227 done
228 return 0
151 fi 229 fi
152 230
153 if [ -n "$1" -a -f "$1" ] 231 if [ -n "$1" -a -f "$1" ]
154 then 232 then
155 SINGLE_PATCH="yes" 233 SINGLE_PATCH="yes"
336# This function return true if we are using the NPTL pthreads 414# This function return true if we are using the NPTL pthreads
337# implementation. 415# implementation.
338# 416#
339# <azarah@gentoo.org> (06 March 2003) 417# <azarah@gentoo.org> (06 March 2003)
340# 418#
341
342have_NPTL() { 419have_NPTL() {
343
344 cat > ${T}/test-nptl.c <<-"END" 420 cat > ${T}/test-nptl.c <<-"END"
345 #define _XOPEN_SOURCE 421 #define _XOPEN_SOURCE
346 #include <unistd.h> 422 #include <unistd.h>
347 #include <stdio.h> 423 #include <stdio.h>
348 424
466# vapier@gentoo.org 542# vapier@gentoo.org
467# 543#
468# Takes just 1 parameter (the directory to create tmpfile in) 544# Takes just 1 parameter (the directory to create tmpfile in)
469mymktemp() { 545mymktemp() {
470 local topdir="$1" 546 local topdir="$1"
471 547
472 [ -z "${topdir}" ] && topdir=/tmp 548 [ -z "${topdir}" ] && topdir=/tmp
473 if [ "`which mktemp 2>/dev/null`" ] 549 if [ "`which mktemp 2>/dev/null`" ]
474 then 550 then
475 mktemp -p ${topdir} 551 mktemp -p ${topdir}
476 else 552 else
484# used in enewuser()/enewgroup() 560# used in enewuser()/enewgroup()
485# Joe Jezak <josejx@gmail.com> and usata@gentoo.org 561# Joe Jezak <josejx@gmail.com> and usata@gentoo.org
486# 562#
487# egetent(database, key) 563# egetent(database, key)
488egetent() { 564egetent() {
489 if [ "${ARCH}" == "macos" ] ; then 565 if use macos || use ppc-macos ; then
490 case "$2" in 566 case "$2" in
491 *[!0-9]*) # Non numeric 567 *[!0-9]*) # Non numeric
492 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }" 568 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
493 ;; 569 ;;
494 *) # Numeric 570 *) # Numeric
495 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }" 571 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
496 ;; 572 ;;
497 esac 573 esac
498 else 574 else
499 getent $1 $2 575 getent "$1" "$2"
500 fi 576 fi
501} 577}
502 578
503# Simplify/standardize adding users to the system 579# Simplify/standardize adding users to the system
504# vapier@gentoo.org 580# vapier@gentoo.org
550 euid="next" 626 euid="next"
551 fi 627 fi
552 if [ "${euid}" == "next" ] 628 if [ "${euid}" == "next" ]
553 then 629 then
554 local pwrange 630 local pwrange
555 if [ "${ARCH}" == "macos" ] ; then 631 if use macos || use ppc-macos ; then
556 pwrange="`jot 898 101`" 632 pwrange="`jot 898 101`"
557 else 633 else
558 pwrange="`seq 101 999`" 634 pwrange="`seq 101 999`"
559 fi 635 fi
560 for euid in ${pwrange} ; do 636 for euid in ${pwrange} ; do
591 # handle groups 667 # handle groups
592 local egroups="$1"; shift 668 local egroups="$1"; shift
593 if [ ! -z "${egroups}" ] 669 if [ ! -z "${egroups}" ]
594 then 670 then
595 local oldifs="${IFS}" 671 local oldifs="${IFS}"
672 local defgroup="" exgroups=""
673
596 export IFS="," 674 export IFS=","
597 for g in ${egroups} 675 for g in ${egroups}
598 do 676 do
599 if [ -z "`egetent group \"${g}\"`" ] 677 if [ -z "`egetent group \"${g}\"`" ]
600 then 678 then
601 eerror "You must add group ${g} to the system first" 679 eerror "You must add group ${g} to the system first"
602 die "${g} is not a valid GID" 680 die "${g} is not a valid GID"
603 fi 681 fi
682 if [ -z "${defgroup}" ]
683 then
684 defgroup="${g}"
685 else
686 exgroups="${exgroups},${g}"
687 fi
604 done 688 done
605 export IFS="${oldifs}" 689 export IFS="${oldifs}"
690
606 opts="${opts} -g ${egroups}" 691 opts="${opts} -g ${defgroup}"
692 if [ ! -z "${exgroups}" ]
693 then
694 opts="${opts} -G ${exgroups:1}"
695 fi
607 else 696 else
608 egroups="(none)" 697 egroups="(none)"
609 fi 698 fi
610 einfo " - Groups: ${egroups}" 699 einfo " - Groups: ${egroups}"
611 700
612 # handle extra and add the user 701 # handle extra and add the user
613 local eextra="$@" 702 local eextra="$@"
614 local oldsandbox="${SANDBOX_ON}" 703 local oldsandbox="${SANDBOX_ON}"
615 export SANDBOX_ON="0" 704 export SANDBOX_ON="0"
616 if [ "${ARCH}" == "macos" ]; 705 if use macos || use ppc-macos ;
617 then 706 then
618 ### Make the user 707 ### Make the user
619 if [ -z "${eextra}" ] 708 if [ -z "${eextra}" ]
620 then 709 then
621 dscl . create /users/${euser} uid ${euid} 710 dscl . create /users/${euser} uid ${euid}
623 dscl . create /users/${euser} home ${ehome} 712 dscl . create /users/${euser} home ${ehome}
624 dscl . create /users/${euser} realname "added by portage for ${PN}" 713 dscl . create /users/${euser} realname "added by portage for ${PN}"
625 ### Add the user to the groups specified 714 ### Add the user to the groups specified
626 for g in ${egroups} 715 for g in ${egroups}
627 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"
628 dscl . merge /groups/${g} users ${euser} 719 dscl . merge /groups/${g} users ${euser}
629 done 720 done
630 else 721 else
631 einfo "Extra options are not supported on macos yet" 722 einfo "Extra options are not supported on macos yet"
632 einfo "Please report the ebuild along with the info below" 723 einfo "Please report the ebuild along with the info below"
690 then 781 then
691 if [ "${egid}" -gt 0 ] 782 if [ "${egid}" -gt 0 ]
692 then 783 then
693 if [ -z "`egetent group ${egid}`" ] 784 if [ -z "`egetent group ${egid}`" ]
694 then 785 then
695 if [ "${ARCH}" == "macos" ] ; then 786 if use macos || use ppc-macos ; then
696 opts="${opts} ${egid}" 787 opts="${opts} ${egid}"
697 else 788 else
698 opts="${opts} -g ${egid}" 789 opts="${opts} -g ${egid}"
699 fi 790 fi
700 else 791 else
714 opts="${opts} ${eextra}" 805 opts="${opts} ${eextra}"
715 806
716 # add the group 807 # add the group
717 local oldsandbox="${SANDBOX_ON}" 808 local oldsandbox="${SANDBOX_ON}"
718 export SANDBOX_ON="0" 809 export SANDBOX_ON="0"
719 if [ "${ARCH}" == "macos" ]; 810 if use macos || use ppc-macos ;
720 then 811 then
721 if [ ! -z "${eextra}" ]; 812 if [ ! -z "${eextra}" ];
722 then 813 then
723 einfo "Extra options are not supported on macos yet" 814 einfo "Extra options are not supported on macos yet"
724 einfo "Please report the ebuild along with the info below" 815 einfo "Please report the ebuild along with the info below"
725 einfo "eextra: ${eextra}" 816 einfo "eextra: ${eextra}"
726 die "Required function missing" 817 die "Required function missing"
727 fi 818 fi
728 819
729 # If we need the next available 820 # If we need the next available
730 case ${egid} in 821 case ${egid} in
731 *[!0-9]*) # Non numeric 822 *[!0-9]*) # Non numeric
732 for egid in `jot 898 101`; do 823 for egid in `jot 898 101`; do
733 [ -z "`egetent group ${egid}`" ] && break 824 [ -z "`egetent group ${egid}`" ] && break
734 done 825 done
735 esac 826 esac
736 dscl . create /groups/${egroup} gid ${egid} 827 dscl . create /groups/${egroup} gid ${egid}
737 dscl . create /groups/${egroup} passwd '*' 828 dscl . create /groups/${egroup} passwd '*'
738 else 829 else
739 groupadd ${opts} ${egroup} || die "enewgroup failed" 830 groupadd ${opts} ${egroup} || die "enewgroup failed"
740 fi 831 fi
741 export SANDBOX_ON="${oldsandbox}" 832 export SANDBOX_ON="${oldsandbox}"
742} 833}
776 local exec="${1}" 867 local exec="${1}"
777 local name="${2:-${PN}}" 868 local name="${2:-${PN}}"
778 local icon="${3:-${PN}.png}" 869 local icon="${3:-${PN}.png}"
779 local type="${4}" 870 local type="${4}"
780 local subdir="${6}" 871 local subdir="${6}"
781 local path="${5:-${GAMES_PREFIX}}" 872 local path="${5:-${GAMES_BINDIR}}"
782 if [ -z "${type}" ] 873 if [ -z "${type}" ]
783 then 874 then
784 case ${CATEGORY} in 875 case ${CATEGORY} in
785 "app-emulation") 876 "app-emulation")
786 type=Emulator 877 type=Emulator
809Type=Application 900Type=Application
810Comment=${DESCRIPTION} 901Comment=${DESCRIPTION}
811Exec=${exec} 902Exec=${exec}
812Path=${path} 903Path=${path}
813Icon=${icon} 904Icon=${icon}
814Categories=Application;${type};" > ${desktop} 905Categories=Application;${type};" > "${desktop}"
815 906
816 if [ -d "/usr/share/applications" ] 907 if [ -d "/usr/share/applications" ]
817 then 908 then
818 insinto /usr/share/applications 909 insinto /usr/share/applications
819 doins ${desktop} 910 doins "${desktop}"
820 fi 911 fi
821 912
822 #if [ -d "/usr/share/gnome/apps" ] 913 #if [ -d "/usr/share/gnome/apps" ]
823 #then 914 #then
824 # insinto /usr/share/gnome/apps/Games 915 # insinto /usr/share/gnome/apps/Games
835 #fi 926 #fi
836 927
837 if [ -d "/usr/share/applnk" ] 928 if [ -d "/usr/share/applnk" ]
838 then 929 then
839 insinto /usr/share/applnk/${subdir} 930 insinto /usr/share/applnk/${subdir}
840 doins ${desktop} 931 doins "${desktop}"
841 fi 932 fi
842 933
843 return 0 934 return 0
844} 935}
845 936
1016 tail -n +${skip} ${src} | bzip2 -dc | tar --no-same-owner -xf - 1107 tail -n +${skip} ${src} | bzip2 -dc | tar --no-same-owner -xf -
1017 ;; 1108 ;;
1018 gzip*) 1109 gzip*)
1019 tail -n +${skip} ${src} | tar --no-same-owner -xzf - 1110 tail -n +${skip} ${src} | tar --no-same-owner -xzf -
1020 ;; 1111 ;;
1112 compress*)
1113 tail -n +${skip} ${src} | gunzip | tar --no-same-owner -xf -
1114 ;;
1021 *) 1115 *)
1116 eerror "Unknown filetype \"${filetype}\" ?"
1022 false 1117 false
1023 ;; 1118 ;;
1024 esac 1119 esac
1025 assert "failure unpacking (${filetype}) makeself ${shrtsrc} ('${ver}' +${skip})" 1120 assert "failure unpacking (${filetype}) makeself ${shrtsrc} ('${ver}' +${skip})"
1026} 1121}
1045 [ ! -f "${lic}" ] && die "Could not find requested license ${src}" 1140 [ ! -f "${lic}" ] && die "Could not find requested license ${src}"
1046 local l="`basename ${lic}`" 1141 local l="`basename ${lic}`"
1047 1142
1048 # here is where we check for the licenses the user already 1143 # here is where we check for the licenses the user already
1049 # 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=$-
1050 local alic 1146 local alic
1147 set -o noglob #so that bash doesn't expand "*"
1051 for alic in "${ACCEPT_LICENSE}" ; do 1148 for alic in ${ACCEPT_LICENSE} ; do
1052 [ "${alic}" == "*" ] && return 0 1149 if [[ ${alic} == * || ${alic} == ${l} ]]; then
1053 [ "${alic}" == "${l}" ] && return 0 1150 set +o noglob; set -${shopts} #reset old shell opts
1151 return 0
1152 fi
1054 done 1153 done
1154 set +o noglob; set -$shopts #reset old shell opts
1055 1155
1056 local licmsg="`mymktemp ${T}`" 1156 local licmsg="`mymktemp ${T}`"
1057 cat << EOF > ${licmsg} 1157 cat << EOF > ${licmsg}
1058********************************************************** 1158**********************************************************
1059The following license outlines the terms of use of this 1159The following license outlines the terms of use of this
1247 read 1347 read
1248 fi 1348 fi
1249 done 1349 done
1250} 1350}
1251 1351
1252# Make sure that LINGUAS only contains languages that 1352# Make sure that LINGUAS only contains languages that
1253# a package can support 1353# a package can support
1254# 1354#
1255# usage: strip-linguas <allow LINGUAS> 1355# usage: strip-linguas <allow LINGUAS>
1256# strip-linguas -i <directories of .po files> 1356# strip-linguas -i <directories of .po files>
1257# strip-linguas -u <directories of .po files> 1357# strip-linguas -u <directories of .po files>
1258# 1358#
1259# The first form allows you to specify a list of LINGUAS. 1359# The first form allows you to specify a list of LINGUAS.
1260# 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
1261# directories and uses the intersection of the lists. 1361# directories and uses the intersection of the lists.
1262# 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
1263# directories and uses the union of the lists. 1363# directories and uses the union of the lists.
1264strip-linguas() { 1364strip-linguas() {
1265 local ls newls 1365 local ls newls
1266 if [ "$1" == "-i" ] || [ "$1" == "-u" ] ; then 1366 if [ "$1" == "-i" ] || [ "$1" == "-u" ] ; then
1267 local op="$1"; shift 1367 local op="$1"; shift

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

  ViewVC Help
Powered by ViewVC 1.1.20