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

Diff of /eclass/eutils.eclass

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

Revision 1.132 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.132 2004/12/26 22:23:35 vapier 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}"
906 cp "${f}" ${T}/edos2unix 845 cp "${f}" ${T}/edos2unix
907 sed 's/\r$//' ${T}/edos2unix > "${f}" 846 sed 's/\r$//' ${T}/edos2unix > "${f}"
908 done 847 done
909} 848}
910 849
850
851##############################################################
852# START: Handle .desktop files and menu entries #
853# maybe this should be separated into a new eclass some time #
854# lanius@gentoo.org #
855##############################################################
856
911# Make a desktop file ! 857# Make a desktop file !
912# Great for making those icons in kde/gnome startmenu ! 858# Great for making those icons in kde/gnome startmenu !
913# Amaze your friends ! Get the women ! Join today ! 859# Amaze your friends ! Get the women ! Join today !
914# 860#
915# make_desktop_entry(<binary>, [name], [icon], [type], [path]) 861# make_desktop_entry(<binary>, [name], [icon], [type], [path])
968 insinto /usr/share/applications 914 insinto /usr/share/applications
969 doins "${desktop}" 915 doins "${desktop}"
970 916
971 return 0 917 return 0
972} 918}
919
920# Make a GDM/KDM Session file
921#
922# make_desktop_entry(<title>, <command>)
923# title: File to execute to start the Window Manager
924# command: Name of the Window Manager
925
926make_session_desktop() {
927
928 [ -z "$1" ] && eerror "make_session_desktop: You must specify the title" && return 1
929 [ -z "$2" ] && eerror "make_session_desktop: You must specify the command" && return 1
930
931 local title="${1}"
932 local command="${2}"
933 local desktop="${T}/${wm}.desktop"
934
935echo "[Desktop Entry]
936Encoding=UTF-8
937Name=${title}
938Comment=This session logs you into ${title}
939Exec=${command}
940TryExec=${command}
941Type=Application" > "${desktop}"
942
943 insinto /usr/share/xsessions
944 doins "${desktop}"
945
946 return 0
947}
948
949domenu() {
950 local i
951 local j
952 insinto /usr/share/applications
953 for i in ${@}
954 do
955 if [ -f "${i}" ];
956 then
957 doins ${i}
958 elif [ -d "${i}" ];
959 then
960 for j in ${i}/*.desktop
961 do
962 doins ${j}
963 done
964 fi
965 done
966}
967
968doicon() {
969 local i
970 local j
971 insinto /usr/share/pixmaps
972 for i in ${@}
973 do
974 if [ -f "${i}" ];
975 then
976 doins ${i}
977 elif [ -d "${i}" ];
978 then
979 for j in ${i}/*.png
980 do
981 doins ${j}
982 done
983 fi
984 done
985}
986
987##############################################################
988# END: Handle .desktop files and menu entries #
989##############################################################
990
973 991
974# for internal use only (unpack_pdv and unpack_makeself) 992# for internal use only (unpack_pdv and unpack_makeself)
975find_unpackable_file() { 993find_unpackable_file() {
976 local src="$1" 994 local src="$1"
977 if [ -z "${src}" ] 995 if [ -z "${src}" ]
1464# the following functions are useful in kernel module ebuilds, etc. 1482# the following functions are useful in kernel module ebuilds, etc.
1465# for an example see ivtv or drbd ebuilds 1483# for an example see ivtv or drbd ebuilds
1466 1484
1467# set's ARCH to match what the kernel expects 1485# set's ARCH to match what the kernel expects
1468set_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
1469 export EUTILS_ECLASS_PORTAGE_ARCH="${ARCH}" 1491 export EUTILS_ECLASS_PORTAGE_ARCH="${ARCH}"
1470 case ${ARCH} in 1492 case ${ARCH} in
1471 x86) export ARCH="i386";; 1493 x86) export ARCH="i386";;
1472 amd64) export ARCH="x86_64";; 1494 amd64) export ARCH="x86_64";;
1473 hppa) export ARCH="parisc";; 1495 hppa) export ARCH="parisc";;
1474 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!
1475 *) export ARCH="${ARCH}";; 1498 *) export ARCH="${ARCH}";;
1476 esac 1499 esac
1477} 1500}
1478 1501
1479# set's ARCH back to what portage expects 1502# set's ARCH back to what portage expects
1480set_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
1481 export ARCH="${EUTILS_ECLASS_PORTAGE_ARCH}" 1508 export ARCH="${EUTILS_ECLASS_PORTAGE_ARCH}"
1482} 1509}
1483 1510
1484# Jeremy Huddleston <eradicator@gentoo.org>: 1511# Jeremy Huddleston <eradicator@gentoo.org>:
1485# preserve_old_lib /path/to/libblah.so.0 1512# preserve_old_lib /path/to/libblah.so.0
1515 touch ${D}${LIB} 1542 touch ${D}${LIB}
1516 fi 1543 fi
1517} 1544}
1518 1545
1519preserve_old_lib_notify() { 1546preserve_old_lib_notify() {
1520 LIB=$1 1547 LIB=$1
1521 1548
1522 if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then 1549 if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then
1523 SONAME=`basename ${LIB}` 1550 SONAME=`basename ${LIB}`
1524 1551
1525 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."
1526 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"
1527 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,"
1528 einfo "you will need to execute the following command:" 1555 einfo "you will need to execute the following command:"
1529 einfo " revdep-rebuild --soname ${SONAME}" 1556 einfo " revdep-rebuild --soname ${SONAME}"
1530 einfo 1557 einfo
1531 einfo "After doing that, you can safely remove ${LIB}" 1558 einfo "After doing that, you can safely remove ${LIB}"
1532 einfo "Note: 'emerge gentoolkit' to get revdep-rebuild" 1559 einfo "Note: 'emerge gentoolkit' to get revdep-rebuild"
1533 fi 1560 fi
1534} 1561}
1535 1562
1536# 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
1537# certain USE flags 1564# certain USE flags
1538# 1565#
1539# 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>
1540# ex: built_with_use xchat gtk2 1567# ex: built_with_use xchat gtk2
1541# 1568#
1562 shift 1589 shift
1563 done 1590 done
1564 [[ ${opt} = "-a" ]] 1591 [[ ${opt} = "-a" ]]
1565} 1592}
1566 1593
1567# Many configure scripts wrongly bail when a C++ compiler 1594# Many configure scripts wrongly bail when a C++ compiler
1568# could not be detected. #73450 1595# could not be detected. #73450
1569epunt_cxx() { 1596epunt_cxx() {
1570 local dir=$1 1597 local dir=$1
1571 [[ -z ${dir} ]] && dir=${S} 1598 [[ -z ${dir} ]] && dir=${S}
1572 ebegin "Removing useless C++ checks" 1599 ebegin "Removing useless C++ checks"
1575 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
1576 done 1603 done
1577 eend 0 1604 eend 0
1578} 1605}
1579 1606
1580# get_abi_var <VAR> [<ABI>] 1607# dopamd [ file ] [ new file ]
1581# returns the value of ${<VAR>_<ABI>} which should be set in make.defaults
1582# 1608#
1583# This code is for testing purposes only with the sparc64-multilib ${PROFILE_ARCH} 1609# Install pam auth config file in /etc/pam.d
1584# and getting a more multilib-aware portage layout. It may end up being used, but for now
1585# it is subject to removal if a better way is worked out.
1586#
1587# ex:
1588# CFLAGS=$(get_abi_var CFLAGS sparc32) # CFLAGS=-m32
1589# 1610#
1590# 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
1591# This will hopefully be added to portage soon... 1612# specified.
1592#
1593# If <ABI> is not specified, ${ABI} is used.
1594# If <ABI> is not specified and ${ABI} is not defined, ${DEFAULT_ABI} is used.
1595# If <ABI> is not specified and ${ABI} and ${DEFAULT_ABI} are not defined, we return an empty string.
1596#
1597# Jeremy Huddleston <eradicator@gentoo.org>
1598get_abi_var() {
1599 local flag=$1
1600 local abi
1601 if [ $# -gt 1 ]; then
1602 abi=$1
1603 elif [ -n "${ABI}" ]; then
1604 abi=${ABI}
1605 elif [ -n "${DEFAULT_ABI}" ]; then
1606 abi=${DEFAULT_ABI}
1607 else
1608 return 1
1609 fi
1610 eval echo \${${flag}_${abi}}
1611}
1612 1613
1613get_abi_CFLAGS() { get_abi_var CFLAGS $1; } 1614dopamd() {
1614get_abi_CXXFLAGS() { get_abi_var CXXFLAGS $1; } 1615 local pamd="$1" newpamd="${2:-$1}"
1615get_abi_ASFLAGS() { get_abi_var ASFLAGS $1; } 1616 [[ -z "$1" ]] && die "dopamd requires at least one argument."
1616get_abi_LIBDIR() { get_abi_var LIBDIR $1; }
1617 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.132  
changed lines
  Added in v.1.143

  ViewVC Help
Powered by ViewVC 1.1.20