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

Diff of /eclass/eutils.eclass

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

Revision 1.218 Revision 1.229
1# Copyright 1999-2005 Gentoo Foundation 1# Copyright 1999-2005 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.218 2005/11/22 11:15:34 flameeyes Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.229 2006/03/16 03:44:54 agriffis Exp $
4# 4#
5# Author: Martin Schlemmer <azarah@gentoo.org> 5# Author: Martin Schlemmer <azarah@gentoo.org>
6# 6#
7# This eclass is for general purpose functions that most ebuilds 7# This eclass is for general purpose functions that most ebuilds
8# have to implement themselves. 8# have to implement themselves.
60# to point to the latest version of the library present. 60# to point to the latest version of the library present.
61# 61#
62# <azarah@gentoo.org> (26 Oct 2002) 62# <azarah@gentoo.org> (26 Oct 2002)
63# 63#
64gen_usr_ldscript() { 64gen_usr_ldscript() {
65 local libdir="$(get_libdir)" 65 local lib libdir=$(get_libdir)
66 # Just make sure it exists 66 # Just make sure it exists
67 dodir /usr/${libdir} 67 dodir /usr/${libdir}
68 68
69 for lib in "${@}" ; do 69 for lib in "${@}" ; do
70 cat > "${D}/usr/${libdir}/${lib}" <<-END_LDSCRIPT 70 cat > "${D}/usr/${libdir}/${lib}" <<-END_LDSCRIPT
76 76
77 See bug http://bugs.gentoo.org/4411 for more info. 77 See bug http://bugs.gentoo.org/4411 for more info.
78 */ 78 */
79 GROUP ( /${libdir}/${lib} ) 79 GROUP ( /${libdir}/${lib} )
80 END_LDSCRIPT 80 END_LDSCRIPT
81 fperms a+x "/usr/${libdir}/${lib}" 81 fperms a+x "/usr/${libdir}/${lib}" || die "could not change perms on ${lib}"
82 done 82 done
83} 83}
84 84
85# Simple function to draw a line consisting of '=' the same length as $*
86# - only to be used by epatch()
87#
88# <azarah@gentoo.org> (11 Nov 2002)
89#
90draw_line() {
91 local i=0
92 local str_length=""
93
94 # Handle calls that do not have args, or wc not being installed ...
95 if [ -z "$1" -o ! -x "$(which wc 2>/dev/null)" ]
96 then
97 echo "==============================================================="
98 return 0
99 fi
100
101 # Get the length of $*
102 str_length="$(echo -n "$*" | wc -m)"
103
104 while [ "$i" -lt "${str_length}" ]
105 do
106 echo -n "="
107
108 i=$((i + 1))
109 done
110
111 echo
112
113 return 0
114}
115 85
116# Default directory where patches are located 86# Default directory where patches are located
117EPATCH_SOURCE="${WORKDIR}/patch" 87EPATCH_SOURCE="${WORKDIR}/patch"
118# Default extension for patches 88# Default extension for patches
119EPATCH_SUFFIX="patch.bz2" 89EPATCH_SUFFIX="patch.bz2"
166# hand its a directory, it will set EPATCH_SOURCE to this. 136# hand its a directory, it will set EPATCH_SOURCE to this.
167# 137#
168# <azarah@gentoo.org> (10 Nov 2002) 138# <azarah@gentoo.org> (10 Nov 2002)
169# 139#
170epatch() { 140epatch() {
141 _epatch_draw_line() {
142 [[ -z $1 ]] && set "$(printf "%65s" '')"
143 echo "${1//?/=}"
144 }
171 _epatch_assert() { local _pipestatus=${PIPESTATUS[*]}; [[ ${_pipestatus// /} -eq 0 ]] ; } 145 _epatch_assert() { local _pipestatus=${PIPESTATUS[*]}; [[ ${_pipestatus// /} -eq 0 ]] ; }
172 local PIPE_CMD="" 146 local PIPE_CMD=""
173 local STDERR_TARGET="${T}/$$.out" 147 local STDERR_TARGET="${T}/$$.out"
174 local PATCH_TARGET="${T}/$$.patch" 148 local PATCH_TARGET="${T}/$$.patch"
175 local PATCH_SUFFIX="" 149 local PATCH_SUFFIX=""
285 259
286 # Allow for prefix to differ ... im lazy, so shoot me :/ 260 # Allow for prefix to differ ... im lazy, so shoot me :/
287 while [ "${count}" -lt 5 ] 261 while [ "${count}" -lt 5 ]
288 do 262 do
289 # Generate some useful debug info ... 263 # Generate some useful debug info ...
290 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 264 _epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
291 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 265 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
292 266
293 if [ "${PATCH_SUFFIX}" != "patch" ] 267 if [ "${PATCH_SUFFIX}" != "patch" ]
294 then 268 then
295 echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 269 echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
300 274
301 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 275 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
302 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 276 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
303 277
304 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 278 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
305 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 279 _epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
306 280
307 if [ "${PATCH_SUFFIX}" != "patch" ] 281 if [ "${PATCH_SUFFIX}" != "patch" ]
308 then 282 then
309 if ! (${PIPE_CMD} ${x} > ${PATCH_TARGET}) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1 283 if ! (${PIPE_CMD} ${x} > ${PATCH_TARGET}) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1
310 then 284 then
316 fi 290 fi
317 fi 291 fi
318 292
319 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f ; _epatch_assert) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1 293 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f ; _epatch_assert) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1
320 then 294 then
321 draw_line "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 295 _epatch_draw_line "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
322 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 296 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
323 echo "ACTUALLY APPLYING ${patchname} ..." >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 297 echo "ACTUALLY APPLYING ${patchname} ..." >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
324 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 298 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
325 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 299 _epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
326 300
327 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 2>&1 301 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 2>&1
328 _epatch_assert 302 _epatch_assert
329 303
330 if [ "$?" -ne 0 ] 304 if [ "$?" -ne 0 ]
396 tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM} 370 tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}
397 done 371 done
398 ${exe} "${tmp}" || ${exe} -p "${tmp}" 372 ${exe} "${tmp}" || ${exe} -p "${tmp}"
399 echo "${tmp}" 373 echo "${tmp}"
400 else 374 else
401 [[ ${exe} == "touch" ]] \ 375 if [[ ${exe} == "touch" ]] ; then
402 && exe="-p" \ 376 [[ ${USERLAND} == "GNU" ]] \
403 || exe="-d" 377 && mktemp -p "${topdir}" \
404 mktemp ${exe} "${topdir}" 378 || TMPDIR="${topdir}" mktemp -t tmp
379 else
380 [[ ${USERLAND} == "GNU" ]] \
381 && mktemp -d "${topdir}" \
382 || TMPDIR="${topdir}" mktemp -dt tmp
383 fi
405 fi 384 fi
406} 385}
407 386
408# Small wrapper for getent (Linux), nidump (Mac OS X), 387# Small wrapper for getent (Linux), nidump (Mac OS X),
409# and pw (FreeBSD) used in enewuser()/enewgroup() 388# and pw (FreeBSD) used in enewuser()/enewgroup()
421 *) # Numeric 400 *) # Numeric
422 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }" 401 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
423 ;; 402 ;;
424 esac 403 esac
425 ;; 404 ;;
426 *-freebsd*) 405 *-freebsd*|*-dragonfly*)
427 local opts action="user" 406 local opts action="user"
428 [[ $1 == "passwd" ]] || action="group" 407 [[ $1 == "passwd" ]] || action="group"
429 408
430 # lookup by uid/gid 409 # lookup by uid/gid
431 if [[ $2 == [[:digit:]]* ]] ; then 410 if [[ $2 == [[:digit:]]* ]] ; then
497 einfo " - Userid: ${euid}" 476 einfo " - Userid: ${euid}"
498 477
499 # handle shell 478 # handle shell
500 local eshell=$1; shift 479 local eshell=$1; shift
501 if [[ ! -z ${eshell} ]] && [[ ${eshell} != "-1" ]] ; then 480 if [[ ! -z ${eshell} ]] && [[ ${eshell} != "-1" ]] ; then
502 if [[ ! -e ${eshell} ]] ; then 481 if [[ ! -e ${ROOT}${eshell} ]] ; then
503 eerror "A shell was specified but it does not exist !" 482 eerror "A shell was specified but it does not exist !"
504 die "${eshell} does not exist" 483 die "${eshell} does not exist in ${ROOT}"
484 fi
485 if [[ ${eshell} == */false || ${eshell} == */nologin ]] ; then
486 eerror "Do not specify ${eshell} yourself, use -1"
487 die "Pass '-1' as the shell parameter"
505 fi 488 fi
506 else 489 else
507 for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null ; do 490 for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null ; do
508 [[ -x ${ROOT}${shell} ]] && break 491 [[ -x ${ROOT}${shell} ]] && break
509 done 492 done
580 einfo "Please report the ebuild along with the info below" 563 einfo "Please report the ebuild along with the info below"
581 einfo "eextra: $@" 564 einfo "eextra: $@"
582 die "Required function missing" 565 die "Required function missing"
583 fi 566 fi
584 ;; 567 ;;
585 *-freebsd*) 568 *-freebsd*|*-dragonfly*)
586 if [[ -z $@ ]] ; then 569 if [[ -z $@ ]] ; then
587 pw useradd ${euser} ${opts} \ 570 pw useradd ${euser} ${opts} \
588 -c "added by portage for ${PN}" \ 571 -c "added by portage for ${PN}" \
589 die "enewuser failed" 572 die "enewuser failed"
590 else 573 else
718 esac 701 esac
719 dscl . create /groups/${egroup} gid ${egid} 702 dscl . create /groups/${egroup} gid ${egid}
720 dscl . create /groups/${egroup} passwd '*' 703 dscl . create /groups/${egroup} passwd '*'
721 ;; 704 ;;
722 705
723 *-freebsd*) 706 *-freebsd*|*-dragonfly*)
724 case ${egid} in 707 case ${egid} in
725 *[!0-9]*) # Non numeric 708 *[!0-9]*) # Non numeric
726 for egid in $(seq 101 999); do 709 for egid in $(seq 101 999); do
727 [ -z "`egetent group ${egid}`" ] && break 710 [ -z "`egetent group ${egid}`" ] && break
728 done 711 done
1420 echo 1403 echo
1421 einfo "If you are having trouble with the detection" 1404 einfo "If you are having trouble with the detection"
1422 einfo "of your CD, it is possible that you do not have" 1405 einfo "of your CD, it is possible that you do not have"
1423 einfo "Joliet support enabled in your kernel. Please" 1406 einfo "Joliet support enabled in your kernel. Please"
1424 einfo "check that CONFIG_JOLIET is enabled in your kernel." 1407 einfo "check that CONFIG_JOLIET is enabled in your kernel."
1425 read 1408 read || die "something is screwed with your system"
1426 done 1409 done
1427} 1410}
1428 1411
1429# Make sure that LINGUAS only contains languages that 1412# Make sure that LINGUAS only contains languages that
1430# a package can support 1413# a package can support
1440# directories and uses the union of the lists. 1423# directories and uses the union of the lists.
1441strip-linguas() { 1424strip-linguas() {
1442 local ls newls 1425 local ls newls
1443 if [[ $1 == "-i" ]] || [[ $1 == "-u" ]] ; then 1426 if [[ $1 == "-i" ]] || [[ $1 == "-u" ]] ; then
1444 local op=$1; shift 1427 local op=$1; shift
1445 ls=" $(find "$1" -name '*.po' -printf '%f ') "; shift 1428 ls=" $(find "$1" -name '*.po' -exec basename {} \;) "; shift
1446 local d f 1429 local d f
1447 for d in "$@" ; do 1430 for d in "$@" ; do
1448 if [[ ${op} == "-u" ]] ; then 1431 if [[ ${op} == "-u" ]] ; then
1449 newls=${ls} 1432 newls=${ls}
1450 else 1433 else
1451 newls="" 1434 newls=""
1452 fi 1435 fi
1453 for f in $(find "$d" -name '*.po' -printf '%f ') ; do 1436 for f in $(find "$d" -name '*.po' -exec basename {} \;) ; do
1454 if [[ ${op} == "-i" ]] ; then 1437 if [[ ${op} == "-i" ]] ; then
1455 [[ ${ls/ ${f} /} != ${ls} ]] && newls="${newls} ${f}" 1438 [[ ${ls/ ${f} /} != ${ls} ]] && newls="${newls} ${f}"
1456 else 1439 else
1457 [[ ${ls/ ${f} /} == ${ls} ]] && newls="${newls} ${f}" 1440 [[ ${ls/ ${f} /} == ${ls} ]] && newls="${newls} ${f}"
1458 fi 1441 fi
1514 1497
1515# Jeremy Huddleston <eradicator@gentoo.org>: 1498# Jeremy Huddleston <eradicator@gentoo.org>:
1516# preserve_old_lib /path/to/libblah.so.0 1499# preserve_old_lib /path/to/libblah.so.0
1517# preserve_old_lib_notify /path/to/libblah.so.0 1500# preserve_old_lib_notify /path/to/libblah.so.0
1518# 1501#
1519# These functions are useful when a lib in your package changes --soname. Such 1502# These functions are useful when a lib in your package changes --library. Such
1520# an example might be from libogg.so.0 to libogg.so.1. Removing libogg.so.0 1503# an example might be from libogg.so.0 to libogg.so.1. Removing libogg.so.0
1521# would break packages that link against it. Most people get around this 1504# would break packages that link against it. Most people get around this
1522# by using the portage SLOT mechanism, but that is not always a relevant 1505# by using the portage SLOT mechanism, but that is not always a relevant
1523# solution, so instead you can add the following to your ebuilds: 1506# solution, so instead you can add the following to your ebuilds:
1524# 1507#
1555 1538
1556 ewarn "An old version of an installed library was detected on your system." 1539 ewarn "An old version of an installed library was detected on your system."
1557 ewarn "In order to avoid breaking packages that link against it, this older version" 1540 ewarn "In order to avoid breaking packages that link against it, this older version"
1558 ewarn "is not being removed. In order to make full use of this newer version," 1541 ewarn "is not being removed. In order to make full use of this newer version,"
1559 ewarn "you will need to execute the following command:" 1542 ewarn "you will need to execute the following command:"
1560 ewarn " revdep-rebuild --soname ${SONAME}" 1543 ewarn " revdep-rebuild --library ${SONAME}"
1561 ewarn 1544 ewarn
1562 ewarn "After doing that, you can safely remove ${LIB}" 1545 ewarn "After doing that, you can safely remove ${LIB}"
1563 ewarn "Note: 'emerge gentoolkit' to get revdep-rebuild" 1546 ewarn "Note: 'emerge gentoolkit' to get revdep-rebuild"
1564 fi 1547 fi
1565} 1548}

Legend:
Removed from v.1.218  
changed lines
  Added in v.1.229

  ViewVC Help
Powered by ViewVC 1.1.20