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

Diff of /eclass/eutils.eclass

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

Revision 1.78 Revision 1.104
1# Copyright 1999-2004 Gentoo Technologies, Inc. 1# Copyright 1999-2004 Gentoo Foundation
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.78 2004/02/09 17:08:44 brad_mssw Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.104 2004/09/17 21:19:49 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
15newdepend "!bootstrap? ( sys-devel/patch )" 15DEPEND="!bootstrap? ( sys-devel/patch )"
16 16
17DESCRIPTION="Based on the ${ECLASS} eclass" 17DESCRIPTION="Based on the ${ECLASS} eclass"
18
19# Wait for the supplied number of seconds. If no argument is supplied, defaults
20# to five seconds. If the EPAUSE_IGNORE env var is set, don't wait. If we're not
21# outputting to a terminal, don't wait. For compatability purposes, the argument
22# must be an integer greater than zero.
23# Bug 62950, Ciaran McCreesh <ciaranm@gentoo.org> (05 Sep 2004)
24epause() {
25 if [ -z "$EPAUSE_IGNORE" ] && [ -t 1 ] ; then
26 sleep ${1:-5}
27 fi
28}
29
30# Beep the specified number of times (defaults to five). If our output
31# is not a terminal, don't beep. If the EBEEP_IGNORE env var is set,
32# don't beep.
33# Bug 62950, Ciaran McCreesh <ciaranm@gentoo.org> (05 Sep 2004)
34ebeep() {
35 local n
36 if [ -z "$EBEEP_IGNORE" ] && [ -t 1 ] ; then
37 for ((n=1 ; n <= ${1:-5} ; n++)) ; do
38 echo -ne "\a"
39 sleep 0.1 &>/dev/null ; sleep 0,1 &>/dev/null
40 echo -ne "\a"
41 sleep 1
42 done
43 fi
44}
45
46# This function simply returns the desired lib directory. With portage
47# 2.0.51, we now have support for installing libraries to lib32/lib64
48# to accomidate the needs of multilib systems. It's no longer a good idea
49# to assume all libraries will end up in lib. Replace any (sane) instances
50# where lib is named directly with $(get_libdir) if possible.
51#
52# Travis Tilley <lv@gentoo.org> (24 Aug 2004)
53get_libdir() {
54 LIBDIR_TEST=$(type econf)
55 if [ ! -z "${CONF_LIBDIR_OVERRIDE}" ] ; then
56 # if there is an override, we want to use that... always.
57 CONF_LIBDIR="${CONF_LIBDIR_OVERRIDE}"
58 # We don't need to know the verison of portage. We only need to know
59 # if there is support for CONF_LIBDIR in econf and co.
60 # Danny van Dyk <kugelfang@gentoo.org> 2004/17/09
61 #elif portageq has_version / '<sys-apps/portage-2.0.51_pre20' ; then
62 # # and if there isnt an override, and we're using a version of
63 # # portage without CONF_LIBDIR support, force the use of lib. dolib
64 # # and friends from portage 2.0.50 wont be too happy otherwise.
65 # CONF_LIBDIR="lib"
66 #fi
67 elif [ "${LIBDIR_TEST/CONF_LIBDIR}" == "${LIBDIR_TEST}" ]; then # we don't have CONF_LIBDIR support
68 # will be <portage-2.0.51_pre20
69 CONF_LIBDIR="lib"
70 fi
71 # and of course, default to lib if CONF_LIBDIR isnt set
72 echo ${CONF_LIBDIR:=lib}
73 unset LIBDIR_TEST
74}
75
76
77get_multilibdir() {
78 echo ${CONF_MULTILIBDIR:=lib32}
79}
80
81
82# Sometimes you need to override the value returned by get_libdir. A good
83# example of this is xorg-x11, where lib32 isnt a supported configuration,
84# and where lib64 -must- be used on amd64 (for applications that need lib
85# to be 32bit, such as adobe acrobat). Note that this override also bypasses
86# portage version sanity checking.
87# get_libdir_override expects one argument, the result get_libdir should
88# return:
89#
90# get_libdir_override lib64
91#
92# Travis Tilley <lv@gentoo.org> (31 Aug 2004)
93get_libdir_override() {
94 CONF_LIBDIR="$1"
95 CONF_LIBDIR_OVERRIDE="$1"
96}
18 97
19# This function generate linker scripts in /usr/lib for dynamic 98# This function generate linker scripts in /usr/lib for dynamic
20# libs in /lib. This is to fix linking problems when you have 99# libs in /lib. This is to fix linking problems when you have
21# the .so in /lib, and the .a in /usr/lib. What happens is that 100# the .so in /lib, and the .a in /usr/lib. What happens is that
22# in some cases when linking dynamic, the .a in /usr/lib is used 101# in some cases when linking dynamic, the .a in /usr/lib is used
33# to point to the latest version of the library present. 112# to point to the latest version of the library present.
34# 113#
35# <azarah@gentoo.org> (26 Oct 2002) 114# <azarah@gentoo.org> (26 Oct 2002)
36# 115#
37gen_usr_ldscript() { 116gen_usr_ldscript() {
38
39 # Just make sure it exists 117 # Just make sure it exists
40 dodir /usr/lib 118 dodir /usr/$(get_libdir)
41 119
42 cat > ${D}/usr/lib/$1 <<"END_LDSCRIPT" 120 cat > ${D}/usr/$(get_libdir)/$1 <<"END_LDSCRIPT"
43/* GNU ld script 121/* GNU ld script
44 Because Gentoo have critical dynamic libraries 122 Because Gentoo have critical dynamic libraries
45 in /lib, and the static versions in /usr/lib, we 123 in /lib, and the static versions in /usr/lib, we
46 need to have a "fake" dynamic lib in /usr/lib, 124 need to have a "fake" dynamic lib in /usr/lib,
47 otherwise we run into linking problems. 125 otherwise we run into linking problems.
48 See bug #4411 on http://bugs.gentoo.org/ for 126 See bug #4411 on http://bugs.gentoo.org/ for
49 more info. */ 127 more info. */
50GROUP ( /lib/libxxx )
51END_LDSCRIPT 128END_LDSCRIPT
52 129
130 echo "GROUP ( /$(get_libdir)/libxxx )" >> ${D}/usr/$(get_libdir)/$1
53 dosed "s:libxxx:$1:" /usr/lib/$1 131 dosed "s:libxxx:$1:" /usr/$(get_libdir)/$1
54 132
55 return 0 133 return 0
56} 134}
57 135
58# Simple function to draw a line consisting of '=' the same length as $* 136# Simple function to draw a line consisting of '=' the same length as $*
144 local SINGLE_PATCH="no" 222 local SINGLE_PATCH="no"
145 local x="" 223 local x=""
146 224
147 if [ "$#" -gt 1 ] 225 if [ "$#" -gt 1 ]
148 then 226 then
149 eerror "Invalid arguments to epatch()" 227 local m=""
150 die "Invalid arguments to epatch()" 228 einfo "${#} patches to apply..."
229 for m in "$@" ; do
230 epatch "${m}"
231 done
232 return 0
151 fi 233 fi
152 234
153 if [ -n "$1" -a -f "$1" ] 235 if [ -n "$1" -a -f "$1" ]
154 then 236 then
155 SINGLE_PATCH="yes" 237 SINGLE_PATCH="yes"
258 else 340 else
259 PATCH_TARGET="${x}" 341 PATCH_TARGET="${x}"
260 fi 342 fi
261 343
262 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 344 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
263 echo "patch ${popts} -p${count} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 345 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
264 346
265 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 347 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
266 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 348 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
267 349
268 if [ "${PATCH_SUFFIX}" != "patch" ] 350 if [ "${PATCH_SUFFIX}" != "patch" ]
275 count=5 357 count=5
276 break 358 break
277 fi 359 fi
278 fi 360 fi
279 361
280 if (cat ${PATCH_TARGET} | patch ${popts} --dry-run -f -p${count}) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1 362 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1
281 then 363 then
282 draw_line "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 364 draw_line "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
283 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 365 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
284 echo "ACTUALLY APPLYING ${x##*/}..." >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 366 echo "ACTUALLY APPLYING ${x##*/}..." >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
285 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 367 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
286 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 368 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
287 369
288 cat ${PATCH_TARGET} | patch ${popts} -p${count} >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 2>&1 370 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 2>&1
289 371
290 if [ "$?" -ne 0 ] 372 if [ "$?" -ne 0 ]
291 then 373 then
292 cat ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 374 cat ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
293 echo 375 echo
336# This function return true if we are using the NPTL pthreads 418# This function return true if we are using the NPTL pthreads
337# implementation. 419# implementation.
338# 420#
339# <azarah@gentoo.org> (06 March 2003) 421# <azarah@gentoo.org> (06 March 2003)
340# 422#
341
342have_NPTL() { 423have_NPTL() {
343
344 cat > ${T}/test-nptl.c <<-"END" 424 cat > ${T}/test-nptl.c <<-"END"
345 #define _XOPEN_SOURCE 425 #define _XOPEN_SOURCE
346 #include <unistd.h> 426 #include <unistd.h>
347 #include <stdio.h> 427 #include <stdio.h>
348 428
431 then 511 then
432 jobs="$((`grep -c ^processor /proc/cpuinfo` * 2))" 512 jobs="$((`grep -c ^processor /proc/cpuinfo` * 2))"
433 else 513 else
434 jobs=2 514 jobs=2
435 fi 515 fi
516 elif [ "${ARCH}" = "s390" ]
517 then
518 # s390 has "# processors : "
519 jobs="$((`grep "^\# processors" /proc/cpuinfo | sed -e "s/^.*: //"` * 2))"
436 else 520 else
437 jobs="$((`grep -c ^cpu /proc/cpuinfo` * 2))" 521 jobs="$((`grep -c ^cpu /proc/cpuinfo` * 2))"
438 die "Unknown ARCH -- ${ARCH}!" 522 die "Unknown ARCH -- ${ARCH}!"
439 fi 523 fi
440 524
456 fi 540 fi
457 fi 541 fi
458} 542}
459 543
460# Cheap replacement for when debianutils (and thus mktemp) 544# Cheap replacement for when debianutils (and thus mktemp)
461# do not exist on the users system 545# does not exist on the users system
462# vapier@gentoo.org 546# vapier@gentoo.org
463# 547#
464# Takes just 1 parameter (the directory to create tmpfile in) 548# Takes just 1 parameter (the directory to create tmpfile in)
465mymktemp() { 549mymktemp() {
466 local topdir="$1" 550 local topdir="$1"
467 551
468 [ -z "${topdir}" ] && topdir=/tmp 552 [ -z "${topdir}" ] && topdir=/tmp
469 if [ "`which mktemp 2>/dev/null`" ] 553 if [ "`which mktemp 2>/dev/null`" ]
470 then 554 then
471 mktemp -p ${topdir} 555 mktemp -p ${topdir}
472 else 556 else
473 local tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}" 557 local tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}"
474 touch ${tmp} 558 touch ${tmp}
475 echo ${tmp} 559 echo ${tmp}
560 fi
561}
562
563# Small wrapper for getent (Linux) and nidump (Mac OS X)
564# used in enewuser()/enewgroup()
565# Joe Jezak <josejx@gmail.com> and usata@gentoo.org
566#
567# egetent(database, key)
568egetent() {
569 if use macos || use ppc-macos ; then
570 case "$2" in
571 *[!0-9]*) # Non numeric
572 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
573 ;;
574 *) # Numeric
575 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
576 ;;
577 esac
578 else
579 getent $1 $2
476 fi 580 fi
477} 581}
478 582
479# Simplify/standardize adding users to the system 583# Simplify/standardize adding users to the system
480# vapier@gentoo.org 584# vapier@gentoo.org
496 then 600 then
497 eerror "No username specified !" 601 eerror "No username specified !"
498 die "Cannot call enewuser without a username" 602 die "Cannot call enewuser without a username"
499 fi 603 fi
500 604
501 # setup a file for testing usernames/groups
502 local tmpfile="`mymktemp ${T}`"
503 chown ${euser} ${tmpfile} >& /dev/null
504 local realuser="`ls -l ${tmpfile} | awk '{print $3}'`"
505
506 # see if user already exists 605 # lets see if the username already exists
507 if [ "${euser}" == "${realuser}" ] 606 if [ "${euser}" == "`egetent passwd \"${euser}\" | cut -d: -f1`" ]
508 then 607 then
509 return 0 608 return 0
510 fi 609 fi
511 einfo "Adding user '${euser}' to your system ..." 610 einfo "Adding user '${euser}' to your system ..."
512 611
517 local euid="$1"; shift 616 local euid="$1"; shift
518 if [ ! -z "${euid}" ] && [ "${euid}" != "-1" ] 617 if [ ! -z "${euid}" ] && [ "${euid}" != "-1" ]
519 then 618 then
520 if [ "${euid}" -gt 0 ] 619 if [ "${euid}" -gt 0 ]
521 then 620 then
522 opts="${opts} -u ${euid}" 621 if [ ! -z "`egetent passwd ${euid}`" ]
622 then
623 euid="next"
624 fi
523 else 625 else
524 eerror "Userid given but is not greater than 0 !" 626 eerror "Userid given but is not greater than 0 !"
525 die "${euid} is not a valid UID" 627 die "${euid} is not a valid UID"
526 fi 628 fi
527 else 629 else
528 euid="next available" 630 euid="next"
631 fi
632 if [ "${euid}" == "next" ]
633 then
634 local pwrange
635 if use macos || use ppc-macos ; then
636 pwrange="`jot 898 101`"
637 else
638 pwrange="`seq 101 999`"
529 fi 639 fi
640 for euid in ${pwrange} ; do
641 [ -z "`egetent passwd ${euid}`" ] && break
642 done
643 fi
644 opts="${opts} -u ${euid}"
530 einfo " - Userid: ${euid}" 645 einfo " - Userid: ${euid}"
531 646
532 # handle shell 647 # handle shell
533 local eshell="$1"; shift 648 local eshell="$1"; shift
534 if [ ! -z "${eshell}" ] && [ "${eshell}" != "-1" ] 649 if [ ! -z "${eshell}" ] && [ "${eshell}" != "-1" ]
555 670
556 # handle groups 671 # handle groups
557 local egroups="$1"; shift 672 local egroups="$1"; shift
558 if [ ! -z "${egroups}" ] 673 if [ ! -z "${egroups}" ]
559 then 674 then
560 local realgroup=
561 local oldifs="${IFS}" 675 local oldifs="${IFS}"
562 export IFS="," 676 export IFS=","
563 for g in ${egroups} 677 for g in ${egroups}
564 do 678 do
565 chgrp ${g} ${tmpfile} >& /dev/null 679 if [ -z "`egetent group \"${g}\"`" ]
566 realgroup="`ls -l ${tmpfile} | awk '{print $4}'`"
567 if [ "${g}" != "${realgroup}" ]
568 then 680 then
569 eerror "You must add ${g} to the system first" 681 eerror "You must add group ${g} to the system first"
570 die "${g} is not a valid GID" 682 die "${g} is not a valid GID"
571 fi 683 fi
572 done 684 done
573 export IFS="${oldifs}" 685 export IFS="${oldifs}"
574 opts="${opts} -g ${egroups}" 686 opts="${opts} -g ${egroups}"
579 691
580 # handle extra and add the user 692 # handle extra and add the user
581 local eextra="$@" 693 local eextra="$@"
582 local oldsandbox="${SANDBOX_ON}" 694 local oldsandbox="${SANDBOX_ON}"
583 export SANDBOX_ON="0" 695 export SANDBOX_ON="0"
696 if use macos || use ppc-macos ;
697 then
698 ### Make the user
584 if [ -z "${eextra}" ] 699 if [ -z "${eextra}" ]
585 then 700 then
701 dscl . create /users/${euser} uid ${euid}
702 dscl . create /users/${euser} shell ${eshell}
703 dscl . create /users/${euser} home ${ehome}
704 dscl . create /users/${euser} realname "added by portage for ${PN}"
705 ### Add the user to the groups specified
706 for g in ${egroups}
707 do
708 dscl . merge /groups/${g} users ${euser}
709 done
710 else
711 einfo "Extra options are not supported on macos yet"
712 einfo "Please report the ebuild along with the info below"
713 einfo "eextra: ${eextra}"
714 die "Required function missing"
715 fi
716 else
717 if [ -z "${eextra}" ]
718 then
586 useradd ${opts} ${euser} \ 719 useradd ${opts} ${euser} \
587 -c "added by portage for ${PN}" \ 720 -c "added by portage for ${PN}" \
588 || die "enewuser failed" 721 || die "enewuser failed"
589 else 722 else
590 einfo " - Extra: ${eextra}" 723 einfo " - Extra: ${eextra}"
591 useradd ${opts} ${euser} ${eextra} \ 724 useradd ${opts} ${euser} ${eextra} \
592 || die "enewuser failed" 725 || die "enewuser failed"
726 fi
593 fi 727 fi
594 export SANDBOX_ON="${oldsandbox}" 728 export SANDBOX_ON="${oldsandbox}"
595 729
596 if [ ! -e "${ehome}" ] && [ ! -e "${D}/${ehome}" ] 730 if [ ! -e "${ehome}" ] && [ ! -e "${D}/${ehome}" ]
597 then 731 then
618 then 752 then
619 eerror "No group specified !" 753 eerror "No group specified !"
620 die "Cannot call enewgroup without a group" 754 die "Cannot call enewgroup without a group"
621 fi 755 fi
622 756
623 # setup a file for testing groupname
624 local tmpfile="`mymktemp ${T}`"
625 chgrp ${egroup} ${tmpfile} >& /dev/null
626 local realgroup="`ls -l ${tmpfile} | awk '{print $4}'`"
627
628 # see if group already exists 757 # see if group already exists
629 if [ "${egroup}" == "${realgroup}" ] 758 if [ "${egroup}" == "`egetent group \"${egroup}\" | cut -d: -f1`" ]
630 then 759 then
631 return 0 760 return 0
632 fi 761 fi
633 einfo "Adding group '${egroup}' to your system ..." 762 einfo "Adding group '${egroup}' to your system ..."
634 763
639 local egid="$1"; shift 768 local egid="$1"; shift
640 if [ ! -z "${egid}" ] 769 if [ ! -z "${egid}" ]
641 then 770 then
642 if [ "${egid}" -gt 0 ] 771 if [ "${egid}" -gt 0 ]
643 then 772 then
773 if [ -z "`egetent group ${egid}`" ]
774 then
775 if use macos || use ppc-macos ; then
776 opts="${opts} ${egid}"
777 else
644 opts="${opts} -g ${egid}" 778 opts="${opts} -g ${egid}"
779 fi
780 else
781 egid="next available; requested gid taken"
782 fi
645 else 783 else
646 eerror "Groupid given but is not greater than 0 !" 784 eerror "Groupid given but is not greater than 0 !"
647 die "${egid} is not a valid GID" 785 die "${egid} is not a valid GID"
648 fi 786 fi
649 else 787 else
656 opts="${opts} ${eextra}" 794 opts="${opts} ${eextra}"
657 795
658 # add the group 796 # add the group
659 local oldsandbox="${SANDBOX_ON}" 797 local oldsandbox="${SANDBOX_ON}"
660 export SANDBOX_ON="0" 798 export SANDBOX_ON="0"
799 if use macos || use ppc-macos ;
800 then
801 if [ ! -z "${eextra}" ];
802 then
803 einfo "Extra options are not supported on macos yet"
804 einfo "Please report the ebuild along with the info below"
805 einfo "eextra: ${eextra}"
806 die "Required function missing"
807 fi
808
809 # If we need the next available
810 case ${egid} in
811 *[!0-9]*) # Non numeric
812 for egid in `jot 898 101`; do
813 [ -z "`egetent group ${egid}`" ] && break
814 done
815 esac
816 dscl . create /groups/${egroup} gid ${egid}
817 dscl . create /groups/${egroup} passwd '*'
818 else
661 groupadd ${opts} ${egroup} || die "enewgroup failed" 819 groupadd ${opts} ${egroup} || die "enewgroup failed"
820 fi
662 export SANDBOX_ON="${oldsandbox}" 821 export SANDBOX_ON="${oldsandbox}"
663} 822}
664 823
665# Simple script to replace 'dos2unix' binaries 824# Simple script to replace 'dos2unix' binaries
666# vapier@gentoo.org 825# vapier@gentoo.org
687# name: the name that will show up in the menu 846# name: the name that will show up in the menu
688# icon: give your little like a pretty little icon ... 847# icon: give your little like a pretty little icon ...
689# this can be relative (to /usr/share/pixmaps) or 848# this can be relative (to /usr/share/pixmaps) or
690# a full path to an icon 849# a full path to an icon
691# type: what kind of application is this ? for categories: 850# type: what kind of application is this ? for categories:
692# http://www.freedesktop.org/standards/menu/draft/menu-spec/menu-spec.html 851# http://www.freedesktop.org/standards/menu-spec/
693# path: if your app needs to startup in a specific dir 852# path: if your app needs to startup in a specific dir
694make_desktop_entry() { 853make_desktop_entry() {
695 [ -z "$1" ] && eerror "You must specify the executable" && return 1 854 [ -z "$1" ] && eerror "You must specify the executable" && return 1
696 855
697 local exec="${1}" 856 local exec="${1}"
698 local name="${2:-${PN}}" 857 local name="${2:-${PN}}"
699 local icon="${3:-${PN}.png}" 858 local icon="${3:-${PN}.png}"
700 local type="${4}" 859 local type="${4}"
860 local subdir="${6}"
701 local path="${5:-${GAMES_PREFIX}}" 861 local path="${5:-${GAMES_BINDIR}}"
702 if [ -z "${type}" ] 862 if [ -z "${type}" ]
703 then 863 then
704 case ${CATEGORY} in 864 case ${CATEGORY} in
705 "app-emulation") 865 "app-emulation")
706 type=Emulator 866 type=Emulator
867 subdir="Emulation"
707 ;; 868 ;;
708 "games-"*) 869 "games-"*)
709 type=Game 870 type=Game
871 subdir="Games"
710 ;; 872 ;;
711 "net-"*) 873 "net-"*)
712 type=Network; 874 type=Network
875 subdir="${type}"
713 ;; 876 ;;
714 *) 877 *)
715 type= 878 type=
879 subdir=
716 ;; 880 ;;
717 esac 881 esac
718 fi 882 fi
719 local desktop="${T}/${exec}.desktop" 883 local desktop="${T}/${exec}.desktop"
720 884
725Type=Application 889Type=Application
726Comment=${DESCRIPTION} 890Comment=${DESCRIPTION}
727Exec=${exec} 891Exec=${exec}
728Path=${path} 892Path=${path}
729Icon=${icon} 893Icon=${icon}
730Categories=Application;${type};" > ${desktop} 894Categories=Application;${type};" > "${desktop}"
731 895
732 if [ -d "/usr/share/applications" ] 896 if [ -d "/usr/share/applications" ]
733 then 897 then
734 insinto /usr/share/applications 898 insinto /usr/share/applications
735 doins ${desktop} 899 doins "${desktop}"
736 fi 900 fi
737 901
738 #if [ -d "/usr/share/gnome/apps" ] 902 #if [ -d "/usr/share/gnome/apps" ]
739 #then 903 #then
740 # insinto /usr/share/gnome/apps/Games 904 # insinto /usr/share/gnome/apps/Games
750 # done 914 # done
751 #fi 915 #fi
752 916
753 if [ -d "/usr/share/applnk" ] 917 if [ -d "/usr/share/applnk" ]
754 then 918 then
755 insinto /usr/share/applnk/${type} 919 insinto /usr/share/applnk/${subdir}
756 doins ${desktop} 920 doins "${desktop}"
757 fi 921 fi
758 922
759 return 0 923 return 0
760} 924}
761 925
932 tail -n +${skip} ${src} | bzip2 -dc | tar --no-same-owner -xf - 1096 tail -n +${skip} ${src} | bzip2 -dc | tar --no-same-owner -xf -
933 ;; 1097 ;;
934 gzip*) 1098 gzip*)
935 tail -n +${skip} ${src} | tar --no-same-owner -xzf - 1099 tail -n +${skip} ${src} | tar --no-same-owner -xzf -
936 ;; 1100 ;;
1101 compress*)
1102 tail -n +${skip} ${src} | gunzip | tar --no-same-owner -xf -
1103 ;;
937 *) 1104 *)
1105 eerror "Unknown filetype \"${filetype}\" ?"
938 false 1106 false
939 ;; 1107 ;;
940 esac 1108 esac
941 assert "failure unpacking (${filetype}) makeself ${shrtsrc} ('${ver}' +${skip})" 1109 assert "failure unpacking (${filetype}) makeself ${shrtsrc} ('${ver}' +${skip})"
942} 1110}
962 local l="`basename ${lic}`" 1130 local l="`basename ${lic}`"
963 1131
964 # here is where we check for the licenses the user already 1132 # here is where we check for the licenses the user already
965 # accepted ... if we don't find a match, we make the user accept 1133 # accepted ... if we don't find a match, we make the user accept
966 local alic 1134 local alic
967 for alic in "${ACCEPT_LICENSE}" ; do 1135 for alic in ${ACCEPT_LICENSE} ; do
968 [ "${alic}" == "*" ] && return 0 1136 [ "${alic}" == "*" ] && return 0
969 [ "${alic}" == "${l}" ] && return 0 1137 [ "${alic}" == "${l}" ] && return 0
970 done 1138 done
971 1139
972 local licmsg="`mymktemp ${T}`" 1140 local licmsg="`mymktemp ${T}`"
1100# remember, you can only go forward in the cd chain, you can't go back. 1268# remember, you can only go forward in the cd chain, you can't go back.
1101cdrom_load_next_cd() { 1269cdrom_load_next_cd() {
1102 export CDROM_CURRENT_CD=$((CDROM_CURRENT_CD + 1)) 1270 export CDROM_CURRENT_CD=$((CDROM_CURRENT_CD + 1))
1103 local var= 1271 local var=
1104 1272
1273 if [ ! -z "${CD_ROOT}" ] ; then
1274 einfo "Using same root as before for CD #${CDROM_CURRENT_CD}"
1275 return
1276 fi
1277
1105 unset CDROM_ROOT 1278 unset CDROM_ROOT
1106 var=CDROM_ROOTS_${CDROM_CURRENT_CD} 1279 var=CDROM_ROOTS_${CDROM_CURRENT_CD}
1107 if [ -z "${!var}" ] ; then 1280 if [ -z "${!var}" ] ; then
1108 var="CDROM_CHECK_${CDROM_CURRENT_CD}" 1281 var="CDROM_CHECK_${CDROM_CURRENT_CD}"
1109 cdrom_locate_file_on_cd ${!var} 1282 cdrom_locate_file_on_cd ${!var}
1157 einfo "or hit CTRL+C to abort the emerge." 1330 einfo "or hit CTRL+C to abort the emerge."
1158 read 1331 read
1159 fi 1332 fi
1160 done 1333 done
1161} 1334}
1335
1336# Make sure that LINGUAS only contains languages that
1337# a package can support
1338#
1339# usage: strip-linguas <allow LINGUAS>
1340# strip-linguas -i <directories of .po files>
1341# strip-linguas -u <directories of .po files>
1342#
1343# The first form allows you to specify a list of LINGUAS.
1344# The -i builds a list of po files found in all the
1345# directories and uses the intersection of the lists.
1346# The -u builds a list of po files found in all the
1347# directories and uses the union of the lists.
1348strip-linguas() {
1349 local ls newls
1350 if [ "$1" == "-i" ] || [ "$1" == "-u" ] ; then
1351 local op="$1"; shift
1352 ls=" $(find "$1" -name '*.po' -printf '%f ') "; shift
1353 local d f
1354 for d in "$@" ; do
1355 if [ "${op}" == "-u" ] ; then
1356 newls="${ls}"
1357 else
1358 newls=""
1359 fi
1360 for f in $(find "$d" -name '*.po' -printf '%f ') ; do
1361 if [ "${op}" == "-i" ] ; then
1362 [ "${ls/ ${f} /}" != "${ls}" ] && newls="${newls} ${f}"
1363 else
1364 [ "${ls/ ${f} /}" == "${ls}" ] && newls="${newls} ${f}"
1365 fi
1366 done
1367 ls="${newls}"
1368 done
1369 ls="${ls//.po}"
1370 else
1371 ls="$@"
1372 fi
1373
1374 ls=" ${ls} "
1375 newls=""
1376 for f in ${LINGUAS} ; do
1377 if [ "${ls/ ${f} /}" != "${ls}" ] ; then
1378 nl="${newls} ${f}"
1379 else
1380 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA"
1381 fi
1382 done
1383 if [ -z "${newls}" ] ; then
1384 unset LINGUAS
1385 else
1386 export LINGUAS="${newls}"
1387 fi
1388}

Legend:
Removed from v.1.78  
changed lines
  Added in v.1.104

  ViewVC Help
Powered by ViewVC 1.1.20