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

Diff of /eclass/eutils.eclass

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

Revision 1.190 Revision 1.200
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.190 2005/07/11 15:08:06 swegener Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.200 2005/09/23 20:44:26 wolf31o2 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.
9# 9#
10# NB: If you add anything, please comment it! 10# NB: If you add anything, please comment it!
11 11
12inherit multilib 12inherit multilib portability
13 13
14DEPEND="!bootstrap? ( sys-devel/patch )" 14DEPEND="!bootstrap? ( sys-devel/patch )"
15# sys-apps/shadow is needed for useradd, etc, bug #94745. 15# sys-apps/shadow is needed for useradd, etc, bug #94745.
16 16
17DESCRIPTION="Based on the ${ECLASS} eclass" 17DESCRIPTION="Based on the ${ECLASS} eclass"
172 local STDERR_TARGET="${T}/$$.out" 172 local STDERR_TARGET="${T}/$$.out"
173 local PATCH_TARGET="${T}/$$.patch" 173 local PATCH_TARGET="${T}/$$.patch"
174 local PATCH_SUFFIX="" 174 local PATCH_SUFFIX=""
175 local SINGLE_PATCH="no" 175 local SINGLE_PATCH="no"
176 local x="" 176 local x=""
177
178 unset P4CONFIG P4PORT P4USER # keep perforce at bay #56402
177 179
178 if [ "$#" -gt 1 ] 180 if [ "$#" -gt 1 ]
179 then 181 then
180 local m="" 182 local m=""
181 for m in "$@" ; do 183 for m in "$@" ; do
375# vapier@gentoo.org 377# vapier@gentoo.org
376# 378#
377# Takes just 1 optional parameter (the directory to create tmpfile in) 379# Takes just 1 optional parameter (the directory to create tmpfile in)
378emktemp() { 380emktemp() {
379 local exe="touch" 381 local exe="touch"
380 [ "$1" == "-d" ] && exe="mkdir" && shift 382 [[ $1 == -d ]] && exe="mkdir" && shift
381 local topdir="$1" 383 local topdir=$1
382 384
383 if [ -z "${topdir}" ] 385 if [[ -z ${topdir} ]] ; then
384 then
385 [ -z "${T}" ] \ 386 [[ -z ${T} ]] \
386 && topdir="/tmp" \ 387 && topdir="/tmp" \
387 || topdir="${T}" 388 || topdir=${T}
388 fi 389 fi
389 390
390 if [ -z "$(type -p mktemp)" ] 391 if [[ -z $(type -p mktemp) ]] ; then
391 then
392 local tmp=/ 392 local tmp=/
393 while [ -e "${tmp}" ] ; do 393 while [[ -e ${tmp} ]] ; do
394 tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}" 394 tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}
395 done 395 done
396 ${exe} "${tmp}" 396 ${exe} "${tmp}" || ${exe} -p "${tmp}"
397 echo "${tmp}" 397 echo "${tmp}"
398 else 398 else
399 [ "${exe}" == "touch" ] \ 399 [[ ${exe} == "touch" ]] \
400 && exe="-p" \ 400 && exe="-p" \
401 || exe="-d" 401 || exe="-d"
402 mktemp ${exe} "${topdir}" 402 mktemp ${exe} "${topdir}"
403 fi 403 fi
404} 404}
477 fi 477 fi
478 else 478 else
479 euid="next" 479 euid="next"
480 fi 480 fi
481 if [[ ${euid} == "next" ]] ; then 481 if [[ ${euid} == "next" ]] ; then
482 local pwrange 482 for euid in $(seq 101 999) ; do
483 if [[ ${USERLAND} == "BSD" ]] ; then
484 pwrange=$(jot 898 101)
485 else
486 pwrange=$(seq 101 999)
487 fi
488 for euid in ${pwrange} ; do
489 [[ -z $(egetent passwd ${euid}) ]] && break 483 [[ -z $(egetent passwd ${euid}) ]] && break
490 done 484 done
491 fi 485 fi
492 opts="${opts} -u ${euid}" 486 opts="${opts} -u ${euid}"
493 einfo " - Userid: ${euid}" 487 einfo " - Userid: ${euid}"
498 if [[ ! -e ${eshell} ]] ; then 492 if [[ ! -e ${eshell} ]] ; then
499 eerror "A shell was specified but it does not exist !" 493 eerror "A shell was specified but it does not exist !"
500 die "${eshell} does not exist" 494 die "${eshell} does not exist"
501 fi 495 fi
502 else 496 else
503 case ${USERLAND} in 497 for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null; do
504 Darwin) eshell="/usr/bin/false";; 498 [[ -x ${ROOT}${shell} ]] && break;
505 BSD) eshell="/usr/sbin/nologin";; 499 done
506 *) eshell="/bin/false";; 500
507 esac 501 if [[ ${shell} == "/dev/null" ]]; then
502 eerror "Unable to identify the shell to use"
503 die "Unable to identify the shell to use"
504 fi
505
506 eshell=${shell}
508 fi 507 fi
509 einfo " - Shell: ${eshell}" 508 einfo " - Shell: ${eshell}"
510 opts="${opts} -s ${eshell}" 509 opts="${opts} -s ${eshell}"
511 510
512 # handle homedir 511 # handle homedir
594 useradd ${opts} ${euser} "$@" \ 593 useradd ${opts} ${euser} "$@" \
595 || die "enewuser failed" 594 || die "enewuser failed"
596 fi 595 fi
597 ;; 596 ;;
598 esac 597 esac
598
599 if [[ ! -e ${ROOT}/${ehome} ]] ; then
600 einfo " - Creating ${ehome} in ${ROOT}"
601 mkdir -p "${ROOT}/${ehome}"
602 chown ${euser} "${ROOT}/${ehome}"
603 chmod 755 "${ROOT}/${ehome}"
604 fi
605
599 export SANDBOX_ON=${oldsandbox} 606 export SANDBOX_ON=${oldsandbox}
600
601 if [ ! -e "${ehome}" ] && [ ! -e "${D}/${ehome}" ]
602 then
603 einfo " - Creating ${ehome} in ${D}"
604 dodir ${ehome}
605 fowners ${euser} ${ehome}
606 fperms 755 ${ehome}
607 fi
608} 607}
609 608
610# Simplify/standardize adding groups to the system 609# Simplify/standardize adding groups to the system
611# vapier@gentoo.org 610# vapier@gentoo.org
612# 611#
677 fi 676 fi
678 677
679 # If we need the next available 678 # If we need the next available
680 case ${egid} in 679 case ${egid} in
681 *[!0-9]*) # Non numeric 680 *[!0-9]*) # Non numeric
682 for egid in `jot 898 101`; do 681 for egid in $(seq 101 999); do
683 [ -z "`egetent group ${egid}`" ] && break 682 [ -z "`egetent group ${egid}`" ] && break
684 done 683 done
685 esac 684 esac
686 dscl . create /groups/${egroup} gid ${egid} 685 dscl . create /groups/${egroup} gid ${egid}
687 dscl . create /groups/${egroup} passwd '*' 686 dscl . create /groups/${egroup} passwd '*'
688 elif [[ "${USERLAND}" == "BSD" ]] ; then 687 elif [[ "${USERLAND}" == "BSD" ]] ; then
689 case ${egid} in 688 case ${egid} in
690 *[!0-9]*) # Non numeric 689 *[!0-9]*) # Non numeric
691 for egid in `jot 898 101`; do 690 for egid in $(seq 101 999); do
692 [ -z "`egetent group ${egid}`" ] && break 691 [ -z "`egetent group ${egid}`" ] && break
693 done 692 done
694 esac 693 esac
695 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed" 694 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed"
696 else 695 else
728# name: the name that will show up in the menu 727# name: the name that will show up in the menu
729# icon: give your little like a pretty little icon ... 728# icon: give your little like a pretty little icon ...
730# this can be relative (to /usr/share/pixmaps) or 729# this can be relative (to /usr/share/pixmaps) or
731# a full path to an icon 730# a full path to an icon
732# type: what kind of application is this ? for categories: 731# type: what kind of application is this ? for categories:
733# http://www.freedesktop.org/wiki/Standards_2fmenu_2dspec 732# http://www.freedesktop.org/Standards/desktop-entry-spec
734# path: if your app needs to startup in a specific dir 733# path: if your app needs to startup in a specific dir
735make_desktop_entry() { 734make_desktop_entry() {
736 [[ -z $1 ]] && eerror "make_desktop_entry: You must specify the executable" && return 1 735 [[ -z $1 ]] && eerror "make_desktop_entry: You must specify the executable" && return 1
737 736
738 local exec=${1} 737 local exec=${1}
764 dev) 763 dev)
765 type="Development" 764 type="Development"
766 ;; 765 ;;
767 766
768 games) 767 games)
769 [[ -z ${path} ]] && path=${GAMES_BINDIR}
770
771 case ${catmin} in 768 case ${catmin} in
772 action) type=ActionGame;; 769 action) type=ActionGame;;
773 arcade) type=ArcadeGame;; 770 arcade) type=ArcadeGame;;
774 board) type=BoardGame;; 771 board) type=BoardGame;;
775 kid) type=KidsGame;; 772 kid) type=KidsGame;;
933############################################################## 930##############################################################
934 931
935 932
936# for internal use only (unpack_pdv and unpack_makeself) 933# for internal use only (unpack_pdv and unpack_makeself)
937find_unpackable_file() { 934find_unpackable_file() {
938 local src="$1" 935 local src=$1
939 if [ -z "${src}" ] 936 if [[ -z ${src} ]] ; then
940 then
941 src="${DISTDIR}/${A}" 937 src=${DISTDIR}/${A}
942 else 938 else
943 if [ -e "${DISTDIR}/${src}" ] 939 if [[ -e ${DISTDIR}/${src} ]] ; then
944 then
945 src="${DISTDIR}/${src}" 940 src=${DISTDIR}/${src}
946 elif [ -e "${PWD}/${src}" ] 941 elif [[ -e ${PWD}/${src} ]] ; then
947 then
948 src="${PWD}/${src}" 942 src=${PWD}/${src}
949 elif [ -e "${src}" ] 943 elif [[ -e ${src} ]] ; then
950 then
951 src="${src}" 944 src=${src}
952 fi
953 fi 945 fi
954 [ ! -e "${src}" ] && die "Could not find requested archive ${src}" 946 fi
947 [[ ! -e ${src} ]] && return 1
955 echo "${src}" 948 echo "${src}"
956} 949}
957 950
958# Unpack those pesky pdv generated files ... 951# Unpack those pesky pdv generated files ...
959# They're self-unpacking programs with the binary package stuffed in 952# They're self-unpacking programs with the binary package stuffed in
974# lseek 967# lseek
975# root@vapier 0 pdv_unpack # strace -elseek ./hldsupdatetool.bin 968# root@vapier 0 pdv_unpack # strace -elseek ./hldsupdatetool.bin
976# lseek(3, -4, SEEK_END) = 2981250 969# lseek(3, -4, SEEK_END) = 2981250
977# thus we would pass in the value of '4' as the second parameter. 970# thus we would pass in the value of '4' as the second parameter.
978unpack_pdv() { 971unpack_pdv() {
979 local src="`find_unpackable_file $1`" 972 local src=$(find_unpackable_file $1)
980 local sizeoff_t="$2" 973 local sizeoff_t=$2
981 974
975 [[ -z ${src} ]] && die "Could not locate source for '$1'"
982 [ -z "${sizeoff_t}" ] && die "No idea what off_t size was used for this pdv :(" 976 [[ -z ${sizeoff_t} ]] && die "No idea what off_t size was used for this pdv :("
983 977
984 local shrtsrc="`basename ${src}`" 978 local shrtsrc="`basename ${src}`"
985 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 979 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
986 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"` 980 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"`
987 local tailskip=`tail -c $((${sizeoff_t}*2)) ${src} | head -c ${sizeoff_t} | hexdump -e \"%i\"` 981 local tailskip=`tail -c $((${sizeoff_t}*2)) ${src} | head -c ${sizeoff_t} | hexdump -e \"%i\"`
1053# Usage: unpack_makeself [file to unpack] [offset] [tail|dd] 1047# Usage: unpack_makeself [file to unpack] [offset] [tail|dd]
1054# - If the file is not specified then unpack will utilize ${A}. 1048# - If the file is not specified then unpack will utilize ${A}.
1055# - If the offset is not specified then we will attempt to extract 1049# - If the offset is not specified then we will attempt to extract
1056# the proper offset from the script itself. 1050# the proper offset from the script itself.
1057unpack_makeself() { 1051unpack_makeself() {
1058 local src="$(find_unpackable_file "$1")" 1052 local src=$(find_unpackable_file "$1")
1059 local skip="$2" 1053 local skip=$2
1060 local exe="$3" 1054 local exe=$3
1061 1055
1056 [[ -z ${src} ]] && die "Could not locate source for '$1'"
1057
1062 local shrtsrc="$(basename "${src}")" 1058 local shrtsrc=$(basename "${src}")
1063 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 1059 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
1064 if [ -z "${skip}" ] 1060 if [ -z "${skip}" ]
1065 then 1061 then
1066 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`" 1062 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`"
1067 local skip=0 1063 local skip=0
1138check_license() { 1134check_license() {
1139 local lic=$1 1135 local lic=$1
1140 if [ -z "${lic}" ] ; then 1136 if [ -z "${lic}" ] ; then
1141 lic="${PORTDIR}/licenses/${LICENSE}" 1137 lic="${PORTDIR}/licenses/${LICENSE}"
1142 else 1138 else
1143 if [ -e "${PORTDIR}/licenses/${src}" ] ; then 1139 if [ -e "${PORTDIR}/licenses/${lic}" ] ; then
1144 lic="${PORTDIR}/licenses/${src}" 1140 lic="${PORTDIR}/licenses/${lic}"
1145 elif [ -e "${PWD}/${src}" ] ; then 1141 elif [ -e "${PWD}/${lic}" ] ; then
1146 lic="${PWD}/${src}" 1142 lic="${PWD}/${lic}"
1147 elif [ -e "${src}" ] ; then 1143 elif [ -e "${lic}" ] ; then
1148 lic="${src}" 1144 lic="${lic}"
1149 fi
1150 fi 1145 fi
1146 fi
1151 [ ! -f "${lic}" ] && die "Could not find requested license ${src}" 1147 [ ! -f "${lic}" ] && die "Could not find requested license ${lic}"
1152 local l="`basename ${lic}`" 1148 local l="`basename ${lic}`"
1153 1149
1154 # here is where we check for the licenses the user already 1150 # here is where we check for the licenses the user already
1155 # accepted ... if we don't find a match, we make the user accept 1151 # accepted ... if we don't find a match, we make the user accept
1156 local shopts=$- 1152 local shopts=$-
1327# displayed and we'll hang out here until: 1323# displayed and we'll hang out here until:
1328# (1) the file is found on a mounted cdrom 1324# (1) the file is found on a mounted cdrom
1329# (2) the user hits CTRL+C 1325# (2) the user hits CTRL+C
1330cdrom_locate_file_on_cd() { 1326cdrom_locate_file_on_cd() {
1331 while [[ -z ${CDROM_ROOT} ]] ; do 1327 while [[ -z ${CDROM_ROOT} ]] ; do
1332 local dir="$(dirname ${@})" 1328 local dir=$(dirname "$*")
1333 local file="$(basename ${@})" 1329 local file=$(basename "$*")
1334 local mline="" 1330 local mline=""
1335 local showedmsg=0 1331 local showedmsg=0
1336 1332
1337 for mline in $(mount | egrep -e '(iso|cdrom)' | awk '{print $3}') ; do 1333 for mline in $(mount | egrep -e '(iso|cdrom)' | awk '{print $3}') ; do
1338 [[ -d ${mline}/${dir} ]] || continue 1334 [[ -d ${mline}/${dir} ]] || continue
1496 LIB=$1 1492 LIB=$1
1497 1493
1498 if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then 1494 if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then
1499 SONAME=`basename ${LIB}` 1495 SONAME=`basename ${LIB}`
1500 1496
1501 einfo "An old version of an installed library was detected on your system." 1497 ewarn "An old version of an installed library was detected on your system."
1502 einfo "In order to avoid breaking packages that link against it, this older version" 1498 ewarn "In order to avoid breaking packages that link against it, this older version"
1503 einfo "is not being removed. In order to make full use of this newer version," 1499 ewarn "is not being removed. In order to make full use of this newer version,"
1504 einfo "you will need to execute the following command:" 1500 ewarn "you will need to execute the following command:"
1505 einfo " revdep-rebuild --soname ${SONAME}" 1501 ewarn " revdep-rebuild --soname ${SONAME}"
1506 einfo 1502 ewarn
1507 einfo "After doing that, you can safely remove ${LIB}" 1503 ewarn "After doing that, you can safely remove ${LIB}"
1508 einfo "Note: 'emerge gentoolkit' to get revdep-rebuild" 1504 ewarn "Note: 'emerge gentoolkit' to get revdep-rebuild"
1509 fi 1505 fi
1510} 1506}
1511 1507
1512# Hack for people to figure out if a package was built with 1508# Hack for people to figure out if a package was built with
1513# certain USE flags 1509# certain USE flags

Legend:
Removed from v.1.190  
changed lines
  Added in v.1.200

  ViewVC Help
Powered by ViewVC 1.1.20