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

Diff of /eclass/eutils.eclass

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

Revision 1.106 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.106 2004/09/21 17:34:33 wolf31o2 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.
112# to point to the latest version of the library present. 112# to point to the latest version of the library present.
113# 113#
114# <azarah@gentoo.org> (26 Oct 2002) 114# <azarah@gentoo.org> (26 Oct 2002)
115# 115#
116gen_usr_ldscript() { 116gen_usr_ldscript() {
117 local libdir="$(get_libdir)"
117 # Just make sure it exists 118 # Just make sure it exists
118 dodir /usr/$(get_libdir) 119 dodir /usr/${libdir}
119 120
120 cat > "${D}/usr/$(get_libdir)/$1" << END_LDSCRIPT 121 cat > "${D}/usr/${libdir}/${1}" << END_LDSCRIPT
121/* GNU ld script 122/* GNU ld script
122 Because Gentoo have critical dynamic libraries 123 Because Gentoo have critical dynamic libraries
123 in /lib, and the static versions in /usr/lib, we 124 in /lib, and the static versions in /usr/lib, we
124 need to have a "fake" dynamic lib in /usr/lib, 125 need to have a "fake" dynamic lib in /usr/lib,
125 otherwise we run into linking problems. 126 otherwise we run into linking problems.
126 See bug #4411 on http://bugs.gentoo.org/ for 127 See bug #4411 on http://bugs.gentoo.org/ for
127 more info. */ 128 more info. */
128GROUP ( /$(get_libdir)/$1 ) 129GROUP ( /${libdir}/${1} )
129END_LDSCRIPT 130END_LDSCRIPT
131 fperms a+x "/usr/${libdir}/${1}"
130} 132}
131 133
132# Simple function to draw a line consisting of '=' the same length as $* 134# Simple function to draw a line consisting of '=' the same length as $*
133# 135#
134# <azarah@gentoo.org> (11 Nov 2002) 136# <azarah@gentoo.org> (11 Nov 2002)
219 local x="" 221 local x=""
220 222
221 if [ "$#" -gt 1 ] 223 if [ "$#" -gt 1 ]
222 then 224 then
223 local m="" 225 local m=""
224 einfo "${#} patches to apply..." 226 einfo "${#} patches to apply ..."
225 for m in "$@" ; do 227 for m in "$@" ; do
226 epatch "${m}" 228 epatch "${m}"
227 done 229 done
228 return 0 230 return 0
229 fi 231 fi
243 local EPATCH_SOURCE="$1/*" 245 local EPATCH_SOURCE="$1/*"
244 else 246 else
245 local EPATCH_SOURCE="$1/*.${EPATCH_SUFFIX}" 247 local EPATCH_SOURCE="$1/*.${EPATCH_SUFFIX}"
246 fi 248 fi
247 else 249 else
248 if [ ! -d ${EPATCH_SOURCE} ] 250 if [ ! -d ${EPATCH_SOURCE} ] || [ -n "$1" ]
249 then 251 then
250 if [ -n "$1" -a "${EPATCH_SOURCE}" = "${WORKDIR}/patch" ] 252 if [ -n "$1" -a "${EPATCH_SOURCE}" = "${WORKDIR}/patch" ]
251 then 253 then
252 EPATCH_SOURCE="$1" 254 EPATCH_SOURCE="$1"
253 fi 255 fi
282 ;; 284 ;;
283 esac 285 esac
284 286
285 if [ "${SINGLE_PATCH}" = "no" ] 287 if [ "${SINGLE_PATCH}" = "no" ]
286 then 288 then
287 einfo "Applying various patches (bugfixes/updates)..." 289 einfo "Applying various patches (bugfixes/updates) ..."
288 fi 290 fi
289 for x in ${EPATCH_SOURCE} 291 for x in ${EPATCH_SOURCE}
290 do 292 do
291 # New ARCH dependant patch naming scheme... 293 # New ARCH dependant patch naming scheme ...
292 # 294 #
293 # ???_arch_foo.patch 295 # ???_arch_foo.patch
294 # 296 #
295 if [ -f ${x} ] && \ 297 if [ -f ${x} ] && \
296 ([ "${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}" ] || \
311 then 313 then
312 if [ -n "${EPATCH_SINGLE_MSG}" ] 314 if [ -n "${EPATCH_SINGLE_MSG}" ]
313 then 315 then
314 einfo "${EPATCH_SINGLE_MSG}" 316 einfo "${EPATCH_SINGLE_MSG}"
315 else 317 else
316 einfo "Applying ${x##*/}..." 318 einfo "Applying ${x##*/} ..."
317 fi 319 fi
318 else 320 else
319 einfo " ${x##*/}..." 321 einfo " ${x##*/} ..."
320 fi 322 fi
321 323
322 echo "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 324 echo "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
323 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 325 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
324 326
357 359
358 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
359 then 361 then
360 draw_line "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 362 draw_line "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
361 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 363 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
362 echo "ACTUALLY APPLYING ${x##*/}..." >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 364 echo "ACTUALLY APPLYING ${x##*/} ..." >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
363 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 365 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
364 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 366 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
365 367
366 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
367 369
436 438
437 return 1; 439 return 1;
438 } 440 }
439 END 441 END
440 442
441 einfon "Checking for _CS_GNU_LIBPTHREAD_VERSION support in glibc ... " 443 einfon "Checking for _CS_GNU_LIBPTHREAD_VERSION support in glibc ..."
442 if gcc -o ${T}/nptl ${T}/test-nptl.c &> /dev/null 444 if gcc -o ${T}/nptl ${T}/test-nptl.c &> /dev/null
443 then 445 then
444 echo "yes" 446 echo "yes"
445 einfon "Checking what PTHREADS implementation we have ... " 447 einfon "Checking what PTHREADS implementation we have ..."
446 if ${T}/nptl 448 if ${T}/nptl
447 then 449 then
448 return 0 450 return 0
449 else 451 else
450 return 1 452 return 1
526 528
527 if [ -n "${ADMINPARAM}" ] 529 if [ -n "${ADMINPARAM}" ]
528 then 530 then
529 if [ "${jobs}" -gt "${ADMINPARAM}" ] 531 if [ "${jobs}" -gt "${ADMINPARAM}" ]
530 then 532 then
531 einfo "Setting make jobs to \"-j${ADMINPARAM}\" to ensure successful merge..." 533 einfo "Setting make jobs to \"-j${ADMINPARAM}\" to ensure successful merge ..."
532 export MAKEOPTS="${MAKEOPTS} -j${ADMINPARAM}" 534 export MAKEOPTS="${MAKEOPTS} -j${ADMINPARAM}"
533 else 535 else
534 einfo "Setting make jobs to \"-j${jobs}\" to ensure successful merge..." 536 einfo "Setting make jobs to \"-j${jobs}\" to ensure successful merge ..."
535 export MAKEOPTS="${MAKEOPTS} -j${jobs}" 537 export MAKEOPTS="${MAKEOPTS} -j${jobs}"
536 fi 538 fi
537 fi 539 fi
538} 540}
539 541
540# Cheap replacement for when debianutils (and thus mktemp) 542# Cheap replacement for when debianutils (and thus mktemp)
541# does not exist on the users system 543# does not exist on the users system
542# vapier@gentoo.org 544# vapier@gentoo.org
543# 545#
544# Takes just 1 parameter (the directory to create tmpfile in) 546# Takes just 1 optional parameter (the directory to create tmpfile in)
545mymktemp() { 547emktemp() {
548 local exe="touch"
549 [ "$1" == "-d" ] && exe="mkdir" && shift
546 local topdir="$1" 550 local topdir="$1"
547 551
548 [ -z "${topdir}" ] && topdir=/tmp 552 if [ -z "${topdir}" ]
549 if [ "`which mktemp 2>/dev/null`" ]
550 then 553 then
551 mktemp -p ${topdir} 554 [ -z "${T}" ] \
552 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
553 local tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}" 563 tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}"
554 touch ${tmp} 564 done
565 ${exe} "${tmp}"
555 echo ${tmp} 566 echo "${tmp}"
567 else
568 [ "${exe}" == "touch" ] \
569 && exe="-p" \
570 || exe="-d"
571 mktemp ${exe} "${topdir}"
556 fi 572 fi
557} 573}
558 574
559# Small wrapper for getent (Linux) and nidump (Mac OS X) 575# Small wrapper for getent (Linux), nidump (Mac OS X),
560# used in enewuser()/enewgroup() 576# and pw (FreeBSD) used in enewuser()/enewgroup()
561# Joe Jezak <josejx@gmail.com> and usata@gentoo.org 577# Joe Jezak <josejx@gmail.com> and usata@gentoo.org
578# FBSD stuff: Aaron Walker <ka0ttic@gentoo.org>
562# 579#
563# egetent(database, key) 580# egetent(database, key)
564egetent() { 581egetent() {
565 if use macos || use ppc-macos ; then 582 if use ppc-macos ; then
566 case "$2" in 583 case "$2" in
567 *[!0-9]*) # Non numeric 584 *[!0-9]*) # Non numeric
568 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }" 585 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
569 ;; 586 ;;
570 *) # Numeric 587 *) # Numeric
571 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }" 588 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
572 ;; 589 ;;
573 esac 590 esac
591 elif useq x86-fbsd ; then
592 local action
593 if [ "$1" == "passwd" ]
594 then
595 action="user"
574 else 596 else
597 action="group"
598 fi
599 pw show "${action}" "$2" -q
600 else
601 which nscd >& /dev/null && nscd -i "$1"
575 getent $1 $2 602 getent "$1" "$2"
576 fi 603 fi
577} 604}
578 605
579# Simplify/standardize adding users to the system 606# Simplify/standardize adding users to the system
580# vapier@gentoo.org 607# vapier@gentoo.org
626 euid="next" 653 euid="next"
627 fi 654 fi
628 if [ "${euid}" == "next" ] 655 if [ "${euid}" == "next" ]
629 then 656 then
630 local pwrange 657 local pwrange
631 if use macos || use ppc-macos ; then 658 if [ "${USERLAND}" == "BSD" ] ; then
632 pwrange="`jot 898 101`" 659 pwrange="`jot 898 101`"
633 else 660 else
634 pwrange="`seq 101 999`" 661 pwrange="`seq 101 999`"
635 fi 662 fi
636 for euid in ${pwrange} ; do 663 for euid in ${pwrange} ; do
648 then 675 then
649 eerror "A shell was specified but it does not exist !" 676 eerror "A shell was specified but it does not exist !"
650 die "${eshell} does not exist" 677 die "${eshell} does not exist"
651 fi 678 fi
652 else 679 else
680 if [ "${USERLAND}" == "BSD" ]
681 then
682 eshell="/usr/bin/false"
683 else
653 eshell="/bin/false" 684 eshell="/bin/false"
685 fi
654 fi 686 fi
655 einfo " - Shell: ${eshell}" 687 einfo " - Shell: ${eshell}"
656 opts="${opts} -s ${eshell}" 688 opts="${opts} -s ${eshell}"
657 689
658 # handle homedir 690 # handle homedir
667 # handle groups 699 # handle groups
668 local egroups="$1"; shift 700 local egroups="$1"; shift
669 if [ ! -z "${egroups}" ] 701 if [ ! -z "${egroups}" ]
670 then 702 then
671 local oldifs="${IFS}" 703 local oldifs="${IFS}"
704 local defgroup="" exgroups=""
705
672 export IFS="," 706 export IFS=","
673 for g in ${egroups} 707 for g in ${egroups}
674 do 708 do
709 export IFS="${oldifs}"
675 if [ -z "`egetent group \"${g}\"`" ] 710 if [ -z "`egetent group \"${g}\"`" ]
676 then 711 then
677 eerror "You must add group ${g} to the system first" 712 eerror "You must add group ${g} to the system first"
678 die "${g} is not a valid GID" 713 die "${g} is not a valid GID"
679 fi 714 fi
715 if [ -z "${defgroup}" ]
716 then
717 defgroup="${g}"
718 else
719 exgroups="${exgroups},${g}"
720 fi
721 export IFS=","
680 done 722 done
681 export IFS="${oldifs}" 723 export IFS="${oldifs}"
724
682 opts="${opts} -g ${egroups}" 725 opts="${opts} -g ${defgroup}"
726 if [ ! -z "${exgroups}" ]
727 then
728 opts="${opts} -G ${exgroups:1}"
729 fi
683 else 730 else
684 egroups="(none)" 731 egroups="(none)"
685 fi 732 fi
686 einfo " - Groups: ${egroups}" 733 einfo " - Groups: ${egroups}"
687 734
688 # handle extra and add the user 735 # handle extra and add the user
689 local eextra="$@" 736 local eextra="$@"
690 local oldsandbox="${SANDBOX_ON}" 737 local oldsandbox="${SANDBOX_ON}"
691 export SANDBOX_ON="0" 738 export SANDBOX_ON="0"
692 if use macos || use ppc-macos ; 739 if use ppc-macos
693 then 740 then
694 ### Make the user 741 ### Make the user
695 if [ -z "${eextra}" ] 742 if [ -z "${eextra}" ]
696 then 743 then
697 dscl . create /users/${euser} uid ${euid} 744 dscl . create /users/${euser} uid ${euid}
698 dscl . create /users/${euser} shell ${eshell} 745 dscl . create /users/${euser} shell ${eshell}
699 dscl . create /users/${euser} home ${ehome} 746 dscl . create /users/${euser} home ${ehome}
700 dscl . create /users/${euser} realname "added by portage for ${PN}" 747 dscl . create /users/${euser} realname "added by portage for ${PN}"
701 ### Add the user to the groups specified 748 ### Add the user to the groups specified
749 local oldifs="${IFS}"
750 export IFS=","
702 for g in ${egroups} 751 for g in ${egroups}
703 do 752 do
704 dscl . merge /groups/${g} users ${euser} 753 dscl . merge /groups/${g} users ${euser}
705 done 754 done
755 export IFS="${oldifs}"
706 else 756 else
707 einfo "Extra options are not supported on macos yet" 757 einfo "Extra options are not supported on macos yet"
708 einfo "Please report the ebuild along with the info below" 758 einfo "Please report the ebuild along with the info below"
709 einfo "eextra: ${eextra}" 759 einfo "eextra: ${eextra}"
710 die "Required function missing" 760 die "Required function missing"
761 fi
762 elif use x86-fbsd ; then
763 if [ -z "${eextra}" ]
764 then
765 pw useradd ${euser} ${opts} \
766 -c "added by portage for ${PN}" \
767 die "enewuser failed"
768 else
769 einfo " - Extra: ${eextra}"
770 pw useradd ${euser} ${opts} \
771 -c ${eextra} || die "enewuser failed"
711 fi 772 fi
712 else 773 else
713 if [ -z "${eextra}" ] 774 if [ -z "${eextra}" ]
714 then 775 then
715 useradd ${opts} ${euser} \ 776 useradd ${opts} ${euser} \
766 then 827 then
767 if [ "${egid}" -gt 0 ] 828 if [ "${egid}" -gt 0 ]
768 then 829 then
769 if [ -z "`egetent group ${egid}`" ] 830 if [ -z "`egetent group ${egid}`" ]
770 then 831 then
771 if use macos || use ppc-macos ; then 832 if use ppc-macos ; then
772 opts="${opts} ${egid}" 833 opts="${opts} ${egid}"
773 else 834 else
774 opts="${opts} -g ${egid}" 835 opts="${opts} -g ${egid}"
775 fi 836 fi
776 else 837 else
790 opts="${opts} ${eextra}" 851 opts="${opts} ${eextra}"
791 852
792 # add the group 853 # add the group
793 local oldsandbox="${SANDBOX_ON}" 854 local oldsandbox="${SANDBOX_ON}"
794 export SANDBOX_ON="0" 855 export SANDBOX_ON="0"
795 if use macos || use ppc-macos ; 856 if use ppc-macos
796 then 857 then
797 if [ ! -z "${eextra}" ]; 858 if [ ! -z "${eextra}" ];
798 then 859 then
799 einfo "Extra options are not supported on macos yet" 860 einfo "Extra options are not supported on macos yet"
800 einfo "Please report the ebuild along with the info below" 861 einfo "Please report the ebuild along with the info below"
809 [ -z "`egetent group ${egid}`" ] && break 870 [ -z "`egetent group ${egid}`" ] && break
810 done 871 done
811 esac 872 esac
812 dscl . create /groups/${egroup} gid ${egid} 873 dscl . create /groups/${egroup} gid ${egid}
813 dscl . create /groups/${egroup} passwd '*' 874 dscl . create /groups/${egroup} passwd '*'
875 elif use x86-fbsd ; then
876 case ${egid} in
877 *[!0-9]*) # Non numeric
878 for egid in `jot 898 101`; do
879 [ -z "`egetent group ${egid}`" ] && break
880 done
881 esac
882 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed"
814 else 883 else
815 groupadd ${opts} ${egroup} || die "enewgroup failed" 884 groupadd ${opts} ${egroup} || die "enewgroup failed"
816 fi 885 fi
817 export SANDBOX_ON="${oldsandbox}" 886 export SANDBOX_ON="${oldsandbox}"
818} 887}
819 888
820# Simple script to replace 'dos2unix' binaries 889# Simple script to replace 'dos2unix' binaries
821# vapier@gentoo.org 890# vapier@gentoo.org
822# 891#
823# edos2unix(file, <more files>...) 892# edos2unix(file, <more files> ...)
824edos2unix() { 893edos2unix() {
825 for f in "$@" 894 for f in "$@"
826 do 895 do
827 cp "${f}" ${T}/edos2unix 896 cp "${f}" ${T}/edos2unix
828 sed 's/\r$//' ${T}/edos2unix > "${f}" 897 sed 's/\r$//' ${T}/edos2unix > "${f}"
830} 899}
831 900
832# Make a desktop file ! 901# Make a desktop file !
833# Great for making those icons in kde/gnome startmenu ! 902# Great for making those icons in kde/gnome startmenu !
834# Amaze your friends ! Get the women ! Join today ! 903# Amaze your friends ! Get the women ! Join today !
835# gnome2 /usr/share/applications
836# gnome1 /usr/share/gnome/apps/
837# KDE ${KDEDIR}/share/applnk /usr/share/applnk
838# 904#
839# make_desktop_entry(<binary>, [name], [icon], [type], [path]) 905# make_desktop_entry(<binary>, [name], [icon], [type], [path])
840# 906#
841# binary: what binary does the app run with ? 907# binary: what binary does the app run with ?
842# name: the name that will show up in the menu 908# name: the name that will show up in the menu
843# icon: give your little like a pretty little icon ... 909# icon: give your little like a pretty little icon ...
844# this can be relative (to /usr/share/pixmaps) or 910# this can be relative (to /usr/share/pixmaps) or
845# a full path to an icon 911# a full path to an icon
846# type: what kind of application is this ? for categories: 912# type: what kind of application is this ? for categories:
847# http://www.freedesktop.org/standards/menu-spec/ 913# http://www.freedesktop.org/standards/menu-spec/
848# path: if your app needs to startup in a specific dir 914# path: if your app needs to startup in a specific dir
849make_desktop_entry() { 915make_desktop_entry() {
850 [ -z "$1" ] && eerror "You must specify the executable" && return 1 916 [ -z "$1" ] && eerror "make_desktop_entry: You must specify the executable" && return 1
851 917
852 local exec="${1}" 918 local exec="${1}"
853 local name="${2:-${PN}}" 919 local name="${2:-${PN}}"
854 local icon="${3:-${PN}.png}" 920 local icon="${3:-${PN}.png}"
855 local type="${4}" 921 local type="${4}"
887Exec=${exec} 953Exec=${exec}
888Path=${path} 954Path=${path}
889Icon=${icon} 955Icon=${icon}
890Categories=Application;${type};" > "${desktop}" 956Categories=Application;${type};" > "${desktop}"
891 957
892 if [ -d "/usr/share/applications" ]
893 then
894 insinto /usr/share/applications 958 insinto /usr/share/applications
895 doins "${desktop}" 959 doins "${desktop}"
896 fi
897
898 #if [ -d "/usr/share/gnome/apps" ]
899 #then
900 # insinto /usr/share/gnome/apps/Games
901 # doins ${desktop}
902 #fi
903
904 #if [ ! -z "`ls /usr/kde/* 2>/dev/null`" ]
905 #then
906 # for ver in /usr/kde/*
907 # do
908 # insinto ${ver}/share/applnk/Games
909 # doins ${desktop}
910 # done
911 #fi
912
913 if [ -d "/usr/share/applnk" ]
914 then
915 insinto /usr/share/applnk/${subdir}
916 doins "${desktop}"
917 fi
918 960
919 return 0 961 return 0
920} 962}
921 963
922# for internal use only (unpack_pdv and unpack_makeself) 964# for internal use only (unpack_pdv and unpack_makeself)
971 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 1013 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
972 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"` 1014 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"`
973 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\"`
974 1016
975 # grab metadata for debug reasons 1017 # grab metadata for debug reasons
976 local metafile="`mymktemp ${T}`" 1018 local metafile="$(emktemp)"
977 tail -c +$((${metaskip}+1)) ${src} > ${metafile} 1019 tail -c +$((${metaskip}+1)) ${src} > ${metafile}
978 1020
979 # rip out the final file name from the metadata 1021 # rip out the final file name from the metadata
980 local datafile="`tail -c +$((${metaskip}+1)) ${src} | strings | head -n 1`" 1022 local datafile="`tail -c +$((${metaskip}+1)) ${src} | strings | head -n 1`"
981 datafile="`basename ${datafile}`" 1023 datafile="`basename ${datafile}`"
982 1024
983 # now lets uncompress/untar the file if need be 1025 # now lets uncompress/untar the file if need be
984 local tmpfile="`mymktemp ${T}`" 1026 local tmpfile="$(emktemp)"
985 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}
986 1028
987 local iscompressed="`file -b ${tmpfile}`" 1029 local iscompressed="`file -b ${tmpfile}`"
988 if [ "${iscompressed:0:8}" == "compress" ] ; then 1030 if [ "${iscompressed:0:8}" == "compress" ] ; then
989 iscompressed=1 1031 iscompressed=1
1034# Unpack those pesky makeself generated files ... 1076# Unpack those pesky makeself generated files ...
1035# They're shell scripts with the binary package tagged onto 1077# They're shell scripts with the binary package tagged onto
1036# the end of the archive. Loki utilized the format as does 1078# the end of the archive. Loki utilized the format as does
1037# many other game companies. 1079# many other game companies.
1038# 1080#
1039# Usage: unpack_makeself [file to unpack] [offset] 1081# Usage: unpack_makeself [file to unpack] [offset] [tail|dd]
1040# - If the file is not specified then unpack will utilize ${A}. 1082# - If the file is not specified then unpack will utilize ${A}.
1041# - 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
1042# the proper offset from the script itself. 1084# the proper offset from the script itself.
1043unpack_makeself() { 1085unpack_makeself() {
1044 local src="`find_unpackable_file $1`" 1086 local src="$(find_unpackable_file "$1")"
1045 local skip="$2" 1087 local skip="$2"
1088 local exe="$3"
1046 1089
1047 local shrtsrc="`basename ${src}`" 1090 local shrtsrc="$(basename "${src}")"
1048 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 1091 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
1049 if [ -z "${skip}" ] 1092 if [ -z "${skip}" ]
1050 then 1093 then
1051 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`" 1094 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`"
1052 local skip=0 1095 local skip=0
1096 exe=tail
1053 case ${ver} in 1097 case ${ver} in
1054 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
1055 skip=`grep -a ^skip= ${src} | cut -d= -f2` 1099 skip=$(grep -a ^skip= "${src}" | cut -d= -f2)
1056 ;; 1100 ;;
1057 2.0|2.0.1) 1101 2.0|2.0.1)
1058 skip=`grep -a ^$'\t'tail ${src} | awk '{print $2}' | cut -b2-` 1102 skip=$(grep -a ^$'\t'tail "${src}" | awk '{print $2}' | cut -b2-)
1059 ;; 1103 ;;
1060 2.1.1) 1104 2.1.1)
1061 skip=`grep -a ^offset= ${src} | awk '{print $2}' | cut -b2-` 1105 skip=$(grep -a ^offset= "${src}" | awk '{print $2}' | cut -b2-)
1062 let skip="skip + 1" 1106 let skip="skip + 1"
1063 ;; 1107 ;;
1064 2.1.2) 1108 2.1.2)
1065 skip=`grep -a ^offset= ${src} | awk '{print $3}' | head -n 1` 1109 skip=$(grep -a ^offset= "${src}" | awk '{print $3}' | head -n 1)
1066 let skip="skip + 1" 1110 let skip="skip + 1"
1067 ;; 1111 ;;
1068 2.1.3) 1112 2.1.3)
1069 skip=`grep -a ^offset= ${src} | awk '{print $3}'` 1113 skip=`grep -a ^offset= "${src}" | awk '{print $3}'`
1070 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"
1071 ;; 1120 ;;
1072 *) 1121 *)
1073 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."
1074 eerror "The version I detected was '${ver}'." 1123 eerror "The version I detected was '${ver}'."
1075 eerror "Please file a bug about the file ${shrtsrc} at" 1124 eerror "Please file a bug about the file ${shrtsrc} at"
1077 die "makeself version '${ver}' not supported" 1126 die "makeself version '${ver}' not supported"
1078 ;; 1127 ;;
1079 esac 1128 esac
1080 debug-print "Detected Makeself version ${ver} ... using ${skip} as offset" 1129 debug-print "Detected Makeself version ${ver} ... using ${skip} as offset"
1081 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
1082 1136
1083 # 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
1084 local tmpfile="`mymktemp ${T}`" 1138 local tmpfile="$(emktemp)"
1085 tail -n +${skip} ${src} 2>/dev/null | head -c 512 > ${tmpfile} 1139 eval ${exe} 2>/dev/null | head -c 512 > "${tmpfile}"
1086 local filetype="`file -b ${tmpfile}`" 1140 local filetype="$(file -b "${tmpfile}")"
1087 case ${filetype} in 1141 case ${filetype} in
1088 *tar\ archive) 1142 *tar\ archive)
1089 tail -n +${skip} ${src} | tar --no-same-owner -xf - 1143 eval ${exe} | tar --no-same-owner -xf -
1090 ;; 1144 ;;
1091 bzip2*) 1145 bzip2*)
1092 tail -n +${skip} ${src} | bzip2 -dc | tar --no-same-owner -xf - 1146 eval ${exe} | bzip2 -dc | tar --no-same-owner -xf -
1093 ;; 1147 ;;
1094 gzip*) 1148 gzip*)
1095 tail -n +${skip} ${src} | tar --no-same-owner -xzf - 1149 eval ${exe} | tar --no-same-owner -xzf -
1096 ;; 1150 ;;
1097 compress*) 1151 compress*)
1098 tail -n +${skip} ${src} | gunzip | tar --no-same-owner -xf - 1152 eval ${exe} | gunzip | tar --no-same-owner -xf -
1099 ;; 1153 ;;
1100 *) 1154 *)
1101 eerror "Unknown filetype \"${filetype}\" ?" 1155 eerror "Unknown filetype \"${filetype}\" ?"
1102 false 1156 false
1103 ;; 1157 ;;
1136 return 0 1190 return 0
1137 fi 1191 fi
1138 done 1192 done
1139 set +o noglob; set -$shopts #reset old shell opts 1193 set +o noglob; set -$shopts #reset old shell opts
1140 1194
1141 local licmsg="`mymktemp ${T}`" 1195 local licmsg="$(emktemp)"
1142 cat << EOF > ${licmsg} 1196 cat << EOF > ${licmsg}
1143********************************************************** 1197**********************************************************
1144The following license outlines the terms of use of this 1198The following license outlines the terms of use of this
1145package. You MUST accept this license for installation to 1199package. You MUST accept this license for installation to
1146continue. When you are done viewing, hit 'q'. If you 1200continue. When you are done viewing, hit 'q'. If you
1374 1428
1375 ls=" ${ls} " 1429 ls=" ${ls} "
1376 newls="" 1430 newls=""
1377 for f in ${LINGUAS} ; do 1431 for f in ${LINGUAS} ; do
1378 if [ "${ls/ ${f} /}" != "${ls}" ] ; then 1432 if [ "${ls/ ${f} /}" != "${ls}" ] ; then
1379 nl="${newls} ${f}" 1433 newls="${newls} ${f}"
1380 else 1434 else
1381 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA" 1435 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA"
1382 fi 1436 fi
1383 done 1437 done
1384 if [ -z "${newls}" ] ; then 1438 if [ -z "${newls}" ] ; then
1385 unset LINGUAS 1439 unset LINGUAS
1386 else 1440 else
1387 export LINGUAS="${newls}" 1441 export LINGUAS="${newls}"
1388 fi 1442 fi
1389} 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.106  
changed lines
  Added in v.1.123

  ViewVC Help
Powered by ViewVC 1.1.20