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

Diff of /eclass/eutils.eclass

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

Revision 1.227 Revision 1.248
1# Copyright 1999-2005 Gentoo Foundation 1# Copyright 1999-2006 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.227 2006/03/10 18:05:39 carlo Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.248 2006/08/19 13:52:02 vapier Exp $
4#
5# Author: Martin Schlemmer <azarah@gentoo.org>
6# 4#
7# This eclass is for general purpose functions that most ebuilds 5# This eclass is for general purpose functions that most ebuilds
8# have to implement themselves. 6# have to implement themselves.
9# 7#
10# NB: If you add anything, please comment it! 8# NB: If you add anything, please comment it!
9#
10# Maintainer: see each individual function, base-system@gentoo.org as default
11 11
12inherit multilib portability 12inherit multilib portability
13
14DEPEND="!bootstrap? ( sys-devel/patch )"
15# sys-apps/shadow is needed for useradd, etc, bug #94745.
16 13
17DESCRIPTION="Based on the ${ECLASS} eclass" 14DESCRIPTION="Based on the ${ECLASS} eclass"
18 15
19# Wait for the supplied number of seconds. If no argument is supplied, defaults 16# 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 17# 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 18# outputting to a terminal, don't wait. For compatability purposes, the argument
22# must be an integer greater than zero. 19# must be an integer greater than zero.
23# Bug 62950, Ciaran McCreesh <ciaranm@gentoo.org> (05 Sep 2004) 20# Bug 62950, Ciaran McCreesh <ciaranm@gentoo.org> (05 Sep 2004)
24epause() { 21epause() {
25 if [ -z "$EPAUSE_IGNORE" ] && [ -t 1 ] ; then 22 [[ -z ${EPAUSE_IGNORE} ]] && sleep ${1:-5}
26 sleep ${1:-5}
27 fi
28} 23}
29 24
30# Beep the specified number of times (defaults to five). If our output 25# 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, 26# is not a terminal, don't beep. If the EBEEP_IGNORE env var is set,
32# don't beep. 27# don't beep.
33# Bug 62950, Ciaran McCreesh <ciaranm@gentoo.org> (05 Sep 2004) 28# Bug 62950, Ciaran McCreesh <ciaranm@gentoo.org> (05 Sep 2004)
34ebeep() { 29ebeep() {
35 local n 30 local n
36 if [ -z "$EBEEP_IGNORE" ] && [ -t 1 ] ; then 31 if [[ -z ${EBEEP_IGNORE} ]] ; then
37 for ((n=1 ; n <= ${1:-5} ; n++)) ; do 32 for ((n=1 ; n <= ${1:-5} ; n++)) ; do
38 echo -ne "\a" 33 echo -ne "\a"
39 sleep 0.1 &>/dev/null ; sleep 0,1 &>/dev/null 34 sleep 0.1 &>/dev/null ; sleep 0,1 &>/dev/null
40 echo -ne "\a" 35 echo -ne "\a"
41 sleep 1 36 sleep 1
60# to point to the latest version of the library present. 55# to point to the latest version of the library present.
61# 56#
62# <azarah@gentoo.org> (26 Oct 2002) 57# <azarah@gentoo.org> (26 Oct 2002)
63# 58#
64gen_usr_ldscript() { 59gen_usr_ldscript() {
60 if [[ $(type -t _tc_gen_usr_ldscript) == "function" ]] ; then
61 _tc_gen_usr_ldscript "$@"
62 return $?
63 fi
64
65 ewarn "QA Notice: Please upgrade your ebuild to use toolchain-funcs"
66 ewarn "QA Notice: rather than gen_usr_ldscript() from eutils"
67
65 local lib libdir=$(get_libdir) 68 local lib libdir=$(get_libdir)
66 # Just make sure it exists 69 # Just make sure it exists
67 dodir /usr/${libdir} 70 dodir /usr/${libdir}
68 71
69 for lib in "${@}" ; do 72 for lib in "${@}" ; do
88# Default extension for patches 91# Default extension for patches
89EPATCH_SUFFIX="patch.bz2" 92EPATCH_SUFFIX="patch.bz2"
90# Default options for patch 93# Default options for patch
91# Set -g0 to keep RCS, ClearCase, Perforce and SCCS happy. Bug #24571 94# Set -g0 to keep RCS, ClearCase, Perforce and SCCS happy. Bug #24571
92# Set --no-backup-if-mismatch so we don't leave '.orig' files behind. 95# Set --no-backup-if-mismatch so we don't leave '.orig' files behind.
96# Set -E to automatically remove empty files.
93EPATCH_OPTS="-g0 --no-backup-if-mismatch" 97EPATCH_OPTS="-g0 -E --no-backup-if-mismatch"
94# List of patches not to apply. Not this is only file names, 98# List of patches not to apply. Not this is only file names,
95# and not the full path .. 99# and not the full path ..
96EPATCH_EXCLUDE="" 100EPATCH_EXCLUDE=""
97# Change the printed message for a single patch. 101# Change the printed message for a single patch.
98EPATCH_SINGLE_MSG="" 102EPATCH_SINGLE_MSG=""
137# 141#
138# <azarah@gentoo.org> (10 Nov 2002) 142# <azarah@gentoo.org> (10 Nov 2002)
139# 143#
140epatch() { 144epatch() {
141 _epatch_draw_line() { 145 _epatch_draw_line() {
142 local i=0 str_length="" str_out="" 146 [[ -z $1 ]] && set "$(printf "%65s" '')"
143 147 echo "${1//?/=}"
144 # Handle calls that do not have args, or wc not being installed ...
145 if [[ -z $1 ]] || ! type -p wc >/dev/null ; then
146 str_length=65
147 else
148 str_length=$(echo -n "$*" | wc -m)
149 fi
150
151 while ((i++ < ${str_length})) ; do
152 str_out="${str_out}="
153 done
154 echo ${str_out}
155
156 return 0
157 } 148 }
158 _epatch_assert() { local _pipestatus=${PIPESTATUS[*]}; [[ ${_pipestatus// /} -eq 0 ]] ; } 149 _epatch_assert() { local _pipestatus=${PIPESTATUS[*]}; [[ ${_pipestatus// /} -eq 0 ]] ; }
159 local PIPE_CMD="" 150 local PIPE_CMD=""
160 local STDERR_TARGET="${T}/$$.out" 151 local STDERR_TARGET="${T}/$$.out"
161 local PATCH_TARGET="${T}/$$.patch" 152 local PATCH_TARGET="${T}/$$.patch"
448# shell: /bin/false 439# shell: /bin/false
449# homedir: /dev/null 440# homedir: /dev/null
450# groups: none 441# groups: none
451# extra: comment of 'added by portage for ${PN}' 442# extra: comment of 'added by portage for ${PN}'
452enewuser() { 443enewuser() {
444 case ${EBUILD_PHASE} in
445 unpack|compile|test|install)
446 eerror "'enewuser()' called from '${EBUILD_PHASE}()' which is not a pkg_* function."
447 eerror "Package fails at QA and at life. Please file a bug."
448 die "Bad package! enewuser is only for use in pkg_* functions!"
449 esac
450
453 # get the username 451 # get the username
454 local euser=$1; shift 452 local euser=$1; shift
455 if [[ -z ${euser} ]] ; then 453 if [[ -z ${euser} ]] ; then
456 eerror "No username specified !" 454 eerror "No username specified !"
457 die "Cannot call enewuser without a username" 455 die "Cannot call enewuser without a username"
643# Default values if you do not specify any: 641# Default values if you do not specify any:
644# groupname: REQUIRED ! 642# groupname: REQUIRED !
645# gid: next available (see groupadd(8)) 643# gid: next available (see groupadd(8))
646# extra: none 644# extra: none
647enewgroup() { 645enewgroup() {
646 case ${EBUILD_PHASE} in
647 unpack|compile|test|install)
648 eerror "'enewgroup()' called from '${EBUILD_PHASE}()' which is not a pkg_* function."
649 eerror "Package fails at QA and at life. Please file a bug."
650 die "Bad package! enewgroup is only for use in pkg_* functions!"
651 esac
652
648 # get the group 653 # get the group
649 local egroup="$1"; shift 654 local egroup="$1"; shift
650 if [ -z "${egroup}" ] 655 if [ -z "${egroup}" ]
651 then 656 then
652 eerror "No group specified !" 657 eerror "No group specified !"
764 769
765# Make a desktop file ! 770# Make a desktop file !
766# Great for making those icons in kde/gnome startmenu ! 771# Great for making those icons in kde/gnome startmenu !
767# Amaze your friends ! Get the women ! Join today ! 772# Amaze your friends ! Get the women ! Join today !
768# 773#
769# make_desktop_entry(<binary>, [name], [icon], [type], [path]) 774# make_desktop_entry(<command>, [name], [icon], [type], [path])
770# 775#
771# binary: what binary does the app run with ? 776# binary: what command does the app run with ?
772# name: the name that will show up in the menu 777# name: the name that will show up in the menu
773# icon: give your little like a pretty little icon ... 778# icon: give your little like a pretty little icon ...
774# this can be relative (to /usr/share/pixmaps) or 779# this can be relative (to /usr/share/pixmaps) or
775# a full path to an icon 780# a full path to an icon
776# type: what kind of application is this ? for categories: 781# type: what kind of application is this ? for categories:
888 local desktop_name="${PN}" 893 local desktop_name="${PN}"
889 else 894 else
890 local desktop_name="${PN}-${SLOT}" 895 local desktop_name="${PN}-${SLOT}"
891 fi 896 fi
892 local desktop=${T}/${exec%% *}-${desktop_name}.desktop 897 local desktop=${T}/${exec%% *}-${desktop_name}.desktop
898# local desktop=${T}/${exec%% *:-${desktop_name}}.desktop
893 899
894echo "[Desktop Entry] 900echo "[Desktop Entry]
895Encoding=UTF-8 901Encoding=UTF-8
896Version=0.9.2 902Version=0.9.2
897Name=${name} 903Name=${name}
898Type=Application 904Type=Application
899Comment=${DESCRIPTION} 905Comment=${DESCRIPTION}
900Exec=${exec} 906Exec=${exec}
907TryExec=${exec%% *}
901Path=${path} 908Path=${path}
902Icon=${icon} 909Icon=${icon}
903Categories=Application;${type};" > "${desktop}" 910Categories=Application;${type};" > "${desktop}"
904 911
905 ( 912 (
1108 if [[ -z ${skip} ]] ; then 1115 if [[ -z ${skip} ]] ; then
1109 local ver=$(grep -a '#.*Makeself' "${src}" | awk '{print $NF}') 1116 local ver=$(grep -a '#.*Makeself' "${src}" | awk '{print $NF}')
1110 local skip=0 1117 local skip=0
1111 exe=tail 1118 exe=tail
1112 case ${ver} in 1119 case ${ver} in
1113 1.5.*) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same 1120 1.5.*|1.6.0-nv) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same
1114 skip=$(grep -a ^skip= "${src}" | cut -d= -f2) 1121 skip=$(grep -a ^skip= "${src}" | cut -d= -f2)
1115 ;; 1122 ;;
1116 2.0|2.0.1) 1123 2.0|2.0.1)
1117 skip=$(grep -a ^$'\t'tail "${src}" | awk '{print $2}' | cut -b2-) 1124 skip=$(grep -a ^$'\t'tail "${src}" | awk '{print $2}' | cut -b2-)
1118 ;; 1125 ;;
1241# and when the function returns, you can assume that the cd has been 1248# and when the function returns, you can assume that the cd has been
1242# found at CDROM_ROOT. 1249# found at CDROM_ROOT.
1243# 1250#
1244# normally the cdrom functions will refer to the cds as 'cd #1', 'cd #2', 1251# normally the cdrom functions will refer to the cds as 'cd #1', 'cd #2',
1245# etc... if you want to give the cds better names, then just export 1252# etc... if you want to give the cds better names, then just export
1246# the CDROM_NAME_X variables before calling cdrom_get_cds(). 1253# the appropriate CDROM_NAME variable before calling cdrom_get_cds().
1254# - CDROM_NAME="fooie cd" - for when you only want 1 cd
1255# - CDROM_NAME_1="install cd" - for when you want more than 1 cd
1256# CDROM_NAME_2="data cd"
1257# - CDROM_NAME_SET=( "install cd" "data cd" ) - short hand for CDROM_NAME_#
1247# 1258#
1248# for those multi cd ebuilds, see the cdrom_load_next_cd() below. 1259# for those multi cd ebuilds, see the cdrom_load_next_cd() below.
1249# 1260#
1250# Usage: cdrom_get_cds <file on cd1> [file on cd2] [file on cd3] [...] 1261# Usage: cdrom_get_cds <file on cd1> [file on cd2] [file on cd3] [...]
1251# - this will attempt to locate a cd based upon a file that is on 1262# - this will attempt to locate a cd based upon a file that is on
1302 echo 1313 echo
1303 einfo "For example:" 1314 einfo "For example:"
1304 einfo "export CD_ROOT=/mnt/cdrom" 1315 einfo "export CD_ROOT=/mnt/cdrom"
1305 echo 1316 echo
1306 else 1317 else
1318 if [[ -n ${CDROM_NAME_SET} ]] ; then
1319 # Translate the CDROM_NAME_SET array into CDROM_NAME_#
1320 cdcnt=0
1321 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do
1322 ((++cdcnt))
1323 export CDROM_NAME_${cdcnt}="${CDROM_NAME_SET[$((${cdcnt}-1))]}"
1324 done
1325 fi
1326
1307 einfo "This package will need access to ${CDROM_TOTAL_CDS} cds." 1327 einfo "This package will need access to ${CDROM_TOTAL_CDS} cds."
1308 cdcnt=0 1328 cdcnt=0
1309 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do 1329 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do
1310 ((++cdcnt)) 1330 ((++cdcnt))
1311 var="CDROM_NAME_${cdcnt}" 1331 var="CDROM_NAME_${cdcnt}"
1433# The -i builds a list of po files found in all the 1453# The -i builds a list of po files found in all the
1434# directories and uses the intersection of the lists. 1454# directories and uses the intersection of the lists.
1435# The -u builds a list of po files found in all the 1455# The -u builds a list of po files found in all the
1436# directories and uses the union of the lists. 1456# directories and uses the union of the lists.
1437strip-linguas() { 1457strip-linguas() {
1438 local ls newls 1458 local ls newls nols
1439 if [[ $1 == "-i" ]] || [[ $1 == "-u" ]] ; then 1459 if [[ $1 == "-i" ]] || [[ $1 == "-u" ]] ; then
1440 local op=$1; shift 1460 local op=$1; shift
1441 ls=" $(find "$1" -name '*.po' -exec basename {} \;) "; shift 1461 ls=$(find "$1" -name '*.po' -exec basename {} .po \;); shift
1442 local d f 1462 local d f
1443 for d in "$@" ; do 1463 for d in "$@" ; do
1444 if [[ ${op} == "-u" ]] ; then 1464 if [[ ${op} == "-u" ]] ; then
1445 newls=${ls} 1465 newls=${ls}
1446 else 1466 else
1447 newls="" 1467 newls=""
1448 fi 1468 fi
1449 for f in $(find "$d" -name '*.po' -exec basename {} \;) ; do 1469 for f in $(find "$d" -name '*.po' -exec basename {} .po \;) ; do
1450 if [[ ${op} == "-i" ]] ; then 1470 if [[ ${op} == "-i" ]] ; then
1451 [[ ${ls/ ${f} /} != ${ls} ]] && newls="${newls} ${f}" 1471 hasq ${f} ${ls} && newls="${newls} ${f}"
1452 else 1472 else
1453 [[ ${ls/ ${f} /} == ${ls} ]] && newls="${newls} ${f}" 1473 hasq ${f} ${ls} || newls="${newls} ${f}"
1454 fi 1474 fi
1455 done 1475 done
1456 ls=${newls} 1476 ls=${newls}
1457 done 1477 done
1458 ls=${ls//.po}
1459 else 1478 else
1460 ls=$@ 1479 ls="$@"
1461 fi 1480 fi
1462 1481
1463 ls=" ${ls} " 1482 nols=""
1464 newls="" 1483 newls=""
1465 for f in ${LINGUAS} ; do 1484 for f in ${LINGUAS} ; do
1466 if [[ ${ls/ ${f} /} != ${ls} ]] ; then 1485 if hasq ${f} ${ls} ; then
1467 newls="${newls} ${f}" 1486 newls="${newls} ${f}"
1468 else 1487 else
1469 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA" 1488 nols="${nols} ${f}"
1470 fi 1489 fi
1471 done 1490 done
1472 if [[ -z ${newls} ]] ; then 1491 [[ -n ${nols} ]] \
1473 export LINGUAS="" 1492 && ewarn "Sorry, but ${PN} does not support the LINGUAs:" ${nols}
1474 else
1475 export LINGUAS=${newls:1} 1493 export LINGUAS=${newls:1}
1476 fi
1477} 1494}
1478 1495
1479# moved from kernel.eclass since they are generally useful outside of 1496# moved from kernel.eclass since they are generally useful outside of
1480# kernel.eclass -iggy (20041002) 1497# kernel.eclass -iggy (20041002)
1481 1498
1572built_with_use() { 1589built_with_use() {
1573 local opt=$1 1590 local opt=$1
1574 [[ ${opt:0:1} = "-" ]] && shift || opt="-a" 1591 [[ ${opt:0:1} = "-" ]] && shift || opt="-a"
1575 1592
1576 local PKG=$(best_version $1) 1593 local PKG=$(best_version $1)
1594 [[ -z ${PKG} ]] && die "Unable to resolve $1 to an installed package"
1577 shift 1595 shift
1578 1596
1579 local USEFILE=${ROOT}/var/db/pkg/${PKG}/USE 1597 local USEFILE=${ROOT}/var/db/pkg/${PKG}/USE
1580 1598
1581 # if the USE file doesnt exist, assume the $PKG is either 1599 # if the USE file doesnt exist, assume the $PKG is either
1582 # injected or package.provided 1600 # injected or package.provided
1583 [[ ! -e ${USEFILE} ]] && return 0 1601 [[ ! -e ${USEFILE} ]] && die "Unable to determine what USE flags $PKG was built with"
1584 1602
1585 local USE_BUILT=$(<${USEFILE}) 1603 local USE_BUILT=$(<${USEFILE})
1586 while [[ $# -gt 0 ]] ; do 1604 while [[ $# -gt 0 ]] ; do
1587 if [[ ${opt} = "-o" ]] ; then 1605 if [[ ${opt} = "-o" ]] ; then
1588 has $1 ${USE_BUILT} && return 0 1606 has $1 ${USE_BUILT} && return 0

Legend:
Removed from v.1.227  
changed lines
  Added in v.1.248

  ViewVC Help
Powered by ViewVC 1.1.20