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

Diff of /eclass/eutils.eclass

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

Revision 1.35 Revision 1.50
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.35 2003/06/22 05:44:04 drobbins Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.50 2003/09/05 16:42:45 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.
474 local euser="$1"; shift 474 local euser="$1"; shift
475 if [ -z "${euser}" ] ; then 475 if [ -z "${euser}" ] ; then
476 eerror "No username specified !" 476 eerror "No username specified !"
477 die "Cannot call enewuser without a username" 477 die "Cannot call enewuser without a username"
478 fi 478 fi
479 einfo "Adding user '${euser}' to your system ..."
480 479
481 # setup a file for testing usernames/groups 480 # setup a file for testing usernames/groups
482 local tmpfile="`mktemp -p ${T}`" 481 local tmpfile="`mktemp -p ${T}`"
483 touch ${tmpfile} 482 touch ${tmpfile}
484 chown ${euser} ${tmpfile} >& /dev/null 483 chown ${euser} ${tmpfile} >& /dev/null
485 local realuser="`ls -l ${tmpfile} | awk '{print $3}'`" 484 local realuser="`ls -l ${tmpfile} | awk '{print $3}'`"
486 485
487 # see if user already exists 486 # see if user already exists
488 if [ "${euser}" == "${realuser}" ] ; then 487 if [ "${euser}" == "${realuser}" ] ; then
489 einfo "${euser} already exists on your system :)"
490 return 0 488 return 0
491 fi 489 fi
490 einfo "Adding user '${euser}' to your system ..."
492 491
493 # options to pass to useradd 492 # options to pass to useradd
494 local opts="" 493 local opts=""
495 494
496 # handle uid 495 # handle uid
549 fi 548 fi
550 einfo " - Groups: ${egroups}" 549 einfo " - Groups: ${egroups}"
551 550
552 # handle extra and add the user 551 # handle extra and add the user
553 local eextra="$@" 552 local eextra="$@"
554 local oldsandbox="${oldsandbox}" 553 local oldsandbox=${SANDBOX_ON}
555 export SANDBOX_ON="0" 554 export SANDBOX_ON="0"
556 if [ -z "${eextra}" ] ; then 555 if [ -z "${eextra}" ] ; then
557 useradd ${opts} ${euser} \ 556 useradd ${opts} ${euser} \
558 -c "added by portage for ${PN}" \ 557 -c "added by portage for ${PN}" \
559 || die "enewuser failed" 558 || die "enewuser failed"
565 export SANDBOX_ON="${oldsandbox}" 564 export SANDBOX_ON="${oldsandbox}"
566 565
567 if [ ! -e ${ehome} ] && [ ! -e ${D}/${ehome} ] ; then 566 if [ ! -e ${ehome} ] && [ ! -e ${D}/${ehome} ] ; then
568 einfo " - Creating ${ehome} in ${D}" 567 einfo " - Creating ${ehome} in ${D}"
569 dodir ${ehome} 568 dodir ${ehome}
570 fperms ${euser} ${ehome} 569 fowners ${euser} ${ehome}
570 fperms 755 ${ehome}
571 fi 571 fi
572} 572}
573 573
574# Simplify/standardize adding groups to the system 574# Simplify/standardize adding groups to the system
575# vapier@gentoo.org 575# vapier@gentoo.org
585 local egroup="$1"; shift 585 local egroup="$1"; shift
586 if [ -z "${egroup}" ] ; then 586 if [ -z "${egroup}" ] ; then
587 eerror "No group specified !" 587 eerror "No group specified !"
588 die "Cannot call enewgroup without a group" 588 die "Cannot call enewgroup without a group"
589 fi 589 fi
590 einfo "Adding group '${egroup}' to your system ..."
591 590
592 # setup a file for testing groupname 591 # setup a file for testing groupname
593 local tmpfile="`mktemp -p ${T}`" 592 local tmpfile="`mktemp -p ${T}`"
594 touch ${tmpfile} 593 touch ${tmpfile}
595 chgrp ${egroup} ${tmpfile} >& /dev/null 594 chgrp ${egroup} ${tmpfile} >& /dev/null
596 local realgroup="`ls -l ${tmpfile} | awk '{print $4}'`" 595 local realgroup="`ls -l ${tmpfile} | awk '{print $4}'`"
597 596
598 # see if group already exists 597 # see if group already exists
599 if [ "${egroup}" == "${realgroup}" ] ; then 598 if [ "${egroup}" == "${realgroup}" ] ; then
600 einfo "${egroup} already exists on your system :)"
601 return 0 599 return 0
602 fi 600 fi
601 einfo "Adding group '${egroup}' to your system ..."
603 602
604 # options to pass to useradd 603 # options to pass to useradd
605 local opts="" 604 local opts=""
606 605
607 # handle gid 606 # handle gid
621 # handle extra 620 # handle extra
622 local eextra="$@" 621 local eextra="$@"
623 opts="${opts} ${eextra}" 622 opts="${opts} ${eextra}"
624 623
625 # add the group 624 # add the group
626 local oldsandbox="${oldsandbox}" 625 local oldsandbox=${SANDBOX_ON}
627 export SANDBOX_ON="0" 626 export SANDBOX_ON="0"
628 groupadd ${opts} ${egroup} || die "enewgroup failed" 627 groupadd ${opts} ${egroup} || die "enewgroup failed"
629 export SANDBOX_ON="${oldsandbox}" 628 export SANDBOX_ON="${oldsandbox}"
630} 629}
631 630
636edos2unix() { 635edos2unix() {
637 for f in $@ ; do 636 for f in $@ ; do
638 cp ${f} ${T}/edos2unix 637 cp ${f} ${T}/edos2unix
639 sed 's/\r$//' ${T}/edos2unix > ${f} 638 sed 's/\r$//' ${T}/edos2unix > ${f}
640 done 639 done
640}
641
642# Make a desktop file !
643# Great for making those icons in kde/gnome startmenu !
644# Amaze your friends ! Get the women ! Join today !
645# gnome2 /usr/share/applications
646# gnome1 /usr/share/gnome/apps/
647# KDE ${KDEDIR}/share/applnk /usr/share/applnk
648#
649# make_desktop_entry(<binary>, [name], [icon], [type], [path])
650#
651# binary: what binary does the app run with ?
652# name: the name that will show up in the menu
653# icon: give your little like a pretty little icon ...
654# this can be relative (to /usr/share/pixmaps) or
655# a full path to an icon
656# type: what kind of application is this ? for categories:
657# http://www.freedesktop.org/standards/menu/draft/menu-spec/menu-spec.html
658# path: if your app needs to startup in a specific dir
659make_desktop_entry() {
660 [ -z "$1" ] && eerror "You must specify the executable" && return 1
661
662 local exec=${1}
663 local name=${2:-${PN}}
664 local icon=${3:-${PN}.png}
665 local type=${4}
666 local path=${5:-${GAMES_PREFIX}}
667 if [ -z "${type}" ] ; then
668 case ${CATEGORY} in
669 app-emulation) type=Emulator ;;
670 app-games) type=Game ;;
671 *) type="" ;;
672 esac
673 fi
674 local desktop=${T}/${exec}.desktop
675
676echo "[Desktop Entry]
677Encoding=UTF-8
678Version=0.9.2
679Name=${name}
680Type=Application
681Comment=${DESCRIPTION}
682Exec=${exec}
683Path=${path}
684Icon=${icon}
685Categories=Application;${type};" > ${desktop}
686
687 if [ -d /usr/share/applications ] ; then
688 insinto /usr/share/applications
689 doins ${desktop}
690 fi
691
692 #if [ -d /usr/share/gnome/apps ] ; then
693 # insinto /usr/share/gnome/apps/Games
694 # doins ${desktop}
695 #fi
696
697 #if [ ! -z "`ls /usr/kde/* 2>/dev/null`" ] ; then
698 # for ver in /usr/kde/* ; do
699 # insinto ${ver}/share/applnk/Games
700 # doins ${desktop}
701 # done
702 #fi
703
704 if [ -d /usr/share/applnk ] ; then
705 insinto /usr/share/applnk/${type}
706 doins ${desktop}
707 fi
708
709 return 0
641} 710}
642 711
643# new convenience patch wrapper function to eventually replace epatch(), 712# new convenience patch wrapper function to eventually replace epatch(),
644# $PATCHES, $PATCHES1, src_unpack:patch, src_unpack:autopatch and 713# $PATCHES, $PATCHES1, src_unpack:patch, src_unpack:autopatch and
645# /usr/bin/patch 714# /usr/bin/patch
755 eend $? 824 eend $?
756 825
757 done 826 done
758 827
759} 828}
829
830# Unpack those pesky makeself generated files ...
831# They're shell scripts with the binary package tagged onto
832# the end of the archive. Loki utilized the format as does
833# many other game companies.
834#
835# Usage: unpack_makeself [file to unpack] [offset]
836# - If the file is not specified then unpack will utilize ${A}.
837# - If the offset is not specified then we will attempt to extract
838# the proper offset from the script itself.
839unpack_makeself() {
840 local src=$1
841 local skip=$2
842
843 if [ -z "${src}" ] ; then
844 src="${DISTDIR}/${A}"
845 else
846 if [ -e "${DISTDIR}/${src}" ] ; then
847 src="${DISTDIR}/${src}"
848 elif [ -e "${PWD}/${src}" ] ; then
849 src="${PWD}/${src}"
850 elif [ -e "${src}" ] ; then
851 src="${src}"
852 fi
853 fi
854 [ ! -e "${src}" ] && die "Could not find requested makeself archive ${src}"
855
856 local shrtsrc=`basename ${src}`
857 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
858 if [ -z "${skip}" ] ; then
859 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`"
860 local skip=0
861 case ${ver} in
862 1.5.*) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same
863 skip=`grep -a ^skip= ${src} | cut -d= -f2`
864 ;;
865 2.0|2.0.1)
866 skip=`grep -a ^$'\t'tail ${src} | awk '{print $2}' | cut -b2-`
867 ;;
868 2.1.1)
869 skip=`grep -a ^offset= ${src} | awk '{print $2}' | cut -b2-`
870 let skip="skip + 1"
871 ;;
872 2.1.2)
873 skip=`grep -a ^offset= ${src} | awk '{print $3}' | head -n 1`
874 let skip="skip + 1"
875 ;;
876 2.1.3)
877 skip=`grep -a ^offset= ${src} | awk '{print $3}'`
878 let skip="skip + 1"
879 ;;
880 *)
881 eerror "I'm sorry, but I was unable to support the Makeself file."
882 eerror "The version I detected was '${ver}'."
883 eerror "Please file a bug about the file ${shrtsrc} at"
884 eerror "http://bugs.gentoo.org/ so that support can be added."
885 die "makeself version '${ver}' not supported"
886 ;;
887 esac
888 debug-print "Detected Makeself version ${ver} ... using ${skip} as offset"
889 fi
890
891 # we do this because otherwise a failure in gzip will cause 0 bytes to be sent
892 # to tar which will make tar not extract anything and exit with 0
893 tail -n +${skip} ${src} | gzip -cd | tar -x --no-same-owner -f - 2>/dev/null
894 local pipestatus="${PIPESTATUS[*]}"
895 pipestatus="${pipestatus// }"
896 if [ "${pipestatus//0}" != "" ] ; then
897 # maybe it isnt gzipped ... they usually are, but not always ...
898 tail -n +${skip} ${src} | tar -x --no-same-owner -f - \
899 || die "failure unpacking makeself ${shrtsrc} ('${ver}' +${skip})"
900 fi
901}

Legend:
Removed from v.1.35  
changed lines
  Added in v.1.50

  ViewVC Help
Powered by ViewVC 1.1.20