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

Diff of /eclass/eutils.eclass

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

Revision 1.228 Revision 1.243
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.228 2006/03/10 23:24:21 vapier Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.243 2006/07/05 01:16:18 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
88# Default extension for patches 85# Default extension for patches
89EPATCH_SUFFIX="patch.bz2" 86EPATCH_SUFFIX="patch.bz2"
90# Default options for patch 87# Default options for patch
91# Set -g0 to keep RCS, ClearCase, Perforce and SCCS happy. Bug #24571 88# 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. 89# Set --no-backup-if-mismatch so we don't leave '.orig' files behind.
90# Set -E to automatically remove empty files.
93EPATCH_OPTS="-g0 --no-backup-if-mismatch" 91EPATCH_OPTS="-g0 -E --no-backup-if-mismatch"
94# List of patches not to apply. Not this is only file names, 92# List of patches not to apply. Not this is only file names,
95# and not the full path .. 93# and not the full path ..
96EPATCH_EXCLUDE="" 94EPATCH_EXCLUDE=""
97# Change the printed message for a single patch. 95# Change the printed message for a single patch.
98EPATCH_SINGLE_MSG="" 96EPATCH_SINGLE_MSG=""
137# 135#
138# <azarah@gentoo.org> (10 Nov 2002) 136# <azarah@gentoo.org> (10 Nov 2002)
139# 137#
140epatch() { 138epatch() {
141 _epatch_draw_line() { 139 _epatch_draw_line() {
142 # this func produces a lot of pointless noise when debugging is turned on ... 140 [[ -z $1 ]] && set "$(printf "%65s" '')"
143 local is_debug=0 141 echo "${1//?/=}"
144 [[ $- == *x* ]] && is_debug=1 && set +x
145
146 local i=0 str_length="" str_out=""
147
148 # Handle calls that do not have args, or wc not being installed ...
149 if [[ -z $1 ]] || ! type -p wc >/dev/null ; then
150 str_length=65
151 else
152 str_length=$(echo -n "$*" | wc -m)
153 fi
154
155 while ((i++ < ${str_length})) ; do
156 str_out="${str_out}="
157 done
158 echo ${str_out}
159
160 [[ ${is_debug} -eq 1 ]] && set -x
161 return 0
162 } 142 }
163 _epatch_assert() { local _pipestatus=${PIPESTATUS[*]}; [[ ${_pipestatus// /} -eq 0 ]] ; } 143 _epatch_assert() { local _pipestatus=${PIPESTATUS[*]}; [[ ${_pipestatus// /} -eq 0 ]] ; }
164 local PIPE_CMD="" 144 local PIPE_CMD=""
165 local STDERR_TARGET="${T}/$$.out" 145 local STDERR_TARGET="${T}/$$.out"
166 local PATCH_TARGET="${T}/$$.patch" 146 local PATCH_TARGET="${T}/$$.patch"
453# shell: /bin/false 433# shell: /bin/false
454# homedir: /dev/null 434# homedir: /dev/null
455# groups: none 435# groups: none
456# extra: comment of 'added by portage for ${PN}' 436# extra: comment of 'added by portage for ${PN}'
457enewuser() { 437enewuser() {
438 case ${EBUILD_PHASE} in
439 unpack|compile|test|install)
440 eerror "'enewuser()' called from '${EBUILD_PHASE}()' which is not a pkg_* function."
441 eerror "Package fails at QA and at life. Please file a bug."
442 die "Bad package! enewuser is only for use in pkg_* functions!"
443 esac
444
458 # get the username 445 # get the username
459 local euser=$1; shift 446 local euser=$1; shift
460 if [[ -z ${euser} ]] ; then 447 if [[ -z ${euser} ]] ; then
461 eerror "No username specified !" 448 eerror "No username specified !"
462 die "Cannot call enewuser without a username" 449 die "Cannot call enewuser without a username"
648# Default values if you do not specify any: 635# Default values if you do not specify any:
649# groupname: REQUIRED ! 636# groupname: REQUIRED !
650# gid: next available (see groupadd(8)) 637# gid: next available (see groupadd(8))
651# extra: none 638# extra: none
652enewgroup() { 639enewgroup() {
640 case ${EBUILD_PHASE} in
641 unpack|compile|test|install)
642 eerror "'enewgroup()' called from '${EBUILD_PHASE}()' which is not a pkg_* function."
643 eerror "Package fails at QA and at life. Please file a bug."
644 die "Bad package! enewgroup is only for use in pkg_* functions!"
645 esac
646
653 # get the group 647 # get the group
654 local egroup="$1"; shift 648 local egroup="$1"; shift
655 if [ -z "${egroup}" ] 649 if [ -z "${egroup}" ]
656 then 650 then
657 eerror "No group specified !" 651 eerror "No group specified !"
769 763
770# Make a desktop file ! 764# Make a desktop file !
771# Great for making those icons in kde/gnome startmenu ! 765# Great for making those icons in kde/gnome startmenu !
772# Amaze your friends ! Get the women ! Join today ! 766# Amaze your friends ! Get the women ! Join today !
773# 767#
774# make_desktop_entry(<binary>, [name], [icon], [type], [path]) 768# make_desktop_entry(<command>, [name], [icon], [type], [path])
775# 769#
776# binary: what binary does the app run with ? 770# binary: what command does the app run with ?
777# name: the name that will show up in the menu 771# name: the name that will show up in the menu
778# icon: give your little like a pretty little icon ... 772# icon: give your little like a pretty little icon ...
779# this can be relative (to /usr/share/pixmaps) or 773# this can be relative (to /usr/share/pixmaps) or
780# a full path to an icon 774# a full path to an icon
781# type: what kind of application is this ? for categories: 775# type: what kind of application is this ? for categories:
893 local desktop_name="${PN}" 887 local desktop_name="${PN}"
894 else 888 else
895 local desktop_name="${PN}-${SLOT}" 889 local desktop_name="${PN}-${SLOT}"
896 fi 890 fi
897 local desktop=${T}/${exec%% *}-${desktop_name}.desktop 891 local desktop=${T}/${exec%% *}-${desktop_name}.desktop
892# local desktop=${T}/${exec%% *:-${desktop_name}}.desktop
898 893
899echo "[Desktop Entry] 894echo "[Desktop Entry]
900Encoding=UTF-8 895Encoding=UTF-8
901Version=0.9.2 896Version=0.9.2
902Name=${name} 897Name=${name}
903Type=Application 898Type=Application
904Comment=${DESCRIPTION} 899Comment=${DESCRIPTION}
905Exec=${exec} 900Exec=${exec}
901TryExec=${exec%% *}
906Path=${path} 902Path=${path}
907Icon=${icon} 903Icon=${icon}
908Categories=Application;${type};" > "${desktop}" 904Categories=Application;${type};" > "${desktop}"
909 905
910 ( 906 (
1113 if [[ -z ${skip} ]] ; then 1109 if [[ -z ${skip} ]] ; then
1114 local ver=$(grep -a '#.*Makeself' "${src}" | awk '{print $NF}') 1110 local ver=$(grep -a '#.*Makeself' "${src}" | awk '{print $NF}')
1115 local skip=0 1111 local skip=0
1116 exe=tail 1112 exe=tail
1117 case ${ver} in 1113 case ${ver} in
1118 1.5.*) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same 1114 1.5.*|1.6.0-nv) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same
1119 skip=$(grep -a ^skip= "${src}" | cut -d= -f2) 1115 skip=$(grep -a ^skip= "${src}" | cut -d= -f2)
1120 ;; 1116 ;;
1121 2.0|2.0.1) 1117 2.0|2.0.1)
1122 skip=$(grep -a ^$'\t'tail "${src}" | awk '{print $2}' | cut -b2-) 1118 skip=$(grep -a ^$'\t'tail "${src}" | awk '{print $2}' | cut -b2-)
1123 ;; 1119 ;;
1246# and when the function returns, you can assume that the cd has been 1242# and when the function returns, you can assume that the cd has been
1247# found at CDROM_ROOT. 1243# found at CDROM_ROOT.
1248# 1244#
1249# normally the cdrom functions will refer to the cds as 'cd #1', 'cd #2', 1245# normally the cdrom functions will refer to the cds as 'cd #1', 'cd #2',
1250# etc... if you want to give the cds better names, then just export 1246# etc... if you want to give the cds better names, then just export
1251# the CDROM_NAME_X variables before calling cdrom_get_cds(). 1247# the appropriate CDROM_NAME variable before calling cdrom_get_cds().
1248# - CDROM_NAME="fooie cd" - for when you only want 1 cd
1249# - CDROM_NAME_1="install cd" - for when you want more than 1 cd
1250# CDROM_NAME_2="data cd"
1251# - CDROM_NAME_SET=( "install cd" "data cd" ) - short hand for CDROM_NAME_#
1252# 1252#
1253# for those multi cd ebuilds, see the cdrom_load_next_cd() below. 1253# for those multi cd ebuilds, see the cdrom_load_next_cd() below.
1254# 1254#
1255# Usage: cdrom_get_cds <file on cd1> [file on cd2] [file on cd3] [...] 1255# Usage: cdrom_get_cds <file on cd1> [file on cd2] [file on cd3] [...]
1256# - this will attempt to locate a cd based upon a file that is on 1256# - this will attempt to locate a cd based upon a file that is on
1307 echo 1307 echo
1308 einfo "For example:" 1308 einfo "For example:"
1309 einfo "export CD_ROOT=/mnt/cdrom" 1309 einfo "export CD_ROOT=/mnt/cdrom"
1310 echo 1310 echo
1311 else 1311 else
1312 if [[ -n ${CDROM_NAME_SET} ]] ; then
1313 # Translate the CDROM_NAME_SET array into CDROM_NAME_#
1314 cdcnt=0
1315 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do
1316 ((++cdcnt))
1317 export CDROM_NAME_${cdcnt}="${CDROM_NAME_SET[$((${cdcnt}-1))]}"
1318 done
1319 fi
1320
1312 einfo "This package will need access to ${CDROM_TOTAL_CDS} cds." 1321 einfo "This package will need access to ${CDROM_TOTAL_CDS} cds."
1313 cdcnt=0 1322 cdcnt=0
1314 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do 1323 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do
1315 ((++cdcnt)) 1324 ((++cdcnt))
1316 var="CDROM_NAME_${cdcnt}" 1325 var="CDROM_NAME_${cdcnt}"
1438# The -i builds a list of po files found in all the 1447# The -i builds a list of po files found in all the
1439# directories and uses the intersection of the lists. 1448# directories and uses the intersection of the lists.
1440# The -u builds a list of po files found in all the 1449# The -u builds a list of po files found in all the
1441# directories and uses the union of the lists. 1450# directories and uses the union of the lists.
1442strip-linguas() { 1451strip-linguas() {
1443 local ls newls 1452 local ls newls nols
1444 if [[ $1 == "-i" ]] || [[ $1 == "-u" ]] ; then 1453 if [[ $1 == "-i" ]] || [[ $1 == "-u" ]] ; then
1445 local op=$1; shift 1454 local op=$1; shift
1446 ls=" $(find "$1" -name '*.po' -exec basename {} \;) "; shift 1455 ls=$(find "$1" -name '*.po' -exec basename {} .po \;); shift
1447 local d f 1456 local d f
1448 for d in "$@" ; do 1457 for d in "$@" ; do
1449 if [[ ${op} == "-u" ]] ; then 1458 if [[ ${op} == "-u" ]] ; then
1450 newls=${ls} 1459 newls=${ls}
1451 else 1460 else
1452 newls="" 1461 newls=""
1453 fi 1462 fi
1454 for f in $(find "$d" -name '*.po' -exec basename {} \;) ; do 1463 for f in $(find "$d" -name '*.po' -exec basename {} .po \;) ; do
1455 if [[ ${op} == "-i" ]] ; then 1464 if [[ ${op} == "-i" ]] ; then
1456 [[ ${ls/ ${f} /} != ${ls} ]] && newls="${newls} ${f}" 1465 hasq ${f} ${ls} && newls="${newls} ${f}"
1457 else 1466 else
1458 [[ ${ls/ ${f} /} == ${ls} ]] && newls="${newls} ${f}" 1467 hasq ${f} ${ls} || newls="${newls} ${f}"
1459 fi 1468 fi
1460 done 1469 done
1461 ls=${newls} 1470 ls=${newls}
1462 done 1471 done
1463 ls=${ls//.po}
1464 else 1472 else
1465 ls=$@ 1473 ls="$@"
1466 fi 1474 fi
1467 1475
1468 ls=" ${ls} " 1476 nols=""
1469 newls="" 1477 newls=""
1470 for f in ${LINGUAS} ; do 1478 for f in ${LINGUAS} ; do
1471 if [[ ${ls/ ${f} /} != ${ls} ]] ; then 1479 if hasq ${f} ${ls} ; then
1472 newls="${newls} ${f}" 1480 newls="${newls} ${f}"
1473 else 1481 else
1474 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA" 1482 nols="${nols} ${f}"
1475 fi 1483 fi
1476 done 1484 done
1477 if [[ -z ${newls} ]] ; then 1485 [[ -n ${newls} ]] \
1478 export LINGUAS="" 1486 && ewarn "Sorry, but ${PN} does not support the LINGUAs:" ${nols}
1479 else
1480 export LINGUAS=${newls:1} 1487 export LINGUAS=${newls:1}
1481 fi
1482} 1488}
1483 1489
1484# moved from kernel.eclass since they are generally useful outside of 1490# moved from kernel.eclass since they are generally useful outside of
1485# kernel.eclass -iggy (20041002) 1491# kernel.eclass -iggy (20041002)
1486 1492

Legend:
Removed from v.1.228  
changed lines
  Added in v.1.243

  ViewVC Help
Powered by ViewVC 1.1.20