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

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

  ViewVC Help
Powered by ViewVC 1.1.20