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

Diff of /eclass/eutils.eclass

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

Revision 1.37 Revision 1.56
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.37 2003/06/28 02:09:57 vapier Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.56 2003/09/22 21:08:27 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
566 582
567 if [ ! -e ${ehome} ] && [ ! -e ${D}/${ehome} ] ; then 583 if [ ! -e ${ehome} ] && [ ! -e ${D}/${ehome} ] ; then
568 einfo " - Creating ${ehome} in ${D}" 584 einfo " - Creating ${ehome} in ${D}"
569 dodir ${ehome} 585 dodir ${ehome}
570 fowners ${euser} ${ehome} 586 fowners ${euser} ${ehome}
587 fperms 755 ${ehome}
571 fi 588 fi
572} 589}
573 590
574# Simplify/standardize adding groups to the system 591# Simplify/standardize adding groups to the system
575# vapier@gentoo.org 592# vapier@gentoo.org
585 local egroup="$1"; shift 602 local egroup="$1"; shift
586 if [ -z "${egroup}" ] ; then 603 if [ -z "${egroup}" ] ; then
587 eerror "No group specified !" 604 eerror "No group specified !"
588 die "Cannot call enewgroup without a group" 605 die "Cannot call enewgroup without a group"
589 fi 606 fi
590 einfo "Adding group '${egroup}' to your system ..."
591 607
592 # setup a file for testing groupname 608 # setup a file for testing groupname
593 local tmpfile="`mktemp -p ${T}`" 609 local tmpfile="`mymktemp ${T}`"
594 touch ${tmpfile}
595 chgrp ${egroup} ${tmpfile} >& /dev/null 610 chgrp ${egroup} ${tmpfile} >& /dev/null
596 local realgroup="`ls -l ${tmpfile} | awk '{print $4}'`" 611 local realgroup="`ls -l ${tmpfile} | awk '{print $4}'`"
597 612
598 # see if group already exists 613 # see if group already exists
599 if [ "${egroup}" == "${realgroup}" ] ; then 614 if [ "${egroup}" == "${realgroup}" ] ; then
600 einfo "${egroup} already exists on your system :)"
601 return 0 615 return 0
602 fi 616 fi
617 einfo "Adding group '${egroup}' to your system ..."
603 618
604 # options to pass to useradd 619 # options to pass to useradd
605 local opts="" 620 local opts=""
606 621
607 # handle gid 622 # handle gid
636edos2unix() { 651edos2unix() {
637 for f in $@ ; do 652 for f in $@ ; do
638 cp ${f} ${T}/edos2unix 653 cp ${f} ${T}/edos2unix
639 sed 's/\r$//' ${T}/edos2unix > ${f} 654 sed 's/\r$//' ${T}/edos2unix > ${f}
640 done 655 done
656}
657
658# Make a desktop file !
659# Great for making those icons in kde/gnome startmenu !
660# Amaze your friends ! Get the women ! Join today !
661# gnome2 /usr/share/applications
662# gnome1 /usr/share/gnome/apps/
663# KDE ${KDEDIR}/share/applnk /usr/share/applnk
664#
665# make_desktop_entry(<binary>, [name], [icon], [type], [path])
666#
667# binary: what binary does the app run with ?
668# name: the name that will show up in the menu
669# icon: give your little like a pretty little icon ...
670# this can be relative (to /usr/share/pixmaps) or
671# a full path to an icon
672# type: what kind of application is this ? for categories:
673# http://www.freedesktop.org/standards/menu/draft/menu-spec/menu-spec.html
674# path: if your app needs to startup in a specific dir
675make_desktop_entry() {
676 [ -z "$1" ] && eerror "You must specify the executable" && return 1
677
678 local exec=${1}
679 local name=${2:-${PN}}
680 local icon=${3:-${PN}.png}
681 local type=${4}
682 local path=${5:-${GAMES_PREFIX}}
683 if [ -z "${type}" ] ; then
684 case ${CATEGORY} in
685 app-emulation) type=Emulator ;;
686 games-*) type=Game ;;
687 *) type="" ;;
688 esac
689 fi
690 local desktop=${T}/${exec}.desktop
691
692echo "[Desktop Entry]
693Encoding=UTF-8
694Version=0.9.2
695Name=${name}
696Type=Application
697Comment=${DESCRIPTION}
698Exec=${exec}
699Path=${path}
700Icon=${icon}
701Categories=Application;${type};" > ${desktop}
702
703 if [ -d /usr/share/applications ] ; then
704 insinto /usr/share/applications
705 doins ${desktop}
706 fi
707
708 #if [ -d /usr/share/gnome/apps ] ; then
709 # insinto /usr/share/gnome/apps/Games
710 # doins ${desktop}
711 #fi
712
713 #if [ ! -z "`ls /usr/kde/* 2>/dev/null`" ] ; then
714 # for ver in /usr/kde/* ; do
715 # insinto ${ver}/share/applnk/Games
716 # doins ${desktop}
717 # done
718 #fi
719
720 if [ -d /usr/share/applnk ] ; then
721 insinto /usr/share/applnk/${type}
722 doins ${desktop}
723 fi
724
725 return 0
641} 726}
642 727
643# new convenience patch wrapper function to eventually replace epatch(), 728# new convenience patch wrapper function to eventually replace epatch(),
644# $PATCHES, $PATCHES1, src_unpack:patch, src_unpack:autopatch and 729# $PATCHES, $PATCHES1, src_unpack:patch, src_unpack:autopatch and
645# /usr/bin/patch 730# /usr/bin/patch
755 eend $? 840 eend $?
756 841
757 done 842 done
758 843
759} 844}
845
846# Unpack those pesky makeself generated files ...
847# They're shell scripts with the binary package tagged onto
848# the end of the archive. Loki utilized the format as does
849# many other game companies.
850#
851# Usage: unpack_makeself [file to unpack] [offset]
852# - If the file is not specified then unpack will utilize ${A}.
853# - If the offset is not specified then we will attempt to extract
854# the proper offset from the script itself.
855unpack_makeself() {
856 local src=$1
857 local skip=$2
858
859 if [ -z "${src}" ] ; then
860 src="${DISTDIR}/${A}"
861 else
862 if [ -e "${DISTDIR}/${src}" ] ; then
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
872 local shrtsrc=`basename ${src}`
873 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
874 if [ -z "${skip}" ] ; then
875 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`"
876 local skip=0
877 case ${ver} in
878 1.5.*) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same
879 skip=`grep -a ^skip= ${src} | cut -d= -f2`
880 ;;
881 2.0|2.0.1)
882 skip=`grep -a ^$'\t'tail ${src} | awk '{print $2}' | cut -b2-`
883 ;;
884 2.1.1)
885 skip=`grep -a ^offset= ${src} | awk '{print $2}' | cut -b2-`
886 let skip="skip + 1"
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 ;;
896 *)
897 eerror "I'm sorry, but I was unable to support the Makeself file."
898 eerror "The version I detected was '${ver}'."
899 eerror "Please file a bug about the file ${shrtsrc} at"
900 eerror "http://bugs.gentoo.org/ so that support can be added."
901 die "makeself version '${ver}' not supported"
902 ;;
903 esac
904 debug-print "Detected Makeself version ${ver} ... using ${skip} as offset"
905 fi
906
907 # we do this because otherwise a failure in gzip will cause 0 bytes to be sent
908 # to tar which will make tar not extract anything and exit with 0
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 - \
915 || die "failure unpacking makeself ${shrtsrc} ('${ver}' +${skip})"
916 fi
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 [ -f /usr/share/licenses/${LICENSE} ]; then
941 einfo "The license for this application has already been accepted."
942 else
943 ewarn "You MUST accept this license for installation to continue."
944 eerror "If you CTRL+C out of this, the install will not run!"
945 echo
946
947 ${PAGER} ${src} || die "Could not execute ${PAGER} ${src}
948 einfo "Do you accept the terms of this license? [yes/no]"
949 read ACCEPT_TERMS
950 case ${ACCEPT_TERMS} in
951 yes|Yes|y|Y)
952 cp ${src} /usr/share/licenses
953 exit 0
954 ;;
955 *)
956 eerror "You MUST accept the license to continue! Exiting!"
957 die "Failed to accept license"
958 ;;
959 esac
960 fi
961}

Legend:
Removed from v.1.37  
changed lines
  Added in v.1.56

  ViewVC Help
Powered by ViewVC 1.1.20