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

Diff of /eclass/eutils.eclass

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

Revision 1.232 Revision 1.245
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.232 2006/03/22 21:18:05 flameeyes Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.245 2006/07/15 19:26:55 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 )"
15RDEPEND=""
16# sys-apps/shadow is needed for useradd, etc, bug #94745.
17 13
18DESCRIPTION="Based on the ${ECLASS} eclass" 14DESCRIPTION="Based on the ${ECLASS} eclass"
19 15
20# 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
21# 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
22# 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
23# must be an integer greater than zero. 19# must be an integer greater than zero.
24# Bug 62950, Ciaran McCreesh <ciaranm@gentoo.org> (05 Sep 2004) 20# Bug 62950, Ciaran McCreesh <ciaranm@gentoo.org> (05 Sep 2004)
25epause() { 21epause() {
26 if [ -z "$EPAUSE_IGNORE" ] && [ -t 1 ] ; then 22 [[ -z ${EPAUSE_IGNORE} ]] && sleep ${1:-5}
27 sleep ${1:-5}
28 fi
29} 23}
30 24
31# 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
32# 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,
33# don't beep. 27# don't beep.
34# Bug 62950, Ciaran McCreesh <ciaranm@gentoo.org> (05 Sep 2004) 28# Bug 62950, Ciaran McCreesh <ciaranm@gentoo.org> (05 Sep 2004)
35ebeep() { 29ebeep() {
36 local n 30 local n
37 if [ -z "$EBEEP_IGNORE" ] && [ -t 1 ] ; then 31 if [[ -z ${EBEEP_IGNORE} ]] ; then
38 for ((n=1 ; n <= ${1:-5} ; n++)) ; do 32 for ((n=1 ; n <= ${1:-5} ; n++)) ; do
39 echo -ne "\a" 33 echo -ne "\a"
40 sleep 0.1 &>/dev/null ; sleep 0,1 &>/dev/null 34 sleep 0.1 &>/dev/null ; sleep 0,1 &>/dev/null
41 echo -ne "\a" 35 echo -ne "\a"
42 sleep 1 36 sleep 1
437# shell: /bin/false 431# shell: /bin/false
438# homedir: /dev/null 432# homedir: /dev/null
439# groups: none 433# groups: none
440# extra: comment of 'added by portage for ${PN}' 434# extra: comment of 'added by portage for ${PN}'
441enewuser() { 435enewuser() {
436 case ${EBUILD_PHASE} in
437 unpack|compile|test|install)
438 eerror "'enewuser()' called from '${EBUILD_PHASE}()' which is not a pkg_* function."
439 eerror "Package fails at QA and at life. Please file a bug."
440 die "Bad package! enewuser is only for use in pkg_* functions!"
441 esac
442
442 # get the username 443 # get the username
443 local euser=$1; shift 444 local euser=$1; shift
444 if [[ -z ${euser} ]] ; then 445 if [[ -z ${euser} ]] ; then
445 eerror "No username specified !" 446 eerror "No username specified !"
446 die "Cannot call enewuser without a username" 447 die "Cannot call enewuser without a username"
632# Default values if you do not specify any: 633# Default values if you do not specify any:
633# groupname: REQUIRED ! 634# groupname: REQUIRED !
634# gid: next available (see groupadd(8)) 635# gid: next available (see groupadd(8))
635# extra: none 636# extra: none
636enewgroup() { 637enewgroup() {
638 case ${EBUILD_PHASE} in
639 unpack|compile|test|install)
640 eerror "'enewgroup()' called from '${EBUILD_PHASE}()' which is not a pkg_* function."
641 eerror "Package fails at QA and at life. Please file a bug."
642 die "Bad package! enewgroup is only for use in pkg_* functions!"
643 esac
644
637 # get the group 645 # get the group
638 local egroup="$1"; shift 646 local egroup="$1"; shift
639 if [ -z "${egroup}" ] 647 if [ -z "${egroup}" ]
640 then 648 then
641 eerror "No group specified !" 649 eerror "No group specified !"
753 761
754# Make a desktop file ! 762# Make a desktop file !
755# Great for making those icons in kde/gnome startmenu ! 763# Great for making those icons in kde/gnome startmenu !
756# Amaze your friends ! Get the women ! Join today ! 764# Amaze your friends ! Get the women ! Join today !
757# 765#
758# make_desktop_entry(<binary>, [name], [icon], [type], [path]) 766# make_desktop_entry(<command>, [name], [icon], [type], [path])
759# 767#
760# binary: what binary does the app run with ? 768# binary: what command does the app run with ?
761# name: the name that will show up in the menu 769# name: the name that will show up in the menu
762# icon: give your little like a pretty little icon ... 770# icon: give your little like a pretty little icon ...
763# this can be relative (to /usr/share/pixmaps) or 771# this can be relative (to /usr/share/pixmaps) or
764# a full path to an icon 772# a full path to an icon
765# type: what kind of application is this ? for categories: 773# type: what kind of application is this ? for categories:
877 local desktop_name="${PN}" 885 local desktop_name="${PN}"
878 else 886 else
879 local desktop_name="${PN}-${SLOT}" 887 local desktop_name="${PN}-${SLOT}"
880 fi 888 fi
881 local desktop=${T}/${exec%% *}-${desktop_name}.desktop 889 local desktop=${T}/${exec%% *}-${desktop_name}.desktop
890# local desktop=${T}/${exec%% *:-${desktop_name}}.desktop
882 891
883echo "[Desktop Entry] 892echo "[Desktop Entry]
884Encoding=UTF-8 893Encoding=UTF-8
885Version=0.9.2 894Version=0.9.2
886Name=${name} 895Name=${name}
887Type=Application 896Type=Application
888Comment=${DESCRIPTION} 897Comment=${DESCRIPTION}
889Exec=${exec} 898Exec=${exec}
899TryExec=${exec%% *}
890Path=${path} 900Path=${path}
891Icon=${icon} 901Icon=${icon}
892Categories=Application;${type};" > "${desktop}" 902Categories=Application;${type};" > "${desktop}"
893 903
894 ( 904 (
1097 if [[ -z ${skip} ]] ; then 1107 if [[ -z ${skip} ]] ; then
1098 local ver=$(grep -a '#.*Makeself' "${src}" | awk '{print $NF}') 1108 local ver=$(grep -a '#.*Makeself' "${src}" | awk '{print $NF}')
1099 local skip=0 1109 local skip=0
1100 exe=tail 1110 exe=tail
1101 case ${ver} in 1111 case ${ver} in
1102 1.5.*) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same 1112 1.5.*|1.6.0-nv) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same
1103 skip=$(grep -a ^skip= "${src}" | cut -d= -f2) 1113 skip=$(grep -a ^skip= "${src}" | cut -d= -f2)
1104 ;; 1114 ;;
1105 2.0|2.0.1) 1115 2.0|2.0.1)
1106 skip=$(grep -a ^$'\t'tail "${src}" | awk '{print $2}' | cut -b2-) 1116 skip=$(grep -a ^$'\t'tail "${src}" | awk '{print $2}' | cut -b2-)
1107 ;; 1117 ;;
1230# and when the function returns, you can assume that the cd has been 1240# and when the function returns, you can assume that the cd has been
1231# found at CDROM_ROOT. 1241# found at CDROM_ROOT.
1232# 1242#
1233# normally the cdrom functions will refer to the cds as 'cd #1', 'cd #2', 1243# normally the cdrom functions will refer to the cds as 'cd #1', 'cd #2',
1234# etc... if you want to give the cds better names, then just export 1244# etc... if you want to give the cds better names, then just export
1235# the CDROM_NAME_X variables before calling cdrom_get_cds(). 1245# the appropriate CDROM_NAME variable before calling cdrom_get_cds().
1246# - CDROM_NAME="fooie cd" - for when you only want 1 cd
1247# - CDROM_NAME_1="install cd" - for when you want more than 1 cd
1248# CDROM_NAME_2="data cd"
1249# - CDROM_NAME_SET=( "install cd" "data cd" ) - short hand for CDROM_NAME_#
1236# 1250#
1237# for those multi cd ebuilds, see the cdrom_load_next_cd() below. 1251# for those multi cd ebuilds, see the cdrom_load_next_cd() below.
1238# 1252#
1239# Usage: cdrom_get_cds <file on cd1> [file on cd2] [file on cd3] [...] 1253# Usage: cdrom_get_cds <file on cd1> [file on cd2] [file on cd3] [...]
1240# - this will attempt to locate a cd based upon a file that is on 1254# - this will attempt to locate a cd based upon a file that is on
1291 echo 1305 echo
1292 einfo "For example:" 1306 einfo "For example:"
1293 einfo "export CD_ROOT=/mnt/cdrom" 1307 einfo "export CD_ROOT=/mnt/cdrom"
1294 echo 1308 echo
1295 else 1309 else
1310 if [[ -n ${CDROM_NAME_SET} ]] ; then
1311 # Translate the CDROM_NAME_SET array into CDROM_NAME_#
1312 cdcnt=0
1313 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do
1314 ((++cdcnt))
1315 export CDROM_NAME_${cdcnt}="${CDROM_NAME_SET[$((${cdcnt}-1))]}"
1316 done
1317 fi
1318
1296 einfo "This package will need access to ${CDROM_TOTAL_CDS} cds." 1319 einfo "This package will need access to ${CDROM_TOTAL_CDS} cds."
1297 cdcnt=0 1320 cdcnt=0
1298 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do 1321 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do
1299 ((++cdcnt)) 1322 ((++cdcnt))
1300 var="CDROM_NAME_${cdcnt}" 1323 var="CDROM_NAME_${cdcnt}"
1422# The -i builds a list of po files found in all the 1445# The -i builds a list of po files found in all the
1423# directories and uses the intersection of the lists. 1446# directories and uses the intersection of the lists.
1424# The -u builds a list of po files found in all the 1447# The -u builds a list of po files found in all the
1425# directories and uses the union of the lists. 1448# directories and uses the union of the lists.
1426strip-linguas() { 1449strip-linguas() {
1427 local ls newls 1450 local ls newls nols
1428 if [[ $1 == "-i" ]] || [[ $1 == "-u" ]] ; then 1451 if [[ $1 == "-i" ]] || [[ $1 == "-u" ]] ; then
1429 local op=$1; shift 1452 local op=$1; shift
1430 ls=" $(find "$1" -name '*.po' -exec basename {} \;) "; shift 1453 ls=$(find "$1" -name '*.po' -exec basename {} .po \;); shift
1431 local d f 1454 local d f
1432 for d in "$@" ; do 1455 for d in "$@" ; do
1433 if [[ ${op} == "-u" ]] ; then 1456 if [[ ${op} == "-u" ]] ; then
1434 newls=${ls} 1457 newls=${ls}
1435 else 1458 else
1436 newls="" 1459 newls=""
1437 fi 1460 fi
1438 for f in $(find "$d" -name '*.po' -exec basename {} \;) ; do 1461 for f in $(find "$d" -name '*.po' -exec basename {} .po \;) ; do
1439 if [[ ${op} == "-i" ]] ; then 1462 if [[ ${op} == "-i" ]] ; then
1440 [[ ${ls/ ${f} /} != ${ls} ]] && newls="${newls} ${f}" 1463 hasq ${f} ${ls} && newls="${newls} ${f}"
1441 else 1464 else
1442 [[ ${ls/ ${f} /} == ${ls} ]] && newls="${newls} ${f}" 1465 hasq ${f} ${ls} || newls="${newls} ${f}"
1443 fi 1466 fi
1444 done 1467 done
1445 ls=${newls} 1468 ls=${newls}
1446 done 1469 done
1447 ls=${ls//.po}
1448 else 1470 else
1449 ls=$@ 1471 ls="$@"
1450 fi 1472 fi
1451 1473
1452 ls=" ${ls} " 1474 nols=""
1453 newls="" 1475 newls=""
1454 for f in ${LINGUAS} ; do 1476 for f in ${LINGUAS} ; do
1455 if [[ ${ls/ ${f} /} != ${ls} ]] ; then 1477 if hasq ${f} ${ls} ; then
1456 newls="${newls} ${f}" 1478 newls="${newls} ${f}"
1457 else 1479 else
1458 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA" 1480 nols="${nols} ${f}"
1459 fi 1481 fi
1460 done 1482 done
1461 if [[ -z ${newls} ]] ; then 1483 [[ -n ${nols} ]] \
1462 export LINGUAS="" 1484 && ewarn "Sorry, but ${PN} does not support the LINGUAs:" ${nols}
1463 else
1464 export LINGUAS=${newls:1} 1485 export LINGUAS=${newls:1}
1465 fi
1466} 1486}
1467 1487
1468# moved from kernel.eclass since they are generally useful outside of 1488# moved from kernel.eclass since they are generally useful outside of
1469# kernel.eclass -iggy (20041002) 1489# kernel.eclass -iggy (20041002)
1470 1490

Legend:
Removed from v.1.232  
changed lines
  Added in v.1.245

  ViewVC Help
Powered by ViewVC 1.1.20