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

Diff of /eclass/eutils.eclass

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

Revision 1.138 Revision 1.157
1# Copyright 1999-2004 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.138 2005/01/07 12:04:40 eradicator Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.157 2005/03/07 17:45:07 carlo 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 # 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}
18 63
19# Wait for the supplied number of seconds. If no argument is supplied, defaults 64# 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 65# 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 66# outputting to a terminal, don't wait. For compatability purposes, the argument
22# must be an integer greater than zero. 67# must be an integer greater than zero.
204 249
205 echo 250 echo
206 eerror "Cannot find \$EPATCH_SOURCE! Value for \$EPATCH_SOURCE is:" 251 eerror "Cannot find \$EPATCH_SOURCE! Value for \$EPATCH_SOURCE is:"
207 eerror 252 eerror
208 eerror " ${EPATCH_SOURCE}" 253 eerror " ${EPATCH_SOURCE}"
254 eerror " ( ${EPATCH_SOURCE##*/} )"
209 echo 255 echo
210 die "Cannot find \$EPATCH_SOURCE!" 256 die "Cannot find \$EPATCH_SOURCE!"
211 fi 257 fi
212 258
213 local EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}" 259 local EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}"
246 ([ "${SINGLE_PATCH}" = "yes" -o "${x/_all_}" != "${x}" -o "`eval echo \$\{x/_${ARCH}_\}`" != "${x}" ] || \ 292 ([ "${SINGLE_PATCH}" = "yes" -o "${x/_all_}" != "${x}" -o "`eval echo \$\{x/_${ARCH}_\}`" != "${x}" ] || \
247 [ "${EPATCH_FORCE}" = "yes" ]) 293 [ "${EPATCH_FORCE}" = "yes" ])
248 then 294 then
249 local count=0 295 local count=0
250 local popts="${EPATCH_OPTS}" 296 local popts="${EPATCH_OPTS}"
297 local patchname=${x##*/}
251 298
252 if [ -n "${EPATCH_EXCLUDE}" ] 299 if [ -n "${EPATCH_EXCLUDE}" ]
253 then 300 then
254 if [ "`eval echo \$\{EPATCH_EXCLUDE/${x##*/}\}`" != "${EPATCH_EXCLUDE}" ] 301 if [ "${EPATCH_EXCLUDE/${patchname}}" != "${EPATCH_EXCLUDE}" ]
255 then 302 then
256 continue 303 continue
257 fi 304 fi
258 fi 305 fi
259 306
261 then 308 then
262 if [ -n "${EPATCH_SINGLE_MSG}" ] 309 if [ -n "${EPATCH_SINGLE_MSG}" ]
263 then 310 then
264 einfo "${EPATCH_SINGLE_MSG}" 311 einfo "${EPATCH_SINGLE_MSG}"
265 else 312 else
266 einfo "Applying ${x##*/} ..." 313 einfo "Applying ${patchname} ..."
267 fi 314 fi
268 else 315 else
269 einfo " ${x##*/} ..." 316 einfo " ${patchname} ..."
270 fi 317 fi
271 318
272 echo "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 319 echo "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
273 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 320 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
274 321
275 # Allow for prefix to differ ... im lazy, so shoot me :/ 322 # Allow for prefix to differ ... im lazy, so shoot me :/
276 while [ "${count}" -lt 5 ] 323 while [ "${count}" -lt 5 ]
277 do 324 do
278 # Generate some useful debug info ... 325 # Generate some useful debug info ...
279 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 326 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
280 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 327 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
281 328
282 if [ "${PATCH_SUFFIX}" != "patch" ] 329 if [ "${PATCH_SUFFIX}" != "patch" ]
283 then 330 then
284 echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 331 echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
285 echo "${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 332 echo "${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
286 else 333 else
287 PATCH_TARGET="${x}" 334 PATCH_TARGET="${x}"
288 fi 335 fi
289 336
290 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 337 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
291 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 338 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
292 339
293 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 340 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
294 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 341 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
295 342
296 if [ "${PATCH_SUFFIX}" != "patch" ] 343 if [ "${PATCH_SUFFIX}" != "patch" ]
297 then 344 then
298 if ! (${PIPE_CMD} ${x} > ${PATCH_TARGET}) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1 345 if ! (${PIPE_CMD} ${x} > ${PATCH_TARGET}) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1
299 then 346 then
300 echo 347 echo
301 eerror "Could not extract patch!" 348 eerror "Could not extract patch!"
302 #die "Could not extract patch!" 349 #die "Could not extract patch!"
303 count=5 350 count=5
304 break 351 break
305 fi 352 fi
306 fi 353 fi
307 354
308 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1 355 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1
309 then 356 then
310 draw_line "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 357 draw_line "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
311 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 358 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
312 echo "ACTUALLY APPLYING ${x##*/} ..." >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 359 echo "ACTUALLY APPLYING ${patchname} ..." >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
313 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 360 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
314 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 361 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
315 362
316 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 2>&1 363 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 2>&1
317 364
318 if [ "$?" -ne 0 ] 365 if [ "$?" -ne 0 ]
319 then 366 then
320 cat ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 367 cat ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
321 echo 368 echo
322 eerror "A dry-run of patch command succeeded, but actually" 369 eerror "A dry-run of patch command succeeded, but actually"
323 eerror "applying the patch failed!" 370 eerror "applying the patch failed!"
324 #die "Real world sux compared to the dreamworld!" 371 #die "Real world sux compared to the dreamworld!"
325 count=5 372 count=5
326 fi 373 fi
327 374
328 rm -f ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 375 rm -f ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
329 376
330 break 377 break
331 fi 378 fi
332 379
333 count=$((count + 1)) 380 count=$((count + 1))
339 fi 386 fi
340 387
341 if [ "${count}" -eq 5 ] 388 if [ "${count}" -eq 5 ]
342 then 389 then
343 echo 390 echo
344 eerror "Failed Patch: ${x##*/}!" 391 eerror "Failed Patch: ${patchname}!"
345 eerror 392 eerror
346 eerror "Include in your bugreport the contents of:" 393 eerror "Include in your bugreport the contents of:"
347 eerror 394 eerror
348 eerror " ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}" 395 eerror " ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}"
349 echo 396 echo
350 die "Failed Patch: ${x##*/}!" 397 die "Failed Patch: ${patchname}!"
351 fi 398 fi
352 399
353 rm -f ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 400 rm -f ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
354 401
355 eend 0 402 eend 0
356 fi 403 fi
357 done 404 done
358 if [ "${SINGLE_PATCH}" = "no" ] 405 if [ "${SINGLE_PATCH}" = "no" ]
862# name: the name that will show up in the menu 909# name: the name that will show up in the menu
863# icon: give your little like a pretty little icon ... 910# icon: give your little like a pretty little icon ...
864# this can be relative (to /usr/share/pixmaps) or 911# this can be relative (to /usr/share/pixmaps) or
865# a full path to an icon 912# a full path to an icon
866# type: what kind of application is this ? for categories: 913# type: what kind of application is this ? for categories:
867# http://www.freedesktop.org/standards/menu-spec/ 914# http://www.freedesktop.org/wiki/Standards_2fmenu_2dspec
868# path: if your app needs to startup in a specific dir 915# path: if your app needs to startup in a specific dir
869make_desktop_entry() { 916make_desktop_entry() {
870 [ -z "$1" ] && eerror "make_desktop_entry: You must specify the executable" && return 1 917 [ -z "$1" ] && eerror "make_desktop_entry: You must specify the executable" && return 1
871 918
872 local exec="${1}" 919 local exec="${1}"
894 type= 941 type=
895 subdir= 942 subdir=
896 ;; 943 ;;
897 esac 944 esac
898 fi 945 fi
899 local desktop="${T}/${exec}.desktop" 946 local desktop="${T}/${exec%% *}-${P}.desktop"
900 947
901echo "[Desktop Entry] 948echo "[Desktop Entry]
902Encoding=UTF-8 949Encoding=UTF-8
903Version=0.9.2 950Version=0.9.2
904Name=${name} 951Name=${name}
1432# directories and uses the intersection of the lists. 1479# directories and uses the intersection of the lists.
1433# The -u builds a list of po files found in all the 1480# The -u builds a list of po files found in all the
1434# directories and uses the union of the lists. 1481# directories and uses the union of the lists.
1435strip-linguas() { 1482strip-linguas() {
1436 local ls newls 1483 local ls newls
1437 if [ "$1" == "-i" ] || [ "$1" == "-u" ] ; then 1484 if [[ $1 == "-i" ]] || [[ $1 == "-u" ]] ; then
1438 local op="$1"; shift 1485 local op=$1; shift
1439 ls=" $(find "$1" -name '*.po' -printf '%f ') "; shift 1486 ls=" $(find "$1" -name '*.po' -printf '%f ') "; shift
1440 local d f 1487 local d f
1441 for d in "$@" ; do 1488 for d in "$@" ; do
1442 if [ "${op}" == "-u" ] ; then 1489 if [[ ${op} == "-u" ]] ; then
1443 newls="${ls}" 1490 newls=${ls}
1444 else 1491 else
1445 newls="" 1492 newls=""
1446 fi 1493 fi
1447 for f in $(find "$d" -name '*.po' -printf '%f ') ; do 1494 for f in $(find "$d" -name '*.po' -printf '%f ') ; do
1448 if [ "${op}" == "-i" ] ; then 1495 if [[ ${op} == "-i" ]] ; then
1449 [ "${ls/ ${f} /}" != "${ls}" ] && newls="${newls} ${f}" 1496 [[ ${ls/ ${f} /} != ${ls} ]] && newls="${newls} ${f}"
1450 else 1497 else
1451 [ "${ls/ ${f} /}" == "${ls}" ] && newls="${newls} ${f}" 1498 [[ ${ls/ ${f} /} == ${ls} ]] && newls="${newls} ${f}"
1452 fi 1499 fi
1453 done 1500 done
1454 ls="${newls}" 1501 ls=${newls}
1455 done 1502 done
1456 ls="${ls//.po}" 1503 ls=${ls//.po}
1457 else 1504 else
1458 ls="$@" 1505 ls=$@
1459 fi 1506 fi
1460 1507
1461 ls=" ${ls} " 1508 ls=" ${ls} "
1462 newls="" 1509 newls=""
1463 for f in ${LINGUAS} ; do 1510 for f in ${LINGUAS} ; do
1464 if [ "${ls/ ${f} /}" != "${ls}" ] ; then 1511 if [[ ${ls/ ${f} /} != ${ls} ]] ; then
1465 newls="${newls} ${f}" 1512 newls="${newls} ${f}"
1466 else 1513 else
1467 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA" 1514 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA"
1468 fi 1515 fi
1469 done 1516 done
1470 if [ -z "${newls}" ] ; then 1517 if [[ -z ${newls} ]] ; then
1471 unset LINGUAS 1518 unset LINGUAS
1472 else 1519 else
1473 export LINGUAS="${newls}" 1520 export LINGUAS=${newls:1}
1474 fi 1521 fi
1475} 1522}
1476 1523
1477# moved from kernel.eclass since they are generally useful outside of 1524# moved from kernel.eclass since they are generally useful outside of
1478# kernel.eclass -iggy (20041002) 1525# kernel.eclass -iggy (20041002)
1480# the following functions are useful in kernel module ebuilds, etc. 1527# the following functions are useful in kernel module ebuilds, etc.
1481# for an example see ivtv or drbd ebuilds 1528# for an example see ivtv or drbd ebuilds
1482 1529
1483# set's ARCH to match what the kernel expects 1530# set's ARCH to match what the kernel expects
1484set_arch_to_kernel() { 1531set_arch_to_kernel() {
1532 i=10
1533 while ((i--)) ; do
1534 ewarn "PLEASE UPDATE TO YOUR PACKAGE TO USE linux-info.eclass"
1535 done
1485 export EUTILS_ECLASS_PORTAGE_ARCH="${ARCH}" 1536 export EUTILS_ECLASS_PORTAGE_ARCH="${ARCH}"
1486 case ${ARCH} in 1537 case ${ARCH} in
1487 x86) export ARCH="i386";; 1538 x86) export ARCH="i386";;
1488 amd64) export ARCH="x86_64";; 1539 amd64) export ARCH="x86_64";;
1489 hppa) export ARCH="parisc";; 1540 hppa) export ARCH="parisc";;
1490 mips) export ARCH="mips";; 1541 mips) export ARCH="mips";;
1542 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!
1491 *) export ARCH="${ARCH}";; 1543 *) export ARCH="${ARCH}";;
1492 esac 1544 esac
1493} 1545}
1494 1546
1495# set's ARCH back to what portage expects 1547# set's ARCH back to what portage expects
1496set_arch_to_portage() { 1548set_arch_to_portage() {
1549 i=10
1550 while ((i--)) ; do
1551 ewarn "PLEASE UPDATE TO YOUR PACKAGE TO USE linux-info.eclass"
1552 done
1497 export ARCH="${EUTILS_ECLASS_PORTAGE_ARCH}" 1553 export ARCH="${EUTILS_ECLASS_PORTAGE_ARCH}"
1498} 1554}
1499 1555
1500# Jeremy Huddleston <eradicator@gentoo.org>: 1556# Jeremy Huddleston <eradicator@gentoo.org>:
1501# preserve_old_lib /path/to/libblah.so.0 1557# preserve_old_lib /path/to/libblah.so.0
1547 einfo "After doing that, you can safely remove ${LIB}" 1603 einfo "After doing that, you can safely remove ${LIB}"
1548 einfo "Note: 'emerge gentoolkit' to get revdep-rebuild" 1604 einfo "Note: 'emerge gentoolkit' to get revdep-rebuild"
1549 fi 1605 fi
1550} 1606}
1551 1607
1552# Hack for people to figure out if a package was built with 1608# Hack for people to figure out if a package was built with
1553# certain USE flags 1609# certain USE flags
1554# 1610#
1555# Usage: built_with_use [-a|-o] <DEPEND ATOM> <List of USE flags> 1611# Usage: built_with_use [-a|-o] <DEPEND ATOM> <List of USE flags>
1556# ex: built_with_use xchat gtk2 1612# ex: built_with_use xchat gtk2
1557# 1613#
1578 shift 1634 shift
1579 done 1635 done
1580 [[ ${opt} = "-a" ]] 1636 [[ ${opt} = "-a" ]]
1581} 1637}
1582 1638
1583# Many configure scripts wrongly bail when a C++ compiler 1639# Many configure scripts wrongly bail when a C++ compiler
1584# could not be detected. #73450 1640# could not be detected. #73450
1585epunt_cxx() { 1641epunt_cxx() {
1586 local dir=$1 1642 local dir=$1
1587 [[ -z ${dir} ]] && dir=${S} 1643 [[ -z ${dir} ]] && dir=${S}
1588 ebegin "Removing useless C++ checks" 1644 ebegin "Removing useless C++ checks"
1591 patch -p0 "${f}" "${PORTDIR}/eclass/ELT-patches/nocxx/nocxx.patch" > /dev/null 1647 patch -p0 "${f}" "${PORTDIR}/eclass/ELT-patches/nocxx/nocxx.patch" > /dev/null
1592 done 1648 done
1593 eend 0 1649 eend 0
1594} 1650}
1595 1651
1596# This function simply returns the desired lib directory. With portage 1652# dopamd <file> [more files]
1597# 2.0.51, we now have support for installing libraries to lib32/lib64
1598# to accomidate the needs of multilib systems. It's no longer a good idea
1599# to assume all libraries will end up in lib. Replace any (sane) instances
1600# where lib is named directly with $(get_libdir) if possible.
1601# 1653#
1602# Travis Tilley <lv@gentoo.org> (24 Aug 2004) 1654# Install pam auth config file in /etc/pam.d
1603# 1655dopamd() {
1604# Jeremy Huddleston <eradicator@gentoo.org> (23 Dec 2004): 1656 [[ -z $1 ]] && die "dopamd requires at least one argument"
1605# Added support for ${ABI} and ${DEFAULT_ABI}. If they're both not set,
1606# fall back on old behavior. Any profile that has these set should also
1607# depend on a newer version of portage (not yet released) which uses these
1608# over CONF_LIBDIR in econf, dolib, etc...
1609get_libdir() {
1610 LIBDIR_TEST=$(type econf)
1611 if [ ! -z "${CONF_LIBDIR_OVERRIDE}" ] ; then
1612 # if there is an override, we want to use that... always.
1613 CONF_LIBDIR="${CONF_LIBDIR_OVERRIDE}"
1614 # We don't need to know the verison of portage. We only need to know
1615 # if there is support for CONF_LIBDIR in econf and co.
1616 # Danny van Dyk <kugelfang@gentoo.org> 2004/17/09
1617 #elif portageq has_version / '<sys-apps/portage-2.0.51_pre20' ; then
1618 # # and if there isnt an override, and we're using a version of
1619 # # portage without CONF_LIBDIR support, force the use of lib. dolib
1620 # # and friends from portage 2.0.50 wont be too happy otherwise.
1621 # CONF_LIBDIR="lib"
1622 #fi
1623 elif [ -n "$(get_abi_LIBDIR)" ]; then # Using eradicator's LIBDIR_<abi> approach...
1624 CONF_LIBDIR="$(get_abi_LIBDIR)"
1625 elif [ "${LIBDIR_TEST/CONF_LIBDIR}" == "${LIBDIR_TEST}" ]; then # we don't have CONF_LIBDIR support
1626 # will be <portage-2.0.51_pre20
1627 CONF_LIBDIR="lib"
1628 fi
1629 # and of course, default to lib if CONF_LIBDIR isnt set
1630 echo ${CONF_LIBDIR:=lib}
1631 unset LIBDIR_TEST
1632}
1633 1657
1634get_multilibdir() { 1658 use pam || return 0
1635 if [ -n "$(get_abi_LIBDIR)" ]; then
1636 eerror "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"
1637 exit 1
1638 fi
1639 echo ${CONF_MULTILIBDIR:=lib32}
1640}
1641 1659
1642# Sometimes you need to override the value returned by get_libdir. A good 1660 insinto /etc/pam.d
1643# example of this is xorg-x11, where lib32 isnt a supported configuration, 1661 # these are the default doins options, but be explicit just in case
1644# and where lib64 -must- be used on amd64 (for applications that need lib 1662 insopts -m 0644 -o root -g root
1645# to be 32bit, such as adobe acrobat). Note that this override also bypasses 1663 doins "$@" || die "failed to install $@"
1646# portage version sanity checking.
1647# get_libdir_override expects one argument, the result get_libdir should
1648# return:
1649#
1650# get_libdir_override lib64
1651#
1652# Travis Tilley <lv@gentoo.org> (31 Aug 2004)
1653get_libdir_override() {
1654 if [ -n "$(get_abi_LIBDIR)" ]; then
1655 eerror "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"
1656 exit 1
1657 fi
1658 CONF_LIBDIR="$1"
1659 CONF_LIBDIR_OVERRIDE="$1"
1660} 1664}
1661 1665# newpamd <old name> <new name>
1662# get_abi_var <VAR> [<ABI>]
1663# returns the value of ${<VAR>_<ABI>} which should be set in make.defaults
1664# 1666#
1665# ex: 1667# Install pam file <old name> as <new name> in /etc/pam.d
1666# CFLAGS=$(get_abi_var CFLAGS sparc32) # CFLAGS=-m32 1668newpamd() {
1667# 1669 [[ $# -ne 2 ]] && die "newpamd requires two arguements"
1668# Note that the prefered method is to set CC="$(tc-getCC) $(get_abi_CFLAGS)"
1669# This will hopefully be added to portage soon...
1670#
1671# If <ABI> is not specified, ${ABI} is used.
1672# If <ABI> is not specified and ${ABI} is not defined, ${DEFAULT_ABI} is used.
1673# If <ABI> is not specified and ${ABI} and ${DEFAULT_ABI} are not defined, we return an empty string.
1674#
1675# Jeremy Huddleston <eradicator@gentoo.org>
1676get_abi_var() {
1677 local flag=${1}
1678 local abi
1679 if [ $# -gt 1 ]; then
1680 abi=${2}
1681 elif [ -n "${ABI}" ]; then
1682 abi=${ABI}
1683 elif [ -n "${DEFAULT_ABI}" ]; then
1684 abi=${DEFAULT_ABI}
1685 else
1686 return 1
1687 fi
1688 1670
1689 local var="${flag}_${abi}" 1671 use pam || return 0
1690 echo ${!var}
1691}
1692 1672
1693get_abi_CFLAGS() { get_abi_var CFLAGS ${@}; } 1673 insinto /etc/pam.d
1694get_abi_CXXFLAGS() { get_abi_var CXXFLAGS ${@}; } 1674 # these are the default doins options, but be explicit just in case
1695get_abi_ASFLAGS() { get_abi_var ASFLAGS ${@}; } 1675 insopts -m 0644 -o root -g root
1696get_abi_LIBDIR() { get_abi_var LIBDIR ${@}; } 1676 newins "$1" "$2" || die "failed to install $1 as $2"
1697
1698# get_all_libdir()
1699# Returns a list of all the libdirs used by this profile
1700get_all_libdirs() {
1701 local libdirs
1702 if [ -n "${MULTILIB_ABIS}" ]; then
1703 for abi in ${MULTILIB_ABIS}; do
1704 libdirs="${libdirs} $(get_abi_LIBDIR ${abi})"
1705 done
1706 libdirs="${libdirs:1}"
1707 elif [ -n "${CONF_LIBDIR}" ]; then
1708 libdirs="${CONF_LIBDIR} ${CONF_MULTILIBDIR:=lib32}"
1709 else
1710 libdirs="lib"
1711 fi
1712
1713 echo "${libdirs}"
1714} 1677}

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

  ViewVC Help
Powered by ViewVC 1.1.20