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

Diff of /eclass/eutils.eclass

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

Revision 1.135 Revision 1.144
1# Copyright 1999-2004 Gentoo Foundation 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.135 2004/12/31 11:28:18 eradicator Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.144 2005/02/03 22:11:33 chriswhite 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.
9# 9#
10# NB: If you add anything, please comment it! 10# NB: If you add anything, please comment it!
11 11
12inherit multilib
12ECLASS=eutils 13ECLASS=eutils
13INHERITED="$INHERITED $ECLASS" 14INHERITED="$INHERITED $ECLASS"
14 15
15DEPEND="!bootstrap? ( sys-devel/patch )" 16DEPEND="!bootstrap? ( sys-devel/patch )"
16 17
17DESCRIPTION="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 CPU_FLAGS=$1
38 USER_CPU=`grep "flags" /proc/cpuinfo`
39
40 for flags in `seq 1 ${#CPU_FLAGS[@]}`
41 do
42 if has ${CPU_FLAGS[$flags - 1]} $USER_CPU && ! has ${CPU_FLAGS[$flags - 1]} $USE
43 then
44 ewarn "Your system is ${CPU_FLAGS[$flags - 1]} capable but you don't have it enabled!"
45 ewarn "You might be cross compiling (in this case set CROSSCOMPILE to 1 to disable this warning."
46 fi
47
48 if ! has ${CPU_FLAGS[$flags - 1]} $USER_CPU && has ${CPU_FLAGS[$flags -1]} $USE
49 then
50 ewarn "You have ${CPU_FLAGS[$flags - 1]} support enabled but your processor doesn't"
51 ewarn "Seem to support it! You might be cross compiling or do not have /proc filesystem"
52 ewarn "enabled. If either is the case, set CROSSCOMPILE to 1 to disable this warning."
53 fi
54 done
55}
18 56
19# Wait for the supplied number of seconds. If no argument is supplied, defaults 57# 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 58# 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 59# outputting to a terminal, don't wait. For compatability purposes, the argument
22# must be an integer greater than zero. 60# must be an integer greater than zero.
41 sleep 1 79 sleep 1
42 done 80 done
43 fi 81 fi
44} 82}
45 83
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)
53#
54# Jeremy Huddleston <eradicator@gentoo.org> (23 Dec 2004):
55# Added support for ${ABI} and ${DEFAULT_ABI}. If they're both not set,
56# fall back on old behavior. Any profile that has these set should also
57# depend on a newer version of portage (not yet released) which uses these
58# over CONF_LIBDIR in econf, dolib, etc...
59get_libdir() {
60 LIBDIR_TEST=$(type econf)
61 if [ ! -z "${CONF_LIBDIR_OVERRIDE}" ] ; then
62 # if there is an override, we want to use that... always.
63 CONF_LIBDIR="${CONF_LIBDIR_OVERRIDE}"
64 # We don't need to know the verison of portage. We only need to know
65 # if there is support for CONF_LIBDIR in econf and co.
66 # Danny van Dyk <kugelfang@gentoo.org> 2004/17/09
67 #elif portageq has_version / '<sys-apps/portage-2.0.51_pre20' ; then
68 # # and if there isnt an override, and we're using a version of
69 # # portage without CONF_LIBDIR support, force the use of lib. dolib
70 # # and friends from portage 2.0.50 wont be too happy otherwise.
71 # CONF_LIBDIR="lib"
72 #fi
73 elif [ -n "$(get_abi_LIBDIR)" ]; then # Using eradicator's LIBDIR_<abi> approach...
74 CONF_LIBDIR="$(get_abi_LIBDIR)"
75 elif [ "${LIBDIR_TEST/CONF_LIBDIR}" == "${LIBDIR_TEST}" ]; then # we don't have CONF_LIBDIR support
76 # will be <portage-2.0.51_pre20
77 CONF_LIBDIR="lib"
78 fi
79 # and of course, default to lib if CONF_LIBDIR isnt set
80 echo ${CONF_LIBDIR:=lib}
81 unset LIBDIR_TEST
82}
83
84get_multilibdir() {
85 [ -n "$(get_abi_LIBDIR)" ] && die "get_multilibdir called, but it shouldn't be needed with the new multilib approach. Please file a bug at http://bugs.gentoo.org and assign it to eradicator@gentoo.org"
86 echo ${CONF_MULTILIBDIR:=lib32}
87}
88
89# Sometimes you need to override the value returned by get_libdir. A good
90# example of this is xorg-x11, where lib32 isnt a supported configuration,
91# and where lib64 -must- be used on amd64 (for applications that need lib
92# to be 32bit, such as adobe acrobat). Note that this override also bypasses
93# portage version sanity checking.
94# get_libdir_override expects one argument, the result get_libdir should
95# return:
96#
97# get_libdir_override lib64
98#
99# Travis Tilley <lv@gentoo.org> (31 Aug 2004)
100get_libdir_override() {
101 [ -n "$(get_abi_LIBDIR)" ] && die "get_libdir_override called, but it shouldn't be needed with the new multilib approach. Please file a bug at http://bugs.gentoo.org and assign it to eradicator@gentoo.org"
102 CONF_LIBDIR="$1"
103 CONF_LIBDIR_OVERRIDE="$1"
104}
105
106# This function generate linker scripts in /usr/lib for dynamic 84# This function generate linker scripts in /usr/lib for dynamic
107# libs in /lib. This is to fix linking problems when you have 85# libs in /lib. This is to fix linking problems when you have
108# the .so in /lib, and the .a in /usr/lib. What happens is that 86# the .so in /lib, and the .a in /usr/lib. What happens is that
109# in some cases when linking dynamic, the .a in /usr/lib is used 87# in some cases when linking dynamic, the .a in /usr/lib is used
110# instead of the .so in /lib due to gcc/libtool tweaking ld's 88# instead of the .so in /lib due to gcc/libtool tweaking ld's
264 242
265 echo 243 echo
266 eerror "Cannot find \$EPATCH_SOURCE! Value for \$EPATCH_SOURCE is:" 244 eerror "Cannot find \$EPATCH_SOURCE! Value for \$EPATCH_SOURCE is:"
267 eerror 245 eerror
268 eerror " ${EPATCH_SOURCE}" 246 eerror " ${EPATCH_SOURCE}"
247 eerror " ( ${EPATCH_SOURCE##*/} )"
269 echo 248 echo
270 die "Cannot find \$EPATCH_SOURCE!" 249 die "Cannot find \$EPATCH_SOURCE!"
271 fi 250 fi
272 251
273 local EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}" 252 local EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}"
1540# the following functions are useful in kernel module ebuilds, etc. 1519# the following functions are useful in kernel module ebuilds, etc.
1541# for an example see ivtv or drbd ebuilds 1520# for an example see ivtv or drbd ebuilds
1542 1521
1543# set's ARCH to match what the kernel expects 1522# set's ARCH to match what the kernel expects
1544set_arch_to_kernel() { 1523set_arch_to_kernel() {
1524 i=10
1525 while ((i--)) ; do
1526 ewarn "PLEASE UPDATE TO YOUR PACKAGE TO USE linux-info.eclass"
1527 done
1545 export EUTILS_ECLASS_PORTAGE_ARCH="${ARCH}" 1528 export EUTILS_ECLASS_PORTAGE_ARCH="${ARCH}"
1546 case ${ARCH} in 1529 case ${ARCH} in
1547 x86) export ARCH="i386";; 1530 x86) export ARCH="i386";;
1548 amd64) export ARCH="x86_64";; 1531 amd64) export ARCH="x86_64";;
1549 hppa) export ARCH="parisc";; 1532 hppa) export ARCH="parisc";;
1550 mips) export ARCH="mips";; 1533 mips) export ARCH="mips";;
1534 sparc) export ARCH="$(tc-arch-kernel)";; # Yeah this is ugly, but it's even WORSE if you don't do this. linux-info.eclass's set_arch_to_kernel is fixed, but won't get used over this one!
1551 *) export ARCH="${ARCH}";; 1535 *) export ARCH="${ARCH}";;
1552 esac 1536 esac
1553} 1537}
1554 1538
1555# set's ARCH back to what portage expects 1539# set's ARCH back to what portage expects
1556set_arch_to_portage() { 1540set_arch_to_portage() {
1541 i=10
1542 while ((i--)) ; do
1543 ewarn "PLEASE UPDATE TO YOUR PACKAGE TO USE linux-info.eclass"
1544 done
1557 export ARCH="${EUTILS_ECLASS_PORTAGE_ARCH}" 1545 export ARCH="${EUTILS_ECLASS_PORTAGE_ARCH}"
1558} 1546}
1559 1547
1560# Jeremy Huddleston <eradicator@gentoo.org>: 1548# Jeremy Huddleston <eradicator@gentoo.org>:
1561# preserve_old_lib /path/to/libblah.so.0 1549# preserve_old_lib /path/to/libblah.so.0
1607 einfo "After doing that, you can safely remove ${LIB}" 1595 einfo "After doing that, you can safely remove ${LIB}"
1608 einfo "Note: 'emerge gentoolkit' to get revdep-rebuild" 1596 einfo "Note: 'emerge gentoolkit' to get revdep-rebuild"
1609 fi 1597 fi
1610} 1598}
1611 1599
1612# Hack for people to figure out if a package was built with 1600# Hack for people to figure out if a package was built with
1613# certain USE flags 1601# certain USE flags
1614# 1602#
1615# Usage: built_with_use [-a|-o] <DEPEND ATOM> <List of USE flags> 1603# Usage: built_with_use [-a|-o] <DEPEND ATOM> <List of USE flags>
1616# ex: built_with_use xchat gtk2 1604# ex: built_with_use xchat gtk2
1617# 1605#
1638 shift 1626 shift
1639 done 1627 done
1640 [[ ${opt} = "-a" ]] 1628 [[ ${opt} = "-a" ]]
1641} 1629}
1642 1630
1643# Many configure scripts wrongly bail when a C++ compiler 1631# Many configure scripts wrongly bail when a C++ compiler
1644# could not be detected. #73450 1632# could not be detected. #73450
1645epunt_cxx() { 1633epunt_cxx() {
1646 local dir=$1 1634 local dir=$1
1647 [[ -z ${dir} ]] && dir=${S} 1635 [[ -z ${dir} ]] && dir=${S}
1648 ebegin "Removing useless C++ checks" 1636 ebegin "Removing useless C++ checks"
1651 patch -p0 "${f}" "${PORTDIR}/eclass/ELT-patches/nocxx/nocxx.patch" > /dev/null 1639 patch -p0 "${f}" "${PORTDIR}/eclass/ELT-patches/nocxx/nocxx.patch" > /dev/null
1652 done 1640 done
1653 eend 0 1641 eend 0
1654} 1642}
1655 1643
1656# get_abi_var <VAR> [<ABI>] 1644# dopamd [ file ] [ new file ]
1657# returns the value of ${<VAR>_<ABI>} which should be set in make.defaults
1658# 1645#
1659# ex: 1646# Install pam auth config file in /etc/pam.d
1660# CFLAGS=$(get_abi_var CFLAGS sparc32) # CFLAGS=-m32
1661# 1647#
1662# Note that the prefered method is to set CC="$(tc-getCC) $(get_abi_CFLAGS)" 1648# The first argument, 'file' is required. Install as 'new file', if
1663# This will hopefully be added to portage soon... 1649# specified.
1664#
1665# If <ABI> is not specified, ${ABI} is used.
1666# If <ABI> is not specified and ${ABI} is not defined, ${DEFAULT_ABI} is used.
1667# If <ABI> is not specified and ${ABI} and ${DEFAULT_ABI} are not defined, we return an empty string.
1668#
1669# Jeremy Huddleston <eradicator@gentoo.org>
1670get_abi_var() {
1671 local flag=$1
1672 local abi
1673 if [ $# -gt 1 ]; then
1674 abi=$1
1675 elif [ -n "${ABI}" ]; then
1676 abi=${ABI}
1677 elif [ -n "${DEFAULT_ABI}" ]; then
1678 abi=${DEFAULT_ABI}
1679 else
1680 return 1
1681 fi
1682 eval echo \${${flag}_${abi}}
1683}
1684 1650
1685get_abi_CFLAGS() { get_abi_var CFLAGS $1; } 1651dopamd() {
1686get_abi_CXXFLAGS() { get_abi_var CXXFLAGS $1; } 1652 local pamd="$1" newpamd="${2:-$1}"
1687get_abi_ASFLAGS() { get_abi_var ASFLAGS $1; } 1653 [[ -z "$1" ]] && die "dopamd requires at least one argument."
1688get_abi_LIBDIR() { get_abi_var LIBDIR $1; }
1689 1654
1655 use pam || return 0
1656
1657 insinto /etc/pam.d
1658 # these are the default doins options, but be explicit just in case
1659 insopts -m 0644 -o root -g root
1660 newins ${pamd} ${newpamd} || die "failed to install ${newpamd}"
1661}

Legend:
Removed from v.1.135  
changed lines
  Added in v.1.144

  ViewVC Help
Powered by ViewVC 1.1.20