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

Diff of /eclass/eutils.eclass

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

Revision 1.41 Revision 1.57
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.41 2003/07/14 04:47:17 vapier Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.57 2003/09/22 21:39:11 wolf31o2 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 [ -z "${topdir}" ] && topdir=/tmp
468 if [ `which mktemp 2>/dev/null` ] ; then
469 mktemp -p ${topdir}
470 else
471 local tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}"
472 touch ${tmp}
473 echo ${tmp}
456 fi 474 fi
457} 475}
458 476
459# Simplify/standardize adding users to the system 477# Simplify/standardize adding users to the system
460# vapier@gentoo.org 478# vapier@gentoo.org
474 local euser="$1"; shift 492 local euser="$1"; shift
475 if [ -z "${euser}" ] ; then 493 if [ -z "${euser}" ] ; then
476 eerror "No username specified !" 494 eerror "No username specified !"
477 die "Cannot call enewuser without a username" 495 die "Cannot call enewuser without a username"
478 fi 496 fi
479 einfo "Adding user '${euser}' to your system ..."
480 497
481 # setup a file for testing usernames/groups 498 # setup a file for testing usernames/groups
482 local tmpfile="`mktemp -p ${T}`" 499 local tmpfile="`mymktemp ${T}`"
483 touch ${tmpfile}
484 chown ${euser} ${tmpfile} >& /dev/null 500 chown ${euser} ${tmpfile} >& /dev/null
485 local realuser="`ls -l ${tmpfile} | awk '{print $3}'`" 501 local realuser="`ls -l ${tmpfile} | awk '{print $3}'`"
486 502
487 # see if user already exists 503 # see if user already exists
488 if [ "${euser}" == "${realuser}" ] ; then 504 if [ "${euser}" == "${realuser}" ] ; then
489 einfo "${euser} already exists on your system :)"
490 return 0 505 return 0
491 fi 506 fi
507 einfo "Adding user '${euser}' to your system ..."
492 508
493 # options to pass to useradd 509 # options to pass to useradd
494 local opts="" 510 local opts=""
495 511
496 # handle uid 512 # handle uid
586 local egroup="$1"; shift 602 local egroup="$1"; shift
587 if [ -z "${egroup}" ] ; then 603 if [ -z "${egroup}" ] ; then
588 eerror "No group specified !" 604 eerror "No group specified !"
589 die "Cannot call enewgroup without a group" 605 die "Cannot call enewgroup without a group"
590 fi 606 fi
591 einfo "Adding group '${egroup}' to your system ..."
592 607
593 # setup a file for testing groupname 608 # setup a file for testing groupname
594 local tmpfile="`mktemp -p ${T}`" 609 local tmpfile="`mymktemp ${T}`"
595 touch ${tmpfile}
596 chgrp ${egroup} ${tmpfile} >& /dev/null 610 chgrp ${egroup} ${tmpfile} >& /dev/null
597 local realgroup="`ls -l ${tmpfile} | awk '{print $4}'`" 611 local realgroup="`ls -l ${tmpfile} | awk '{print $4}'`"
598 612
599 # see if group already exists 613 # see if group already exists
600 if [ "${egroup}" == "${realgroup}" ] ; then 614 if [ "${egroup}" == "${realgroup}" ] ; then
601 einfo "${egroup} already exists on your system :)"
602 return 0 615 return 0
603 fi 616 fi
617 einfo "Adding group '${egroup}' to your system ..."
604 618
605 # options to pass to useradd 619 # options to pass to useradd
606 local opts="" 620 local opts=""
607 621
608 # handle gid 622 # handle gid
667 local type=${4} 681 local type=${4}
668 local path=${5:-${GAMES_PREFIX}} 682 local path=${5:-${GAMES_PREFIX}}
669 if [ -z "${type}" ] ; then 683 if [ -z "${type}" ] ; then
670 case ${CATEGORY} in 684 case ${CATEGORY} in
671 app-emulation) type=Emulator ;; 685 app-emulation) type=Emulator ;;
672 app-games) type=Game ;; 686 games-*) type=Game ;;
673 *) type="" ;; 687 *) type="" ;;
674 esac 688 esac
675 fi 689 fi
676 local desktop=${T}/${exec}.desktop 690 local desktop=${T}/${exec}.desktop
677 691
840# the proper offset from the script itself. 854# the proper offset from the script itself.
841unpack_makeself() { 855unpack_makeself() {
842 local src=$1 856 local src=$1
843 local skip=$2 857 local skip=$2
844 858
845 [ -z "${src}" ] && src=${A} 859 if [ -z "${src}" ] ; then
846 [ -e ./${src} ] \ 860 src="${DISTDIR}/${A}"
847 && src=${PWD}/${src} \ 861 else
862 if [ -e "${DISTDIR}/${src}" ] ; then
848 || src=${DISTDIR}/${src} 863 src="${DISTDIR}/${src}"
864 elif [ -e "${PWD}/${src}" ] ; then
865 src="${PWD}/${src}"
866 elif [ -e "${src}" ] ; then
867 src="${src}"
868 fi
869 fi
870 [ ! -e "${src}" ] && die "Could not find requested makeself archive ${src}"
871
849 local shrtsrc=`basename ${src}` 872 local shrtsrc=`basename ${src}`
850 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 873 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
851 if [ -z "${skip}" ] ; then 874 if [ -z "${skip}" ] ; then
852 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`" 875 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`"
853 local skip=0 876 local skip=0
860 ;; 883 ;;
861 2.1.1) 884 2.1.1)
862 skip=`grep -a ^offset= ${src} | awk '{print $2}' | cut -b2-` 885 skip=`grep -a ^offset= ${src} | awk '{print $2}' | cut -b2-`
863 let skip="skip + 1" 886 let skip="skip + 1"
864 ;; 887 ;;
888 2.1.2)
889 skip=`grep -a ^offset= ${src} | awk '{print $3}' | head -n 1`
890 let skip="skip + 1"
891 ;;
892 2.1.3)
893 skip=`grep -a ^offset= ${src} | awk '{print $3}'`
894 let skip="skip + 1"
895 ;;
865 *) 896 *)
866 eerror "I'm sorry, but I was unable to support the Makeself file." 897 eerror "I'm sorry, but I was unable to support the Makeself file."
867 eerror "The version I detected was '${ver}'." 898 eerror "The version I detected was '${ver}'."
868 eerror "Please file a bug about the file ${shrtsrc} at" 899 eerror "Please file a bug about the file ${shrtsrc} at"
869 eerror "http://bugs.gentoo.org/ so that support can be added." 900 eerror "http://bugs.gentoo.org/ so that support can be added."
873 debug-print "Detected Makeself version ${ver} ... using ${skip} as offset" 904 debug-print "Detected Makeself version ${ver} ... using ${skip} as offset"
874 fi 905 fi
875 906
876 # we do this because otherwise a failure in gzip will cause 0 bytes to be sent 907 # we do this because otherwise a failure in gzip will cause 0 bytes to be sent
877 # to tar which will make tar not extract anything and exit with 0 908 # to tar which will make tar not extract anything and exit with 0
878 local out="`tail +${skip} ${src} | gzip -cd | tar -x --no-same-owner -v -f -`" 909 tail -n +${skip} ${src} | gzip -cd | tar -x --no-same-owner -f - 2>/dev/null
910 local pipestatus="${PIPESTATUS[*]}"
911 pipestatus="${pipestatus// }"
912 if [ "${pipestatus//0}" != "" ] ; then
913 # maybe it isnt gzipped ... they usually are, but not always ...
914 tail -n +${skip} ${src} | tar -x --no-same-owner -f - \
879 [ -z "${out}" ] && die "failure unpacking makeself ${shrtsrc} ('${ver}' +${skip})" 915 || die "failure unpacking makeself ${shrtsrc} ('${ver}' +${skip})"
916 fi
880} 917}
918
919# Display a license for user to accept.
920#
921# Usage: check_license [license]
922# - If the file is not specified then ${LICENSE} is used.
923check_license() {
924 local src=$1
925 if [ -z "${src}" ] ; then
926 src="${PORTDIR}/licenses/${LICENSE}"
927 else
928 if [ -e "${PORTDIR}/licenses/${src}" ] ; then
929 src="${PORTDIR}/licenses/${src}"
930 elif [ -e "${PWD}/${src}" ] ; then
931 src="${PWD}/${src}"
932 elif [ -e "${src}" ] ; then
933 src="${src}"
934 fi
935 fi
936 [ ! -e "${src}" ] && die "Could not find requested license ${src}"
937
938 # here is where we check for the license...
939 # if we don't find one, we ask the user for it
940 if [ ! -d /usr/share/licenses ]; then
941 mkdir -p /usr/share/licenses
942 fi
943 if [ -f /usr/share/licenses/${LICENSE} ]; then
944 einfo "The license for this application has already been accepted."
945 else
946 ewarn "You MUST accept this license for installation to continue."
947 eerror "If you CTRL+C out of this, the install will not run!"
948 echo
949
950 ${PAGER} ${src} || die "Could not execute ${PAGER} ${src}
951 einfo "Do you accept the terms of this license? [yes/no]"
952 read ACCEPT_TERMS
953 case ${ACCEPT_TERMS} in
954 yes|Yes|y|Y)
955 cp ${src} /usr/share/licenses
956 exit 0
957 ;;
958 *)
959 eerror "You MUST accept the license to continue! Exiting!"
960 die "Failed to accept license"
961 ;;
962 esac
963 fi
964}

Legend:
Removed from v.1.41  
changed lines
  Added in v.1.57

  ViewVC Help
Powered by ViewVC 1.1.20