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

Diff of /eclass/eutils.eclass

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

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

Legend:
Removed from v.1.45  
changed lines
  Added in v.1.67

  ViewVC Help
Powered by ViewVC 1.1.20