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

Diff of /eclass/eutils.eclass

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

Revision 1.100 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.100 2004/09/12 07:16:45 mr_bones_ 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.
49# to assume all libraries will end up in lib. Replace any (sane) instances 49# to assume all libraries will end up in lib. Replace any (sane) instances
50# where lib is named directly with $(get_libdir) if possible. 50# where lib is named directly with $(get_libdir) if possible.
51# 51#
52# Travis Tilley <lv@gentoo.org> (24 Aug 2004) 52# Travis Tilley <lv@gentoo.org> (24 Aug 2004)
53get_libdir() { 53get_libdir() {
54 LIBDIR_TEST=$(type econf)
54 if [ ! -z "${CONF_LIBDIR_OVERRIDE}" ] ; then 55 if [ ! -z "${CONF_LIBDIR_OVERRIDE}" ] ; then
55 # if there is an override, we want to use that... always. 56 # if there is an override, we want to use that... always.
56 CONF_LIBDIR="${CONF_LIBDIR_OVERRIDE}" 57 CONF_LIBDIR="${CONF_LIBDIR_OVERRIDE}"
58 # We don't need to know the verison of portage. We only need to know
59 # if there is support for CONF_LIBDIR in econf and co.
60 # Danny van Dyk <kugelfang@gentoo.org> 2004/17/09
57 elif portageq has_version / '<sys-apps/portage-2.0.51_pre20' ; then 61 #elif portageq has_version / '<sys-apps/portage-2.0.51_pre20' ; then
58 # and if there isnt an override, and we're using a version of 62 # # and if there isnt an override, and we're using a version of
59 # portage without CONF_LIBDIR support, force the use of lib. dolib 63 # # portage without CONF_LIBDIR support, force the use of lib. dolib
60 # and friends from portage 2.0.50 wont be too happy otherwise. 64 # # and friends from portage 2.0.50 wont be too happy otherwise.
65 # CONF_LIBDIR="lib"
66 #fi
67 elif [ "${LIBDIR_TEST/CONF_LIBDIR}" == "${LIBDIR_TEST}" ]; then # we don't have CONF_LIBDIR support
68 # will be <portage-2.0.51_pre20
61 CONF_LIBDIR="lib" 69 CONF_LIBDIR="lib"
62 fi 70 fi
63 # and of course, default to lib if CONF_LIBDIR isnt set 71 # and of course, default to lib if CONF_LIBDIR isnt set
64 echo ${CONF_LIBDIR:=lib} 72 echo ${CONF_LIBDIR:=lib}
73 unset LIBDIR_TEST
65} 74}
75
76
77get_multilibdir() {
78 echo ${CONF_MULTILIBDIR:=lib32}
79}
80
66 81
67# Sometimes you need to override the value returned by get_libdir. A good 82# Sometimes you need to override the value returned by get_libdir. A good
68# example of this is xorg-x11, where lib32 isnt a supported configuration, 83# example of this is xorg-x11, where lib32 isnt a supported configuration,
69# and where lib64 -must- be used on amd64 (for applications that need lib 84# and where lib64 -must- be used on amd64 (for applications that need lib
70# to be 32bit, such as adobe acrobat). Note that this override also bypasses 85# to be 32bit, such as adobe acrobat). Note that this override also bypasses
97# to point to the latest version of the library present. 112# to point to the latest version of the library present.
98# 113#
99# <azarah@gentoo.org> (26 Oct 2002) 114# <azarah@gentoo.org> (26 Oct 2002)
100# 115#
101gen_usr_ldscript() { 116gen_usr_ldscript() {
117 local libdir="$(get_libdir)"
102 # Just make sure it exists 118 # Just make sure it exists
103 dodir /usr/$(get_libdir) 119 dodir /usr/${libdir}
104 120
105 cat > ${D}/usr/$(get_libdir)/$1 <<"END_LDSCRIPT" 121 cat > "${D}/usr/${libdir}/${1}" << END_LDSCRIPT
106/* GNU ld script 122/* GNU ld script
107 Because Gentoo have critical dynamic libraries 123 Because Gentoo have critical dynamic libraries
108 in /lib, and the static versions in /usr/lib, we 124 in /lib, and the static versions in /usr/lib, we
109 need to have a "fake" dynamic lib in /usr/lib, 125 need to have a "fake" dynamic lib in /usr/lib,
110 otherwise we run into linking problems. 126 otherwise we run into linking problems.
111 See bug #4411 on http://bugs.gentoo.org/ for 127 See bug #4411 on http://bugs.gentoo.org/ for
112 more info. */ 128 more info. */
129GROUP ( /${libdir}/${1} )
113END_LDSCRIPT 130END_LDSCRIPT
114 131 fperms a+x "/usr/${libdir}/${1}"
115 echo "GROUP ( /$(get_libdir)/libxxx )" >> ${D}/usr/$(get_libdir)/$1
116 dosed "s:libxxx:$1:" /usr/$(get_libdir)/$1
117
118 return 0
119} 132}
120 133
121# 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 $*
122# 135#
123# <azarah@gentoo.org> (11 Nov 2002) 136# <azarah@gentoo.org> (11 Nov 2002)
208 local x="" 221 local x=""
209 222
210 if [ "$#" -gt 1 ] 223 if [ "$#" -gt 1 ]
211 then 224 then
212 local m="" 225 local m=""
213 einfo "${#} patches to apply..." 226 einfo "${#} patches to apply ..."
214 for m in "$@" ; do 227 for m in "$@" ; do
215 epatch "${m}" 228 epatch "${m}"
216 done 229 done
217 return 0 230 return 0
218 fi 231 fi
232 local EPATCH_SOURCE="$1/*" 245 local EPATCH_SOURCE="$1/*"
233 else 246 else
234 local EPATCH_SOURCE="$1/*.${EPATCH_SUFFIX}" 247 local EPATCH_SOURCE="$1/*.${EPATCH_SUFFIX}"
235 fi 248 fi
236 else 249 else
237 if [ ! -d ${EPATCH_SOURCE} ] 250 if [ ! -d ${EPATCH_SOURCE} ] || [ -n "$1" ]
238 then 251 then
239 if [ -n "$1" -a "${EPATCH_SOURCE}" = "${WORKDIR}/patch" ] 252 if [ -n "$1" -a "${EPATCH_SOURCE}" = "${WORKDIR}/patch" ]
240 then 253 then
241 EPATCH_SOURCE="$1" 254 EPATCH_SOURCE="$1"
242 fi 255 fi
271 ;; 284 ;;
272 esac 285 esac
273 286
274 if [ "${SINGLE_PATCH}" = "no" ] 287 if [ "${SINGLE_PATCH}" = "no" ]
275 then 288 then
276 einfo "Applying various patches (bugfixes/updates)..." 289 einfo "Applying various patches (bugfixes/updates) ..."
277 fi 290 fi
278 for x in ${EPATCH_SOURCE} 291 for x in ${EPATCH_SOURCE}
279 do 292 do
280 # New ARCH dependant patch naming scheme... 293 # New ARCH dependant patch naming scheme ...
281 # 294 #
282 # ???_arch_foo.patch 295 # ???_arch_foo.patch
283 # 296 #
284 if [ -f ${x} ] && \ 297 if [ -f ${x} ] && \
285 ([ "${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}" ] || \
300 then 313 then
301 if [ -n "${EPATCH_SINGLE_MSG}" ] 314 if [ -n "${EPATCH_SINGLE_MSG}" ]
302 then 315 then
303 einfo "${EPATCH_SINGLE_MSG}" 316 einfo "${EPATCH_SINGLE_MSG}"
304 else 317 else
305 einfo "Applying ${x##*/}..." 318 einfo "Applying ${x##*/} ..."
306 fi 319 fi
307 else 320 else
308 einfo " ${x##*/}..." 321 einfo " ${x##*/} ..."
309 fi 322 fi
310 323
311 echo "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 324 echo "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
312 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 325 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
313 326
346 359
347 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
348 then 361 then
349 draw_line "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 362 draw_line "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
350 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 363 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
351 echo "ACTUALLY APPLYING ${x##*/}..." >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 364 echo "ACTUALLY APPLYING ${x##*/} ..." >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
352 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 365 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
353 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 366 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
354 367
355 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
356 369
425 438
426 return 1; 439 return 1;
427 } 440 }
428 END 441 END
429 442
430 einfon "Checking for _CS_GNU_LIBPTHREAD_VERSION support in glibc ... " 443 einfon "Checking for _CS_GNU_LIBPTHREAD_VERSION support in glibc ..."
431 if gcc -o ${T}/nptl ${T}/test-nptl.c &> /dev/null 444 if gcc -o ${T}/nptl ${T}/test-nptl.c &> /dev/null
432 then 445 then
433 echo "yes" 446 echo "yes"
434 einfon "Checking what PTHREADS implementation we have ... " 447 einfon "Checking what PTHREADS implementation we have ..."
435 if ${T}/nptl 448 if ${T}/nptl
436 then 449 then
437 return 0 450 return 0
438 else 451 else
439 return 1 452 return 1
515 528
516 if [ -n "${ADMINPARAM}" ] 529 if [ -n "${ADMINPARAM}" ]
517 then 530 then
518 if [ "${jobs}" -gt "${ADMINPARAM}" ] 531 if [ "${jobs}" -gt "${ADMINPARAM}" ]
519 then 532 then
520 einfo "Setting make jobs to \"-j${ADMINPARAM}\" to ensure successful merge..." 533 einfo "Setting make jobs to \"-j${ADMINPARAM}\" to ensure successful merge ..."
521 export MAKEOPTS="${MAKEOPTS} -j${ADMINPARAM}" 534 export MAKEOPTS="${MAKEOPTS} -j${ADMINPARAM}"
522 else 535 else
523 einfo "Setting make jobs to \"-j${jobs}\" to ensure successful merge..." 536 einfo "Setting make jobs to \"-j${jobs}\" to ensure successful merge ..."
524 export MAKEOPTS="${MAKEOPTS} -j${jobs}" 537 export MAKEOPTS="${MAKEOPTS} -j${jobs}"
525 fi 538 fi
526 fi 539 fi
527} 540}
528 541
529# Cheap replacement for when debianutils (and thus mktemp) 542# Cheap replacement for when debianutils (and thus mktemp)
530# does not exist on the users system 543# does not exist on the users system
531# vapier@gentoo.org 544# vapier@gentoo.org
532# 545#
533# Takes just 1 parameter (the directory to create tmpfile in) 546# Takes just 1 optional parameter (the directory to create tmpfile in)
534mymktemp() { 547emktemp() {
548 local exe="touch"
549 [ "$1" == "-d" ] && exe="mkdir" && shift
535 local topdir="$1" 550 local topdir="$1"
536 551
537 [ -z "${topdir}" ] && topdir=/tmp 552 if [ -z "${topdir}" ]
538 if [ "`which mktemp 2>/dev/null`" ]
539 then 553 then
540 mktemp -p ${topdir} 554 [ -z "${T}" ] \
541 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
542 local tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}" 563 tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}"
543 touch ${tmp} 564 done
565 ${exe} "${tmp}"
544 echo ${tmp} 566 echo "${tmp}"
567 else
568 [ "${exe}" == "touch" ] \
569 && exe="-p" \
570 || exe="-d"
571 mktemp ${exe} "${topdir}"
545 fi 572 fi
546} 573}
547 574
548# Small wrapper for getent (Linux) and nidump (Mac OS X) 575# Small wrapper for getent (Linux), nidump (Mac OS X),
549# used in enewuser()/enewgroup() 576# and pw (FreeBSD) used in enewuser()/enewgroup()
550# 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>
551# 579#
552# egetent(database, key) 580# egetent(database, key)
553egetent() { 581egetent() {
554 if [ "${ARCH}" == "macos" ] ; then 582 if use ppc-macos ; then
555 case "$2" in 583 case "$2" in
556 *[!0-9]*) # Non numeric 584 *[!0-9]*) # Non numeric
557 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }" 585 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
558 ;; 586 ;;
559 *) # Numeric 587 *) # Numeric
560 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }" 588 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
561 ;; 589 ;;
562 esac 590 esac
591 elif useq x86-fbsd ; then
592 local action
593 if [ "$1" == "passwd" ]
594 then
595 action="user"
563 else 596 else
597 action="group"
598 fi
599 pw show "${action}" "$2" -q
600 else
601 which nscd >& /dev/null && nscd -i "$1"
564 getent $1 $2 602 getent "$1" "$2"
565 fi 603 fi
566} 604}
567 605
568# Simplify/standardize adding users to the system 606# Simplify/standardize adding users to the system
569# vapier@gentoo.org 607# vapier@gentoo.org
615 euid="next" 653 euid="next"
616 fi 654 fi
617 if [ "${euid}" == "next" ] 655 if [ "${euid}" == "next" ]
618 then 656 then
619 local pwrange 657 local pwrange
620 if [ "${ARCH}" == "macos" ] ; then 658 if [ "${USERLAND}" == "BSD" ] ; then
621 pwrange="`jot 898 101`" 659 pwrange="`jot 898 101`"
622 else 660 else
623 pwrange="`seq 101 999`" 661 pwrange="`seq 101 999`"
624 fi 662 fi
625 for euid in ${pwrange} ; do 663 for euid in ${pwrange} ; do
637 then 675 then
638 eerror "A shell was specified but it does not exist !" 676 eerror "A shell was specified but it does not exist !"
639 die "${eshell} does not exist" 677 die "${eshell} does not exist"
640 fi 678 fi
641 else 679 else
680 if [ "${USERLAND}" == "BSD" ]
681 then
682 eshell="/usr/bin/false"
683 else
642 eshell="/bin/false" 684 eshell="/bin/false"
685 fi
643 fi 686 fi
644 einfo " - Shell: ${eshell}" 687 einfo " - Shell: ${eshell}"
645 opts="${opts} -s ${eshell}" 688 opts="${opts} -s ${eshell}"
646 689
647 # handle homedir 690 # handle homedir
656 # handle groups 699 # handle groups
657 local egroups="$1"; shift 700 local egroups="$1"; shift
658 if [ ! -z "${egroups}" ] 701 if [ ! -z "${egroups}" ]
659 then 702 then
660 local oldifs="${IFS}" 703 local oldifs="${IFS}"
704 local defgroup="" exgroups=""
705
661 export IFS="," 706 export IFS=","
662 for g in ${egroups} 707 for g in ${egroups}
663 do 708 do
709 export IFS="${oldifs}"
664 if [ -z "`egetent group \"${g}\"`" ] 710 if [ -z "`egetent group \"${g}\"`" ]
665 then 711 then
666 eerror "You must add group ${g} to the system first" 712 eerror "You must add group ${g} to the system first"
667 die "${g} is not a valid GID" 713 die "${g} is not a valid GID"
668 fi 714 fi
715 if [ -z "${defgroup}" ]
716 then
717 defgroup="${g}"
718 else
719 exgroups="${exgroups},${g}"
720 fi
721 export IFS=","
669 done 722 done
670 export IFS="${oldifs}" 723 export IFS="${oldifs}"
724
671 opts="${opts} -g ${egroups}" 725 opts="${opts} -g ${defgroup}"
726 if [ ! -z "${exgroups}" ]
727 then
728 opts="${opts} -G ${exgroups:1}"
729 fi
672 else 730 else
673 egroups="(none)" 731 egroups="(none)"
674 fi 732 fi
675 einfo " - Groups: ${egroups}" 733 einfo " - Groups: ${egroups}"
676 734
677 # handle extra and add the user 735 # handle extra and add the user
678 local eextra="$@" 736 local eextra="$@"
679 local oldsandbox="${SANDBOX_ON}" 737 local oldsandbox="${SANDBOX_ON}"
680 export SANDBOX_ON="0" 738 export SANDBOX_ON="0"
681 if [ "${ARCH}" == "macos" ]; 739 if use ppc-macos
682 then 740 then
683 ### Make the user 741 ### Make the user
684 if [ -z "${eextra}" ] 742 if [ -z "${eextra}" ]
685 then 743 then
686 dscl . create /users/${euser} uid ${euid} 744 dscl . create /users/${euser} uid ${euid}
687 dscl . create /users/${euser} shell ${eshell} 745 dscl . create /users/${euser} shell ${eshell}
688 dscl . create /users/${euser} home ${ehome} 746 dscl . create /users/${euser} home ${ehome}
689 dscl . create /users/${euser} realname "added by portage for ${PN}" 747 dscl . create /users/${euser} realname "added by portage for ${PN}"
690 ### Add the user to the groups specified 748 ### Add the user to the groups specified
749 local oldifs="${IFS}"
750 export IFS=","
691 for g in ${egroups} 751 for g in ${egroups}
692 do 752 do
693 dscl . merge /groups/${g} users ${euser} 753 dscl . merge /groups/${g} users ${euser}
694 done 754 done
755 export IFS="${oldifs}"
695 else 756 else
696 einfo "Extra options are not supported on macos yet" 757 einfo "Extra options are not supported on macos yet"
697 einfo "Please report the ebuild along with the info below" 758 einfo "Please report the ebuild along with the info below"
698 einfo "eextra: ${eextra}" 759 einfo "eextra: ${eextra}"
699 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"
700 fi 772 fi
701 else 773 else
702 if [ -z "${eextra}" ] 774 if [ -z "${eextra}" ]
703 then 775 then
704 useradd ${opts} ${euser} \ 776 useradd ${opts} ${euser} \
755 then 827 then
756 if [ "${egid}" -gt 0 ] 828 if [ "${egid}" -gt 0 ]
757 then 829 then
758 if [ -z "`egetent group ${egid}`" ] 830 if [ -z "`egetent group ${egid}`" ]
759 then 831 then
760 if [ "${ARCH}" == "macos" ] ; then 832 if use ppc-macos ; then
761 opts="${opts} ${egid}" 833 opts="${opts} ${egid}"
762 else 834 else
763 opts="${opts} -g ${egid}" 835 opts="${opts} -g ${egid}"
764 fi 836 fi
765 else 837 else
779 opts="${opts} ${eextra}" 851 opts="${opts} ${eextra}"
780 852
781 # add the group 853 # add the group
782 local oldsandbox="${SANDBOX_ON}" 854 local oldsandbox="${SANDBOX_ON}"
783 export SANDBOX_ON="0" 855 export SANDBOX_ON="0"
784 if [ "${ARCH}" == "macos" ]; 856 if use ppc-macos
785 then 857 then
786 if [ ! -z "${eextra}" ]; 858 if [ ! -z "${eextra}" ];
787 then 859 then
788 einfo "Extra options are not supported on macos yet" 860 einfo "Extra options are not supported on macos yet"
789 einfo "Please report the ebuild along with the info below" 861 einfo "Please report the ebuild along with the info below"
798 [ -z "`egetent group ${egid}`" ] && break 870 [ -z "`egetent group ${egid}`" ] && break
799 done 871 done
800 esac 872 esac
801 dscl . create /groups/${egroup} gid ${egid} 873 dscl . create /groups/${egroup} gid ${egid}
802 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"
803 else 883 else
804 groupadd ${opts} ${egroup} || die "enewgroup failed" 884 groupadd ${opts} ${egroup} || die "enewgroup failed"
805 fi 885 fi
806 export SANDBOX_ON="${oldsandbox}" 886 export SANDBOX_ON="${oldsandbox}"
807} 887}
808 888
809# Simple script to replace 'dos2unix' binaries 889# Simple script to replace 'dos2unix' binaries
810# vapier@gentoo.org 890# vapier@gentoo.org
811# 891#
812# edos2unix(file, <more files>...) 892# edos2unix(file, <more files> ...)
813edos2unix() { 893edos2unix() {
814 for f in "$@" 894 for f in "$@"
815 do 895 do
816 cp "${f}" ${T}/edos2unix 896 cp "${f}" ${T}/edos2unix
817 sed 's/\r$//' ${T}/edos2unix > "${f}" 897 sed 's/\r$//' ${T}/edos2unix > "${f}"
819} 899}
820 900
821# Make a desktop file ! 901# Make a desktop file !
822# Great for making those icons in kde/gnome startmenu ! 902# Great for making those icons in kde/gnome startmenu !
823# Amaze your friends ! Get the women ! Join today ! 903# Amaze your friends ! Get the women ! Join today !
824# gnome2 /usr/share/applications
825# gnome1 /usr/share/gnome/apps/
826# KDE ${KDEDIR}/share/applnk /usr/share/applnk
827# 904#
828# make_desktop_entry(<binary>, [name], [icon], [type], [path]) 905# make_desktop_entry(<binary>, [name], [icon], [type], [path])
829# 906#
830# binary: what binary does the app run with ? 907# binary: what binary does the app run with ?
831# name: the name that will show up in the menu 908# name: the name that will show up in the menu
832# icon: give your little like a pretty little icon ... 909# icon: give your little like a pretty little icon ...
833# this can be relative (to /usr/share/pixmaps) or 910# this can be relative (to /usr/share/pixmaps) or
834# a full path to an icon 911# a full path to an icon
835# type: what kind of application is this ? for categories: 912# type: what kind of application is this ? for categories:
836# http://www.freedesktop.org/standards/menu-spec/ 913# http://www.freedesktop.org/standards/menu-spec/
837# path: if your app needs to startup in a specific dir 914# path: if your app needs to startup in a specific dir
838make_desktop_entry() { 915make_desktop_entry() {
839 [ -z "$1" ] && eerror "You must specify the executable" && return 1 916 [ -z "$1" ] && eerror "make_desktop_entry: You must specify the executable" && return 1
840 917
841 local exec="${1}" 918 local exec="${1}"
842 local name="${2:-${PN}}" 919 local name="${2:-${PN}}"
843 local icon="${3:-${PN}.png}" 920 local icon="${3:-${PN}.png}"
844 local type="${4}" 921 local type="${4}"
876Exec=${exec} 953Exec=${exec}
877Path=${path} 954Path=${path}
878Icon=${icon} 955Icon=${icon}
879Categories=Application;${type};" > "${desktop}" 956Categories=Application;${type};" > "${desktop}"
880 957
881 if [ -d "/usr/share/applications" ]
882 then
883 insinto /usr/share/applications 958 insinto /usr/share/applications
884 doins "${desktop}" 959 doins "${desktop}"
885 fi
886
887 #if [ -d "/usr/share/gnome/apps" ]
888 #then
889 # insinto /usr/share/gnome/apps/Games
890 # doins ${desktop}
891 #fi
892
893 #if [ ! -z "`ls /usr/kde/* 2>/dev/null`" ]
894 #then
895 # for ver in /usr/kde/*
896 # do
897 # insinto ${ver}/share/applnk/Games
898 # doins ${desktop}
899 # done
900 #fi
901
902 if [ -d "/usr/share/applnk" ]
903 then
904 insinto /usr/share/applnk/${subdir}
905 doins "${desktop}"
906 fi
907 960
908 return 0 961 return 0
909} 962}
910 963
911# for internal use only (unpack_pdv and unpack_makeself) 964# for internal use only (unpack_pdv and unpack_makeself)
960 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 1013 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
961 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"` 1014 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"`
962 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\"`
963 1016
964 # grab metadata for debug reasons 1017 # grab metadata for debug reasons
965 local metafile="`mymktemp ${T}`" 1018 local metafile="$(emktemp)"
966 tail -c +$((${metaskip}+1)) ${src} > ${metafile} 1019 tail -c +$((${metaskip}+1)) ${src} > ${metafile}
967 1020
968 # rip out the final file name from the metadata 1021 # rip out the final file name from the metadata
969 local datafile="`tail -c +$((${metaskip}+1)) ${src} | strings | head -n 1`" 1022 local datafile="`tail -c +$((${metaskip}+1)) ${src} | strings | head -n 1`"
970 datafile="`basename ${datafile}`" 1023 datafile="`basename ${datafile}`"
971 1024
972 # now lets uncompress/untar the file if need be 1025 # now lets uncompress/untar the file if need be
973 local tmpfile="`mymktemp ${T}`" 1026 local tmpfile="$(emktemp)"
974 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}
975 1028
976 local iscompressed="`file -b ${tmpfile}`" 1029 local iscompressed="`file -b ${tmpfile}`"
977 if [ "${iscompressed:0:8}" == "compress" ] ; then 1030 if [ "${iscompressed:0:8}" == "compress" ] ; then
978 iscompressed=1 1031 iscompressed=1
1023# Unpack those pesky makeself generated files ... 1076# Unpack those pesky makeself generated files ...
1024# They're shell scripts with the binary package tagged onto 1077# They're shell scripts with the binary package tagged onto
1025# the end of the archive. Loki utilized the format as does 1078# the end of the archive. Loki utilized the format as does
1026# many other game companies. 1079# many other game companies.
1027# 1080#
1028# Usage: unpack_makeself [file to unpack] [offset] 1081# Usage: unpack_makeself [file to unpack] [offset] [tail|dd]
1029# - If the file is not specified then unpack will utilize ${A}. 1082# - If the file is not specified then unpack will utilize ${A}.
1030# - 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
1031# the proper offset from the script itself. 1084# the proper offset from the script itself.
1032unpack_makeself() { 1085unpack_makeself() {
1033 local src="`find_unpackable_file $1`" 1086 local src="$(find_unpackable_file "$1")"
1034 local skip="$2" 1087 local skip="$2"
1088 local exe="$3"
1035 1089
1036 local shrtsrc="`basename ${src}`" 1090 local shrtsrc="$(basename "${src}")"
1037 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 1091 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
1038 if [ -z "${skip}" ] 1092 if [ -z "${skip}" ]
1039 then 1093 then
1040 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`" 1094 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`"
1041 local skip=0 1095 local skip=0
1096 exe=tail
1042 case ${ver} in 1097 case ${ver} in
1043 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
1044 skip=`grep -a ^skip= ${src} | cut -d= -f2` 1099 skip=$(grep -a ^skip= "${src}" | cut -d= -f2)
1045 ;; 1100 ;;
1046 2.0|2.0.1) 1101 2.0|2.0.1)
1047 skip=`grep -a ^$'\t'tail ${src} | awk '{print $2}' | cut -b2-` 1102 skip=$(grep -a ^$'\t'tail "${src}" | awk '{print $2}' | cut -b2-)
1048 ;; 1103 ;;
1049 2.1.1) 1104 2.1.1)
1050 skip=`grep -a ^offset= ${src} | awk '{print $2}' | cut -b2-` 1105 skip=$(grep -a ^offset= "${src}" | awk '{print $2}' | cut -b2-)
1051 let skip="skip + 1" 1106 let skip="skip + 1"
1052 ;; 1107 ;;
1053 2.1.2) 1108 2.1.2)
1054 skip=`grep -a ^offset= ${src} | awk '{print $3}' | head -n 1` 1109 skip=$(grep -a ^offset= "${src}" | awk '{print $3}' | head -n 1)
1055 let skip="skip + 1" 1110 let skip="skip + 1"
1056 ;; 1111 ;;
1057 2.1.3) 1112 2.1.3)
1058 skip=`grep -a ^offset= ${src} | awk '{print $3}'` 1113 skip=`grep -a ^offset= "${src}" | awk '{print $3}'`
1059 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"
1060 ;; 1120 ;;
1061 *) 1121 *)
1062 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."
1063 eerror "The version I detected was '${ver}'." 1123 eerror "The version I detected was '${ver}'."
1064 eerror "Please file a bug about the file ${shrtsrc} at" 1124 eerror "Please file a bug about the file ${shrtsrc} at"
1066 die "makeself version '${ver}' not supported" 1126 die "makeself version '${ver}' not supported"
1067 ;; 1127 ;;
1068 esac 1128 esac
1069 debug-print "Detected Makeself version ${ver} ... using ${skip} as offset" 1129 debug-print "Detected Makeself version ${ver} ... using ${skip} as offset"
1070 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
1071 1136
1072 # 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
1073 local tmpfile="`mymktemp ${T}`" 1138 local tmpfile="$(emktemp)"
1074 tail -n +${skip} ${src} 2>/dev/null | head -c 512 > ${tmpfile} 1139 eval ${exe} 2>/dev/null | head -c 512 > "${tmpfile}"
1075 local filetype="`file -b ${tmpfile}`" 1140 local filetype="$(file -b "${tmpfile}")"
1076 case ${filetype} in 1141 case ${filetype} in
1077 *tar\ archive) 1142 *tar\ archive)
1078 tail -n +${skip} ${src} | tar --no-same-owner -xf - 1143 eval ${exe} | tar --no-same-owner -xf -
1079 ;; 1144 ;;
1080 bzip2*) 1145 bzip2*)
1081 tail -n +${skip} ${src} | bzip2 -dc | tar --no-same-owner -xf - 1146 eval ${exe} | bzip2 -dc | tar --no-same-owner -xf -
1082 ;; 1147 ;;
1083 gzip*) 1148 gzip*)
1084 tail -n +${skip} ${src} | tar --no-same-owner -xzf - 1149 eval ${exe} | tar --no-same-owner -xzf -
1085 ;; 1150 ;;
1086 compress*) 1151 compress*)
1087 tail -n +${skip} ${src} | gunzip | tar --no-same-owner -xf - 1152 eval ${exe} | gunzip | tar --no-same-owner -xf -
1088 ;; 1153 ;;
1089 *) 1154 *)
1090 eerror "Unknown filetype \"${filetype}\" ?" 1155 eerror "Unknown filetype \"${filetype}\" ?"
1091 false 1156 false
1092 ;; 1157 ;;
1114 [ ! -f "${lic}" ] && die "Could not find requested license ${src}" 1179 [ ! -f "${lic}" ] && die "Could not find requested license ${src}"
1115 local l="`basename ${lic}`" 1180 local l="`basename ${lic}`"
1116 1181
1117 # here is where we check for the licenses the user already 1182 # here is where we check for the licenses the user already
1118 # accepted ... if we don't find a match, we make the user accept 1183 # accepted ... if we don't find a match, we make the user accept
1184 local shopts=$-
1119 local alic 1185 local alic
1186 set -o noglob #so that bash doesn't expand "*"
1120 for alic in "${ACCEPT_LICENSE}" ; do 1187 for alic in ${ACCEPT_LICENSE} ; do
1121 [ "${alic}" == "*" ] && return 0 1188 if [[ ${alic} == * || ${alic} == ${l} ]]; then
1122 [ "${alic}" == "${l}" ] && return 0 1189 set +o noglob; set -${shopts} #reset old shell opts
1190 return 0
1191 fi
1123 done 1192 done
1193 set +o noglob; set -$shopts #reset old shell opts
1124 1194
1125 local licmsg="`mymktemp ${T}`" 1195 local licmsg="$(emktemp)"
1126 cat << EOF > ${licmsg} 1196 cat << EOF > ${licmsg}
1127********************************************************** 1197**********************************************************
1128The following license outlines the terms of use of this 1198The following license outlines the terms of use of this
1129package. You MUST accept this license for installation to 1199package. You MUST accept this license for installation to
1130continue. When you are done viewing, hit 'q'. If you 1200continue. When you are done viewing, hit 'q'. If you
1358 1428
1359 ls=" ${ls} " 1429 ls=" ${ls} "
1360 newls="" 1430 newls=""
1361 for f in ${LINGUAS} ; do 1431 for f in ${LINGUAS} ; do
1362 if [ "${ls/ ${f} /}" != "${ls}" ] ; then 1432 if [ "${ls/ ${f} /}" != "${ls}" ] ; then
1363 nl="${newls} ${f}" 1433 newls="${newls} ${f}"
1364 else 1434 else
1365 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA" 1435 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA"
1366 fi 1436 fi
1367 done 1437 done
1368 if [ -z "${newls}" ] ; then 1438 if [ -z "${newls}" ] ; then
1369 unset LINGUAS 1439 unset LINGUAS
1370 else 1440 else
1371 export LINGUAS="${newls}" 1441 export LINGUAS="${newls}"
1372 fi 1442 fi
1373} 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.100  
changed lines
  Added in v.1.123

  ViewVC Help
Powered by ViewVC 1.1.20