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

Diff of /eclass/eutils.eclass

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

Revision 1.95 Revision 1.106
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.95 2004/08/15 03:25:19 lv Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.106 2004/09/21 17:34:33 wolf31o2 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 # 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"
43
44 # Just make sure it exists 117 # Just make sure it exists
45 dodir /usr/${CONF_LIBDIR} 118 dodir /usr/$(get_libdir)
46 119
47 cat > ${D}/usr/${CONF_LIBDIR}/$1 <<"END_LDSCRIPT" 120 cat > "${D}/usr/$(get_libdir)/$1" << END_LDSCRIPT
48/* GNU ld script 121/* GNU ld script
49 Because Gentoo have critical dynamic libraries 122 Because Gentoo have critical dynamic libraries
50 in /lib, and the static versions in /usr/lib, we 123 in /lib, and the static versions in /usr/lib, we
51 need to have a "fake" dynamic lib in /usr/lib, 124 need to have a "fake" dynamic lib in /usr/lib,
52 otherwise we run into linking problems. 125 otherwise we run into linking problems.
53 See bug #4411 on http://bugs.gentoo.org/ for 126 See bug #4411 on http://bugs.gentoo.org/ for
54 more info. */ 127 more info. */
128GROUP ( /$(get_libdir)/$1 )
55END_LDSCRIPT 129END_LDSCRIPT
56
57 echo "GROUP ( /${CONF_LIBDIR}/libxxx )" >> ${D}/usr/${CONF_LIBDIR}/$1
58 dosed "s:libxxx:$1:" /usr/${CONF_LIBDIR}/$1
59
60 return 0
61} 130}
62 131
63# 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 $*
64# 133#
65# <azarah@gentoo.org> (11 Nov 2002) 134# <azarah@gentoo.org> (11 Nov 2002)
345# This function return true if we are using the NPTL pthreads 414# This function return true if we are using the NPTL pthreads
346# implementation. 415# implementation.
347# 416#
348# <azarah@gentoo.org> (06 March 2003) 417# <azarah@gentoo.org> (06 March 2003)
349# 418#
350
351have_NPTL() { 419have_NPTL() {
352
353 cat > ${T}/test-nptl.c <<-"END" 420 cat > ${T}/test-nptl.c <<-"END"
354 #define _XOPEN_SOURCE 421 #define _XOPEN_SOURCE
355 #include <unistd.h> 422 #include <unistd.h>
356 #include <stdio.h> 423 #include <stdio.h>
357 424
475# vapier@gentoo.org 542# vapier@gentoo.org
476# 543#
477# Takes just 1 parameter (the directory to create tmpfile in) 544# Takes just 1 parameter (the directory to create tmpfile in)
478mymktemp() { 545mymktemp() {
479 local topdir="$1" 546 local topdir="$1"
480 547
481 [ -z "${topdir}" ] && topdir=/tmp 548 [ -z "${topdir}" ] && topdir=/tmp
482 if [ "`which mktemp 2>/dev/null`" ] 549 if [ "`which mktemp 2>/dev/null`" ]
483 then 550 then
484 mktemp -p ${topdir} 551 mktemp -p ${topdir}
485 else 552 else
493# used in enewuser()/enewgroup() 560# used in enewuser()/enewgroup()
494# Joe Jezak <josejx@gmail.com> and usata@gentoo.org 561# Joe Jezak <josejx@gmail.com> and usata@gentoo.org
495# 562#
496# egetent(database, key) 563# egetent(database, key)
497egetent() { 564egetent() {
498 if [ "${ARCH}" == "macos" ] ; then 565 if use macos || use ppc-macos ; then
499 case "$2" in 566 case "$2" in
500 *[!0-9]*) # Non numeric 567 *[!0-9]*) # Non numeric
501 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }" 568 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
502 ;; 569 ;;
503 *) # Numeric 570 *) # Numeric
559 euid="next" 626 euid="next"
560 fi 627 fi
561 if [ "${euid}" == "next" ] 628 if [ "${euid}" == "next" ]
562 then 629 then
563 local pwrange 630 local pwrange
564 if [ "${ARCH}" == "macos" ] ; then 631 if use macos || use ppc-macos ; then
565 pwrange="`jot 898 101`" 632 pwrange="`jot 898 101`"
566 else 633 else
567 pwrange="`seq 101 999`" 634 pwrange="`seq 101 999`"
568 fi 635 fi
569 for euid in ${pwrange} ; do 636 for euid in ${pwrange} ; do
620 687
621 # handle extra and add the user 688 # handle extra and add the user
622 local eextra="$@" 689 local eextra="$@"
623 local oldsandbox="${SANDBOX_ON}" 690 local oldsandbox="${SANDBOX_ON}"
624 export SANDBOX_ON="0" 691 export SANDBOX_ON="0"
625 if [ "${ARCH}" == "macos" ]; 692 if use macos || use ppc-macos ;
626 then 693 then
627 ### Make the user 694 ### Make the user
628 if [ -z "${eextra}" ] 695 if [ -z "${eextra}" ]
629 then 696 then
630 dscl . create /users/${euser} uid ${euid} 697 dscl . create /users/${euser} uid ${euid}
699 then 766 then
700 if [ "${egid}" -gt 0 ] 767 if [ "${egid}" -gt 0 ]
701 then 768 then
702 if [ -z "`egetent group ${egid}`" ] 769 if [ -z "`egetent group ${egid}`" ]
703 then 770 then
704 if [ "${ARCH}" == "macos" ] ; then 771 if use macos || use ppc-macos ; then
705 opts="${opts} ${egid}" 772 opts="${opts} ${egid}"
706 else 773 else
707 opts="${opts} -g ${egid}" 774 opts="${opts} -g ${egid}"
708 fi 775 fi
709 else 776 else
723 opts="${opts} ${eextra}" 790 opts="${opts} ${eextra}"
724 791
725 # add the group 792 # add the group
726 local oldsandbox="${SANDBOX_ON}" 793 local oldsandbox="${SANDBOX_ON}"
727 export SANDBOX_ON="0" 794 export SANDBOX_ON="0"
728 if [ "${ARCH}" == "macos" ]; 795 if use macos || use ppc-macos ;
729 then 796 then
730 if [ ! -z "${eextra}" ]; 797 if [ ! -z "${eextra}" ];
731 then 798 then
732 einfo "Extra options are not supported on macos yet" 799 einfo "Extra options are not supported on macos yet"
733 einfo "Please report the ebuild along with the info below" 800 einfo "Please report the ebuild along with the info below"
734 einfo "eextra: ${eextra}" 801 einfo "eextra: ${eextra}"
735 die "Required function missing" 802 die "Required function missing"
736 fi 803 fi
737 804
738 # If we need the next available 805 # If we need the next available
739 case ${egid} in 806 case ${egid} in
740 *[!0-9]*) # Non numeric 807 *[!0-9]*) # Non numeric
741 for egid in `jot 898 101`; do 808 for egid in `jot 898 101`; do
742 [ -z "`egetent group ${egid}`" ] && break 809 [ -z "`egetent group ${egid}`" ] && break
743 done 810 done
744 esac 811 esac
745 dscl . create /groups/${egroup} gid ${egid} 812 dscl . create /groups/${egroup} gid ${egid}
746 dscl . create /groups/${egroup} passwd '*' 813 dscl . create /groups/${egroup} passwd '*'
747 else 814 else
748 groupadd ${opts} ${egroup} || die "enewgroup failed" 815 groupadd ${opts} ${egroup} || die "enewgroup failed"
749 fi 816 fi
750 export SANDBOX_ON="${oldsandbox}" 817 export SANDBOX_ON="${oldsandbox}"
751} 818}
785 local exec="${1}" 852 local exec="${1}"
786 local name="${2:-${PN}}" 853 local name="${2:-${PN}}"
787 local icon="${3:-${PN}.png}" 854 local icon="${3:-${PN}.png}"
788 local type="${4}" 855 local type="${4}"
789 local subdir="${6}" 856 local subdir="${6}"
790 local path="${5:-${GAMES_PREFIX}}" 857 local path="${5:-${GAMES_BINDIR}}"
791 if [ -z "${type}" ] 858 if [ -z "${type}" ]
792 then 859 then
793 case ${CATEGORY} in 860 case ${CATEGORY} in
794 "app-emulation") 861 "app-emulation")
795 type=Emulator 862 type=Emulator
818Type=Application 885Type=Application
819Comment=${DESCRIPTION} 886Comment=${DESCRIPTION}
820Exec=${exec} 887Exec=${exec}
821Path=${path} 888Path=${path}
822Icon=${icon} 889Icon=${icon}
823Categories=Application;${type};" > ${desktop} 890Categories=Application;${type};" > "${desktop}"
824 891
825 if [ -d "/usr/share/applications" ] 892 if [ -d "/usr/share/applications" ]
826 then 893 then
827 insinto /usr/share/applications 894 insinto /usr/share/applications
828 doins ${desktop} 895 doins "${desktop}"
829 fi 896 fi
830 897
831 #if [ -d "/usr/share/gnome/apps" ] 898 #if [ -d "/usr/share/gnome/apps" ]
832 #then 899 #then
833 # insinto /usr/share/gnome/apps/Games 900 # insinto /usr/share/gnome/apps/Games
844 #fi 911 #fi
845 912
846 if [ -d "/usr/share/applnk" ] 913 if [ -d "/usr/share/applnk" ]
847 then 914 then
848 insinto /usr/share/applnk/${subdir} 915 insinto /usr/share/applnk/${subdir}
849 doins ${desktop} 916 doins "${desktop}"
850 fi 917 fi
851 918
852 return 0 919 return 0
853} 920}
854 921
1058 [ ! -f "${lic}" ] && die "Could not find requested license ${src}" 1125 [ ! -f "${lic}" ] && die "Could not find requested license ${src}"
1059 local l="`basename ${lic}`" 1126 local l="`basename ${lic}`"
1060 1127
1061 # here is where we check for the licenses the user already 1128 # here is where we check for the licenses the user already
1062 # 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
1130 local shopts=$-
1063 local alic 1131 local alic
1132 set -o noglob #so that bash doesn't expand "*"
1064 for alic in "${ACCEPT_LICENSE}" ; do 1133 for alic in ${ACCEPT_LICENSE} ; do
1065 [ "${alic}" == "*" ] && return 0 1134 if [[ ${alic} == * || ${alic} == ${l} ]]; then
1066 [ "${alic}" == "${l}" ] && return 0 1135 set +o noglob; set -${shopts} #reset old shell opts
1136 return 0
1137 fi
1067 done 1138 done
1139 set +o noglob; set -$shopts #reset old shell opts
1068 1140
1069 local licmsg="`mymktemp ${T}`" 1141 local licmsg="`mymktemp ${T}`"
1070 cat << EOF > ${licmsg} 1142 cat << EOF > ${licmsg}
1071********************************************************** 1143**********************************************************
1072The following license outlines the terms of use of this 1144The following license outlines the terms of use of this
1260 read 1332 read
1261 fi 1333 fi
1262 done 1334 done
1263} 1335}
1264 1336
1265# Make sure that LINGUAS only contains languages that 1337# Make sure that LINGUAS only contains languages that
1266# a package can support 1338# a package can support
1267# 1339#
1268# usage: strip-linguas <allow LINGUAS> 1340# usage: strip-linguas <allow LINGUAS>
1269# strip-linguas -i <directories of .po files> 1341# strip-linguas -i <directories of .po files>
1270# strip-linguas -u <directories of .po files> 1342# strip-linguas -u <directories of .po files>
1271# 1343#
1272# The first form allows you to specify a list of LINGUAS. 1344# The first form allows you to specify a list of LINGUAS.
1273# The -i builds a list of po files found in all the 1345# The -i builds a list of po files found in all the
1274# directories and uses the intersection of the lists. 1346# directories and uses the intersection of the lists.
1275# The -u builds a list of po files found in all the 1347# The -u builds a list of po files found in all the
1276# directories and uses the union of the lists. 1348# directories and uses the union of the lists.
1277strip-linguas() { 1349strip-linguas() {
1278 local ls newls 1350 local ls newls
1279 if [ "$1" == "-i" ] || [ "$1" == "-u" ] ; then 1351 if [ "$1" == "-i" ] || [ "$1" == "-u" ] ; then
1280 local op="$1"; shift 1352 local op="$1"; shift

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

  ViewVC Help
Powered by ViewVC 1.1.20