| 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.36 2003/06/25 03:53:29 vapier Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.45 2003/07/18 20:43:00 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. |
| … | |
… | |
| 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 |
| … | |
… | |
| 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 |
| … | |
… | |
| 636 | edos2unix() { |
635 | edos2unix() { |
| 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 |
|
|
659 | make_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 | |
|
|
676 | echo "[Desktop Entry] |
|
|
677 | Encoding=UTF-8 |
|
|
678 | Version=0.9.2 |
|
|
679 | Name=${name} |
|
|
680 | Type=Application |
|
|
681 | Comment=${DESCRIPTION} |
|
|
682 | Exec=${exec} |
|
|
683 | Path=${path} |
|
|
684 | Icon=${icon} |
|
|
685 | Categories=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. |
|
|
839 | unpack_makeself() { |
|
|
840 | local src=$1 |
|
|
841 | local skip=$2 |
|
|
842 | |
|
|
843 | [ -z "${src}" ] && src=${A} |
|
|
844 | [ -e ./${src} ] \ |
|
|
845 | && src=${PWD}/${src} \ |
|
|
846 | || src=${DISTDIR}/${src} |
|
|
847 | local shrtsrc=`basename ${src}` |
|
|
848 | echo ">>> Unpacking ${shrtsrc} to ${PWD}" |
|
|
849 | if [ -z "${skip}" ] ; then |
|
|
850 | local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`" |
|
|
851 | local skip=0 |
|
|
852 | case ${ver} in |
|
|
853 | 1.5.*) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same |
|
|
854 | skip=`grep -a ^skip= ${src} | cut -d= -f2` |
|
|
855 | ;; |
|
|
856 | 2.0|2.0.1) |
|
|
857 | skip=`grep -a ^$'\t'tail ${src} | awk '{print $2}' | cut -b2-` |
|
|
858 | ;; |
|
|
859 | 2.1.1) |
|
|
860 | skip=`grep -a ^offset= ${src} | awk '{print $2}' | cut -b2-` |
|
|
861 | let skip="skip + 1" |
|
|
862 | ;; |
|
|
863 | *) |
|
|
864 | eerror "I'm sorry, but I was unable to support the Makeself file." |
|
|
865 | eerror "The version I detected was '${ver}'." |
|
|
866 | eerror "Please file a bug about the file ${shrtsrc} at" |
|
|
867 | eerror "http://bugs.gentoo.org/ so that support can be added." |
|
|
868 | die "makeself version '${ver}' not supported" |
|
|
869 | ;; |
|
|
870 | esac |
|
|
871 | debug-print "Detected Makeself version ${ver} ... using ${skip} as offset" |
|
|
872 | fi |
|
|
873 | |
|
|
874 | # 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 |
|
|
876 | local out="`tail +${skip} ${src} | gzip -cd | tar -x --no-same-owner -v -f -`" |
|
|
877 | [ -z "${out}" ] && die "failure unpacking makeself ${shrtsrc} ('${ver}' +${skip})" |
|
|
878 | } |