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

Diff of /eclass/eutils.eclass

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

Revision 1.114 Revision 1.119
1# Copyright 1999-2004 Gentoo Foundation 1# Copyright 1999-2004 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.114 2004/10/06 04:21:08 usata Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.119 2004/10/14 22:44:18 vapier 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.
541 541
542# Cheap replacement for when debianutils (and thus mktemp) 542# Cheap replacement for when debianutils (and thus mktemp)
543# does not exist on the users system 543# does not exist on the users system
544# vapier@gentoo.org 544# vapier@gentoo.org
545# 545#
546# Takes just 1 parameter (the directory to create tmpfile in) 546# Takes just 1 optional parameter (the directory to create tmpfile in)
547mymktemp() { 547emktemp() {
548 local exe="touch"
549 [ "$1" == "-d" ] && exe="mkdir" && shift
548 local topdir="$1" 550 local topdir="$1"
549 551
550 [ -z "${topdir}" ] && topdir=/tmp 552 if [ -z "${topdir}" ]
551 if [ "`which mktemp 2>/dev/null`" ]
552 then 553 then
553 mktemp -p ${topdir} 554 [ -z "${T}" ] \
554 else 555 && topdir="/tmp" \
556 || topdir="${T}"
557 fi
558
559 if [ -z "$(type -p mktemp)" ]
560 then
561 local tmp=/
562 while [ -e "${tmp}" ] ; do
555 local tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}" 563 tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}"
556 touch ${tmp} 564 done
565 ${exe} "${tmp}"
557 echo ${tmp} 566 echo "${tmp}"
567 else
568 [ "${exe}" == "touch" ] \
569 && exe="-p" \
570 || exe="-d"
571 mktemp ${exe} "${topdir}"
558 fi 572 fi
559} 573}
560 574
561# Small wrapper for getent (Linux), nidump (Mac OS X), 575# Small wrapper for getent (Linux), nidump (Mac OS X),
562# and pw (FreeBSD) used in enewuser()/enewgroup() 576# and pw (FreeBSD) used in enewuser()/enewgroup()
690 local defgroup="" exgroups="" 704 local defgroup="" exgroups=""
691 705
692 export IFS="," 706 export IFS=","
693 for g in ${egroups} 707 for g in ${egroups}
694 do 708 do
709 export IFS="${oldifs}"
695 if [ -z "`egetent group \"${g}\"`" ] 710 if [ -z "`egetent group \"${g}\"`" ]
696 then 711 then
697 eerror "You must add group ${g} to the system first" 712 eerror "You must add group ${g} to the system first"
698 die "${g} is not a valid GID" 713 die "${g} is not a valid GID"
699 fi 714 fi
701 then 716 then
702 defgroup="${g}" 717 defgroup="${g}"
703 else 718 else
704 exgroups="${exgroups},${g}" 719 exgroups="${exgroups},${g}"
705 fi 720 fi
721 export IFS=","
706 done 722 done
707 export IFS="${oldifs}" 723 export IFS="${oldifs}"
708 724
709 opts="${opts} -g ${defgroup}" 725 opts="${opts} -g ${defgroup}"
710 if [ ! -z "${exgroups}" ] 726 if [ ! -z "${exgroups}" ]
728 dscl . create /users/${euser} uid ${euid} 744 dscl . create /users/${euser} uid ${euid}
729 dscl . create /users/${euser} shell ${eshell} 745 dscl . create /users/${euser} shell ${eshell}
730 dscl . create /users/${euser} home ${ehome} 746 dscl . create /users/${euser} home ${ehome}
731 dscl . create /users/${euser} realname "added by portage for ${PN}" 747 dscl . create /users/${euser} realname "added by portage for ${PN}"
732 ### Add the user to the groups specified 748 ### Add the user to the groups specified
749 local oldifs="${IFS}"
750 export IFS=","
733 for g in ${egroups} 751 for g in ${egroups}
734 do 752 do
735 # $egroups is , delimited, not space
736 ewarn "This is code is wrong; someone on the OS X team should fix it"
737 dscl . merge /groups/${g} users ${euser} 753 dscl . merge /groups/${g} users ${euser}
738 done 754 done
755 export IFS="${oldifs}"
739 else 756 else
740 einfo "Extra options are not supported on macos yet" 757 einfo "Extra options are not supported on macos yet"
741 einfo "Please report the ebuild along with the info below" 758 einfo "Please report the ebuild along with the info below"
742 einfo "eextra: ${eextra}" 759 einfo "eextra: ${eextra}"
743 die "Required function missing" 760 die "Required function missing"
882} 899}
883 900
884# Make a desktop file ! 901# Make a desktop file !
885# Great for making those icons in kde/gnome startmenu ! 902# Great for making those icons in kde/gnome startmenu !
886# Amaze your friends ! Get the women ! Join today ! 903# Amaze your friends ! Get the women ! Join today !
887# gnome2 /usr/share/applications
888# gnome1 /usr/share/gnome/apps/
889# KDE ${KDEDIR}/share/applnk /usr/share/applnk
890# 904#
891# make_desktop_entry(<binary>, [name], [icon], [type], [path]) 905# make_desktop_entry(<binary>, [name], [icon], [type], [path])
892# 906#
893# binary: what binary does the app run with ? 907# binary: what binary does the app run with ?
894# name: the name that will show up in the menu 908# name: the name that will show up in the menu
895# icon: give your little like a pretty little icon ... 909# icon: give your little like a pretty little icon ...
896# this can be relative (to /usr/share/pixmaps) or 910# this can be relative (to /usr/share/pixmaps) or
897# a full path to an icon 911# a full path to an icon
898# type: what kind of application is this ? for categories: 912# type: what kind of application is this ? for categories:
899# http://www.freedesktop.org/standards/menu-spec/ 913# http://www.freedesktop.org/standards/menu-spec/
900# path: if your app needs to startup in a specific dir 914# path: if your app needs to startup in a specific dir
901make_desktop_entry() { 915make_desktop_entry() {
902 [ -z "$1" ] && eerror "You must specify the executable" && return 1 916 [ -z "$1" ] && eerror "make_desktop_entry: You must specify the executable" && return 1
903 917
904 local exec="${1}" 918 local exec="${1}"
905 local name="${2:-${PN}}" 919 local name="${2:-${PN}}"
906 local icon="${3:-${PN}.png}" 920 local icon="${3:-${PN}.png}"
907 local type="${4}" 921 local type="${4}"
939Exec=${exec} 953Exec=${exec}
940Path=${path} 954Path=${path}
941Icon=${icon} 955Icon=${icon}
942Categories=Application;${type};" > "${desktop}" 956Categories=Application;${type};" > "${desktop}"
943 957
944 if [ -d "/usr/share/applications" ]
945 then
946 insinto /usr/share/applications 958 insinto /usr/share/applications
947 doins "${desktop}" 959 doins "${desktop}"
948 fi
949
950 #if [ -d "/usr/share/gnome/apps" ]
951 #then
952 # insinto /usr/share/gnome/apps/Games
953 # doins ${desktop}
954 #fi
955
956 #if [ ! -z "`ls /usr/kde/* 2>/dev/null`" ]
957 #then
958 # for ver in /usr/kde/*
959 # do
960 # insinto ${ver}/share/applnk/Games
961 # doins ${desktop}
962 # done
963 #fi
964
965 if [ -d "/usr/share/applnk" ]
966 then
967 insinto /usr/share/applnk/${subdir}
968 doins "${desktop}"
969 fi
970 960
971 return 0 961 return 0
972} 962}
973 963
974# for internal use only (unpack_pdv and unpack_makeself) 964# for internal use only (unpack_pdv and unpack_makeself)
1023 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 1013 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
1024 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"` 1014 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"`
1025 local tailskip=`tail -c $((${sizeoff_t}*2)) ${src} | head -c ${sizeoff_t} | hexdump -e \"%i\"` 1015 local tailskip=`tail -c $((${sizeoff_t}*2)) ${src} | head -c ${sizeoff_t} | hexdump -e \"%i\"`
1026 1016
1027 # grab metadata for debug reasons 1017 # grab metadata for debug reasons
1028 local metafile="`mymktemp ${T}`" 1018 local metafile="$(emktemp)"
1029 tail -c +$((${metaskip}+1)) ${src} > ${metafile} 1019 tail -c +$((${metaskip}+1)) ${src} > ${metafile}
1030 1020
1031 # rip out the final file name from the metadata 1021 # rip out the final file name from the metadata
1032 local datafile="`tail -c +$((${metaskip}+1)) ${src} | strings | head -n 1`" 1022 local datafile="`tail -c +$((${metaskip}+1)) ${src} | strings | head -n 1`"
1033 datafile="`basename ${datafile}`" 1023 datafile="`basename ${datafile}`"
1034 1024
1035 # now lets uncompress/untar the file if need be 1025 # now lets uncompress/untar the file if need be
1036 local tmpfile="`mymktemp ${T}`" 1026 local tmpfile="$(emktemp)"
1037 tail -c +$((${tailskip}+1)) ${src} 2>/dev/null | head -c 512 > ${tmpfile} 1027 tail -c +$((${tailskip}+1)) ${src} 2>/dev/null | head -c 512 > ${tmpfile}
1038 1028
1039 local iscompressed="`file -b ${tmpfile}`" 1029 local iscompressed="`file -b ${tmpfile}`"
1040 if [ "${iscompressed:0:8}" == "compress" ] ; then 1030 if [ "${iscompressed:0:8}" == "compress" ] ; then
1041 iscompressed=1 1031 iscompressed=1
1143 dd) exe="dd ibs=${skip} skip=1 obs=1024 conv=sync if='${src}'";; 1133 dd) exe="dd ibs=${skip} skip=1 obs=1024 conv=sync if='${src}'";;
1144 *) die "makeself cant handle exe '${exe}'" 1134 *) die "makeself cant handle exe '${exe}'"
1145 esac 1135 esac
1146 1136
1147 # lets grab the first few bytes of the file to figure out what kind of archive it is 1137 # lets grab the first few bytes of the file to figure out what kind of archive it is
1148 local tmpfile="$(mymktemp "${T}")" 1138 local tmpfile="$(emktemp)"
1149 eval ${exe} 2>/dev/null | head -c 512 > "${tmpfile}" 1139 eval ${exe} 2>/dev/null | head -c 512 > "${tmpfile}"
1150 local filetype="$(file -b "${tmpfile}")" 1140 local filetype="$(file -b "${tmpfile}")"
1151 case ${filetype} in 1141 case ${filetype} in
1152 *tar\ archive) 1142 *tar\ archive)
1153 eval ${exe} | tar --no-same-owner -xf - 1143 eval ${exe} | tar --no-same-owner -xf -
1200 return 0 1190 return 0
1201 fi 1191 fi
1202 done 1192 done
1203 set +o noglob; set -$shopts #reset old shell opts 1193 set +o noglob; set -$shopts #reset old shell opts
1204 1194
1205 local licmsg="`mymktemp ${T}`" 1195 local licmsg="$(emktemp)"
1206 cat << EOF > ${licmsg} 1196 cat << EOF > ${licmsg}
1207********************************************************** 1197**********************************************************
1208The following license outlines the terms of use of this 1198The following license outlines the terms of use of this
1209package. You MUST accept this license for installation to 1199package. You MUST accept this license for installation to
1210continue. When you are done viewing, hit 'q'. If you 1200continue. When you are done viewing, hit 'q'. If you
1521 einfo "is not being removed. In order to make full use of this newer version," 1511 einfo "is not being removed. In order to make full use of this newer version,"
1522 einfo "you will need to execute the following command:" 1512 einfo "you will need to execute the following command:"
1523 einfo " revdep-rebuild --soname ${SONAME}" 1513 einfo " revdep-rebuild --soname ${SONAME}"
1524 einfo 1514 einfo
1525 einfo "After doing that, you can safely remove ${LIB}" 1515 einfo "After doing that, you can safely remove ${LIB}"
1516 einfo "Note: 'emerge gentoolkit' to get revdep-rebuild"
1526 fi 1517 fi
1527} 1518}

Legend:
Removed from v.1.114  
changed lines
  Added in v.1.119

  ViewVC Help
Powered by ViewVC 1.1.20