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

Diff of /eclass/eutils.eclass

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

Revision 1.296 Revision 1.324
1# Copyright 1999-2007 Gentoo Foundation 1# Copyright 1999-2009 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.296 2008/02/13 20:50:06 wolf31o2 Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.324 2010/01/03 19:57:10 zmedico 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
73# @FUNCTION: eshopts_push
74# @USAGE: [options to `set`]
75# @DESCRIPTION:
76# Often times code will want to enable a shell option to change code behavior.
77# Since changing shell options can easily break other pieces of code (which
78# assume the default state), eshopts_push is used to (1) push the current shell
79# options onto a stack and (2) pass the specified arguments to set.
80#
81# A common example is to disable shell globbing so that special meaning/care
82# may be used with variables/arguments to custom functions. That would be:
83# @CODE
84# eshopts_push -o noglob
85# for x in ${foo} ; do
86# if ...some check... ; then
87# eshopts_pop
88# return 0
89# fi
90# done
91# eshopts_pop
92# @CODE
93eshopts_push() {
94 # have to assume __ESHOPTS_SAVE__ isn't screwed with
95 # as a `declare -a` here will reset its value
96 local i=${#__ESHOPTS_SAVE__[@]}
97 __ESHOPTS_SAVE__[$i]=$-
98 [[ $# -eq 0 ]] && return 0
99 set "$@" || die "eshopts_push: bad options to set: $*"
100}
101
102# @FUNCTION: eshopts_pop
103# @USAGE:
104# @DESCRIPTION:
105# Restore the shell options to the state saved with the corresponding
106# eshopts_push call. See that function for more details.
107eshopts_pop() {
108 [[ $# -ne 0 ]] && die "eshopts_pop takes no arguments"
109 local i=$(( ${#__ESHOPTS_SAVE__[@]} - 1 ))
110 [[ ${i} -eq -1 ]] && die "eshopts_{push,pop}: unbalanced pair"
111 local s=${__ESHOPTS_SAVE__[$i]}
112 unset __ESHOPTS_SAVE__[$i]
113 set +$- || die "eshopts_pop: sanity: invalid shell settings: $-"
114 set -${s} || die "eshopts_pop: sanity: unable to restore saved shell settings: ${s}"
115}
116
52# Default directory where patches are located 117# Default directory where patches are located
53EPATCH_SOURCE="${WORKDIR}/patch" 118EPATCH_SOURCE="${WORKDIR}/patch"
54# Default extension for patches 119# Default extension for patches
55EPATCH_SUFFIX="patch.bz2" 120EPATCH_SUFFIX="patch.bz2"
56# Default options for patch 121# Default options for patch
57# Set -g0 to keep RCS, ClearCase, Perforce and SCCS happy. Bug #24571 122# 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. 123# Set --no-backup-if-mismatch so we don't leave '.orig' files behind.
59# Set -E to automatically remove empty files. 124# Set -E to automatically remove empty files.
60EPATCH_OPTS="-g0 -E --no-backup-if-mismatch" 125EPATCH_OPTS="-g0 -E --no-backup-if-mismatch"
61# List of patches not to apply. Not this is only file names, 126# List of patches not to apply. Note this is only file names,
62# and not the full path .. 127# and not the full path ..
63EPATCH_EXCLUDE="" 128EPATCH_EXCLUDE=""
64# Change the printed message for a single patch. 129# Change the printed message for a single patch.
65EPATCH_SINGLE_MSG="" 130EPATCH_SINGLE_MSG=""
66# Change the printed message for multiple patches. 131# Change the printed message for multiple patches.
84# bug they should be left as is to ensure an ebuild can rely on 149# bug they should be left as is to ensure an ebuild can rely on
85# them for. 150# them for.
86# 151#
87# Patches are applied in current directory. 152# Patches are applied in current directory.
88# 153#
89# Bulk Patches should preferibly have the form of: 154# Bulk Patches should preferably have the form of:
90# 155#
91# ??_${ARCH}_foo.${EPATCH_SUFFIX} 156# ??_${ARCH}_foo.${EPATCH_SUFFIX}
92# 157#
93# For example: 158# For example:
94# 159#
162 227
163 local EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}" 228 local EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}"
164 fi 229 fi
165 230
166 case ${EPATCH_SUFFIX##*\.} in 231 case ${EPATCH_SUFFIX##*\.} in
232 xz)
233 PIPE_CMD="xz -dc"
234 PATCH_SUFFIX="xz"
235 ;;
236 lzma)
237 PIPE_CMD="lzma -dc"
238 PATCH_SUFFIX="lzma"
239 ;;
167 bz2) 240 bz2)
168 PIPE_CMD="bzip2 -dc" 241 PIPE_CMD="bzip2 -dc"
169 PATCH_SUFFIX="bz2" 242 PATCH_SUFFIX="bz2"
170 ;; 243 ;;
171 gz|Z|z) 244 gz|Z|z)
221 fi 294 fi
222 295
223 echo "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 296 echo "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
224 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 297 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
225 298
299 # Decompress the patch if need be
300 if [[ ${PATCH_SUFFIX} != "patch" ]] ; then
301 echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
302 echo "${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
303
304 if ! (${PIPE_CMD} ${x} > ${PATCH_TARGET}) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1 ; then
305 echo
306 eerror "Could not extract patch!"
307 #die "Could not extract patch!"
308 count=5
309 break
310 fi
311 else
312 PATCH_TARGET="${x}"
313 fi
314
315 # Check for absolute paths in patches. If sandbox is disabled,
316 # people could (accidently) patch files in the root filesystem.
317 # Or trigger other unpleasantries #237667. So disallow -p0 on
318 # such patches.
319 local abs_paths=$(egrep -n '^[-+]{3} /' "${PATCH_TARGET}" | awk '$2 != "/dev/null" { print }')
320 if [[ -n ${abs_paths} ]] ; then
321 count=1
322 echo "NOTE: skipping -p0 due to absolute paths in patch:" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
323 echo "${abs_paths}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
324 fi
325
226 # Allow for prefix to differ ... im lazy, so shoot me :/ 326 # Allow for prefix to differ ... im lazy, so shoot me :/
227 while [ "${count}" -lt 5 ] 327 while [ "${count}" -lt 5 ]
228 do 328 do
229 # Generate some useful debug info ... 329 # Generate some useful debug info ...
230 _epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 330 _epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
231 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 331 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
232 332
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##*/} 333 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
242 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 334 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
243 335
244 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 336 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
245 _epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 337 _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 338
259 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f ; _epatch_assert) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1 339 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f ; _epatch_assert) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1
260 then 340 then
261 _epatch_draw_line "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 341 _epatch_draw_line "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
262 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 342 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
310 done 390 done
311 if [ "${SINGLE_PATCH}" = "no" ] 391 if [ "${SINGLE_PATCH}" = "no" ]
312 then 392 then
313 einfo "Done with patching" 393 einfo "Done with patching"
314 fi 394 fi
395}
396epatch_user() {
397 [[ $# -ne 0 ]] && die "epatch_user takes no options"
398
399 # don't clobber any EPATCH vars that the parent might want
400 local EPATCH_SOURCE check base=${PORTAGE_CONFIGROOT%/}/etc/portage/patches
401 for check in {${CATEGORY}/${PF},${CATEGORY}/${P},${CATEGORY}/${PN}}; do
402 EPATCH_SOURCE=${base}/${CTARGET}/${check}
403 [[ -r ${EPATCH_SOURCE} ]] || EPATCH_SOURCE=${base}/${CHOST}/${check}
404 [[ -r ${EPATCH_SOURCE} ]] || EPATCH_SOURCE=${base}/${check}
405 if [[ -d ${EPATCH_SOURCE} ]] ; then
406 EPATCH_SOURCE=${EPATCH_SOURCE} \
407 EPATCH_SUFFIX="patch" \
408 EPATCH_FORCE="yes" \
409 EPATCH_MULTI_MSG="Applying user patches from ${EPATCH_SOURCE} ..." \
410 epatch
411 break
412 fi
413 done
315} 414}
316 415
317# @FUNCTION: emktemp 416# @FUNCTION: emktemp
318# @USAGE: [temp dir] 417# @USAGE: [temp dir]
319# @DESCRIPTION: 418# @DESCRIPTION:
355# base-system@gentoo.org (Linux) 454# base-system@gentoo.org (Linux)
356# Joe Jezak <josejx@gmail.com> (OS X) 455# Joe Jezak <josejx@gmail.com> (OS X)
357# usata@gentoo.org (OS X) 456# usata@gentoo.org (OS X)
358# Aaron Walker <ka0ttic@gentoo.org> (FreeBSD) 457# Aaron Walker <ka0ttic@gentoo.org> (FreeBSD)
359# @DESCRIPTION: 458# @DESCRIPTION:
360# Small wrapper for getent (Linux), nidump (Mac OS X), 459# Small wrapper for getent (Linux),
460# nidump (< Mac OS X 10.5), dscl (Mac OS X 10.5),
361# and pw (FreeBSD) used in enewuser()/enewgroup() 461# and pw (FreeBSD) used in enewuser()/enewgroup()
362egetent() { 462egetent() {
363 case ${CHOST} in 463 case ${CHOST} in
364 *-darwin*) 464 *-darwin[678])
365 case "$2" in 465 case "$2" in
366 *[!0-9]*) # Non numeric 466 *[!0-9]*) # Non numeric
367 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }" 467 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
368 ;; 468 ;;
369 *) # Numeric 469 *) # Numeric
370 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }" 470 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
471 ;;
472 esac
473 ;;
474 *-darwin*)
475 local mytype=$1
476 [[ "passwd" == $mytype ]] && mytype="Users"
477 [[ "group" == $mytype ]] && mytype="Groups"
478 case "$2" in
479 *[!0-9]*) # Non numeric
480 dscl . -read /$mytype/$2 2>/dev/null |grep RecordName
481 ;;
482 *) # Numeric
483 local mykey="UniqueID"
484 [[ $mytype == "Groups" ]] && mykey="PrimaryGroupID"
485 dscl . -search /$mytype $mykey $2 2>/dev/null
371 ;; 486 ;;
372 esac 487 esac
373 ;; 488 ;;
374 *-freebsd*|*-dragonfly*) 489 *-freebsd*|*-dragonfly*)
375 local opts action="user" 490 local opts action="user"
575 fi 690 fi
576 ;; 691 ;;
577 692
578 *) 693 *)
579 if [[ -z $@ ]] ; then 694 if [[ -z $@ ]] ; then
580 useradd ${opts} ${euser} \ 695 useradd ${opts} \
581 -c "added by portage for ${PN}" \ 696 -c "added by portage for ${PN}" \
697 ${euser} \
582 || die "enewuser failed" 698 || die "enewuser failed"
583 else 699 else
584 einfo " - Extra: $@" 700 einfo " - Extra: $@"
585 useradd ${opts} ${euser} "$@" \ 701 useradd ${opts} "$@" \
702 ${euser} \
586 || die "enewuser failed" 703 || die "enewuser failed"
587 fi 704 fi
588 ;; 705 ;;
589 esac 706 esac
590 707
872 local desktop="${T}/$(echo ${exec} | sed 's:[[:space:]/:]:_:g')-${desktop_name}.desktop" 989 local desktop="${T}/$(echo ${exec} | sed 's:[[:space:]/:]:_:g')-${desktop_name}.desktop"
873 #local desktop=${T}/${exec%% *:-${desktop_name}}.desktop 990 #local desktop=${T}/${exec%% *:-${desktop_name}}.desktop
874 991
875 cat <<-EOF > "${desktop}" 992 cat <<-EOF > "${desktop}"
876 [Desktop Entry] 993 [Desktop Entry]
877 Version=1.0
878 Name=${name} 994 Name=${name}
879 Type=Application 995 Type=Application
880 Comment=${DESCRIPTION} 996 Comment=${DESCRIPTION}
881 Exec=${exec} 997 Exec=${exec}
882 TryExec=${exec%% *} 998 TryExec=${exec%% *}
921 einfo "Passing desktop entry validity check. Install dev-util/desktop-file-utils, if you want to help to improve Gentoo." 1037 einfo "Passing desktop entry validity check. Install dev-util/desktop-file-utils, if you want to help to improve Gentoo."
922 fi 1038 fi
923} 1039}
924 1040
925# @FUNCTION: make_session_desktop 1041# @FUNCTION: make_session_desktop
926# @USAGE: <title> <command> 1042# @USAGE: <title> <command> [command args...]
927# @DESCRIPTION: 1043# @DESCRIPTION:
928# Make a GDM/KDM Session file. The title is the file to execute to start the 1044# 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. 1045# Window Manager. The command is the name of the Window Manager.
1046#
1047# You can set the name of the file via the ${wm} variable.
930make_session_desktop() { 1048make_session_desktop() {
931 [[ -z $1 ]] && eerror "make_session_desktop: You must specify the title" && return 1 1049 [[ -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 1050 [[ -z $2 ]] && eerror "$0: You must specify the command" && return 1
933 1051
934 local title=$1 1052 local title=$1
935 local command=$2 1053 local command=$2
936 local desktop=${T}/${wm}.desktop 1054 local desktop=${T}/${wm:-${PN}}.desktop
1055 shift 2
937 1056
938 cat <<-EOF > "${desktop}" 1057 cat <<-EOF > "${desktop}"
939 [Desktop Entry] 1058 [Desktop Entry]
940 Name=${title} 1059 Name=${title}
941 Comment=This session logs you into ${title} 1060 Comment=This session logs you into ${title}
942 Exec=${command} 1061 Exec=${command} $*
943 TryExec=${command} 1062 TryExec=${command}
944 Type=Application 1063 Type=XSession
945 EOF 1064 EOF
946 1065
947 ( 1066 (
948 # wrap the env here so that the 'insinto' call 1067 # wrap the env here so that the 'insinto' call
949 # doesn't corrupt the env of the caller 1068 # doesn't corrupt the env of the caller
1261 lic="${PWD}/${lic}" 1380 lic="${PWD}/${lic}"
1262 elif [ -e "${lic}" ] ; then 1381 elif [ -e "${lic}" ] ; then
1263 lic="${lic}" 1382 lic="${lic}"
1264 fi 1383 fi
1265 fi 1384 fi
1266 [ ! -f "${lic}" ] && die "Could not find requested license ${lic}"
1267 local l="`basename ${lic}`" 1385 local l="`basename ${lic}`"
1268 1386
1269 # here is where we check for the licenses the user already 1387 # here is where we check for the licenses the user already
1270 # accepted ... if we don't find a match, we make the user accept 1388 # accepted ... if we don't find a match, we make the user accept
1271 local shopts=$-
1272 local alic 1389 local alic
1273 set -o noglob #so that bash doesn't expand "*" 1390 eshopts_push -o noglob # so that bash doesn't expand "*"
1274 for alic in ${ACCEPT_LICENSE} ; do 1391 for alic in ${ACCEPT_LICENSE} ; do
1275 if [[ ${alic} == ${l} ]]; then 1392 if [[ ${alic} == ${l} ]]; then
1276 set +o noglob; set -${shopts} #reset old shell opts 1393 eshopts_pop
1277 return 0 1394 return 0
1278 fi 1395 fi
1279 done 1396 done
1280 set +o noglob; set -$shopts #reset old shell opts 1397 eshopts_pop
1398 [ ! -f "${lic}" ] && die "Could not find requested license ${lic}"
1281 1399
1282 local licmsg=$(emktemp) 1400 local licmsg=$(emktemp)
1283 cat <<-EOF > ${licmsg} 1401 cat <<-EOF > ${licmsg}
1284 ********************************************************** 1402 **********************************************************
1285 The following license outlines the terms of use of this 1403 The following license outlines the terms of use of this
1532# of the lists. 1650# of the lists.
1533strip-linguas() { 1651strip-linguas() {
1534 local ls newls nols 1652 local ls newls nols
1535 if [[ $1 == "-i" ]] || [[ $1 == "-u" ]] ; then 1653 if [[ $1 == "-i" ]] || [[ $1 == "-u" ]] ; then
1536 local op=$1; shift 1654 local op=$1; shift
1537 ls=$(find "$1" -name '*.po' -exec basename {} .po \;); shift 1655 ls=$(find "$1" -name '*.po' -exec basename {} .po ';'); shift
1538 local d f 1656 local d f
1539 for d in "$@" ; do 1657 for d in "$@" ; do
1540 if [[ ${op} == "-u" ]] ; then 1658 if [[ ${op} == "-u" ]] ; then
1541 newls=${ls} 1659 newls=${ls}
1542 else 1660 else
1543 newls="" 1661 newls=""
1544 fi 1662 fi
1545 for f in $(find "$d" -name '*.po' -exec basename {} .po \;) ; do 1663 for f in $(find "$d" -name '*.po' -exec basename {} .po ';') ; do
1546 if [[ ${op} == "-i" ]] ; then 1664 if [[ ${op} == "-i" ]] ; then
1547 hasq ${f} ${ls} && newls="${newls} ${f}" 1665 hasq ${f} ${ls} && newls="${newls} ${f}"
1548 else 1666 else
1549 hasq ${f} ${ls} || newls="${newls} ${f}" 1667 hasq ${f} ${ls} || newls="${newls} ${f}"
1550 fi 1668 fi
1563 else 1681 else
1564 nols="${nols} ${f}" 1682 nols="${nols} ${f}"
1565 fi 1683 fi
1566 done 1684 done
1567 [[ -n ${nols} ]] \ 1685 [[ -n ${nols} ]] \
1568 && ewarn "Sorry, but ${PN} does not support the LINGUAs:" ${nols} 1686 && ewarn "Sorry, but ${PN} does not support the LINGUAS:" ${nols}
1569 export LINGUAS=${newls:1} 1687 export LINGUAS=${newls:1}
1570} 1688}
1571 1689
1572# @FUNCTION: preserve_old_lib 1690# @FUNCTION: preserve_old_lib
1573# @USAGE: <libs to preserve> [more libs] 1691# @USAGE: <libs to preserve> [more libs]
1583 eerror "preserve_old_lib() must be called from pkg_preinst() only" 1701 eerror "preserve_old_lib() must be called from pkg_preinst() only"
1584 die "Invalid preserve_old_lib() usage" 1702 die "Invalid preserve_old_lib() usage"
1585 fi 1703 fi
1586 [[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve]" 1704 [[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve]"
1587 1705
1706 # let portage worry about it
1707 has preserve-libs ${FEATURES} && return 0
1708
1588 local lib dir 1709 local lib dir
1589 for lib in "$@" ; do 1710 for lib in "$@" ; do
1590 [[ -e ${ROOT}/${lib} ]] || continue 1711 [[ -e ${ROOT}/${lib} ]] || continue
1591 dir=${lib%/*} 1712 dir=${lib%/*}
1592 dodir ${dir} || die "dodir ${dir} failed" 1713 dodir ${dir} || die "dodir ${dir} failed"
1602preserve_old_lib_notify() { 1723preserve_old_lib_notify() {
1603 if [[ ${EBUILD_PHASE} != "postinst" ]] ; then 1724 if [[ ${EBUILD_PHASE} != "postinst" ]] ; then
1604 eerror "preserve_old_lib_notify() must be called from pkg_postinst() only" 1725 eerror "preserve_old_lib_notify() must be called from pkg_postinst() only"
1605 die "Invalid preserve_old_lib_notify() usage" 1726 die "Invalid preserve_old_lib_notify() usage"
1606 fi 1727 fi
1728
1729 # let portage worry about it
1730 has preserve-libs ${FEATURES} && return 0
1607 1731
1608 local lib notice=0 1732 local lib notice=0
1609 for lib in "$@" ; do 1733 for lib in "$@" ; do
1610 [[ -e ${ROOT}/${lib} ]] || continue 1734 [[ -e ${ROOT}/${lib} ]] || continue
1611 if [[ ${notice} -eq 0 ]] ; then 1735 if [[ ${notice} -eq 0 ]] ; then
1620 ewarn " # revdep-rebuild --library ${lib##*/}" 1744 ewarn " # revdep-rebuild --library ${lib##*/}"
1621 done 1745 done
1622 if [[ ${notice} -eq 1 ]] ; then 1746 if [[ ${notice} -eq 1 ]] ; then
1623 ewarn 1747 ewarn
1624 ewarn "Once you've finished running revdep-rebuild, it should be safe to" 1748 ewarn "Once you've finished running revdep-rebuild, it should be safe to"
1625 ewarn "delete the old libraries." 1749 ewarn "delete the old libraries. Here is a copy & paste for the lazy:"
1750 for lib in "$@" ; do
1751 ewarn " # rm '${lib}'"
1752 done
1626 fi 1753 fi
1627} 1754}
1628 1755
1629# @FUNCTION: built_with_use 1756# @FUNCTION: built_with_use
1630# @USAGE: [--hidden] [--missing <action>] [-a|-o] <DEPEND ATOM> <List of USE flags> 1757# @USAGE: [--hidden] [--missing <action>] [-a|-o] <DEPEND ATOM> <List of USE flags>
1635# --missing option controls the behavior if called on a package that does 1762# --missing option controls the behavior if called on a package that does
1636# not actually support the defined USE flags (aka listed in IUSE). 1763# not actually support the defined USE flags (aka listed in IUSE).
1637# The default is to abort (call die). The -a and -o flags control 1764# The default is to abort (call die). The -a and -o flags control
1638# the requirements of the USE flags. They correspond to "and" and "or" 1765# the requirements of the USE flags. They correspond to "and" and "or"
1639# logic. So the -a flag means all listed USE flags must be enabled 1766# logic. So the -a flag means all listed USE flags must be enabled
1640# while the -o flag means at least one of the listed fIUSE flags must be 1767# while the -o flag means at least one of the listed IUSE flags must be
1641# enabled. The --hidden option is really for internal use only as it 1768# enabled. The --hidden option is really for internal use only as it
1642# means the USE flag we're checking is hidden expanded, so it won't be found 1769# means the USE flag we're checking is hidden expanded, so it won't be found
1643# in IUSE like normal USE flags. 1770# in IUSE like normal USE flags.
1644# 1771#
1645# Remember that this function isn't terribly intelligent so order of optional 1772# Remember that this function isn't terribly intelligent so order of optional
1680 die) die "Unable to determine what USE flags $PKG was built with";; 1807 die) die "Unable to determine what USE flags $PKG was built with";;
1681 esac 1808 esac
1682 fi 1809 fi
1683 1810
1684 if [[ ${hidden} == "no" ]] ; then 1811 if [[ ${hidden} == "no" ]] ; then
1685 local IUSE_BUILT=$(<${IUSEFILE}) 1812 local IUSE_BUILT=( $(<"${IUSEFILE}") )
1686 # Don't check USE_EXPAND #147237 1813 # Don't check USE_EXPAND #147237
1687 local expand 1814 local expand
1688 for expand in $(echo ${USE_EXPAND} | tr '[:upper:]' '[:lower:]') ; do 1815 for expand in $(echo ${USE_EXPAND} | tr '[:upper:]' '[:lower:]') ; do
1689 if [[ $1 == ${expand}_* ]] ; then 1816 if [[ $1 == ${expand}_* ]] ; then
1690 expand="" 1817 expand=""
1691 break 1818 break
1692 fi 1819 fi
1693 done 1820 done
1694 if [[ -n ${expand} ]] ; then 1821 if [[ -n ${expand} ]] ; then
1695 if ! has $1 ${IUSE_BUILT} ; then 1822 if ! has $1 ${IUSE_BUILT[@]#[-+]} ; then
1696 case ${missing_action} in 1823 case ${missing_action} in
1697 true) return 0;; 1824 true) return 0;;
1698 false) return 1;; 1825 false) return 1;;
1699 die) die "$PKG does not actually support the $1 USE flag!";; 1826 die) die "$PKG does not actually support the $1 USE flag!";;
1700 esac 1827 esac
1764 ) || die 1891 ) || die
1765 else 1892 else
1766 newbin "${tmpwrapper}" "${wrapper}" || die 1893 newbin "${tmpwrapper}" "${wrapper}" || die
1767 fi 1894 fi
1768} 1895}
1896
1897# @FUNCTION: prepalldocs
1898# @USAGE:
1899# @DESCRIPTION:
1900# Compress files in /usr/share/doc which are not already
1901# compressed, excluding /usr/share/doc/${PF}/html.
1902# Uses the ecompressdir to do the compression.
1903# 2009-02-18 by betelgeuse:
1904# Commented because ecompressdir is even more internal to
1905# Portage than prepalldocs (it's not even mentioned in man 5
1906# ebuild). Please submit a better version for review to gentoo-dev
1907# if you want prepalldocs here.
1908#prepalldocs() {
1909# if [[ -n $1 ]] ; then
1910# ewarn "prepalldocs: invalid usage; takes no arguments"
1911# fi
1912
1913# cd "${D}"
1914# [[ -d usr/share/doc ]] || return 0
1915
1916# find usr/share/doc -exec gzip {} +
1917# ecompressdir --ignore /usr/share/doc/${PF}/html
1918# ecompressdir --queue /usr/share/doc
1919#}

Legend:
Removed from v.1.296  
changed lines
  Added in v.1.324

  ViewVC Help
Powered by ViewVC 1.1.20