/[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.105
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.105 2004/09/19 21:36:46 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
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
611 687
612 # handle extra and add the user 688 # handle extra and add the user
613 local eextra="$@" 689 local eextra="$@"
614 local oldsandbox="${SANDBOX_ON}" 690 local oldsandbox="${SANDBOX_ON}"
615 export SANDBOX_ON="0" 691 export SANDBOX_ON="0"
616 if [ "${ARCH}" == "macos" ]; 692 if use macos || use ppc-macos ;
617 then 693 then
618 ### Make the user 694 ### Make the user
619 if [ -z "${eextra}" ] 695 if [ -z "${eextra}" ]
620 then 696 then
621 dscl . create /users/${euser} uid ${euid} 697 dscl . create /users/${euser} uid ${euid}
690 then 766 then
691 if [ "${egid}" -gt 0 ] 767 if [ "${egid}" -gt 0 ]
692 then 768 then
693 if [ -z "`egetent group ${egid}`" ] 769 if [ -z "`egetent group ${egid}`" ]
694 then 770 then
695 if [ "${ARCH}" == "macos" ] ; then 771 if use macos || use ppc-macos ; then
696 opts="${opts} ${egid}" 772 opts="${opts} ${egid}"
697 else 773 else
698 opts="${opts} -g ${egid}" 774 opts="${opts} -g ${egid}"
699 fi 775 fi
700 else 776 else
714 opts="${opts} ${eextra}" 790 opts="${opts} ${eextra}"
715 791
716 # add the group 792 # add the group
717 local oldsandbox="${SANDBOX_ON}" 793 local oldsandbox="${SANDBOX_ON}"
718 export SANDBOX_ON="0" 794 export SANDBOX_ON="0"
719 if [ "${ARCH}" == "macos" ]; 795 if use macos || use ppc-macos ;
720 then 796 then
721 if [ ! -z "${eextra}" ]; 797 if [ ! -z "${eextra}" ];
722 then 798 then
723 einfo "Extra options are not supported on macos yet" 799 einfo "Extra options are not supported on macos yet"
724 einfo "Please report the ebuild along with the info below" 800 einfo "Please report the ebuild along with the info below"
725 einfo "eextra: ${eextra}" 801 einfo "eextra: ${eextra}"
726 die "Required function missing" 802 die "Required function missing"
727 fi 803 fi
728 804
729 # If we need the next available 805 # If we need the next available
730 case ${egid} in 806 case ${egid} in
731 *[!0-9]*) # Non numeric 807 *[!0-9]*) # Non numeric
732 for egid in `jot 898 101`; do 808 for egid in `jot 898 101`; do
733 [ -z "`egetent group ${egid}`" ] && break 809 [ -z "`egetent group ${egid}`" ] && break
734 done 810 done
735 esac 811 esac
736 dscl . create /groups/${egroup} gid ${egid} 812 dscl . create /groups/${egroup} gid ${egid}
737 dscl . create /groups/${egroup} passwd '*' 813 dscl . create /groups/${egroup} passwd '*'
738 else 814 else
739 groupadd ${opts} ${egroup} || die "enewgroup failed" 815 groupadd ${opts} ${egroup} || die "enewgroup failed"
740 fi 816 fi
741 export SANDBOX_ON="${oldsandbox}" 817 export SANDBOX_ON="${oldsandbox}"
742} 818}
776 local exec="${1}" 852 local exec="${1}"
777 local name="${2:-${PN}}" 853 local name="${2:-${PN}}"
778 local icon="${3:-${PN}.png}" 854 local icon="${3:-${PN}.png}"
779 local type="${4}" 855 local type="${4}"
780 local subdir="${6}" 856 local subdir="${6}"
781 local path="${5:-${GAMES_PREFIX}}" 857 local path="${5:-${GAMES_BINDIR}}"
782 if [ -z "${type}" ] 858 if [ -z "${type}" ]
783 then 859 then
784 case ${CATEGORY} in 860 case ${CATEGORY} in
785 "app-emulation") 861 "app-emulation")
786 type=Emulator 862 type=Emulator
809Type=Application 885Type=Application
810Comment=${DESCRIPTION} 886Comment=${DESCRIPTION}
811Exec=${exec} 887Exec=${exec}
812Path=${path} 888Path=${path}
813Icon=${icon} 889Icon=${icon}
814Categories=Application;${type};" > ${desktop} 890Categories=Application;${type};" > "${desktop}"
815 891
816 if [ -d "/usr/share/applications" ] 892 if [ -d "/usr/share/applications" ]
817 then 893 then
818 insinto /usr/share/applications 894 insinto /usr/share/applications
819 doins ${desktop} 895 doins "${desktop}"
820 fi 896 fi
821 897
822 #if [ -d "/usr/share/gnome/apps" ] 898 #if [ -d "/usr/share/gnome/apps" ]
823 #then 899 #then
824 # insinto /usr/share/gnome/apps/Games 900 # insinto /usr/share/gnome/apps/Games
835 #fi 911 #fi
836 912
837 if [ -d "/usr/share/applnk" ] 913 if [ -d "/usr/share/applnk" ]
838 then 914 then
839 insinto /usr/share/applnk/${subdir} 915 insinto /usr/share/applnk/${subdir}
840 doins ${desktop} 916 doins "${desktop}"
841 fi 917 fi
842 918
843 return 0 919 return 0
844} 920}
845 921
1016 tail -n +${skip} ${src} | bzip2 -dc | tar --no-same-owner -xf - 1092 tail -n +${skip} ${src} | bzip2 -dc | tar --no-same-owner -xf -
1017 ;; 1093 ;;
1018 gzip*) 1094 gzip*)
1019 tail -n +${skip} ${src} | tar --no-same-owner -xzf - 1095 tail -n +${skip} ${src} | tar --no-same-owner -xzf -
1020 ;; 1096 ;;
1097 compress*)
1098 tail -n +${skip} ${src} | gunzip | tar --no-same-owner -xf -
1099 ;;
1021 *) 1100 *)
1101 eerror "Unknown filetype \"${filetype}\" ?"
1022 false 1102 false
1023 ;; 1103 ;;
1024 esac 1104 esac
1025 assert "failure unpacking (${filetype}) makeself ${shrtsrc} ('${ver}' +${skip})" 1105 assert "failure unpacking (${filetype}) makeself ${shrtsrc} ('${ver}' +${skip})"
1026} 1106}
1046 local l="`basename ${lic}`" 1126 local l="`basename ${lic}`"
1047 1127
1048 # here is where we check for the licenses the user already 1128 # 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 1129 # accepted ... if we don't find a match, we make the user accept
1050 local alic 1130 local alic
1051 for alic in "${ACCEPT_LICENSE}" ; do 1131 for alic in ${ACCEPT_LICENSE} ; do
1052 [ "${alic}" == "*" ] && return 0 1132 [ "${alic}" == "*" ] && return 0
1053 [ "${alic}" == "${l}" ] && return 0 1133 [ "${alic}" == "${l}" ] && return 0
1054 done 1134 done
1055 1135
1056 local licmsg="`mymktemp ${T}`" 1136 local licmsg="`mymktemp ${T}`"
1247 read 1327 read
1248 fi 1328 fi
1249 done 1329 done
1250} 1330}
1251 1331
1252# Make sure that LINGUAS only contains languages that 1332# Make sure that LINGUAS only contains languages that
1253# a package can support 1333# a package can support
1254# 1334#
1255# usage: strip-linguas <allow LINGUAS> 1335# usage: strip-linguas <allow LINGUAS>
1256# strip-linguas -i <directories of .po files> 1336# strip-linguas -i <directories of .po files>
1257# strip-linguas -u <directories of .po files> 1337# strip-linguas -u <directories of .po files>
1258# 1338#
1259# The first form allows you to specify a list of LINGUAS. 1339# The first form allows you to specify a list of LINGUAS.
1260# The -i builds a list of po files found in all the 1340# The -i builds a list of po files found in all the
1261# directories and uses the intersection of the lists. 1341# directories and uses the intersection of the lists.
1262# The -u builds a list of po files found in all the 1342# The -u builds a list of po files found in all the
1263# directories and uses the union of the lists. 1343# directories and uses the union of the lists.
1264strip-linguas() { 1344strip-linguas() {
1265 local ls newls 1345 local ls newls
1266 if [ "$1" == "-i" ] || [ "$1" == "-u" ] ; then 1346 if [ "$1" == "-i" ] || [ "$1" == "-u" ] ; then
1267 local op="$1"; shift 1347 local op="$1"; shift

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

  ViewVC Help
Powered by ViewVC 1.1.20