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

Diff of /eclass/eutils.eclass

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

Revision 1.133 Revision 1.143
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.133 2004/12/29 18:19:04 lanius Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.143 2005/01/26 16:19:12 ka0ttic 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
41 sleep 1 42 sleep 1
42 done 43 done
43 fi 44 fi
44} 45}
45 46
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...
59#
60# For now, this is restricted to the sparc64-multilib ${PROFILE_ARCH} as it
61# is still in testing.
62get_libdir() {
63 LIBDIR_TEST=$(type econf)
64 if [ ! -z "${CONF_LIBDIR_OVERRIDE}" ] ; then
65 # if there is an override, we want to use that... always.
66 CONF_LIBDIR="${CONF_LIBDIR_OVERRIDE}"
67 # We don't need to know the verison of portage. We only need to know
68 # if there is support for CONF_LIBDIR in econf and co.
69 # Danny van Dyk <kugelfang@gentoo.org> 2004/17/09
70 #elif portageq has_version / '<sys-apps/portage-2.0.51_pre20' ; then
71 # # and if there isnt an override, and we're using a version of
72 # # portage without CONF_LIBDIR support, force the use of lib. dolib
73 # # and friends from portage 2.0.50 wont be too happy otherwise.
74 # CONF_LIBDIR="lib"
75 #fi
76 elif [ "${PROFILE_ARCH}" = "sparc64-multilib" ]; then # Using eradicator's LIBDIR_<abi> approach...
77 CONF_LIBDIR="$(get_abi_LIBDIR)"
78 elif [ "${LIBDIR_TEST/CONF_LIBDIR}" == "${LIBDIR_TEST}" ]; then # we don't have CONF_LIBDIR support
79 # will be <portage-2.0.51_pre20
80 CONF_LIBDIR="lib"
81 fi
82 # and of course, default to lib if CONF_LIBDIR isnt set
83 echo ${CONF_LIBDIR:=lib}
84 unset LIBDIR_TEST
85}
86
87get_multilibdir() {
88 [ "${PROFILE_ARCH}" = "sparc64-multilib" ] && die "get_multilibdir called, but it shouldn't be needed on sparc64-multilib"
89 echo ${CONF_MULTILIBDIR:=lib32}
90}
91
92# Sometimes you need to override the value returned by get_libdir. A good
93# example of this is xorg-x11, where lib32 isnt a supported configuration,
94# and where lib64 -must- be used on amd64 (for applications that need lib
95# to be 32bit, such as adobe acrobat). Note that this override also bypasses
96# portage version sanity checking.
97# get_libdir_override expects one argument, the result get_libdir should
98# return:
99#
100# get_libdir_override lib64
101#
102# Travis Tilley <lv@gentoo.org> (31 Aug 2004)
103get_libdir_override() {
104 [ "${PROFILE_ARCH}" = "sparc64-multilib" ] && die "get_libdir_override called, but it shouldn't be needed on sparc64-multilib..."
105 CONF_LIBDIR="$1"
106 CONF_LIBDIR_OVERRIDE="$1"
107}
108
109# This function generate linker scripts in /usr/lib for dynamic 47# This function generate linker scripts in /usr/lib for dynamic
110# libs in /lib. This is to fix linking problems when you have 48# libs in /lib. This is to fix linking problems when you have
111# the .so in /lib, and the .a in /usr/lib. What happens is that 49# the .so in /lib, and the .a in /usr/lib. What happens is that
112# in some cases when linking dynamic, the .a in /usr/lib is used 50# in some cases when linking dynamic, the .a in /usr/lib is used
113# instead of the .so in /lib due to gcc/libtool tweaking ld's 51# instead of the .so in /lib due to gcc/libtool tweaking ld's
267 205
268 echo 206 echo
269 eerror "Cannot find \$EPATCH_SOURCE! Value for \$EPATCH_SOURCE is:" 207 eerror "Cannot find \$EPATCH_SOURCE! Value for \$EPATCH_SOURCE is:"
270 eerror 208 eerror
271 eerror " ${EPATCH_SOURCE}" 209 eerror " ${EPATCH_SOURCE}"
210 eerror " ( ${EPATCH_SOURCE##*/} )"
272 echo 211 echo
273 die "Cannot find \$EPATCH_SOURCE!" 212 die "Cannot find \$EPATCH_SOURCE!"
274 fi 213 fi
275 214
276 local EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}" 215 local EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}"
1543# the following functions are useful in kernel module ebuilds, etc. 1482# the following functions are useful in kernel module ebuilds, etc.
1544# for an example see ivtv or drbd ebuilds 1483# for an example see ivtv or drbd ebuilds
1545 1484
1546# set's ARCH to match what the kernel expects 1485# set's ARCH to match what the kernel expects
1547set_arch_to_kernel() { 1486set_arch_to_kernel() {
1487 i=10
1488 while ((i--)) ; do
1489 ewarn "PLEASE UPDATE TO YOUR PACKAGE TO USE linux-info.eclass"
1490 done
1548 export EUTILS_ECLASS_PORTAGE_ARCH="${ARCH}" 1491 export EUTILS_ECLASS_PORTAGE_ARCH="${ARCH}"
1549 case ${ARCH} in 1492 case ${ARCH} in
1550 x86) export ARCH="i386";; 1493 x86) export ARCH="i386";;
1551 amd64) export ARCH="x86_64";; 1494 amd64) export ARCH="x86_64";;
1552 hppa) export ARCH="parisc";; 1495 hppa) export ARCH="parisc";;
1553 mips) export ARCH="mips";; 1496 mips) export ARCH="mips";;
1497 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!
1554 *) export ARCH="${ARCH}";; 1498 *) export ARCH="${ARCH}";;
1555 esac 1499 esac
1556} 1500}
1557 1501
1558# set's ARCH back to what portage expects 1502# set's ARCH back to what portage expects
1559set_arch_to_portage() { 1503set_arch_to_portage() {
1504 i=10
1505 while ((i--)) ; do
1506 ewarn "PLEASE UPDATE TO YOUR PACKAGE TO USE linux-info.eclass"
1507 done
1560 export ARCH="${EUTILS_ECLASS_PORTAGE_ARCH}" 1508 export ARCH="${EUTILS_ECLASS_PORTAGE_ARCH}"
1561} 1509}
1562 1510
1563# Jeremy Huddleston <eradicator@gentoo.org>: 1511# Jeremy Huddleston <eradicator@gentoo.org>:
1564# preserve_old_lib /path/to/libblah.so.0 1512# preserve_old_lib /path/to/libblah.so.0
1594 touch ${D}${LIB} 1542 touch ${D}${LIB}
1595 fi 1543 fi
1596} 1544}
1597 1545
1598preserve_old_lib_notify() { 1546preserve_old_lib_notify() {
1599 LIB=$1 1547 LIB=$1
1600 1548
1601 if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then 1549 if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then
1602 SONAME=`basename ${LIB}` 1550 SONAME=`basename ${LIB}`
1603 1551
1604 einfo "An old version of an installed library was detected on your system." 1552 einfo "An old version of an installed library was detected on your system."
1605 einfo "In order to avoid breaking packages that link against is, this older version" 1553 einfo "In order to avoid breaking packages that link against is, this older version"
1606 einfo "is not being removed. In order to make full use of this newer version," 1554 einfo "is not being removed. In order to make full use of this newer version,"
1607 einfo "you will need to execute the following command:" 1555 einfo "you will need to execute the following command:"
1608 einfo " revdep-rebuild --soname ${SONAME}" 1556 einfo " revdep-rebuild --soname ${SONAME}"
1609 einfo 1557 einfo
1610 einfo "After doing that, you can safely remove ${LIB}" 1558 einfo "After doing that, you can safely remove ${LIB}"
1611 einfo "Note: 'emerge gentoolkit' to get revdep-rebuild" 1559 einfo "Note: 'emerge gentoolkit' to get revdep-rebuild"
1612 fi 1560 fi
1613} 1561}
1614 1562
1615# Hack for people to figure out if a package was built with 1563# Hack for people to figure out if a package was built with
1616# certain USE flags 1564# certain USE flags
1617# 1565#
1618# Usage: built_with_use [-a|-o] <DEPEND ATOM> <List of USE flags> 1566# Usage: built_with_use [-a|-o] <DEPEND ATOM> <List of USE flags>
1619# ex: built_with_use xchat gtk2 1567# ex: built_with_use xchat gtk2
1620# 1568#
1641 shift 1589 shift
1642 done 1590 done
1643 [[ ${opt} = "-a" ]] 1591 [[ ${opt} = "-a" ]]
1644} 1592}
1645 1593
1646# Many configure scripts wrongly bail when a C++ compiler 1594# Many configure scripts wrongly bail when a C++ compiler
1647# could not be detected. #73450 1595# could not be detected. #73450
1648epunt_cxx() { 1596epunt_cxx() {
1649 local dir=$1 1597 local dir=$1
1650 [[ -z ${dir} ]] && dir=${S} 1598 [[ -z ${dir} ]] && dir=${S}
1651 ebegin "Removing useless C++ checks" 1599 ebegin "Removing useless C++ checks"
1654 patch -p0 "${f}" "${PORTDIR}/eclass/ELT-patches/nocxx/nocxx.patch" > /dev/null 1602 patch -p0 "${f}" "${PORTDIR}/eclass/ELT-patches/nocxx/nocxx.patch" > /dev/null
1655 done 1603 done
1656 eend 0 1604 eend 0
1657} 1605}
1658 1606
1659# get_abi_var <VAR> [<ABI>] 1607# dopamd [ file ] [ new file ]
1660# returns the value of ${<VAR>_<ABI>} which should be set in make.defaults
1661# 1608#
1662# This code is for testing purposes only with the sparc64-multilib ${PROFILE_ARCH} 1609# Install pam auth config file in /etc/pam.d
1663# and getting a more multilib-aware portage layout. It may end up being used, but for now
1664# it is subject to removal if a better way is worked out.
1665#
1666# ex:
1667# CFLAGS=$(get_abi_var CFLAGS sparc32) # CFLAGS=-m32
1668# 1610#
1669# Note that the prefered method is to set CC="$(tc-getCC) $(get_abi_CFLAGS)" 1611# The first argument, 'file' is required. Install as 'new file', if
1670# This will hopefully be added to portage soon... 1612# specified.
1671#
1672# If <ABI> is not specified, ${ABI} is used.
1673# If <ABI> is not specified and ${ABI} is not defined, ${DEFAULT_ABI} is used.
1674# If <ABI> is not specified and ${ABI} and ${DEFAULT_ABI} are not defined, we return an empty string.
1675#
1676# Jeremy Huddleston <eradicator@gentoo.org>
1677get_abi_var() {
1678 local flag=$1
1679 local abi
1680 if [ $# -gt 1 ]; then
1681 abi=$1
1682 elif [ -n "${ABI}" ]; then
1683 abi=${ABI}
1684 elif [ -n "${DEFAULT_ABI}" ]; then
1685 abi=${DEFAULT_ABI}
1686 else
1687 return 1
1688 fi
1689 eval echo \${${flag}_${abi}}
1690}
1691 1613
1692get_abi_CFLAGS() { get_abi_var CFLAGS $1; } 1614dopamd() {
1693get_abi_CXXFLAGS() { get_abi_var CXXFLAGS $1; } 1615 local pamd="$1" newpamd="${2:-$1}"
1694get_abi_ASFLAGS() { get_abi_var ASFLAGS $1; } 1616 [[ -z "$1" ]] && die "dopamd requires at least one argument."
1695get_abi_LIBDIR() { get_abi_var LIBDIR $1; }
1696 1617
1618 use pam || return 0
1619
1620 insinto /etc/pam.d
1621 # these are the default doins options, but be explicit just in case
1622 insopts -m 0644 -o root -g root
1623 newins ${pamd} ${newpamd} || die "failed to install ${newpamd}"
1624}

Legend:
Removed from v.1.133  
changed lines
  Added in v.1.143

  ViewVC Help
Powered by ViewVC 1.1.20