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

Diff of /eclass/eutils.eclass

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

Revision 1.186 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.186 2005/07/06 20:20:03 agriffis 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
13INHERITED="$INHERITED $ECLASS"
14 13
15DEPEND="!bootstrap? ( sys-devel/patch )" 14DEPEND="!bootstrap? ( sys-devel/patch )"
16# sys-apps/shadow is needed for useradd, etc, bug #94745. 15# sys-apps/shadow is needed for useradd, etc, bug #94745.
17 16
18DESCRIPTION="Based on the ${ECLASS} eclass" 17DESCRIPTION="Based on the ${ECLASS} eclass"
68 dodir /usr/${libdir} 67 dodir /usr/${libdir}
69 68
70 for lib in "${@}" ; do 69 for lib in "${@}" ; do
71 cat > "${D}/usr/${libdir}/${lib}" <<-END_LDSCRIPT 70 cat > "${D}/usr/${libdir}/${lib}" <<-END_LDSCRIPT
72 /* GNU ld script 71 /* GNU ld script
73 Since Gentoo has critical dynamic libraries 72 Since Gentoo has critical dynamic libraries
74 in /lib, and the static versions in /usr/lib, 73 in /lib, and the static versions in /usr/lib,
75 we need to have a "fake" dynamic lib in /usr/lib, 74 we need to have a "fake" dynamic lib in /usr/lib,
76 otherwise we run into linking problems. 75 otherwise we run into linking problems.
77 76
78 See bug http://bugs.gentoo.org/4411 for more info. 77 See bug http://bugs.gentoo.org/4411 for more info.
79 */ 78 */
80 GROUP ( /${libdir}/${lib} ) 79 GROUP ( /${libdir}/${lib} )
81 END_LDSCRIPT 80 END_LDSCRIPT
82 fperms a+x "/usr/${libdir}/${lib}" 81 fperms a+x "/usr/${libdir}/${lib}"
173 local STDERR_TARGET="${T}/$$.out" 172 local STDERR_TARGET="${T}/$$.out"
174 local PATCH_TARGET="${T}/$$.patch" 173 local PATCH_TARGET="${T}/$$.patch"
175 local PATCH_SUFFIX="" 174 local PATCH_SUFFIX=""
176 local SINGLE_PATCH="no" 175 local SINGLE_PATCH="no"
177 local x="" 176 local x=""
177
178 unset P4CONFIG P4PORT P4USER # keep perforce at bay #56402
178 179
179 if [ "$#" -gt 1 ] 180 if [ "$#" -gt 1 ]
180 then 181 then
181 local m="" 182 local m=""
182 for m in "$@" ; do 183 for m in "$@" ; do
376# vapier@gentoo.org 377# vapier@gentoo.org
377# 378#
378# Takes just 1 optional parameter (the directory to create tmpfile in) 379# Takes just 1 optional parameter (the directory to create tmpfile in)
379emktemp() { 380emktemp() {
380 local exe="touch" 381 local exe="touch"
381 [ "$1" == "-d" ] && exe="mkdir" && shift 382 [[ $1 == -d ]] && exe="mkdir" && shift
382 local topdir="$1" 383 local topdir=$1
383 384
384 if [ -z "${topdir}" ] 385 if [[ -z ${topdir} ]] ; then
385 then
386 [ -z "${T}" ] \ 386 [[ -z ${T} ]] \
387 && topdir="/tmp" \ 387 && topdir="/tmp" \
388 || topdir="${T}" 388 || topdir=${T}
389 fi 389 fi
390 390
391 if [ -z "$(type -p mktemp)" ] 391 if [[ -z $(type -p mktemp) ]] ; then
392 then
393 local tmp=/ 392 local tmp=/
394 while [ -e "${tmp}" ] ; do 393 while [[ -e ${tmp} ]] ; do
395 tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}" 394 tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}
396 done 395 done
397 ${exe} "${tmp}" 396 ${exe} "${tmp}" || ${exe} -p "${tmp}"
398 echo "${tmp}" 397 echo "${tmp}"
399 else 398 else
400 [ "${exe}" == "touch" ] \ 399 [[ ${exe} == "touch" ]] \
401 && exe="-p" \ 400 && exe="-p" \
402 || exe="-d" 401 || exe="-d"
403 mktemp ${exe} "${topdir}" 402 mktemp ${exe} "${topdir}"
404 fi 403 fi
405} 404}
478 fi 477 fi
479 else 478 else
480 euid="next" 479 euid="next"
481 fi 480 fi
482 if [[ ${euid} == "next" ]] ; then 481 if [[ ${euid} == "next" ]] ; then
483 local pwrange 482 for euid in $(seq 101 999) ; do
484 if [[ ${USERLAND} == "BSD" ]] ; then
485 pwrange=$(jot 898 101)
486 else
487 pwrange=$(seq 101 999)
488 fi
489 for euid in ${pwrange} ; do
490 [[ -z $(egetent passwd ${euid}) ]] && break 483 [[ -z $(egetent passwd ${euid}) ]] && break
491 done 484 done
492 fi 485 fi
493 opts="${opts} -u ${euid}" 486 opts="${opts} -u ${euid}"
494 einfo " - Userid: ${euid}" 487 einfo " - Userid: ${euid}"
499 if [[ ! -e ${eshell} ]] ; then 492 if [[ ! -e ${eshell} ]] ; then
500 eerror "A shell was specified but it does not exist !" 493 eerror "A shell was specified but it does not exist !"
501 die "${eshell} does not exist" 494 die "${eshell} does not exist"
502 fi 495 fi
503 else 496 else
504 case ${USERLAND} in 497 for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null; do
505 Darwin) eshell="/usr/bin/false";; 498 [[ -x ${ROOT}${shell} ]] && break;
506 BSD) eshell="/usr/sbin/nologin";; 499 done
507 *) eshell="/bin/false";; 500
508 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}
509 fi 507 fi
510 einfo " - Shell: ${eshell}" 508 einfo " - Shell: ${eshell}"
511 opts="${opts} -s ${eshell}" 509 opts="${opts} -s ${eshell}"
512 510
513 # handle homedir 511 # handle homedir
595 useradd ${opts} ${euser} "$@" \ 593 useradd ${opts} ${euser} "$@" \
596 || die "enewuser failed" 594 || die "enewuser failed"
597 fi 595 fi
598 ;; 596 ;;
599 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
600 export SANDBOX_ON=${oldsandbox} 606 export SANDBOX_ON=${oldsandbox}
601
602 if [ ! -e "${ehome}" ] && [ ! -e "${D}/${ehome}" ]
603 then
604 einfo " - Creating ${ehome} in ${D}"
605 dodir ${ehome}
606 fowners ${euser} ${ehome}
607 fperms 755 ${ehome}
608 fi
609} 607}
610 608
611# Simplify/standardize adding groups to the system 609# Simplify/standardize adding groups to the system
612# vapier@gentoo.org 610# vapier@gentoo.org
613# 611#
678 fi 676 fi
679 677
680 # If we need the next available 678 # If we need the next available
681 case ${egid} in 679 case ${egid} in
682 *[!0-9]*) # Non numeric 680 *[!0-9]*) # Non numeric
683 for egid in `jot 898 101`; do 681 for egid in $(seq 101 999); do
684 [ -z "`egetent group ${egid}`" ] && break 682 [ -z "`egetent group ${egid}`" ] && break
685 done 683 done
686 esac 684 esac
687 dscl . create /groups/${egroup} gid ${egid} 685 dscl . create /groups/${egroup} gid ${egid}
688 dscl . create /groups/${egroup} passwd '*' 686 dscl . create /groups/${egroup} passwd '*'
689 elif [[ "${USERLAND}" == "BSD" ]] ; then 687 elif [[ "${USERLAND}" == "BSD" ]] ; then
690 case ${egid} in 688 case ${egid} in
691 *[!0-9]*) # Non numeric 689 *[!0-9]*) # Non numeric
692 for egid in `jot 898 101`; do 690 for egid in $(seq 101 999); do
693 [ -z "`egetent group ${egid}`" ] && break 691 [ -z "`egetent group ${egid}`" ] && break
694 done 692 done
695 esac 693 esac
696 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed" 694 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed"
697 else 695 else
729# name: the name that will show up in the menu 727# name: the name that will show up in the menu
730# icon: give your little like a pretty little icon ... 728# icon: give your little like a pretty little icon ...
731# this can be relative (to /usr/share/pixmaps) or 729# this can be relative (to /usr/share/pixmaps) or
732# a full path to an icon 730# a full path to an icon
733# type: what kind of application is this ? for categories: 731# type: what kind of application is this ? for categories:
734# http://www.freedesktop.org/wiki/Standards_2fmenu_2dspec 732# http://www.freedesktop.org/Standards/desktop-entry-spec
735# path: if your app needs to startup in a specific dir 733# path: if your app needs to startup in a specific dir
736make_desktop_entry() { 734make_desktop_entry() {
737 [[ -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
738 736
739 local exec=${1} 737 local exec=${1}
765 dev) 763 dev)
766 type="Development" 764 type="Development"
767 ;; 765 ;;
768 766
769 games) 767 games)
770 [[ -z ${path} ]] && path=${GAMES_BINDIR}
771
772 case ${catmin} in 768 case ${catmin} in
773 action) type=ActionGame;; 769 action) type=ActionGame;;
774 arcade) type=ArcadeGame;; 770 arcade) type=ArcadeGame;;
775 board) type=BoardGame;; 771 board) type=BoardGame;;
776 kid) type=KidsGame;; 772 kid) type=KidsGame;;
901 doins "${i}" 897 doins "${i}"
902 elif [[ -d ${i} ]] ; then 898 elif [[ -d ${i} ]] ; then
903 for j in "${i}"/*.desktop ; do 899 for j in "${i}"/*.desktop ; do
904 doins "${j}" 900 doins "${j}"
905 done 901 done
906 fi 902 fi
907 done 903 done
908} 904}
909newmenu() { 905newmenu() {
910 insinto /usr/share/applications 906 insinto /usr/share/applications
911 newins "$1" "$2" 907 newins "$1" "$2"
919 doins "${i}" 915 doins "${i}"
920 elif [[ -d ${i} ]] ; then 916 elif [[ -d ${i} ]] ; then
921 for j in "${i}"/*.png ; do 917 for j in "${i}"/*.png ; do
922 doins "${j}" 918 doins "${j}"
923 done 919 done
924 fi 920 fi
925 done 921 done
926} 922}
927newicon() { 923newicon() {
928 insinto /usr/share/pixmaps 924 insinto /usr/share/pixmaps
929 newins "$1" "$2" 925 newins "$1" "$2"
934############################################################## 930##############################################################
935 931
936 932
937# for internal use only (unpack_pdv and unpack_makeself) 933# for internal use only (unpack_pdv and unpack_makeself)
938find_unpackable_file() { 934find_unpackable_file() {
939 local src="$1" 935 local src=$1
940 if [ -z "${src}" ] 936 if [[ -z ${src} ]] ; then
941 then
942 src="${DISTDIR}/${A}" 937 src=${DISTDIR}/${A}
943 else 938 else
944 if [ -e "${DISTDIR}/${src}" ] 939 if [[ -e ${DISTDIR}/${src} ]] ; then
945 then
946 src="${DISTDIR}/${src}" 940 src=${DISTDIR}/${src}
947 elif [ -e "${PWD}/${src}" ] 941 elif [[ -e ${PWD}/${src} ]] ; then
948 then
949 src="${PWD}/${src}" 942 src=${PWD}/${src}
950 elif [ -e "${src}" ] 943 elif [[ -e ${src} ]] ; then
951 then
952 src="${src}" 944 src=${src}
953 fi
954 fi 945 fi
955 [ ! -e "${src}" ] && die "Could not find requested archive ${src}" 946 fi
947 [[ ! -e ${src} ]] && return 1
956 echo "${src}" 948 echo "${src}"
957} 949}
958 950
959# Unpack those pesky pdv generated files ... 951# Unpack those pesky pdv generated files ...
960# They're self-unpacking programs with the binary package stuffed in 952# They're self-unpacking programs with the binary package stuffed in
975# lseek 967# lseek
976# root@vapier 0 pdv_unpack # strace -elseek ./hldsupdatetool.bin 968# root@vapier 0 pdv_unpack # strace -elseek ./hldsupdatetool.bin
977# lseek(3, -4, SEEK_END) = 2981250 969# lseek(3, -4, SEEK_END) = 2981250
978# 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.
979unpack_pdv() { 971unpack_pdv() {
980 local src="`find_unpackable_file $1`" 972 local src=$(find_unpackable_file $1)
981 local sizeoff_t="$2" 973 local sizeoff_t=$2
982 974
975 [[ -z ${src} ]] && die "Could not locate source for '$1'"
983 [ -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 :("
984 977
985 local shrtsrc="`basename ${src}`" 978 local shrtsrc="`basename ${src}`"
986 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 979 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
987 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"` 980 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"`
988 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\"`
1054# Usage: unpack_makeself [file to unpack] [offset] [tail|dd] 1047# Usage: unpack_makeself [file to unpack] [offset] [tail|dd]
1055# - If the file is not specified then unpack will utilize ${A}. 1048# - If the file is not specified then unpack will utilize ${A}.
1056# - 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
1057# the proper offset from the script itself. 1050# the proper offset from the script itself.
1058unpack_makeself() { 1051unpack_makeself() {
1059 local src="$(find_unpackable_file "$1")" 1052 local src=$(find_unpackable_file "$1")
1060 local skip="$2" 1053 local skip=$2
1061 local exe="$3" 1054 local exe=$3
1062 1055
1056 [[ -z ${src} ]] && die "Could not locate source for '$1'"
1057
1063 local shrtsrc="$(basename "${src}")" 1058 local shrtsrc=$(basename "${src}")
1064 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 1059 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
1065 if [ -z "${skip}" ] 1060 if [ -z "${skip}" ]
1066 then 1061 then
1067 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`" 1062 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`"
1068 local skip=0 1063 local skip=0
1139check_license() { 1134check_license() {
1140 local lic=$1 1135 local lic=$1
1141 if [ -z "${lic}" ] ; then 1136 if [ -z "${lic}" ] ; then
1142 lic="${PORTDIR}/licenses/${LICENSE}" 1137 lic="${PORTDIR}/licenses/${LICENSE}"
1143 else 1138 else
1144 if [ -e "${PORTDIR}/licenses/${src}" ] ; then 1139 if [ -e "${PORTDIR}/licenses/${lic}" ] ; then
1145 lic="${PORTDIR}/licenses/${src}" 1140 lic="${PORTDIR}/licenses/${lic}"
1146 elif [ -e "${PWD}/${src}" ] ; then 1141 elif [ -e "${PWD}/${lic}" ] ; then
1147 lic="${PWD}/${src}" 1142 lic="${PWD}/${lic}"
1148 elif [ -e "${src}" ] ; then 1143 elif [ -e "${lic}" ] ; then
1149 lic="${src}" 1144 lic="${lic}"
1150 fi
1151 fi 1145 fi
1146 fi
1152 [ ! -f "${lic}" ] && die "Could not find requested license ${src}" 1147 [ ! -f "${lic}" ] && die "Could not find requested license ${lic}"
1153 local l="`basename ${lic}`" 1148 local l="`basename ${lic}`"
1154 1149
1155 # here is where we check for the licenses the user already 1150 # here is where we check for the licenses the user already
1156 # 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
1157 local shopts=$- 1152 local shopts=$-
1328# displayed and we'll hang out here until: 1323# displayed and we'll hang out here until:
1329# (1) the file is found on a mounted cdrom 1324# (1) the file is found on a mounted cdrom
1330# (2) the user hits CTRL+C 1325# (2) the user hits CTRL+C
1331cdrom_locate_file_on_cd() { 1326cdrom_locate_file_on_cd() {
1332 while [[ -z ${CDROM_ROOT} ]] ; do 1327 while [[ -z ${CDROM_ROOT} ]] ; do
1333 local dir="$(dirname ${@})" 1328 local dir=$(dirname "$*")
1334 local file="$(basename ${@})" 1329 local file=$(basename "$*")
1335 local mline="" 1330 local mline=""
1336 local showedmsg=0 1331 local showedmsg=0
1337 1332
1338 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
1339 [[ -d ${mline}/${dir} ]] || continue 1334 [[ -d ${mline}/${dir} ]] || continue
1497 LIB=$1 1492 LIB=$1
1498 1493
1499 if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then 1494 if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then
1500 SONAME=`basename ${LIB}` 1495 SONAME=`basename ${LIB}`
1501 1496
1502 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."
1503 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"
1504 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,"
1505 einfo "you will need to execute the following command:" 1500 ewarn "you will need to execute the following command:"
1506 einfo " revdep-rebuild --soname ${SONAME}" 1501 ewarn " revdep-rebuild --soname ${SONAME}"
1507 einfo 1502 ewarn
1508 einfo "After doing that, you can safely remove ${LIB}" 1503 ewarn "After doing that, you can safely remove ${LIB}"
1509 einfo "Note: 'emerge gentoolkit' to get revdep-rebuild" 1504 ewarn "Note: 'emerge gentoolkit' to get revdep-rebuild"
1510 fi 1505 fi
1511} 1506}
1512 1507
1513# 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
1514# certain USE flags 1509# certain USE flags

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

  ViewVC Help
Powered by ViewVC 1.1.20