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

Diff of /eclass/eutils.eclass

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

Revision 1.157 Revision 1.166
1# Copyright 1999-2005 Gentoo Foundation 1# Copyright 1999-2005 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.157 2005/03/07 17:45:07 carlo Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.166 2005/04/15 22:01:42 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.
14INHERITED="$INHERITED $ECLASS" 14INHERITED="$INHERITED $ECLASS"
15 15
16DEPEND="!bootstrap? ( sys-devel/patch )" 16DEPEND="!bootstrap? ( sys-devel/patch )"
17 17
18DESCRIPTION="Based on the ${ECLASS} eclass" 18DESCRIPTION="Based on the ${ECLASS} eclass"
19
20# ecpu_check
21# Usage:
22#
23# ecpu_check array_of_cpu_flags
24#
25# array_of_cpu_flags - An array of cpu flags to check against USE flags
26#
27# Checks user USE related cpu flags against /proc/cpuinfo. If user enables a
28# cpu flag that is not supported in their processor flags, it will warn the
29# user if CROSSCOMPILE is not set to 1 ( because cross compile users are
30# obviously using different cpu flags than their own cpu ). Examples:
31#
32# CPU_FLAGS=(mmx mmx2 sse sse2)
33# ecpu_check CPU_FLAGS
34# Chris White <chriswhite@gentoo.org> (03 Feb 2005)
35
36ecpu_check() {
37 # Think about changing below to: if [ "${CROSSCOMPILE}" -ne 1 -a -e "/proc/cpuinfo" ]
38 # and dropping the else if you do not plan on adding anything to that
39 # empty block ....
40 # PS: also try to add some quoting, and consider rather using ${foo} than $foo ...
41 if [ "${CROSSCOMPILE}" != "1" -a -e "/proc/cpuinfo" ]
42 then
43 CPU_FLAGS=${1}
44 USER_CPU=`grep "flags" /proc/cpuinfo`
45
46 for flags in `seq 1 ${#CPU_FLAGS[@]}`
47 do
48 if has ${CPU_FLAGS[${flags} - 1]} ${USER_CPU} && ! has ${CPU_FLAGS[${flags} - 1]} ${USE}
49 then
50 ewarn "Your system is ${CPU_FLAGS[${flags} - 1]} capable but you don't have it enabled!"
51 ewarn "You might be cross compiling (in this case set CROSSCOMPILE to 1 to disable this warning."
52 fi
53
54 if ! has ${CPU_FLAGS[${flags} - 1]} ${USER_CPU} && has ${CPU_FLAGS[${flags} -1]} ${USE}
55 then
56 ewarn "You have ${CPU_FLAGS[${flags} - 1]} support enabled but your processor doesn't"
57 ewarn "Seem to support it! You might be cross compiling or do not have /proc filesystem"
58 ewarn "enabled. If either is the case, set CROSSCOMPILE to 1 to disable this warning."
59 fi
60 done
61 fi
62}
63 19
64# Wait for the supplied number of seconds. If no argument is supplied, defaults 20# Wait for the supplied number of seconds. If no argument is supplied, defaults
65# to five seconds. If the EPAUSE_IGNORE env var is set, don't wait. If we're not 21# to five seconds. If the EPAUSE_IGNORE env var is set, don't wait. If we're not
66# outputting to a terminal, don't wait. For compatability purposes, the argument 22# outputting to a terminal, don't wait. For compatability purposes, the argument
67# must be an integer greater than zero. 23# must be an integer greater than zero.
109gen_usr_ldscript() { 65gen_usr_ldscript() {
110 local libdir="$(get_libdir)" 66 local libdir="$(get_libdir)"
111 # Just make sure it exists 67 # Just make sure it exists
112 dodir /usr/${libdir} 68 dodir /usr/${libdir}
113 69
70 for lib in "${@}" ; do
114 cat > "${D}/usr/${libdir}/${1}" << END_LDSCRIPT 71 cat > "${D}/usr/${libdir}/${lib}" <<-END_LDSCRIPT
115/* GNU ld script 72 /* GNU ld script
116 Because Gentoo have critical dynamic libraries 73 Since Gentoo has critical dynamic libraries
117 in /lib, and the static versions in /usr/lib, we 74 in /lib, and the static versions in /usr/lib,
118 need to have a "fake" dynamic lib in /usr/lib, 75 we need to have a "fake" dynamic lib in /usr/lib,
119 otherwise we run into linking problems. 76 otherwise we run into linking problems.
120 See bug #4411 on http://bugs.gentoo.org/ for 77
121 more info. */ 78 See bug http://bugs.gentoo.org/4411 for more info.
79 */
122GROUP ( /${libdir}/${1} ) 80 GROUP ( /${libdir}/${lib} )
123END_LDSCRIPT 81 END_LDSCRIPT
124 fperms a+x "/usr/${libdir}/${1}" 82 fperms a+x "/usr/${libdir}/${lib}"
83 done
125} 84}
126 85
127# Simple function to draw a line consisting of '=' the same length as $* 86# Simple function to draw a line consisting of '=' the same length as $*
87# - only to be used by epatch()
128# 88#
129# <azarah@gentoo.org> (11 Nov 2002) 89# <azarah@gentoo.org> (11 Nov 2002)
130# 90#
131draw_line() { 91draw_line() {
132 local i=0 92 local i=0
386 fi 346 fi
387 347
388 if [ "${count}" -eq 5 ] 348 if [ "${count}" -eq 5 ]
389 then 349 then
390 echo 350 echo
391 eerror "Failed Patch: ${patchname}!" 351 eerror "Failed Patch: ${patchname} !"
352 eerror " ( ${PATCH_TARGET} )"
392 eerror 353 eerror
393 eerror "Include in your bugreport the contents of:" 354 eerror "Include in your bugreport the contents of:"
394 eerror 355 eerror
395 eerror " ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}" 356 eerror " ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}"
396 echo 357 echo
912# a full path to an icon 873# a full path to an icon
913# type: what kind of application is this ? for categories: 874# type: what kind of application is this ? for categories:
914# http://www.freedesktop.org/wiki/Standards_2fmenu_2dspec 875# http://www.freedesktop.org/wiki/Standards_2fmenu_2dspec
915# path: if your app needs to startup in a specific dir 876# path: if your app needs to startup in a specific dir
916make_desktop_entry() { 877make_desktop_entry() {
917 [ -z "$1" ] && eerror "make_desktop_entry: You must specify the executable" && return 1 878 [[ -z $1 ]] && eerror "make_desktop_entry: You must specify the executable" && return 1
918 879
919 local exec="${1}" 880 local exec=${1}
920 local name="${2:-${PN}}" 881 local name=${2:-${PN}}
921 local icon="${3:-${PN}.png}" 882 local icon=${3:-${PN}.png}
922 local type="${4}" 883 local type=${4}
923 local subdir="${6}" 884 local path=${5}
924 local path="${5:-${GAMES_BINDIR}}" 885
925 if [ -z "${type}" ] 886 if [[ -z ${type} ]] ; then
926 then 887 local catmaj=${CATEGORY%%-*}
927 case ${CATEGORY} in 888 local catmin=${CATEGORY##*-}
928 "app-emulation") 889 case ${catmaj} in
929 type=Emulator 890 app)
930 subdir="Emulation" 891 case ${catmin} in
892 admin) type=System;;
893 cdr) type=DiscBurning;;
894 dicts) type=Dictionary;;
895 editors) type=TextEditor;;
896 emacs) type=TextEditor;;
897 emulation) type=Emulator;;
898 laptop) type=HardwareSettings;;
899 office) type=Office;;
900 vim) type=TextEditor;;
901 xemacs) type=TextEditor;;
902 *) type=;;
903 esac
931 ;; 904 ;;
932 "games-"*) 905
933 type=Game 906 dev)
934 subdir="Games" 907 type="Development"
935 ;; 908 ;;
936 "net-"*) 909
937 type=Network 910 games)
938 subdir="${type}" 911 [[ -z ${path} ]] && path=${GAMES_BINDIR}
912
913 case ${catmin} in
914 action) type=ActionGame;;
915 arcade) type=ArcadeGame;;
916 board) type=BoardGame;;
917 kid) type=KidsGame;;
918 emulation) type=Emulator;;
919 puzzle) type=LogicGame;;
920 rpg) type=RolePlaying;;
921 roguelike) type=RolePlaying;;
922 simulation) type=Simulation;;
923 sports) type=SportsGame;;
924 strategy) type=StrategyGame;;
925 *) type=;;
926 esac
927 type="Game;${type}"
939 ;; 928 ;;
929
930 mail)
931 type="Network;Email"
932 ;;
933
934 media)
935 case ${catmin} in
936 gfx) type=Graphics;;
937 radio) type=Tuner;;
938 sound) type=Audio;;
939 tv) type=TV;;
940 video) type=Video;;
941 *) type=;;
942 esac
943 type="AudioVideo;${type}"
944 ;;
945
946 net)
947 case ${catmin} in
948 dialup) type=Dialup;;
949 ftp) type=FileTransfer;;
950 im) type=InstantMessaging;;
951 irc) type=IRCClient;;
952 mail) type=Email;;
953 news) type=News;;
954 nntp) type=News;;
955 p2p) type=FileTransfer;;
956 *) type=;;
957 esac
958 type="Network;${type}"
959 ;;
960
961 sci)
962 case ${catmin} in
963 astro*) type=Astronomoy;;
964 bio*) type=Biology;;
965 calc*) type=Calculator;;
966 chem*) type=Chemistry;;
967 geo*) type=Geology;;
968 math*) type=Math;;
969 *) type=;;
970 esac
971 type="Science;${type}"
972 ;;
973
974 www)
975 case ${catmin} in
976 client) type=WebBrowser;;
977 *) type=;;
978 esac
979 type="Network"
980 ;;
981
940 *) 982 *)
941 type= 983 type=
942 subdir=
943 ;; 984 ;;
944 esac 985 esac
945 fi 986 fi
987
946 local desktop="${T}/${exec%% *}-${P}.desktop" 988 local desktop=${T}/${exec%% *}-${P}.desktop
947 989
948echo "[Desktop Entry] 990echo "[Desktop Entry]
949Encoding=UTF-8 991Encoding=UTF-8
950Version=0.9.2 992Version=0.9.2
951Name=${name} 993Name=${name}
1513 else 1555 else
1514 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA" 1556 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA"
1515 fi 1557 fi
1516 done 1558 done
1517 if [[ -z ${newls} ]] ; then 1559 if [[ -z ${newls} ]] ; then
1518 unset LINGUAS 1560 export LINGUAS=""
1519 else 1561 else
1520 export LINGUAS=${newls:1} 1562 export LINGUAS=${newls:1}
1521 fi 1563 fi
1522} 1564}
1523 1565
1656 [[ -z $1 ]] && die "dopamd requires at least one argument" 1698 [[ -z $1 ]] && die "dopamd requires at least one argument"
1657 1699
1658 use pam || return 0 1700 use pam || return 0
1659 1701
1660 insinto /etc/pam.d 1702 insinto /etc/pam.d
1661 # these are the default doins options, but be explicit just in case
1662 insopts -m 0644 -o root -g root
1663 doins "$@" || die "failed to install $@" 1703 doins "$@" || die "failed to install $@"
1664} 1704}
1665# newpamd <old name> <new name> 1705# newpamd <old name> <new name>
1666# 1706#
1667# Install pam file <old name> as <new name> in /etc/pam.d 1707# Install pam file <old name> as <new name> in /etc/pam.d
1669 [[ $# -ne 2 ]] && die "newpamd requires two arguements" 1709 [[ $# -ne 2 ]] && die "newpamd requires two arguements"
1670 1710
1671 use pam || return 0 1711 use pam || return 0
1672 1712
1673 insinto /etc/pam.d 1713 insinto /etc/pam.d
1674 # these are the default doins options, but be explicit just in case
1675 insopts -m 0644 -o root -g root
1676 newins "$1" "$2" || die "failed to install $1 as $2" 1714 newins "$1" "$2" || die "failed to install $1 as $2"
1677} 1715}
1716
1717# make a wrapper script ...
1718# NOTE: this was originally games_make_wrapper, but I noticed other places where
1719# this could be used, so I have moved it here and made it not games-specific
1720# -- wolf31o2
1721# $1 == wrapper name
1722# $2 == binary to run
1723# $3 == directory to chdir before running binary
1724# $4 == extra LD_LIBRARY_PATH's (make it : delimited)
1725# $5 == path for wrapper
1726make_wrapper() {
1727 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5
1728 local tmpwrapper=$(emktemp)
1729 cat << EOF > "${tmpwrapper}"
1730#!/bin/sh
1731cd "${chdir}"
1732export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}"
1733exec ${bin} "\$@"
1734EOF
1735 chmod go+rx "${tmpwrapper}"
1736 if [ -n "${5}" ]
1737 then
1738 exeinto ${5}
1739 newexe "${tmpwrapper}" "${wrapper}"
1740 else
1741 newbin "${tmpwrapper}" "${wrapper}"
1742 fi
1743}

Legend:
Removed from v.1.157  
changed lines
  Added in v.1.166

  ViewVC Help
Powered by ViewVC 1.1.20