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

Diff of /eclass/eutils.eclass

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

Revision 1.109 Revision 1.123
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.109 2004/10/02 01:42:32 vapier Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.123 2004/11/11 04:10:40 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.
221 local x="" 221 local x=""
222 222
223 if [ "$#" -gt 1 ] 223 if [ "$#" -gt 1 ]
224 then 224 then
225 local m="" 225 local m=""
226 einfo "${#} patches to apply..." 226 einfo "${#} patches to apply ..."
227 for m in "$@" ; do 227 for m in "$@" ; do
228 epatch "${m}" 228 epatch "${m}"
229 done 229 done
230 return 0 230 return 0
231 fi 231 fi
245 local EPATCH_SOURCE="$1/*" 245 local EPATCH_SOURCE="$1/*"
246 else 246 else
247 local EPATCH_SOURCE="$1/*.${EPATCH_SUFFIX}" 247 local EPATCH_SOURCE="$1/*.${EPATCH_SUFFIX}"
248 fi 248 fi
249 else 249 else
250 if [ ! -d ${EPATCH_SOURCE} ] 250 if [ ! -d ${EPATCH_SOURCE} ] || [ -n "$1" ]
251 then 251 then
252 if [ -n "$1" -a "${EPATCH_SOURCE}" = "${WORKDIR}/patch" ] 252 if [ -n "$1" -a "${EPATCH_SOURCE}" = "${WORKDIR}/patch" ]
253 then 253 then
254 EPATCH_SOURCE="$1" 254 EPATCH_SOURCE="$1"
255 fi 255 fi
284 ;; 284 ;;
285 esac 285 esac
286 286
287 if [ "${SINGLE_PATCH}" = "no" ] 287 if [ "${SINGLE_PATCH}" = "no" ]
288 then 288 then
289 einfo "Applying various patches (bugfixes/updates)..." 289 einfo "Applying various patches (bugfixes/updates) ..."
290 fi 290 fi
291 for x in ${EPATCH_SOURCE} 291 for x in ${EPATCH_SOURCE}
292 do 292 do
293 # New ARCH dependant patch naming scheme... 293 # New ARCH dependant patch naming scheme ...
294 # 294 #
295 # ???_arch_foo.patch 295 # ???_arch_foo.patch
296 # 296 #
297 if [ -f ${x} ] && \ 297 if [ -f ${x} ] && \
298 ([ "${SINGLE_PATCH}" = "yes" -o "${x/_all_}" != "${x}" -o "`eval echo \$\{x/_${ARCH}_\}`" != "${x}" ] || \ 298 ([ "${SINGLE_PATCH}" = "yes" -o "${x/_all_}" != "${x}" -o "`eval echo \$\{x/_${ARCH}_\}`" != "${x}" ] || \
313 then 313 then
314 if [ -n "${EPATCH_SINGLE_MSG}" ] 314 if [ -n "${EPATCH_SINGLE_MSG}" ]
315 then 315 then
316 einfo "${EPATCH_SINGLE_MSG}" 316 einfo "${EPATCH_SINGLE_MSG}"
317 else 317 else
318 einfo "Applying ${x##*/}..." 318 einfo "Applying ${x##*/} ..."
319 fi 319 fi
320 else 320 else
321 einfo " ${x##*/}..." 321 einfo " ${x##*/} ..."
322 fi 322 fi
323 323
324 echo "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 324 echo "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
325 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 325 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
326 326
359 359
360 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1 360 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1
361 then 361 then
362 draw_line "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 362 draw_line "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
363 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 363 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
364 echo "ACTUALLY APPLYING ${x##*/}..." >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 364 echo "ACTUALLY APPLYING ${x##*/} ..." >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
365 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 365 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
366 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 366 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
367 367
368 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 2>&1 368 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 2>&1
369 369
438 438
439 return 1; 439 return 1;
440 } 440 }
441 END 441 END
442 442
443 einfon "Checking for _CS_GNU_LIBPTHREAD_VERSION support in glibc ... " 443 einfon "Checking for _CS_GNU_LIBPTHREAD_VERSION support in glibc ..."
444 if gcc -o ${T}/nptl ${T}/test-nptl.c &> /dev/null 444 if gcc -o ${T}/nptl ${T}/test-nptl.c &> /dev/null
445 then 445 then
446 echo "yes" 446 echo "yes"
447 einfon "Checking what PTHREADS implementation we have ... " 447 einfon "Checking what PTHREADS implementation we have ..."
448 if ${T}/nptl 448 if ${T}/nptl
449 then 449 then
450 return 0 450 return 0
451 else 451 else
452 return 1 452 return 1
528 528
529 if [ -n "${ADMINPARAM}" ] 529 if [ -n "${ADMINPARAM}" ]
530 then 530 then
531 if [ "${jobs}" -gt "${ADMINPARAM}" ] 531 if [ "${jobs}" -gt "${ADMINPARAM}" ]
532 then 532 then
533 einfo "Setting make jobs to \"-j${ADMINPARAM}\" to ensure successful merge..." 533 einfo "Setting make jobs to \"-j${ADMINPARAM}\" to ensure successful merge ..."
534 export MAKEOPTS="${MAKEOPTS} -j${ADMINPARAM}" 534 export MAKEOPTS="${MAKEOPTS} -j${ADMINPARAM}"
535 else 535 else
536 einfo "Setting make jobs to \"-j${jobs}\" to ensure successful merge..." 536 einfo "Setting make jobs to \"-j${jobs}\" to ensure successful merge ..."
537 export MAKEOPTS="${MAKEOPTS} -j${jobs}" 537 export MAKEOPTS="${MAKEOPTS} -j${jobs}"
538 fi 538 fi
539 fi 539 fi
540} 540}
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()
563# Joe Jezak <josejx@gmail.com> and usata@gentoo.org 577# Joe Jezak <josejx@gmail.com> and usata@gentoo.org
564# FBSD stuff: Aaron Walker <ka0ttic@gentoo.org> 578# FBSD stuff: Aaron Walker <ka0ttic@gentoo.org>
565# 579#
566# egetent(database, key) 580# egetent(database, key)
567egetent() { 581egetent() {
568 if use macos || use ppc-macos ; then 582 if use ppc-macos ; then
569 case "$2" in 583 case "$2" in
570 *[!0-9]*) # Non numeric 584 *[!0-9]*) # Non numeric
571 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }" 585 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
572 ;; 586 ;;
573 *) # Numeric 587 *) # Numeric
582 else 596 else
583 action="group" 597 action="group"
584 fi 598 fi
585 pw show "${action}" "$2" -q 599 pw show "${action}" "$2" -q
586 else 600 else
601 which nscd >& /dev/null && nscd -i "$1"
587 getent "$1" "$2" 602 getent "$1" "$2"
588 fi 603 fi
589} 604}
590 605
591# Simplify/standardize adding users to the system 606# Simplify/standardize adding users to the system
638 euid="next" 653 euid="next"
639 fi 654 fi
640 if [ "${euid}" == "next" ] 655 if [ "${euid}" == "next" ]
641 then 656 then
642 local pwrange 657 local pwrange
643 if use macos || use ppc-macos || [ "${USERLAND}" == "BSD" ] ; then 658 if [ "${USERLAND}" == "BSD" ] ; then
644 pwrange="`jot 898 101`" 659 pwrange="`jot 898 101`"
645 else 660 else
646 pwrange="`seq 101 999`" 661 pwrange="`seq 101 999`"
647 fi 662 fi
648 for euid in ${pwrange} ; do 663 for euid in ${pwrange} ; do
689 local defgroup="" exgroups="" 704 local defgroup="" exgroups=""
690 705
691 export IFS="," 706 export IFS=","
692 for g in ${egroups} 707 for g in ${egroups}
693 do 708 do
709 export IFS="${oldifs}"
694 if [ -z "`egetent group \"${g}\"`" ] 710 if [ -z "`egetent group \"${g}\"`" ]
695 then 711 then
696 eerror "You must add group ${g} to the system first" 712 eerror "You must add group ${g} to the system first"
697 die "${g} is not a valid GID" 713 die "${g} is not a valid GID"
698 fi 714 fi
700 then 716 then
701 defgroup="${g}" 717 defgroup="${g}"
702 else 718 else
703 exgroups="${exgroups},${g}" 719 exgroups="${exgroups},${g}"
704 fi 720 fi
721 export IFS=","
705 done 722 done
706 export IFS="${oldifs}" 723 export IFS="${oldifs}"
707 724
708 opts="${opts} -g ${defgroup}" 725 opts="${opts} -g ${defgroup}"
709 if [ ! -z "${exgroups}" ] 726 if [ ! -z "${exgroups}" ]
717 734
718 # handle extra and add the user 735 # handle extra and add the user
719 local eextra="$@" 736 local eextra="$@"
720 local oldsandbox="${SANDBOX_ON}" 737 local oldsandbox="${SANDBOX_ON}"
721 export SANDBOX_ON="0" 738 export SANDBOX_ON="0"
722 if use macos || use ppc-macos ; 739 if use ppc-macos
723 then 740 then
724 ### Make the user 741 ### Make the user
725 if [ -z "${eextra}" ] 742 if [ -z "${eextra}" ]
726 then 743 then
727 dscl . create /users/${euser} uid ${euid} 744 dscl . create /users/${euser} uid ${euid}
728 dscl . create /users/${euser} shell ${eshell} 745 dscl . create /users/${euser} shell ${eshell}
729 dscl . create /users/${euser} home ${ehome} 746 dscl . create /users/${euser} home ${ehome}
730 dscl . create /users/${euser} realname "added by portage for ${PN}" 747 dscl . create /users/${euser} realname "added by portage for ${PN}"
731 ### Add the user to the groups specified 748 ### Add the user to the groups specified
749 local oldifs="${IFS}"
750 export IFS=","
732 for g in ${egroups} 751 for g in ${egroups}
733 do 752 do
734 # $egroups is , delimited, not space
735 ewarn "This is code is wrong; someone on the OS X team should fix it"
736 dscl . merge /groups/${g} users ${euser} 753 dscl . merge /groups/${g} users ${euser}
737 done 754 done
755 export IFS="${oldifs}"
738 else 756 else
739 einfo "Extra options are not supported on macos yet" 757 einfo "Extra options are not supported on macos yet"
740 einfo "Please report the ebuild along with the info below" 758 einfo "Please report the ebuild along with the info below"
741 einfo "eextra: ${eextra}" 759 einfo "eextra: ${eextra}"
742 die "Required function missing" 760 die "Required function missing"
809 then 827 then
810 if [ "${egid}" -gt 0 ] 828 if [ "${egid}" -gt 0 ]
811 then 829 then
812 if [ -z "`egetent group ${egid}`" ] 830 if [ -z "`egetent group ${egid}`" ]
813 then 831 then
814 if use macos || use ppc-macos ; then 832 if use ppc-macos ; then
815 opts="${opts} ${egid}" 833 opts="${opts} ${egid}"
816 else 834 else
817 opts="${opts} -g ${egid}" 835 opts="${opts} -g ${egid}"
818 fi 836 fi
819 else 837 else
833 opts="${opts} ${eextra}" 851 opts="${opts} ${eextra}"
834 852
835 # add the group 853 # add the group
836 local oldsandbox="${SANDBOX_ON}" 854 local oldsandbox="${SANDBOX_ON}"
837 export SANDBOX_ON="0" 855 export SANDBOX_ON="0"
838 if use macos || use ppc-macos ; 856 if use ppc-macos
839 then 857 then
840 if [ ! -z "${eextra}" ]; 858 if [ ! -z "${eextra}" ];
841 then 859 then
842 einfo "Extra options are not supported on macos yet" 860 einfo "Extra options are not supported on macos yet"
843 einfo "Please report the ebuild along with the info below" 861 einfo "Please report the ebuild along with the info below"
869} 887}
870 888
871# Simple script to replace 'dos2unix' binaries 889# Simple script to replace 'dos2unix' binaries
872# vapier@gentoo.org 890# vapier@gentoo.org
873# 891#
874# edos2unix(file, <more files>...) 892# edos2unix(file, <more files> ...)
875edos2unix() { 893edos2unix() {
876 for f in "$@" 894 for f in "$@"
877 do 895 do
878 cp "${f}" ${T}/edos2unix 896 cp "${f}" ${T}/edos2unix
879 sed 's/\r$//' ${T}/edos2unix > "${f}" 897 sed 's/\r$//' ${T}/edos2unix > "${f}"
881} 899}
882 900
883# Make a desktop file ! 901# Make a desktop file !
884# Great for making those icons in kde/gnome startmenu ! 902# Great for making those icons in kde/gnome startmenu !
885# Amaze your friends ! Get the women ! Join today ! 903# Amaze your friends ! Get the women ! Join today !
886# gnome2 /usr/share/applications
887# gnome1 /usr/share/gnome/apps/
888# KDE ${KDEDIR}/share/applnk /usr/share/applnk
889# 904#
890# make_desktop_entry(<binary>, [name], [icon], [type], [path]) 905# make_desktop_entry(<binary>, [name], [icon], [type], [path])
891# 906#
892# binary: what binary does the app run with ? 907# binary: what binary does the app run with ?
893# name: the name that will show up in the menu 908# name: the name that will show up in the menu
894# icon: give your little like a pretty little icon ... 909# icon: give your little like a pretty little icon ...
895# this can be relative (to /usr/share/pixmaps) or 910# this can be relative (to /usr/share/pixmaps) or
896# a full path to an icon 911# a full path to an icon
897# type: what kind of application is this ? for categories: 912# type: what kind of application is this ? for categories:
898# http://www.freedesktop.org/standards/menu-spec/ 913# http://www.freedesktop.org/standards/menu-spec/
899# path: if your app needs to startup in a specific dir 914# path: if your app needs to startup in a specific dir
900make_desktop_entry() { 915make_desktop_entry() {
901 [ -z "$1" ] && eerror "You must specify the executable" && return 1 916 [ -z "$1" ] && eerror "make_desktop_entry: You must specify the executable" && return 1
902 917
903 local exec="${1}" 918 local exec="${1}"
904 local name="${2:-${PN}}" 919 local name="${2:-${PN}}"
905 local icon="${3:-${PN}.png}" 920 local icon="${3:-${PN}.png}"
906 local type="${4}" 921 local type="${4}"
938Exec=${exec} 953Exec=${exec}
939Path=${path} 954Path=${path}
940Icon=${icon} 955Icon=${icon}
941Categories=Application;${type};" > "${desktop}" 956Categories=Application;${type};" > "${desktop}"
942 957
943 if [ -d "/usr/share/applications" ]
944 then
945 insinto /usr/share/applications 958 insinto /usr/share/applications
946 doins "${desktop}" 959 doins "${desktop}"
947 fi
948
949 #if [ -d "/usr/share/gnome/apps" ]
950 #then
951 # insinto /usr/share/gnome/apps/Games
952 # doins ${desktop}
953 #fi
954
955 #if [ ! -z "`ls /usr/kde/* 2>/dev/null`" ]
956 #then
957 # for ver in /usr/kde/*
958 # do
959 # insinto ${ver}/share/applnk/Games
960 # doins ${desktop}
961 # done
962 #fi
963
964 if [ -d "/usr/share/applnk" ]
965 then
966 insinto /usr/share/applnk/${subdir}
967 doins "${desktop}"
968 fi
969 960
970 return 0 961 return 0
971} 962}
972 963
973# for internal use only (unpack_pdv and unpack_makeself) 964# for internal use only (unpack_pdv and unpack_makeself)
1022 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 1013 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
1023 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"` 1014 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"`
1024 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\"`
1025 1016
1026 # grab metadata for debug reasons 1017 # grab metadata for debug reasons
1027 local metafile="`mymktemp ${T}`" 1018 local metafile="$(emktemp)"
1028 tail -c +$((${metaskip}+1)) ${src} > ${metafile} 1019 tail -c +$((${metaskip}+1)) ${src} > ${metafile}
1029 1020
1030 # rip out the final file name from the metadata 1021 # rip out the final file name from the metadata
1031 local datafile="`tail -c +$((${metaskip}+1)) ${src} | strings | head -n 1`" 1022 local datafile="`tail -c +$((${metaskip}+1)) ${src} | strings | head -n 1`"
1032 datafile="`basename ${datafile}`" 1023 datafile="`basename ${datafile}`"
1033 1024
1034 # now lets uncompress/untar the file if need be 1025 # now lets uncompress/untar the file if need be
1035 local tmpfile="`mymktemp ${T}`" 1026 local tmpfile="$(emktemp)"
1036 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}
1037 1028
1038 local iscompressed="`file -b ${tmpfile}`" 1029 local iscompressed="`file -b ${tmpfile}`"
1039 if [ "${iscompressed:0:8}" == "compress" ] ; then 1030 if [ "${iscompressed:0:8}" == "compress" ] ; then
1040 iscompressed=1 1031 iscompressed=1
1085# Unpack those pesky makeself generated files ... 1076# Unpack those pesky makeself generated files ...
1086# They're shell scripts with the binary package tagged onto 1077# They're shell scripts with the binary package tagged onto
1087# the end of the archive. Loki utilized the format as does 1078# the end of the archive. Loki utilized the format as does
1088# many other game companies. 1079# many other game companies.
1089# 1080#
1090# Usage: unpack_makeself [file to unpack] [offset] 1081# Usage: unpack_makeself [file to unpack] [offset] [tail|dd]
1091# - If the file is not specified then unpack will utilize ${A}. 1082# - If the file is not specified then unpack will utilize ${A}.
1092# - If the offset is not specified then we will attempt to extract 1083# - If the offset is not specified then we will attempt to extract
1093# the proper offset from the script itself. 1084# the proper offset from the script itself.
1094unpack_makeself() { 1085unpack_makeself() {
1095 local src="`find_unpackable_file $1`" 1086 local src="$(find_unpackable_file "$1")"
1096 local skip="$2" 1087 local skip="$2"
1088 local exe="$3"
1097 1089
1098 local shrtsrc="`basename ${src}`" 1090 local shrtsrc="$(basename "${src}")"
1099 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 1091 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
1100 if [ -z "${skip}" ] 1092 if [ -z "${skip}" ]
1101 then 1093 then
1102 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`" 1094 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`"
1103 local skip=0 1095 local skip=0
1096 exe=tail
1104 case ${ver} in 1097 case ${ver} in
1105 1.5.*) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same 1098 1.5.*) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same
1106 skip=`grep -a ^skip= ${src} | cut -d= -f2` 1099 skip=$(grep -a ^skip= "${src}" | cut -d= -f2)
1107 ;; 1100 ;;
1108 2.0|2.0.1) 1101 2.0|2.0.1)
1109 skip=`grep -a ^$'\t'tail ${src} | awk '{print $2}' | cut -b2-` 1102 skip=$(grep -a ^$'\t'tail "${src}" | awk '{print $2}' | cut -b2-)
1110 ;; 1103 ;;
1111 2.1.1) 1104 2.1.1)
1112 skip=`grep -a ^offset= ${src} | awk '{print $2}' | cut -b2-` 1105 skip=$(grep -a ^offset= "${src}" | awk '{print $2}' | cut -b2-)
1113 let skip="skip + 1" 1106 let skip="skip + 1"
1114 ;; 1107 ;;
1115 2.1.2) 1108 2.1.2)
1116 skip=`grep -a ^offset= ${src} | awk '{print $3}' | head -n 1` 1109 skip=$(grep -a ^offset= "${src}" | awk '{print $3}' | head -n 1)
1117 let skip="skip + 1" 1110 let skip="skip + 1"
1118 ;; 1111 ;;
1119 2.1.3) 1112 2.1.3)
1120 skip=`grep -a ^offset= ${src} | awk '{print $3}'` 1113 skip=`grep -a ^offset= "${src}" | awk '{print $3}'`
1121 let skip="skip + 1" 1114 let skip="skip + 1"
1115 ;;
1116 2.1.4)
1117 skip=$(grep -a offset=.*head.*wc "${src}" | awk '{print $3}' | head -n 1)
1118 skip=$(head -n ${skip} "${src}" | wc -c)
1119 exe="dd"
1122 ;; 1120 ;;
1123 *) 1121 *)
1124 eerror "I'm sorry, but I was unable to support the Makeself file." 1122 eerror "I'm sorry, but I was unable to support the Makeself file."
1125 eerror "The version I detected was '${ver}'." 1123 eerror "The version I detected was '${ver}'."
1126 eerror "Please file a bug about the file ${shrtsrc} at" 1124 eerror "Please file a bug about the file ${shrtsrc} at"
1128 die "makeself version '${ver}' not supported" 1126 die "makeself version '${ver}' not supported"
1129 ;; 1127 ;;
1130 esac 1128 esac
1131 debug-print "Detected Makeself version ${ver} ... using ${skip} as offset" 1129 debug-print "Detected Makeself version ${ver} ... using ${skip} as offset"
1132 fi 1130 fi
1131 case ${exe} in
1132 tail) exe="tail -n +${skip} '${src}'";;
1133 dd) exe="dd ibs=${skip} skip=1 obs=1024 conv=sync if='${src}'";;
1134 *) die "makeself cant handle exe '${exe}'"
1135 esac
1133 1136
1134 # 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
1135 local tmpfile="`mymktemp ${T}`" 1138 local tmpfile="$(emktemp)"
1136 tail -n +${skip} ${src} 2>/dev/null | head -c 512 > ${tmpfile} 1139 eval ${exe} 2>/dev/null | head -c 512 > "${tmpfile}"
1137 local filetype="`file -b ${tmpfile}`" 1140 local filetype="$(file -b "${tmpfile}")"
1138 case ${filetype} in 1141 case ${filetype} in
1139 *tar\ archive) 1142 *tar\ archive)
1140 tail -n +${skip} ${src} | tar --no-same-owner -xf - 1143 eval ${exe} | tar --no-same-owner -xf -
1141 ;; 1144 ;;
1142 bzip2*) 1145 bzip2*)
1143 tail -n +${skip} ${src} | bzip2 -dc | tar --no-same-owner -xf - 1146 eval ${exe} | bzip2 -dc | tar --no-same-owner -xf -
1144 ;; 1147 ;;
1145 gzip*) 1148 gzip*)
1146 tail -n +${skip} ${src} | tar --no-same-owner -xzf - 1149 eval ${exe} | tar --no-same-owner -xzf -
1147 ;; 1150 ;;
1148 compress*) 1151 compress*)
1149 tail -n +${skip} ${src} | gunzip | tar --no-same-owner -xf - 1152 eval ${exe} | gunzip | tar --no-same-owner -xf -
1150 ;; 1153 ;;
1151 *) 1154 *)
1152 eerror "Unknown filetype \"${filetype}\" ?" 1155 eerror "Unknown filetype \"${filetype}\" ?"
1153 false 1156 false
1154 ;; 1157 ;;
1187 return 0 1190 return 0
1188 fi 1191 fi
1189 done 1192 done
1190 set +o noglob; set -$shopts #reset old shell opts 1193 set +o noglob; set -$shopts #reset old shell opts
1191 1194
1192 local licmsg="`mymktemp ${T}`" 1195 local licmsg="$(emktemp)"
1193 cat << EOF > ${licmsg} 1196 cat << EOF > ${licmsg}
1194********************************************************** 1197**********************************************************
1195The following license outlines the terms of use of this 1198The following license outlines the terms of use of this
1196package. You MUST accept this license for installation to 1199package. You MUST accept this license for installation to
1197continue. When you are done viewing, hit 'q'. If you 1200continue. When you are done viewing, hit 'q'. If you
1425 1428
1426 ls=" ${ls} " 1429 ls=" ${ls} "
1427 newls="" 1430 newls=""
1428 for f in ${LINGUAS} ; do 1431 for f in ${LINGUAS} ; do
1429 if [ "${ls/ ${f} /}" != "${ls}" ] ; then 1432 if [ "${ls/ ${f} /}" != "${ls}" ] ; then
1430 nl="${newls} ${f}" 1433 newls="${newls} ${f}"
1431 else 1434 else
1432 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA" 1435 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA"
1433 fi 1436 fi
1434 done 1437 done
1435 if [ -z "${newls}" ] ; then 1438 if [ -z "${newls}" ] ; then
1436 unset LINGUAS 1439 unset LINGUAS
1437 else 1440 else
1438 export LINGUAS="${newls}" 1441 export LINGUAS="${newls}"
1439 fi 1442 fi
1440} 1443}
1444
1445# moved from kernel.eclass since they are generally useful outside of
1446# kernel.eclass -iggy (20041002)
1447
1448# the following functions are useful in kernel module ebuilds, etc.
1449# for an example see ivtv or drbd ebuilds
1450
1451# set's ARCH to match what the kernel expects
1452set_arch_to_kernel() {
1453 export EUTILS_ECLASS_PORTAGE_ARCH="${ARCH}"
1454 case ${ARCH} in
1455 x86) export ARCH="i386";;
1456 amd64) export ARCH="x86_64";;
1457 hppa) export ARCH="parisc";;
1458 mips) export ARCH="mips";;
1459 *) export ARCH="${ARCH}";;
1460 esac
1461}
1462
1463# set's ARCH back to what portage expects
1464set_arch_to_portage() {
1465 export ARCH="${EUTILS_ECLASS_PORTAGE_ARCH}"
1466}
1467
1468# Jeremy Huddleston <eradicator@gentoo.org>:
1469# preserve_old_lib /path/to/libblah.so.0
1470# preserve_old_lib_notify /path/to/libblah.so.0
1471#
1472# These functions are useful when a lib in your package changes --soname. Such
1473# an example might be from libogg.so.0 to libogg.so.1. Removing libogg.so.0
1474# would break packages that link against it. Most people get around this
1475# by using the portage SLOT mechanism, but that is not always a relevant
1476# solution, so instead you can add the following to your ebuilds:
1477#
1478# src_install() {
1479# ...
1480# preserve_old_lib /usr/$(get_libdir)/libogg.so.0
1481# ...
1482# }
1483#
1484# pkg_postinst() {
1485# ...
1486# preserve_old_lib_notify /usr/$(get_libdir)/libogg.so.0
1487# ...
1488# }
1489
1490preserve_old_lib() {
1491 LIB=$1
1492
1493 if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then
1494 SONAME=`basename ${LIB}`
1495 DIRNAME=`dirname ${LIB}`
1496
1497 dodir ${DIRNAME}
1498 cp ${ROOT}${LIB} ${D}${DIRNAME}
1499 touch ${D}${LIB}
1500 fi
1501}
1502
1503preserve_old_lib_notify() {
1504 LIB=$1
1505
1506 if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then
1507 SONAME=`basename ${LIB}`
1508
1509 einfo "An old version of an installed library was detected on your system."
1510 einfo "In order to avoid breaking packages that link against is, this older version"
1511 einfo "is not being removed. In order to make full use of this newer version,"
1512 einfo "you will need to execute the following command:"
1513 einfo " revdep-rebuild --soname ${SONAME}"
1514 einfo
1515 einfo "After doing that, you can safely remove ${LIB}"
1516 einfo "Note: 'emerge gentoolkit' to get revdep-rebuild"
1517 fi
1518}

Legend:
Removed from v.1.109  
changed lines
  Added in v.1.123

  ViewVC Help
Powered by ViewVC 1.1.20