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

Diff of /eclass/eutils.eclass

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

Revision 1.294 Revision 1.320
1# Copyright 1999-2007 Gentoo Foundation 1# Copyright 1999-2007 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.294 2008/01/14 04:52:35 vapier Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.320 2009/09/24 02:49:32 vapier Exp $
4 4
5# @ECLASS: eutils.eclass 5# @ECLASS: eutils.eclass
6# @MAINTAINER: 6# @MAINTAINER:
7# base-system@gentoo.org 7# base-system@gentoo.org
8# @BLURB: many extra (but common) functions that are used in ebuilds 8# @BLURB: many extra (but common) functions that are used in ebuilds
47 sleep 1 47 sleep 1
48 done 48 done
49 fi 49 fi
50} 50}
51 51
52# @FUNCTION: ecvs_clean
53# @USAGE: [list of dirs]
54# @DESCRIPTION:
55# Remove CVS directories recursiveley. Useful when a source tarball contains
56# internal CVS directories. Defaults to $PWD.
57ecvs_clean() {
58 [[ -z $* ]] && set -- .
59 find "$@" -type d -name 'CVS' -prune -print0 | xargs -0 rm -rf
60 find "$@" -type f -name '.cvs*' -print0 | xargs -0 rm -rf
61}
62
63# @FUNCTION: esvn_clean
64# @USAGE: [list of dirs]
65# @DESCRIPTION:
66# Remove .svn directories recursiveley. Useful when a source tarball contains
67# internal Subversion directories. Defaults to $PWD.
68esvn_clean() {
69 [[ -z $* ]] && set -- .
70 find "$@" -type d -name '.svn' -prune -print0 | xargs -0 rm -rf
71}
72
52# Default directory where patches are located 73# Default directory where patches are located
53EPATCH_SOURCE="${WORKDIR}/patch" 74EPATCH_SOURCE="${WORKDIR}/patch"
54# Default extension for patches 75# Default extension for patches
55EPATCH_SUFFIX="patch.bz2" 76EPATCH_SUFFIX="patch.bz2"
56# Default options for patch 77# Default options for patch
57# Set -g0 to keep RCS, ClearCase, Perforce and SCCS happy. Bug #24571 78# Set -g0 to keep RCS, ClearCase, Perforce and SCCS happy. Bug #24571
58# Set --no-backup-if-mismatch so we don't leave '.orig' files behind. 79# Set --no-backup-if-mismatch so we don't leave '.orig' files behind.
59# Set -E to automatically remove empty files. 80# Set -E to automatically remove empty files.
60EPATCH_OPTS="-g0 -E --no-backup-if-mismatch" 81EPATCH_OPTS="-g0 -E --no-backup-if-mismatch"
61# List of patches not to apply. Not this is only file names, 82# List of patches not to apply. Note this is only file names,
62# and not the full path .. 83# and not the full path ..
63EPATCH_EXCLUDE="" 84EPATCH_EXCLUDE=""
64# Change the printed message for a single patch. 85# Change the printed message for a single patch.
65EPATCH_SINGLE_MSG="" 86EPATCH_SINGLE_MSG=""
66# Change the printed message for multiple patches. 87# Change the printed message for multiple patches.
84# bug they should be left as is to ensure an ebuild can rely on 105# bug they should be left as is to ensure an ebuild can rely on
85# them for. 106# them for.
86# 107#
87# Patches are applied in current directory. 108# Patches are applied in current directory.
88# 109#
89# Bulk Patches should preferibly have the form of: 110# Bulk Patches should preferably have the form of:
90# 111#
91# ??_${ARCH}_foo.${EPATCH_SUFFIX} 112# ??_${ARCH}_foo.${EPATCH_SUFFIX}
92# 113#
93# For example: 114# For example:
94# 115#
162 183
163 local EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}" 184 local EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}"
164 fi 185 fi
165 186
166 case ${EPATCH_SUFFIX##*\.} in 187 case ${EPATCH_SUFFIX##*\.} in
188 xz)
189 PIPE_CMD="xz -dc"
190 PATCH_SUFFIX="xz"
191 ;;
192 lzma)
193 PIPE_CMD="lzma -dc"
194 PATCH_SUFFIX="lzma"
195 ;;
167 bz2) 196 bz2)
168 PIPE_CMD="bzip2 -dc" 197 PIPE_CMD="bzip2 -dc"
169 PATCH_SUFFIX="bz2" 198 PATCH_SUFFIX="bz2"
170 ;; 199 ;;
171 gz|Z|z) 200 gz|Z|z)
221 fi 250 fi
222 251
223 echo "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 252 echo "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
224 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 253 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
225 254
255 # Decompress the patch if need be
256 if [[ ${PATCH_SUFFIX} != "patch" ]] ; then
257 echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
258 echo "${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
259
260 if ! (${PIPE_CMD} ${x} > ${PATCH_TARGET}) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1 ; then
261 echo
262 eerror "Could not extract patch!"
263 #die "Could not extract patch!"
264 count=5
265 break
266 fi
267 else
268 PATCH_TARGET="${x}"
269 fi
270
271 # Check for absolute paths in patches. If sandbox is disabled,
272 # people could (accidently) patch files in the root filesystem.
273 # Or trigger other unpleasantries #237667. So disallow -p0 on
274 # such patches.
275 local abs_paths=$(egrep -n '^[-+]{3} /' "${PATCH_TARGET}" | awk '$2 != "/dev/null" { print }')
276 if [[ -n ${abs_paths} ]] ; then
277 count=1
278 echo "NOTE: skipping -p0 due to absolute paths in patch:" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
279 echo "${abs_paths}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
280 fi
281
226 # Allow for prefix to differ ... im lazy, so shoot me :/ 282 # Allow for prefix to differ ... im lazy, so shoot me :/
227 while [ "${count}" -lt 5 ] 283 while [ "${count}" -lt 5 ]
228 do 284 do
229 # Generate some useful debug info ... 285 # Generate some useful debug info ...
230 _epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 286 _epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
231 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 287 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
232 288
233 if [ "${PATCH_SUFFIX}" != "patch" ]
234 then
235 echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
236 echo "${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
237 else
238 PATCH_TARGET="${x}"
239 fi
240
241 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 289 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
242 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 290 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
243 291
244 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 292 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
245 _epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 293 _epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
246
247 if [ "${PATCH_SUFFIX}" != "patch" ]
248 then
249 if ! (${PIPE_CMD} ${x} > ${PATCH_TARGET}) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1
250 then
251 echo
252 eerror "Could not extract patch!"
253 #die "Could not extract patch!"
254 count=5
255 break
256 fi
257 fi
258 294
259 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f ; _epatch_assert) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1 295 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f ; _epatch_assert) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1
260 then 296 then
261 _epatch_draw_line "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 297 _epatch_draw_line "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
262 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 298 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
310 done 346 done
311 if [ "${SINGLE_PATCH}" = "no" ] 347 if [ "${SINGLE_PATCH}" = "no" ]
312 then 348 then
313 einfo "Done with patching" 349 einfo "Done with patching"
314 fi 350 fi
351}
352epatch_user() {
353 [[ $# -ne 0 ]] && die "epatch_user takes no options"
354
355 # don't clobber any EPATCH vars that the parent might want
356 local EPATCH_SOURCE check base=${PORTAGE_CONFIGROOT}/etc/portage/patches
357 for check in {${CATEGORY}/${PF},${CATEGORY}/${P},${CATEGORY}/${PN}}; do
358 EPATCH_SOURCE=${base}/${CTARGET}/${check}
359 [[ -r ${EPATCH_SOURCE} ]] || EPATCH_SOURCE=${base}/${CHOST}/${check}
360 [[ -r ${EPATCH_SOURCE} ]] || EPATCH_SOURCE=${base}/${check}
361 if [[ -d ${EPATCH_SOURCE} ]] ; then
362 EPATCH_SOURCE=${EPATCH_SOURCE} \
363 EPATCH_SUFFIX="patch" \
364 EPATCH_FORCE="yes" \
365 EPATCH_MULTI_MSG="Applying user patches from ${EPATCH_SOURCE} ..." \
366 epatch
367 break
368 fi
369 done
315} 370}
316 371
317# @FUNCTION: emktemp 372# @FUNCTION: emktemp
318# @USAGE: [temp dir] 373# @USAGE: [temp dir]
319# @DESCRIPTION: 374# @DESCRIPTION:
355# base-system@gentoo.org (Linux) 410# base-system@gentoo.org (Linux)
356# Joe Jezak <josejx@gmail.com> (OS X) 411# Joe Jezak <josejx@gmail.com> (OS X)
357# usata@gentoo.org (OS X) 412# usata@gentoo.org (OS X)
358# Aaron Walker <ka0ttic@gentoo.org> (FreeBSD) 413# Aaron Walker <ka0ttic@gentoo.org> (FreeBSD)
359# @DESCRIPTION: 414# @DESCRIPTION:
360# Small wrapper for getent (Linux), nidump (Mac OS X), 415# Small wrapper for getent (Linux),
416# nidump (< Mac OS X 10.5), dscl (Mac OS X 10.5),
361# and pw (FreeBSD) used in enewuser()/enewgroup() 417# and pw (FreeBSD) used in enewuser()/enewgroup()
362egetent() { 418egetent() {
363 case ${CHOST} in 419 case ${CHOST} in
364 *-darwin*) 420 *-darwin[678])
365 case "$2" in 421 case "$2" in
366 *[!0-9]*) # Non numeric 422 *[!0-9]*) # Non numeric
367 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }" 423 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
368 ;; 424 ;;
369 *) # Numeric 425 *) # Numeric
370 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }" 426 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
427 ;;
428 esac
429 ;;
430 *-darwin*)
431 local mytype=$1
432 [[ "passwd" == $mytype ]] && mytype="Users"
433 [[ "group" == $mytype ]] && mytype="Groups"
434 case "$2" in
435 *[!0-9]*) # Non numeric
436 dscl . -read /$mytype/$2 2>/dev/null |grep RecordName
437 ;;
438 *) # Numeric
439 local mykey="UniqueID"
440 [[ $mytype == "Groups" ]] && mykey="PrimaryGroupID"
441 dscl . -search /$mytype $mykey $2 2>/dev/null
371 ;; 442 ;;
372 esac 443 esac
373 ;; 444 ;;
374 *-freebsd*|*-dragonfly*) 445 *-freebsd*|*-dragonfly*)
375 local opts action="user" 446 local opts action="user"
872 local desktop="${T}/$(echo ${exec} | sed 's:[[:space:]/:]:_:g')-${desktop_name}.desktop" 943 local desktop="${T}/$(echo ${exec} | sed 's:[[:space:]/:]:_:g')-${desktop_name}.desktop"
873 #local desktop=${T}/${exec%% *:-${desktop_name}}.desktop 944 #local desktop=${T}/${exec%% *:-${desktop_name}}.desktop
874 945
875 cat <<-EOF > "${desktop}" 946 cat <<-EOF > "${desktop}"
876 [Desktop Entry] 947 [Desktop Entry]
877 Version=1.0
878 Name=${name} 948 Name=${name}
879 Type=Application 949 Type=Application
880 Comment=${DESCRIPTION} 950 Comment=${DESCRIPTION}
881 Exec=${exec} 951 Exec=${exec}
882 TryExec=${exec%% *} 952 TryExec=${exec%% *}
921 einfo "Passing desktop entry validity check. Install dev-util/desktop-file-utils, if you want to help to improve Gentoo." 991 einfo "Passing desktop entry validity check. Install dev-util/desktop-file-utils, if you want to help to improve Gentoo."
922 fi 992 fi
923} 993}
924 994
925# @FUNCTION: make_session_desktop 995# @FUNCTION: make_session_desktop
926# @USAGE: <title> <command> 996# @USAGE: <title> <command> [command args...]
927# @DESCRIPTION: 997# @DESCRIPTION:
928# Make a GDM/KDM Session file. The title is the file to execute to start the 998# Make a GDM/KDM Session file. The title is the file to execute to start the
929# Window Manager. The command is the name of the Window Manager. 999# Window Manager. The command is the name of the Window Manager.
1000#
1001# You can set the name of the file via the ${wm} variable.
930make_session_desktop() { 1002make_session_desktop() {
931 [[ -z $1 ]] && eerror "make_session_desktop: You must specify the title" && return 1 1003 [[ -z $1 ]] && eerror "$0: You must specify the title" && return 1
932 [[ -z $2 ]] && eerror "make_session_desktop: You must specify the command" && return 1 1004 [[ -z $2 ]] && eerror "$0: You must specify the command" && return 1
933 1005
934 local title=$1 1006 local title=$1
935 local command=$2 1007 local command=$2
936 local desktop=${T}/${wm}.desktop 1008 local desktop=${T}/${wm:-${PN}}.desktop
1009 shift 2
937 1010
938 cat <<-EOF > "${desktop}" 1011 cat <<-EOF > "${desktop}"
939 [Desktop Entry] 1012 [Desktop Entry]
940 Name=${title} 1013 Name=${title}
941 Comment=This session logs you into ${title} 1014 Comment=This session logs you into ${title}
942 Exec=${command} 1015 Exec=${command} $*
943 TryExec=${command} 1016 TryExec=${command}
944 Type=Application 1017 Type=XSession
945 EOF 1018 EOF
946 1019
947 ( 1020 (
948 # wrap the env here so that the 'insinto' call 1021 # wrap the env here so that the 'insinto' call
949 # doesn't corrupt the env of the caller 1022 # doesn't corrupt the env of the caller
1454# displayed and we'll hang out here until: 1527# displayed and we'll hang out here until:
1455# (1) the file is found on a mounted cdrom 1528# (1) the file is found on a mounted cdrom
1456# (2) the user hits CTRL+C 1529# (2) the user hits CTRL+C
1457_cdrom_locate_file_on_cd() { 1530_cdrom_locate_file_on_cd() {
1458 local mline="" 1531 local mline=""
1459 local showedmsg=0 1532 local showedmsg=0 showjolietmsg=0
1460 1533
1461 while [[ -z ${CDROM_ROOT} ]] ; do 1534 while [[ -z ${CDROM_ROOT} ]] ; do
1462 local i=0 1535 local i=0
1463 local -a cdset=(${*//:/ }) 1536 local -a cdset=(${*//:/ })
1464 if [[ -n ${CDROM_SET} ]] ; then 1537 if [[ -n ${CDROM_SET} ]] ; then
1505 showedmsg=1 1578 showedmsg=1
1506 fi 1579 fi
1507 einfo "Press return to scan for the cd again" 1580 einfo "Press return to scan for the cd again"
1508 einfo "or hit CTRL+C to abort the emerge." 1581 einfo "or hit CTRL+C to abort the emerge."
1509 echo 1582 echo
1583 if [[ ${showjolietmsg} -eq 0 ]] ; then
1584 showjolietmsg=1
1585 else
1510 einfo "If you are having trouble with the detection" 1586 ewarn "If you are having trouble with the detection"
1511 einfo "of your CD, it is possible that you do not have" 1587 ewarn "of your CD, it is possible that you do not have"
1512 einfo "Joliet support enabled in your kernel. Please" 1588 ewarn "Joliet support enabled in your kernel. Please"
1513 einfo "check that CONFIG_JOLIET is enabled in your kernel." 1589 ewarn "check that CONFIG_JOLIET is enabled in your kernel."
1590 ebeep 5
1591 fi
1514 read || die "something is screwed with your system" 1592 read || die "something is screwed with your system"
1515 done 1593 done
1516} 1594}
1517 1595
1518# @FUNCTION: strip-linguas 1596# @FUNCTION: strip-linguas
1527# of the lists. 1605# of the lists.
1528strip-linguas() { 1606strip-linguas() {
1529 local ls newls nols 1607 local ls newls nols
1530 if [[ $1 == "-i" ]] || [[ $1 == "-u" ]] ; then 1608 if [[ $1 == "-i" ]] || [[ $1 == "-u" ]] ; then
1531 local op=$1; shift 1609 local op=$1; shift
1532 ls=$(find "$1" -name '*.po' -exec basename {} .po \;); shift 1610 ls=$(find "$1" -name '*.po' -exec basename {} .po ';'); shift
1533 local d f 1611 local d f
1534 for d in "$@" ; do 1612 for d in "$@" ; do
1535 if [[ ${op} == "-u" ]] ; then 1613 if [[ ${op} == "-u" ]] ; then
1536 newls=${ls} 1614 newls=${ls}
1537 else 1615 else
1538 newls="" 1616 newls=""
1539 fi 1617 fi
1540 for f in $(find "$d" -name '*.po' -exec basename {} .po \;) ; do 1618 for f in $(find "$d" -name '*.po' -exec basename {} .po ';') ; do
1541 if [[ ${op} == "-i" ]] ; then 1619 if [[ ${op} == "-i" ]] ; then
1542 hasq ${f} ${ls} && newls="${newls} ${f}" 1620 hasq ${f} ${ls} && newls="${newls} ${f}"
1543 else 1621 else
1544 hasq ${f} ${ls} || newls="${newls} ${f}" 1622 hasq ${f} ${ls} || newls="${newls} ${f}"
1545 fi 1623 fi
1558 else 1636 else
1559 nols="${nols} ${f}" 1637 nols="${nols} ${f}"
1560 fi 1638 fi
1561 done 1639 done
1562 [[ -n ${nols} ]] \ 1640 [[ -n ${nols} ]] \
1563 && ewarn "Sorry, but ${PN} does not support the LINGUAs:" ${nols} 1641 && ewarn "Sorry, but ${PN} does not support the LINGUAS:" ${nols}
1564 export LINGUAS=${newls:1} 1642 export LINGUAS=${newls:1}
1565} 1643}
1566 1644
1567# @FUNCTION: preserve_old_lib 1645# @FUNCTION: preserve_old_lib
1568# @USAGE: <libs to preserve> [more libs] 1646# @USAGE: <libs to preserve> [more libs]
1578 eerror "preserve_old_lib() must be called from pkg_preinst() only" 1656 eerror "preserve_old_lib() must be called from pkg_preinst() only"
1579 die "Invalid preserve_old_lib() usage" 1657 die "Invalid preserve_old_lib() usage"
1580 fi 1658 fi
1581 [[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve]" 1659 [[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve]"
1582 1660
1661 # let portage worry about it
1662 has preserve-libs ${FEATURES} && return 0
1663
1583 local lib dir 1664 local lib dir
1584 for lib in "$@" ; do 1665 for lib in "$@" ; do
1585 [[ -e ${ROOT}/${lib} ]] || continue 1666 [[ -e ${ROOT}/${lib} ]] || continue
1586 dir=${lib%/*} 1667 dir=${lib%/*}
1587 dodir ${dir} || die "dodir ${dir} failed" 1668 dodir ${dir} || die "dodir ${dir} failed"
1597preserve_old_lib_notify() { 1678preserve_old_lib_notify() {
1598 if [[ ${EBUILD_PHASE} != "postinst" ]] ; then 1679 if [[ ${EBUILD_PHASE} != "postinst" ]] ; then
1599 eerror "preserve_old_lib_notify() must be called from pkg_postinst() only" 1680 eerror "preserve_old_lib_notify() must be called from pkg_postinst() only"
1600 die "Invalid preserve_old_lib_notify() usage" 1681 die "Invalid preserve_old_lib_notify() usage"
1601 fi 1682 fi
1683
1684 # let portage worry about it
1685 has preserve-libs ${FEATURES} && return 0
1602 1686
1603 local lib notice=0 1687 local lib notice=0
1604 for lib in "$@" ; do 1688 for lib in "$@" ; do
1605 [[ -e ${ROOT}/${lib} ]] || continue 1689 [[ -e ${ROOT}/${lib} ]] || continue
1606 if [[ ${notice} -eq 0 ]] ; then 1690 if [[ ${notice} -eq 0 ]] ; then
1615 ewarn " # revdep-rebuild --library ${lib##*/}" 1699 ewarn " # revdep-rebuild --library ${lib##*/}"
1616 done 1700 done
1617 if [[ ${notice} -eq 1 ]] ; then 1701 if [[ ${notice} -eq 1 ]] ; then
1618 ewarn 1702 ewarn
1619 ewarn "Once you've finished running revdep-rebuild, it should be safe to" 1703 ewarn "Once you've finished running revdep-rebuild, it should be safe to"
1620 ewarn "delete the old libraries." 1704 ewarn "delete the old libraries. Here is a copy & paste for the lazy:"
1705 for lib in "$@" ; do
1706 ewarn " # rm '${lib}'"
1707 done
1621 fi 1708 fi
1622} 1709}
1623 1710
1624# @FUNCTION: built_with_use 1711# @FUNCTION: built_with_use
1625# @USAGE: [--hidden] [--missing <action>] [-a|-o] <DEPEND ATOM> <List of USE flags> 1712# @USAGE: [--hidden] [--missing <action>] [-a|-o] <DEPEND ATOM> <List of USE flags>
1630# --missing option controls the behavior if called on a package that does 1717# --missing option controls the behavior if called on a package that does
1631# not actually support the defined USE flags (aka listed in IUSE). 1718# not actually support the defined USE flags (aka listed in IUSE).
1632# The default is to abort (call die). The -a and -o flags control 1719# The default is to abort (call die). The -a and -o flags control
1633# the requirements of the USE flags. They correspond to "and" and "or" 1720# the requirements of the USE flags. They correspond to "and" and "or"
1634# logic. So the -a flag means all listed USE flags must be enabled 1721# logic. So the -a flag means all listed USE flags must be enabled
1635# while the -o flag means at least one of the listed fIUSE flags must be 1722# while the -o flag means at least one of the listed IUSE flags must be
1636# enabled. The --hidden option is really for internal use only as it 1723# enabled. The --hidden option is really for internal use only as it
1637# means the USE flag we're checking is hidden expanded, so it won't be found 1724# means the USE flag we're checking is hidden expanded, so it won't be found
1638# in IUSE like normal USE flags. 1725# in IUSE like normal USE flags.
1639# 1726#
1640# Remember that this function isn't terribly intelligent so order of optional 1727# Remember that this function isn't terribly intelligent so order of optional
1675 die) die "Unable to determine what USE flags $PKG was built with";; 1762 die) die "Unable to determine what USE flags $PKG was built with";;
1676 esac 1763 esac
1677 fi 1764 fi
1678 1765
1679 if [[ ${hidden} == "no" ]] ; then 1766 if [[ ${hidden} == "no" ]] ; then
1680 local IUSE_BUILT=$(<${IUSEFILE}) 1767 local IUSE_BUILT=( $(<"${IUSEFILE}") )
1681 # Don't check USE_EXPAND #147237 1768 # Don't check USE_EXPAND #147237
1682 local expand 1769 local expand
1683 for expand in $(echo ${USE_EXPAND} | tr '[:upper:]' '[:lower:]') ; do 1770 for expand in $(echo ${USE_EXPAND} | tr '[:upper:]' '[:lower:]') ; do
1684 if [[ $1 == ${expand}_* ]] ; then 1771 if [[ $1 == ${expand}_* ]] ; then
1685 expand="" 1772 expand=""
1686 break 1773 break
1687 fi 1774 fi
1688 done 1775 done
1689 if [[ -n ${expand} ]] ; then 1776 if [[ -n ${expand} ]] ; then
1690 if ! has $1 ${IUSE_BUILT} ; then 1777 if ! has $1 ${IUSE_BUILT[@]#[-+]} ; then
1691 case ${missing_action} in 1778 case ${missing_action} in
1692 true) return 0;; 1779 true) return 0;;
1693 false) return 1;; 1780 false) return 1;;
1694 die) die "$PKG does not actually support the $1 USE flag!";; 1781 die) die "$PKG does not actually support the $1 USE flag!";;
1695 esac 1782 esac
1726 done 1813 done
1727 eend 0 1814 eend 0
1728} 1815}
1729 1816
1730# @FUNCTION: make_wrapper 1817# @FUNCTION: make_wrapper
1731# @USAGE: <wrapper> <target> <chdir> [libpaths] [installpath] 1818# @USAGE: <wrapper> <target> [chdir] [libpaths] [installpath]
1732# @DESCRIPTION: 1819# @DESCRIPTION:
1733# Create a shell wrapper script named wrapper in installpath 1820# Create a shell wrapper script named wrapper in installpath
1734# (defaults to the bindir) to execute target (default of wrapper) by 1821# (defaults to the bindir) to execute target (default of wrapper) by
1735# first optionally setting LD_LIBRARY_PATH to the colon-delimited 1822# first optionally setting LD_LIBRARY_PATH to the colon-delimited
1736# libpaths followed by optionally changing directory to chdir. 1823# libpaths followed by optionally changing directory to chdir.
1759 ) || die 1846 ) || die
1760 else 1847 else
1761 newbin "${tmpwrapper}" "${wrapper}" || die 1848 newbin "${tmpwrapper}" "${wrapper}" || die
1762 fi 1849 fi
1763} 1850}
1851
1852# @FUNCTION: prepalldocs
1853# @USAGE:
1854# @DESCRIPTION:
1855# Compress files in /usr/share/doc which are not already
1856# compressed, excluding /usr/share/doc/${PF}/html.
1857# Uses the ecompressdir to do the compression.
1858# 2009-02-18 by betelgeuse:
1859# Commented because ecompressdir is even more internal to
1860# Portage than prepalldocs (it's not even mentioned in man 5
1861# ebuild). Please submit a better version for review to gentoo-dev
1862# if you want prepalldocs here.
1863#prepalldocs() {
1864# if [[ -n $1 ]] ; then
1865# ewarn "prepalldocs: invalid usage; takes no arguments"
1866# fi
1867
1868# cd "${D}"
1869# [[ -d usr/share/doc ]] || return 0
1870
1871# find usr/share/doc -exec gzip {} +
1872# ecompressdir --ignore /usr/share/doc/${PF}/html
1873# ecompressdir --queue /usr/share/doc
1874#}

Legend:
Removed from v.1.294  
changed lines
  Added in v.1.320

  ViewVC Help
Powered by ViewVC 1.1.20