/[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.319
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.319 2009/09/12 14:37:51 grobian 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"
921 einfo "Passing desktop entry validity check. Install dev-util/desktop-file-utils, if you want to help to improve Gentoo." 992 einfo "Passing desktop entry validity check. Install dev-util/desktop-file-utils, if you want to help to improve Gentoo."
922 fi 993 fi
923} 994}
924 995
925# @FUNCTION: make_session_desktop 996# @FUNCTION: make_session_desktop
926# @USAGE: <title> <command> 997# @USAGE: <title> <command> [command args...]
927# @DESCRIPTION: 998# @DESCRIPTION:
928# Make a GDM/KDM Session file. The title is the file to execute to start the 999# 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. 1000# Window Manager. The command is the name of the Window Manager.
1001#
1002# You can set the name of the file via the ${wm} variable.
930make_session_desktop() { 1003make_session_desktop() {
931 [[ -z $1 ]] && eerror "make_session_desktop: You must specify the title" && return 1 1004 [[ -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 1005 [[ -z $2 ]] && eerror "$0: You must specify the command" && return 1
933 1006
934 local title=$1 1007 local title=$1
935 local command=$2 1008 local command=$2
936 local desktop=${T}/${wm}.desktop 1009 local desktop=${T}/${wm:-${PN}}.desktop
1010 shift 2
937 1011
938 cat <<-EOF > "${desktop}" 1012 cat <<-EOF > "${desktop}"
939 [Desktop Entry] 1013 [Desktop Entry]
940 Name=${title} 1014 Name=${title}
941 Comment=This session logs you into ${title} 1015 Comment=This session logs you into ${title}
942 Exec=${command} 1016 Exec=${command} $*
943 TryExec=${command} 1017 TryExec=${command}
944 Type=Application 1018 Type=XSession
945 EOF 1019 EOF
946 1020
947 ( 1021 (
948 # wrap the env here so that the 'insinto' call 1022 # wrap the env here so that the 'insinto' call
949 # doesn't corrupt the env of the caller 1023 # doesn't corrupt the env of the caller
1454# displayed and we'll hang out here until: 1528# displayed and we'll hang out here until:
1455# (1) the file is found on a mounted cdrom 1529# (1) the file is found on a mounted cdrom
1456# (2) the user hits CTRL+C 1530# (2) the user hits CTRL+C
1457_cdrom_locate_file_on_cd() { 1531_cdrom_locate_file_on_cd() {
1458 local mline="" 1532 local mline=""
1459 local showedmsg=0 1533 local showedmsg=0 showjolietmsg=0
1460 1534
1461 while [[ -z ${CDROM_ROOT} ]] ; do 1535 while [[ -z ${CDROM_ROOT} ]] ; do
1462 local i=0 1536 local i=0
1463 local -a cdset=(${*//:/ }) 1537 local -a cdset=(${*//:/ })
1464 if [[ -n ${CDROM_SET} ]] ; then 1538 if [[ -n ${CDROM_SET} ]] ; then
1505 showedmsg=1 1579 showedmsg=1
1506 fi 1580 fi
1507 einfo "Press return to scan for the cd again" 1581 einfo "Press return to scan for the cd again"
1508 einfo "or hit CTRL+C to abort the emerge." 1582 einfo "or hit CTRL+C to abort the emerge."
1509 echo 1583 echo
1584 if [[ ${showjolietmsg} -eq 0 ]] ; then
1585 showjolietmsg=1
1586 else
1510 einfo "If you are having trouble with the detection" 1587 ewarn "If you are having trouble with the detection"
1511 einfo "of your CD, it is possible that you do not have" 1588 ewarn "of your CD, it is possible that you do not have"
1512 einfo "Joliet support enabled in your kernel. Please" 1589 ewarn "Joliet support enabled in your kernel. Please"
1513 einfo "check that CONFIG_JOLIET is enabled in your kernel." 1590 ewarn "check that CONFIG_JOLIET is enabled in your kernel."
1591 ebeep 5
1592 fi
1514 read || die "something is screwed with your system" 1593 read || die "something is screwed with your system"
1515 done 1594 done
1516} 1595}
1517 1596
1518# @FUNCTION: strip-linguas 1597# @FUNCTION: strip-linguas
1527# of the lists. 1606# of the lists.
1528strip-linguas() { 1607strip-linguas() {
1529 local ls newls nols 1608 local ls newls nols
1530 if [[ $1 == "-i" ]] || [[ $1 == "-u" ]] ; then 1609 if [[ $1 == "-i" ]] || [[ $1 == "-u" ]] ; then
1531 local op=$1; shift 1610 local op=$1; shift
1532 ls=$(find "$1" -name '*.po' -exec basename {} .po \;); shift 1611 ls=$(find "$1" -name '*.po' -exec basename {} .po ';'); shift
1533 local d f 1612 local d f
1534 for d in "$@" ; do 1613 for d in "$@" ; do
1535 if [[ ${op} == "-u" ]] ; then 1614 if [[ ${op} == "-u" ]] ; then
1536 newls=${ls} 1615 newls=${ls}
1537 else 1616 else
1538 newls="" 1617 newls=""
1539 fi 1618 fi
1540 for f in $(find "$d" -name '*.po' -exec basename {} .po \;) ; do 1619 for f in $(find "$d" -name '*.po' -exec basename {} .po ';') ; do
1541 if [[ ${op} == "-i" ]] ; then 1620 if [[ ${op} == "-i" ]] ; then
1542 hasq ${f} ${ls} && newls="${newls} ${f}" 1621 hasq ${f} ${ls} && newls="${newls} ${f}"
1543 else 1622 else
1544 hasq ${f} ${ls} || newls="${newls} ${f}" 1623 hasq ${f} ${ls} || newls="${newls} ${f}"
1545 fi 1624 fi
1558 else 1637 else
1559 nols="${nols} ${f}" 1638 nols="${nols} ${f}"
1560 fi 1639 fi
1561 done 1640 done
1562 [[ -n ${nols} ]] \ 1641 [[ -n ${nols} ]] \
1563 && ewarn "Sorry, but ${PN} does not support the LINGUAs:" ${nols} 1642 && ewarn "Sorry, but ${PN} does not support the LINGUAS:" ${nols}
1564 export LINGUAS=${newls:1} 1643 export LINGUAS=${newls:1}
1565} 1644}
1566 1645
1567# @FUNCTION: preserve_old_lib 1646# @FUNCTION: preserve_old_lib
1568# @USAGE: <libs to preserve> [more libs] 1647# @USAGE: <libs to preserve> [more libs]
1578 eerror "preserve_old_lib() must be called from pkg_preinst() only" 1657 eerror "preserve_old_lib() must be called from pkg_preinst() only"
1579 die "Invalid preserve_old_lib() usage" 1658 die "Invalid preserve_old_lib() usage"
1580 fi 1659 fi
1581 [[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve]" 1660 [[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve]"
1582 1661
1662 # let portage worry about it
1663 has preserve-libs ${FEATURES} && return 0
1664
1583 local lib dir 1665 local lib dir
1584 for lib in "$@" ; do 1666 for lib in "$@" ; do
1585 [[ -e ${ROOT}/${lib} ]] || continue 1667 [[ -e ${ROOT}/${lib} ]] || continue
1586 dir=${lib%/*} 1668 dir=${lib%/*}
1587 dodir ${dir} || die "dodir ${dir} failed" 1669 dodir ${dir} || die "dodir ${dir} failed"
1597preserve_old_lib_notify() { 1679preserve_old_lib_notify() {
1598 if [[ ${EBUILD_PHASE} != "postinst" ]] ; then 1680 if [[ ${EBUILD_PHASE} != "postinst" ]] ; then
1599 eerror "preserve_old_lib_notify() must be called from pkg_postinst() only" 1681 eerror "preserve_old_lib_notify() must be called from pkg_postinst() only"
1600 die "Invalid preserve_old_lib_notify() usage" 1682 die "Invalid preserve_old_lib_notify() usage"
1601 fi 1683 fi
1684
1685 # let portage worry about it
1686 has preserve-libs ${FEATURES} && return 0
1602 1687
1603 local lib notice=0 1688 local lib notice=0
1604 for lib in "$@" ; do 1689 for lib in "$@" ; do
1605 [[ -e ${ROOT}/${lib} ]] || continue 1690 [[ -e ${ROOT}/${lib} ]] || continue
1606 if [[ ${notice} -eq 0 ]] ; then 1691 if [[ ${notice} -eq 0 ]] ; then
1615 ewarn " # revdep-rebuild --library ${lib##*/}" 1700 ewarn " # revdep-rebuild --library ${lib##*/}"
1616 done 1701 done
1617 if [[ ${notice} -eq 1 ]] ; then 1702 if [[ ${notice} -eq 1 ]] ; then
1618 ewarn 1703 ewarn
1619 ewarn "Once you've finished running revdep-rebuild, it should be safe to" 1704 ewarn "Once you've finished running revdep-rebuild, it should be safe to"
1620 ewarn "delete the old libraries." 1705 ewarn "delete the old libraries. Here is a copy & paste for the lazy:"
1706 for lib in "$@" ; do
1707 ewarn " # rm '${lib}'"
1708 done
1621 fi 1709 fi
1622} 1710}
1623 1711
1624# @FUNCTION: built_with_use 1712# @FUNCTION: built_with_use
1625# @USAGE: [--hidden] [--missing <action>] [-a|-o] <DEPEND ATOM> <List of USE flags> 1713# @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 1718# --missing option controls the behavior if called on a package that does
1631# not actually support the defined USE flags (aka listed in IUSE). 1719# 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 1720# 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" 1721# 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 1722# 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 1723# 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 1724# 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 1725# means the USE flag we're checking is hidden expanded, so it won't be found
1638# in IUSE like normal USE flags. 1726# in IUSE like normal USE flags.
1639# 1727#
1640# Remember that this function isn't terribly intelligent so order of optional 1728# 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";; 1763 die) die "Unable to determine what USE flags $PKG was built with";;
1676 esac 1764 esac
1677 fi 1765 fi
1678 1766
1679 if [[ ${hidden} == "no" ]] ; then 1767 if [[ ${hidden} == "no" ]] ; then
1680 local IUSE_BUILT=$(<${IUSEFILE}) 1768 local IUSE_BUILT=( $(<"${IUSEFILE}") )
1681 # Don't check USE_EXPAND #147237 1769 # Don't check USE_EXPAND #147237
1682 local expand 1770 local expand
1683 for expand in $(echo ${USE_EXPAND} | tr '[:upper:]' '[:lower:]') ; do 1771 for expand in $(echo ${USE_EXPAND} | tr '[:upper:]' '[:lower:]') ; do
1684 if [[ $1 == ${expand}_* ]] ; then 1772 if [[ $1 == ${expand}_* ]] ; then
1685 expand="" 1773 expand=""
1686 break 1774 break
1687 fi 1775 fi
1688 done 1776 done
1689 if [[ -n ${expand} ]] ; then 1777 if [[ -n ${expand} ]] ; then
1690 if ! has $1 ${IUSE_BUILT} ; then 1778 if ! has $1 ${IUSE_BUILT[@]#[-+]} ; then
1691 case ${missing_action} in 1779 case ${missing_action} in
1692 true) return 0;; 1780 true) return 0;;
1693 false) return 1;; 1781 false) return 1;;
1694 die) die "$PKG does not actually support the $1 USE flag!";; 1782 die) die "$PKG does not actually support the $1 USE flag!";;
1695 esac 1783 esac
1726 done 1814 done
1727 eend 0 1815 eend 0
1728} 1816}
1729 1817
1730# @FUNCTION: make_wrapper 1818# @FUNCTION: make_wrapper
1731# @USAGE: <wrapper> <target> <chdir> [libpaths] [installpath] 1819# @USAGE: <wrapper> <target> [chdir] [libpaths] [installpath]
1732# @DESCRIPTION: 1820# @DESCRIPTION:
1733# Create a shell wrapper script named wrapper in installpath 1821# Create a shell wrapper script named wrapper in installpath
1734# (defaults to the bindir) to execute target (default of wrapper) by 1822# (defaults to the bindir) to execute target (default of wrapper) by
1735# first optionally setting LD_LIBRARY_PATH to the colon-delimited 1823# first optionally setting LD_LIBRARY_PATH to the colon-delimited
1736# libpaths followed by optionally changing directory to chdir. 1824# libpaths followed by optionally changing directory to chdir.
1759 ) || die 1847 ) || die
1760 else 1848 else
1761 newbin "${tmpwrapper}" "${wrapper}" || die 1849 newbin "${tmpwrapper}" "${wrapper}" || die
1762 fi 1850 fi
1763} 1851}
1852
1853# @FUNCTION: prepalldocs
1854# @USAGE:
1855# @DESCRIPTION:
1856# Compress files in /usr/share/doc which are not already
1857# compressed, excluding /usr/share/doc/${PF}/html.
1858# Uses the ecompressdir to do the compression.
1859# 2009-02-18 by betelgeuse:
1860# Commented because ecompressdir is even more internal to
1861# Portage than prepalldocs (it's not even mentioned in man 5
1862# ebuild). Please submit a better version for review to gentoo-dev
1863# if you want prepalldocs here.
1864#prepalldocs() {
1865# if [[ -n $1 ]] ; then
1866# ewarn "prepalldocs: invalid usage; takes no arguments"
1867# fi
1868
1869# cd "${D}"
1870# [[ -d usr/share/doc ]] || return 0
1871
1872# find usr/share/doc -exec gzip {} +
1873# ecompressdir --ignore /usr/share/doc/${PF}/html
1874# ecompressdir --queue /usr/share/doc
1875#}

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

  ViewVC Help
Powered by ViewVC 1.1.20