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

Diff of /eclass/eutils.eclass

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

Revision 1.52 Revision 1.60
1# Copyright 1999-2003 Gentoo Technologies, Inc. 1# Copyright 1999-2003 Gentoo Technologies, Inc.
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.52 2003/09/13 19:24:21 vapier Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.60 2003/09/23 01:26:58 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.
88# Default directory where patches are located 88# Default directory where patches are located
89EPATCH_SOURCE="${WORKDIR}/patch" 89EPATCH_SOURCE="${WORKDIR}/patch"
90# Default extension for patches 90# Default extension for patches
91EPATCH_SUFFIX="patch.bz2" 91EPATCH_SUFFIX="patch.bz2"
92# Default options for patch 92# Default options for patch
93# Set -g0 to keep RCS, ClearCase, Perforce and SCCS happy. Bug #24571
93EPATCH_OPTS="" 94EPATCH_OPTS="-g0"
94# List of patches not to apply. Not this is only file names, 95# List of patches not to apply. Not this is only file names,
95# and not the full path .. 96# and not the full path ..
96EPATCH_EXCLUDE="" 97EPATCH_EXCLUDE=""
97# Change the printed message for a single patch. 98# Change the printed message for a single patch.
98EPATCH_SINGLE_MSG="" 99EPATCH_SINGLE_MSG=""
401 fi 402 fi
402 403
403 export MAKEOPTS="`echo ${MAKEOPTS} | sed -e 's:-j *[0-9]*::g'`" 404 export MAKEOPTS="`echo ${MAKEOPTS} | sed -e 's:-j *[0-9]*::g'`"
404 405
405 if [ "${ARCH}" = "amd64" -o "${ARCH}" = "x86" -o "${ARCH}" = "hppa" -o \ 406 if [ "${ARCH}" = "amd64" -o "${ARCH}" = "x86" -o "${ARCH}" = "hppa" -o \
406 "${ARCH}" = "arm" -o "${ARCH}" = "mips" ] 407 "${ARCH}" = "arm" -o "${ARCH}" = "mips" -o "${ARCH}" = "ia64" ]
407 then 408 then
408 # these archs will always have "[Pp]rocessor" 409 # these archs will always have "[Pp]rocessor"
409 jobs="$((`grep -c ^[Pp]rocessor /proc/cpuinfo` * 2))" 410 jobs="$((`grep -c ^[Pp]rocessor /proc/cpuinfo` * 2))"
410 411
411 elif [ "${ARCH}" = "sparc" -o "${ARCH}" = "sparc64" ] 412 elif [ "${ARCH}" = "sparc" -o "${ARCH}" = "sparc64" ]
460# do not exist on the users system 461# do not exist on the users system
461# vapier@gentoo.org 462# vapier@gentoo.org
462# 463#
463# Takes just 1 parameter (the directory to create tmpfile in) 464# Takes just 1 parameter (the directory to create tmpfile in)
464mymktemp() { 465mymktemp() {
465 local topdir=$1 466 local topdir="$1"
467
466 [ -z "${topdir}" ] && topdir=/tmp 468 [ -z "${topdir}" ] && topdir=/tmp
467 if [ `which mktemp 2>/dev/null` ] ; then 469 if [ "`which mktemp 2>/dev/null`" ]
470 then
468 mktemp -p ${topdir} 471 mktemp -p ${topdir}
469 else 472 else
470 local tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}" 473 local tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}"
471 touch ${tmp} 474 touch ${tmp}
472 echo ${tmp} 475 echo ${tmp}
487# groups: none 490# groups: none
488# extra: comment of 'added by portage for ${PN}' 491# extra: comment of 'added by portage for ${PN}'
489enewuser() { 492enewuser() {
490 # get the username 493 # get the username
491 local euser="$1"; shift 494 local euser="$1"; shift
492 if [ -z "${euser}" ] ; then 495 if [ -z "${euser}" ]
496 then
493 eerror "No username specified !" 497 eerror "No username specified !"
494 die "Cannot call enewuser without a username" 498 die "Cannot call enewuser without a username"
495 fi 499 fi
496 500
497 # setup a file for testing usernames/groups 501 # setup a file for testing usernames/groups
498 local tmpfile="`mymktemp ${T}`" 502 local tmpfile="`mymktemp ${T}`"
499 chown ${euser} ${tmpfile} >& /dev/null 503 chown ${euser} ${tmpfile} >& /dev/null
500 local realuser="`ls -l ${tmpfile} | awk '{print $3}'`" 504 local realuser="`ls -l ${tmpfile} | awk '{print $3}'`"
501 505
502 # see if user already exists 506 # see if user already exists
503 if [ "${euser}" == "${realuser}" ] ; then 507 if [ "${euser}" == "${realuser}" ]
508 then
504 return 0 509 return 0
505 fi 510 fi
506 einfo "Adding user '${euser}' to your system ..." 511 einfo "Adding user '${euser}' to your system ..."
507 512
508 # options to pass to useradd 513 # options to pass to useradd
509 local opts="" 514 local opts=
510 515
511 # handle uid 516 # handle uid
512 local euid="$1"; shift 517 local euid="$1"; shift
513 if [ ! -z "${euid}" ] && [ "${euid}" != "-1" ] ; then 518 if [ ! -z "${euid}" ] && [ "${euid}" != "-1" ]
519 then
514 if [ ${euid} -gt 0 ] ; then 520 if [ "${euid}" -gt 0 ]
521 then
515 opts="${opts} -u ${euid}" 522 opts="${opts} -u ${euid}"
516 else 523 else
517 eerror "Userid given but is not greater than 0 !" 524 eerror "Userid given but is not greater than 0 !"
518 die "${euid} is not a valid UID" 525 die "${euid} is not a valid UID"
519 fi 526 fi
522 fi 529 fi
523 einfo " - Userid: ${euid}" 530 einfo " - Userid: ${euid}"
524 531
525 # handle shell 532 # handle shell
526 local eshell="$1"; shift 533 local eshell="$1"; shift
527 if [ ! -z "${eshell}" ] ; then 534 if [ ! -z "${eshell}" ]
535 then
528 if [ ! -e ${eshell} ] ; then 536 if [ ! -e "${eshell}" ]
537 then
529 eerror "A shell was specified but it does not exist !" 538 eerror "A shell was specified but it does not exist !"
530 die "${eshell} does not exist" 539 die "${eshell} does not exist"
531 fi 540 fi
532 else 541 else
533 eshell=/bin/false 542 eshell="/bin/false"
534 fi 543 fi
535 einfo " - Shell: ${eshell}" 544 einfo " - Shell: ${eshell}"
536 opts="${opts} -s ${eshell}" 545 opts="${opts} -s ${eshell}"
537 546
538 # handle homedir 547 # handle homedir
539 local ehome="$1"; shift 548 local ehome="$1"; shift
540 if [ -z "${ehome}" ] ; then 549 if [ -z "${ehome}" ]
550 then
541 ehome=/dev/null 551 ehome="/dev/null"
542 fi 552 fi
543 einfo " - Home: ${ehome}" 553 einfo " - Home: ${ehome}"
544 opts="${opts} -d ${ehome}" 554 opts="${opts} -d ${ehome}"
545 555
546 # handle groups 556 # handle groups
547 local egroups="$1"; shift 557 local egroups="$1"; shift
548 if [ ! -z "${egroups}" ] ; then 558 if [ ! -z "${egroups}" ]
559 then
549 local realgroup 560 local realgroup=
550 local oldifs="${IFS}" 561 local oldifs="${IFS}"
551 export IFS="," 562 export IFS=","
552 for g in ${egroups} ; do 563 for g in ${egroups}
564 do
553 chgrp ${g} ${tmpfile} >& /dev/null 565 chgrp ${g} ${tmpfile} >& /dev/null
554 realgroup="`ls -l ${tmpfile} | awk '{print $4}'`" 566 realgroup="`ls -l ${tmpfile} | awk '{print $4}'`"
555 if [ "${g}" != "${realgroup}" ] ; then 567 if [ "${g}" != "${realgroup}" ]
568 then
556 eerror "You must add ${g} to the system first" 569 eerror "You must add ${g} to the system first"
557 die "${g} is not a valid GID" 570 die "${g} is not a valid GID"
558 fi 571 fi
559 done 572 done
560 export IFS="${oldifs}" 573 export IFS="${oldifs}"
564 fi 577 fi
565 einfo " - Groups: ${egroups}" 578 einfo " - Groups: ${egroups}"
566 579
567 # handle extra and add the user 580 # handle extra and add the user
568 local eextra="$@" 581 local eextra="$@"
569 local oldsandbox=${SANDBOX_ON} 582 local oldsandbox="${SANDBOX_ON}"
570 export SANDBOX_ON="0" 583 export SANDBOX_ON="0"
571 if [ -z "${eextra}" ] ; then 584 if [ -z "${eextra}" ]
585 then
572 useradd ${opts} ${euser} \ 586 useradd ${opts} ${euser} \
573 -c "added by portage for ${PN}" \ 587 -c "added by portage for ${PN}" \
574 || die "enewuser failed" 588 || die "enewuser failed"
575 else 589 else
576 einfo " - Extra: ${eextra}" 590 einfo " - Extra: ${eextra}"
577 useradd ${opts} ${euser} ${eextra} \ 591 useradd ${opts} ${euser} ${eextra} \
578 || die "enewuser failed" 592 || die "enewuser failed"
579 fi 593 fi
580 export SANDBOX_ON="${oldsandbox}" 594 export SANDBOX_ON="${oldsandbox}"
581 595
582 if [ ! -e ${ehome} ] && [ ! -e ${D}/${ehome} ] ; then 596 if [ ! -e "${ehome}" ] && [ ! -e "${D}/${ehome}" ]
597 then
583 einfo " - Creating ${ehome} in ${D}" 598 einfo " - Creating ${ehome} in ${D}"
584 dodir ${ehome} 599 dodir ${ehome}
585 fowners ${euser} ${ehome} 600 fowners ${euser} ${ehome}
586 fperms 755 ${ehome} 601 fperms 755 ${ehome}
587 fi 602 fi
597# gid: next available (see groupadd(8)) 612# gid: next available (see groupadd(8))
598# extra: none 613# extra: none
599enewgroup() { 614enewgroup() {
600 # get the group 615 # get the group
601 local egroup="$1"; shift 616 local egroup="$1"; shift
602 if [ -z "${egroup}" ] ; then 617 if [ -z "${egroup}" ]
618 then
603 eerror "No group specified !" 619 eerror "No group specified !"
604 die "Cannot call enewgroup without a group" 620 die "Cannot call enewgroup without a group"
605 fi 621 fi
606 622
607 # setup a file for testing groupname 623 # setup a file for testing groupname
608 local tmpfile="`mymktemp ${T}`" 624 local tmpfile="`mymktemp ${T}`"
609 chgrp ${egroup} ${tmpfile} >& /dev/null 625 chgrp ${egroup} ${tmpfile} >& /dev/null
610 local realgroup="`ls -l ${tmpfile} | awk '{print $4}'`" 626 local realgroup="`ls -l ${tmpfile} | awk '{print $4}'`"
611 627
612 # see if group already exists 628 # see if group already exists
613 if [ "${egroup}" == "${realgroup}" ] ; then 629 if [ "${egroup}" == "${realgroup}" ]
630 then
614 return 0 631 return 0
615 fi 632 fi
616 einfo "Adding group '${egroup}' to your system ..." 633 einfo "Adding group '${egroup}' to your system ..."
617 634
618 # options to pass to useradd 635 # options to pass to useradd
619 local opts="" 636 local opts=
620 637
621 # handle gid 638 # handle gid
622 local egid="$1"; shift 639 local egid="$1"; shift
623 if [ ! -z "${egid}" ] ; then 640 if [ ! -z "${egid}" ]
641 then
624 if [ ${egid} -gt 0 ] ; then 642 if [ "${egid}" -gt 0 ]
643 then
625 opts="${opts} -g ${egid}" 644 opts="${opts} -g ${egid}"
626 else 645 else
627 eerror "Groupid given but is not greater than 0 !" 646 eerror "Groupid given but is not greater than 0 !"
628 die "${egid} is not a valid GID" 647 die "${egid} is not a valid GID"
629 fi 648 fi
635 # handle extra 654 # handle extra
636 local eextra="$@" 655 local eextra="$@"
637 opts="${opts} ${eextra}" 656 opts="${opts} ${eextra}"
638 657
639 # add the group 658 # add the group
640 local oldsandbox=${SANDBOX_ON} 659 local oldsandbox="${SANDBOX_ON}"
641 export SANDBOX_ON="0" 660 export SANDBOX_ON="0"
642 groupadd ${opts} ${egroup} || die "enewgroup failed" 661 groupadd ${opts} ${egroup} || die "enewgroup failed"
643 export SANDBOX_ON="${oldsandbox}" 662 export SANDBOX_ON="${oldsandbox}"
644} 663}
645 664
646# Simple script to replace 'dos2unix' binaries 665# Simple script to replace 'dos2unix' binaries
647# vapier@gentoo.org 666# vapier@gentoo.org
648# 667#
649# edos2unix(file, <more files>...) 668# edos2unix(file, <more files>...)
650edos2unix() { 669edos2unix() {
651 for f in $@ ; do 670 for f in $@
671 do
652 cp ${f} ${T}/edos2unix 672 cp ${f} ${T}/edos2unix
653 sed 's/\r$//' ${T}/edos2unix > ${f} 673 sed 's/\r$//' ${T}/edos2unix > ${f}
654 done 674 done
655} 675}
656 676
672# http://www.freedesktop.org/standards/menu/draft/menu-spec/menu-spec.html 692# http://www.freedesktop.org/standards/menu/draft/menu-spec/menu-spec.html
673# path: if your app needs to startup in a specific dir 693# path: if your app needs to startup in a specific dir
674make_desktop_entry() { 694make_desktop_entry() {
675 [ -z "$1" ] && eerror "You must specify the executable" && return 1 695 [ -z "$1" ] && eerror "You must specify the executable" && return 1
676 696
677 local exec=${1} 697 local exec="${1}"
678 local name=${2:-${PN}} 698 local name="${2:-${PN}}"
679 local icon=${3:-${PN}.png} 699 local icon="${3:-${PN}.png}"
680 local type=${4} 700 local type="${4}"
681 local path=${5:-${GAMES_PREFIX}} 701 local path="${5:-${GAMES_PREFIX}}"
682 if [ -z "${type}" ] ; then 702 if [ -z "${type}" ]
703 then
683 case ${CATEGORY} in 704 case ${CATEGORY} in
684 app-emulation) type=Emulator ;; 705 "app-emulation")
685 app-games) type=Game ;; 706 type=Emulator
686 *) type="" ;; 707 ;;
708 "games-"*)
709 type=Game
710 ;;
711 *)
712 type=
713 ;;
687 esac 714 esac
688 fi 715 fi
689 local desktop=${T}/${exec}.desktop 716 local desktop="${T}/${exec}.desktop"
690 717
691echo "[Desktop Entry] 718echo "[Desktop Entry]
692Encoding=UTF-8 719Encoding=UTF-8
693Version=0.9.2 720Version=0.9.2
694Name=${name} 721Name=${name}
697Exec=${exec} 724Exec=${exec}
698Path=${path} 725Path=${path}
699Icon=${icon} 726Icon=${icon}
700Categories=Application;${type};" > ${desktop} 727Categories=Application;${type};" > ${desktop}
701 728
702 if [ -d /usr/share/applications ] ; then 729 if [ -d "/usr/share/applications" ]
730 then
703 insinto /usr/share/applications 731 insinto /usr/share/applications
704 doins ${desktop} 732 doins ${desktop}
705 fi 733 fi
706 734
707 #if [ -d /usr/share/gnome/apps ] ; then 735 #if [ -d "/usr/share/gnome/apps" ]
736 #then
708 # insinto /usr/share/gnome/apps/Games 737 # insinto /usr/share/gnome/apps/Games
709 # doins ${desktop} 738 # doins ${desktop}
710 #fi 739 #fi
711 740
712 #if [ ! -z "`ls /usr/kde/* 2>/dev/null`" ] ; then 741 #if [ ! -z "`ls /usr/kde/* 2>/dev/null`" ]
742 #then
713 # for ver in /usr/kde/* ; do 743 # for ver in /usr/kde/*
744 # do
714 # insinto ${ver}/share/applnk/Games 745 # insinto ${ver}/share/applnk/Games
715 # doins ${desktop} 746 # doins ${desktop}
716 # done 747 # done
717 #fi 748 #fi
718 749
719 if [ -d /usr/share/applnk ] ; then 750 if [ -d "/usr/share/applnk" ]
751 then
720 insinto /usr/share/applnk/${type} 752 insinto /usr/share/applnk/${type}
721 doins ${desktop} 753 doins ${desktop}
722 fi 754 fi
723 755
724 return 0 756 return 0
748# writing the ebuild, it'll always work for the users, and if it doesn't, 780# writing the ebuild, it'll always work for the users, and if it doesn't,
749# then we'll fix it :-) 781# then we'll fix it :-)
750# - no support as yet for patches applying outside $S (and not directly in $WORKDIR). 782# - no support as yet for patches applying outside $S (and not directly in $WORKDIR).
751xpatch() { 783xpatch() {
752 784
753 debug-print-function $FUNCNAME $* 785 debug-print-function ${FUNCNAME} $*
754 786
755 local list="" 787 local list=
756 local list2="" 788 local list2=
757 declare -i plevel 789 declare -i plevel
758 790
759 # parse patch sources 791 # parse patch sources
760 for x in $*; do 792 for x in $*
793 do
761 debug-print "$FUNCNAME: parsing parameter $x" 794 debug-print "${FUNCNAME}: parsing parameter ${x}"
762 if [ -f "$x" ]; then 795 if [ -f "${x}" ]
796 then
763 list="$list $x" 797 list="${list} ${x}"
764 elif [ -d "$x" ]; then 798 elif [ -d "${x}" ]
799 then
765 # handles patchdirs like epatch() for now: no recursion. 800 # handles patchdirs like epatch() for now: no recursion.
766 # patches are sorted by filename, so with an xy_foo naming scheme you'll get the right order. 801 # patches are sorted by filename, so with an xy_foo naming scheme you'll get the right order.
767 # only patches with _$ARCH_ or _all_ in their filenames are applied. 802 # only patches with _$ARCH_ or _all_ in their filenames are applied.
768 for file in `ls -A $x`; do 803 for file in `ls -A ${x}`
804 do
769 debug-print "$FUNCNAME: parsing in subdir: file $file" 805 debug-print "${FUNCNAME}: parsing in subdir: file ${file}"
770 if [ -f "$x/$file" ] && [ "${file}" != "${file/_all_}" -o "${file}" != "${file/_$ARCH_}" ]; then 806 if [ -f "${x}/${file}" -a "${file}" != "${file/_all_}" -o \
807 "${file}" != "${file/_$ARCH_}" ]
808 then
771 list2="$list2 $x/$file" 809 list2="${list2} ${x}/${file}"
772 fi 810 fi
773 done 811 done
774 list="`echo $list2 | sort` $list" 812 list="`echo ${list2} | sort` ${list}"
775 else 813 else
776 die "Couldn't find $x" 814 die "Couldn't find ${x}"
777 fi 815 fi
778 done 816 done
779 817
780 debug-print "$FUNCNAME: final list of patches: $list" 818 debug-print "${FUNCNAME}: final list of patches: ${list}"
781 819
782 for x in $list; do 820 for x in ${list};
821 do
783 debug-print "$FUNCNAME: processing $x" 822 debug-print "${FUNCNAME}: processing ${x}"
784 # deal with compressed files. /usr/bin/file is in the system profile, or should be. 823 # deal with compressed files. /usr/bin/file is in the system profile, or should be.
785 case "`/usr/bin/file -b $x`" in 824 case "`/usr/bin/file -b ${x}`" in
786 *gzip*) patchfile="${T}/current.patch"; ungzip -c "$x" > "${patchfile}";; 825 *gzip*)
787 *bzip2*) patchfile="${T}/current.patch"; bunzip2 -c "$x" > "${patchfile}";; 826 patchfile="${T}/current.patch"
788 *text*) patchfile="$x";; 827 ungzip -c "${x}" > "${patchfile}"
828 ;;
829 *bzip2*)
830 patchfile="${T}/current.patch"
831 bunzip2 -c "${x}" > "${patchfile}"
832 ;;
833 *text*)
834 patchfile="${x}"
835 ;;
836 *)
789 *) die "Could not determine filetype of patch $x";; 837 die "Could not determine filetype of patch ${x}"
838 ;;
790 esac 839 esac
791 debug-print "$FUNCNAME: patchfile=$patchfile" 840 debug-print "${FUNCNAME}: patchfile=${patchfile}"
792 841
793 # determine patchlevel. supports p0 and higher with either $S or $WORKDIR as base. 842 # determine patchlevel. supports p0 and higher with either $S or $WORKDIR as base.
794 target="`/bin/grep -m 1 '^+++ ' $patchfile`" 843 target="`/bin/grep -m 1 '^+++ ' ${patchfile}`"
795 debug-print "$FUNCNAME: raw target=$target" 844 debug-print "${FUNCNAME}: raw target=${target}"
796 # strip target down to the path/filename, remove leading +++ 845 # strip target down to the path/filename, remove leading +++
797 target="${target/+++ }"; target="${target%% *}" 846 target="${target/+++ }"; target="${target%% *}"
798 # duplicate slashes are discarded by patch wrt the patchlevel. therefore we need 847 # duplicate slashes are discarded by patch wrt the patchlevel. therefore we need
799 # to discard them as well to calculate the correct patchlevel. 848 # to discard them as well to calculate the correct patchlevel.
800 target="${target//\/\//\/}" 849 target="${target//\/\//\/}"
801 debug-print "$FUNCNAME: stripped target=$target" 850 debug-print "${FUNCNAME}: stripped target=${target}"
802 851
803 # look for target 852 # look for target
804 for basedir in "$S" "$WORKDIR" "${PWD}"; do 853 for basedir in "${S}" "${WORKDIR}" "${PWD}"; do
805 debug-print "$FUNCNAME: looking in basedir=$basedir" 854 debug-print "${FUNCNAME}: looking in basedir=${basedir}"
806 cd "$basedir" 855 cd "${basedir}"
807 856
808 # try stripping leading directories 857 # try stripping leading directories
809 target2="$target" 858 target2="${target}"
810 plevel=0 859 plevel=0
811 debug-print "$FUNCNAME: trying target2=$target2, plevel=$plevel" 860 debug-print "${FUNCNAME}: trying target2=${target2}, plevel=${plevel}"
812 while [ ! -f "$target2" ]; do 861 while [ ! -f "${target2}" ]
862 do
813 target2="${target2#*/}" # removes piece of target2 upto the first occurence of / 863 target2="${target2#*/}" # removes piece of target2 upto the first occurence of /
814 plevel=plevel+1 864 plevel=$((plevel+1))
815 debug-print "$FUNCNAME: trying target2=$target2, plevel=$plevel" 865 debug-print "${FUNCNAME}: trying target2=${target2}, plevel=${plevel}"
816 [ "$target2" == "${target2/\/}" ] && break 866 [ "${target2}" == "${target2/\/}" ] && break
817 done 867 done
818 test -f "$target2" && break 868 test -f "${target2}" && break
819 869
820 # try stripping filename - needed to support patches creating new files 870 # try stripping filename - needed to support patches creating new files
821 target2="${target%/*}" 871 target2="${target%/*}"
822 plevel=0 872 plevel=0
823 debug-print "$FUNCNAME: trying target2=$target2, plevel=$plevel" 873 debug-print "${FUNCNAME}: trying target2=${target2}, plevel=${plevel}"
824 while [ ! -d "$target2" ]; do 874 while [ ! -d "${target2}" ]
875 do
825 target2="${target2#*/}" # removes piece of target2 upto the first occurence of / 876 target2="${target2#*/}" # removes piece of target2 upto the first occurence of /
826 plevel=plevel+1 877 plevel=$((plevel+1))
827 debug-print "$FUNCNAME: trying target2=$target2, plevel=$plevel" 878 debug-print "${FUNCNAME}: trying target2=${target2}, plevel=${plevel}"
828 [ "$target2" == "${target2/\/}" ] && break 879 [ "${target2}" == "${target2/\/}" ] && break
829 done 880 done
830 test -d "$target2" && break 881 test -d "${target2}" && break
831 882
832 done 883 done
833 884
834 test -f "${basedir}/${target2}" || test -d "${basedir}/${target2}" || die "Could not determine patchlevel for $x" 885 test -f "${basedir}/${target2}" || test -d "${basedir}/${target2}" \
886 || die "Could not determine patchlevel for ${x}"
835 debug-print "$FUNCNAME: determined plevel=$plevel" 887 debug-print "${FUNCNAME}: determined plevel=${plevel}"
836 # do the patching 888 # do the patching
837 ebegin "Applying patch ${x##*/}..." 889 ebegin "Applying patch ${x##*/}..."
838 /usr/bin/patch -p$plevel < "$patchfile" > /dev/null || die "Failed to apply patch $x" 890 /usr/bin/patch -p${plevel} < "${patchfile}" > /dev/null \
891 || die "Failed to apply patch ${x}"
839 eend $? 892 eend $?
840 893
841 done 894 done
842 895
843} 896}
850# Usage: unpack_makeself [file to unpack] [offset] 903# Usage: unpack_makeself [file to unpack] [offset]
851# - If the file is not specified then unpack will utilize ${A}. 904# - If the file is not specified then unpack will utilize ${A}.
852# - If the offset is not specified then we will attempt to extract 905# - If the offset is not specified then we will attempt to extract
853# the proper offset from the script itself. 906# the proper offset from the script itself.
854unpack_makeself() { 907unpack_makeself() {
855 local src=$1 908 local src="$1"
856 local skip=$2 909 local skip="$2"
857 910
858 if [ -z "${src}" ] ; then 911 if [ -z "${src}" ]
912 then
859 src="${DISTDIR}/${A}" 913 src="${DISTDIR}/${A}"
860 else 914 else
861 if [ -e "${DISTDIR}/${src}" ] ; then 915 if [ -e "${DISTDIR}/${src}" ]
916 then
862 src="${DISTDIR}/${src}" 917 src="${DISTDIR}/${src}"
863 elif [ -e "${PWD}/${src}" ] ; then 918 elif [ -e "${PWD}/${src}" ]
919 then
864 src="${PWD}/${src}" 920 src="${PWD}/${src}"
865 elif [ -e "${src}" ] ; then 921 elif [ -e "${src}" ]
922 then
866 src="${src}" 923 src="${src}"
867 fi 924 fi
868 fi 925 fi
869 [ ! -e "${src}" ] && die "Could not find requested makeself archive ${src}" 926 [ ! -e "${src}" ] && die "Could not find requested makeself archive ${src}"
870 927
871 local shrtsrc=`basename ${src}` 928 local shrtsrc="`basename ${src}`"
872 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 929 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
873 if [ -z "${skip}" ] ; then 930 if [ -z "${skip}" ]
931 then
874 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`" 932 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`"
875 local skip=0 933 local skip=0
876 case ${ver} in 934 case ${ver} in
877 1.5.*) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same 935 1.5.*) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same
878 skip=`grep -a ^skip= ${src} | cut -d= -f2` 936 skip=`grep -a ^skip= ${src} | cut -d= -f2`
906 # we do this because otherwise a failure in gzip will cause 0 bytes to be sent 964 # we do this because otherwise a failure in gzip will cause 0 bytes to be sent
907 # to tar which will make tar not extract anything and exit with 0 965 # to tar which will make tar not extract anything and exit with 0
908 tail -n +${skip} ${src} | gzip -cd | tar -x --no-same-owner -f - 2>/dev/null 966 tail -n +${skip} ${src} | gzip -cd | tar -x --no-same-owner -f - 2>/dev/null
909 local pipestatus="${PIPESTATUS[*]}" 967 local pipestatus="${PIPESTATUS[*]}"
910 pipestatus="${pipestatus// }" 968 pipestatus="${pipestatus// }"
911 if [ "${pipestatus//0}" != "" ] ; then 969 if [ "${pipestatus//0}" != "" ]
970 then
912 # maybe it isnt gzipped ... they usually are, but not always ... 971 # maybe it isnt gzipped ... they usually are, but not always ...
913 tail -n +${skip} ${src} | tar -x --no-same-owner -f - \ 972 tail -n +${skip} ${src} | tar -x --no-same-owner -f - \
914 || die "failure unpacking makeself ${shrtsrc} ('${ver}' +${skip})" 973 || die "failure unpacking makeself ${shrtsrc} ('${ver}' +${skip})"
915 fi 974 fi
916} 975}
976
977# Display a license for user to accept.
978#
979# Usage: check_license [license]
980# - If the file is not specified then ${LICENSE} is used.
981check_license() {
982 local lic=$1
983 if [ -z "${lic}" ] ; then
984 lic="${PORTDIR}/licenses/${LICENSE}"
985 else
986 if [ -e "${PORTDIR}/licenses/${src}" ] ; then
987 lic="${PORTDIR}/licenses/${src}"
988 elif [ -e "${PWD}/${src}" ] ; then
989 lic="${PWD}/${src}"
990 elif [ -e "${src}" ] ; then
991 lic="${src}"
992 fi
993 fi
994 [ ! -f "${lic}" ] && die "Could not find requested license ${src}"
995
996 # here is where we check for the licenses the user already
997 # accepted ... if we don't find a match, we make the user accept
998 local alic
999 for alic in ${ACCEPT_LICENSE} ; do
1000 [ "${alic}" == "*" ] && return 0
1001 [ "${alic}" == "${lic}" ] && return 0
1002 done
1003
1004 local licmsg="`mymktemp ${T}`"
1005 cat << EOF > ${licmsg}
1006**********************************************************
1007The following license outlines the terms of use of this
1008package. You MUST accept this license for installation to
1009continue. When you are done viewing, hit 'q'. If you
1010CTRL+C out of this, the install will not run!
1011**********************************************************
1012
1013EOF
1014 cat ${lic} >> ${licmsg}
1015 ${PAGER:-less} ${licmsg} || die "Could not execute pager (${PAGER}) to accept ${lic}"
1016 einfon "Do you accept the terms of this license? [yes/no] "
1017 read alic
1018 case ${alic} in
1019 yes|Yes|y|Y)
1020 return 0
1021 ;;
1022 *)
1023 echo;echo;echo
1024 eerror "You MUST accept the license to continue! Exiting!"
1025 die "Failed to accept license"
1026 ;;
1027 esac
1028}

Legend:
Removed from v.1.52  
changed lines
  Added in v.1.60

  ViewVC Help
Powered by ViewVC 1.1.20