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

Diff of /eclass/eutils.eclass

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

Revision 1.167 Revision 1.200
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.167 2005/04/16 07:05:45 vapier Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.200 2005/09/23 20:44:26 wolf31o2 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 12inherit multilib portability
13ECLASS=eutils
14INHERITED="$INHERITED $ECLASS"
15 13
16DEPEND="!bootstrap? ( sys-devel/patch )" 14DEPEND="!bootstrap? ( sys-devel/patch )"
15# sys-apps/shadow is needed for useradd, etc, bug #94745.
17 16
18DESCRIPTION="Based on the ${ECLASS} eclass" 17DESCRIPTION="Based on the ${ECLASS} eclass"
19 18
20# Wait for the supplied number of seconds. If no argument is supplied, defaults 19# Wait for the supplied number of seconds. If no argument is supplied, defaults
21# to five seconds. If the EPAUSE_IGNORE env var is set, don't wait. If we're not 20# to five seconds. If the EPAUSE_IGNORE env var is set, don't wait. If we're not
68 dodir /usr/${libdir} 67 dodir /usr/${libdir}
69 68
70 for lib in "${@}" ; do 69 for lib in "${@}" ; do
71 cat > "${D}/usr/${libdir}/${lib}" <<-END_LDSCRIPT 70 cat > "${D}/usr/${libdir}/${lib}" <<-END_LDSCRIPT
72 /* GNU ld script 71 /* GNU ld script
73 Since Gentoo has critical dynamic libraries 72 Since Gentoo has critical dynamic libraries
74 in /lib, and the static versions in /usr/lib, 73 in /lib, and the static versions in /usr/lib,
75 we need to have a "fake" dynamic lib in /usr/lib, 74 we need to have a "fake" dynamic lib in /usr/lib,
76 otherwise we run into linking problems. 75 otherwise we run into linking problems.
77 76
78 See bug http://bugs.gentoo.org/4411 for more info. 77 See bug http://bugs.gentoo.org/4411 for more info.
79 */ 78 */
80 GROUP ( /${libdir}/${lib} ) 79 GROUP ( /${libdir}/${lib} )
81 END_LDSCRIPT 80 END_LDSCRIPT
82 fperms a+x "/usr/${libdir}/${lib}" 81 fperms a+x "/usr/${libdir}/${lib}"
118EPATCH_SOURCE="${WORKDIR}/patch" 117EPATCH_SOURCE="${WORKDIR}/patch"
119# Default extension for patches 118# Default extension for patches
120EPATCH_SUFFIX="patch.bz2" 119EPATCH_SUFFIX="patch.bz2"
121# Default options for patch 120# Default options for patch
122# Set -g0 to keep RCS, ClearCase, Perforce and SCCS happy. Bug #24571 121# Set -g0 to keep RCS, ClearCase, Perforce and SCCS happy. Bug #24571
123EPATCH_OPTS="-g0" 122# Set --no-backup-if-mismatch so we don't leave '.orig' files behind.
123EPATCH_OPTS="-g0 --no-backup-if-mismatch"
124# List of patches not to apply. Not this is only file names, 124# List of patches not to apply. Not this is only file names,
125# and not the full path .. 125# and not the full path ..
126EPATCH_EXCLUDE="" 126EPATCH_EXCLUDE=""
127# Change the printed message for a single patch. 127# Change the printed message for a single patch.
128EPATCH_SINGLE_MSG="" 128EPATCH_SINGLE_MSG=""
129# Change the printed message for multiple patches.
130EPATCH_MULTI_MSG="Applying various patches (bugfixes/updates) ..."
129# Force applying bulk patches even if not following the style: 131# Force applying bulk patches even if not following the style:
130# 132#
131# ??_${ARCH}_foo.${EPATCH_SUFFIX} 133# ??_${ARCH}_foo.${EPATCH_SUFFIX}
132# 134#
133EPATCH_FORCE="no" 135EPATCH_FORCE="no"
171 local PATCH_TARGET="${T}/$$.patch" 173 local PATCH_TARGET="${T}/$$.patch"
172 local PATCH_SUFFIX="" 174 local PATCH_SUFFIX=""
173 local SINGLE_PATCH="no" 175 local SINGLE_PATCH="no"
174 local x="" 176 local x=""
175 177
178 unset P4CONFIG P4PORT P4USER # keep perforce at bay #56402
179
176 if [ "$#" -gt 1 ] 180 if [ "$#" -gt 1 ]
177 then 181 then
178 local m="" 182 local m=""
179 einfo "${#} patches to apply ..."
180 for m in "$@" ; do 183 for m in "$@" ; do
181 epatch "${m}" 184 epatch "${m}"
182 done 185 done
183 return 0 186 return 0
184 fi 187 fi
238 ;; 241 ;;
239 esac 242 esac
240 243
241 if [ "${SINGLE_PATCH}" = "no" ] 244 if [ "${SINGLE_PATCH}" = "no" ]
242 then 245 then
243 einfo "Applying various patches (bugfixes/updates) ..." 246 einfo "${EPATCH_MULTI_MSG}"
244 fi 247 fi
245 for x in ${EPATCH_SOURCE} 248 for x in ${EPATCH_SOURCE}
246 do 249 do
247 # New ARCH dependant patch naming scheme ... 250 # New ARCH dependant patch naming scheme ...
248 # 251 #
249 # ???_arch_foo.patch 252 # ???_arch_foo.patch
250 # 253 #
251 if [ -f ${x} ] && \ 254 if [ -f ${x} ] && \
252 ([ "${SINGLE_PATCH}" = "yes" -o "${x/_all_}" != "${x}" -o "`eval echo \$\{x/_${ARCH}_\}`" != "${x}" ] || \ 255 ([ "${SINGLE_PATCH}" = "yes" -o "${x/_all_}" != "${x}" -o "${x/_${ARCH}_}" != "${x}" ] || \
253 [ "${EPATCH_FORCE}" = "yes" ]) 256 [ "${EPATCH_FORCE}" = "yes" ])
254 then 257 then
255 local count=0 258 local count=0
256 local popts="${EPATCH_OPTS}" 259 local popts="${EPATCH_OPTS}"
257 local patchname=${x##*/} 260 local patchname=${x##*/}
367 then 370 then
368 einfo "Done with patching" 371 einfo "Done with patching"
369 fi 372 fi
370} 373}
371 374
372# This function return true if we are using the NPTL pthreads
373# implementation.
374#
375# <azarah@gentoo.org> (06 March 2003)
376#
377have_NPTL() {
378 cat > ${T}/test-nptl.c <<-"END"
379 #define _XOPEN_SOURCE
380 #include <unistd.h>
381 #include <stdio.h>
382
383 int main()
384 {
385 char buf[255];
386 char *str = buf;
387
388 confstr(_CS_GNU_LIBPTHREAD_VERSION, str, 255);
389 if (NULL != str) {
390 printf("%s\n", str);
391 if (NULL != strstr(str, "NPTL"))
392 return 0;
393 }
394
395 return 1;
396 }
397 END
398
399 einfon "Checking for _CS_GNU_LIBPTHREAD_VERSION support in glibc ..."
400 if gcc -o ${T}/nptl ${T}/test-nptl.c &> /dev/null
401 then
402 echo "yes"
403 einfon "Checking what PTHREADS implementation we have ..."
404 if ${T}/nptl
405 then
406 return 0
407 else
408 return 1
409 fi
410 else
411 echo "no"
412 fi
413
414 return 1
415}
416
417# This function check how many cpu's are present, and then set
418# -j in MAKEOPTS accordingly.
419#
420# Thanks to nall <nall@gentoo.org> for this.
421#
422get_number_of_jobs() {
423 local jobs=0
424
425 if [ ! -r /proc/cpuinfo ]
426 then
427 return 1
428 fi
429
430 # This bit is from H?kan Wessberg <nacka-gentoo@refug.org>, bug #13565.
431 if [ "`egrep "^[[:space:]]*MAKEOPTS=" /etc/make.conf | wc -l`" -gt 0 ]
432 then
433 ADMINOPTS="`egrep "^[[:space:]]*MAKEOPTS=" /etc/make.conf | cut -d= -f2 | sed 's/\"//g'`"
434 ADMINPARAM="`echo ${ADMINOPTS} | gawk '{match($0, /-j *[0-9]*/, opt); print opt[0]}'`"
435 ADMINPARAM="${ADMINPARAM/-j}"
436 fi
437
438 export MAKEOPTS="`echo ${MAKEOPTS} | sed -e 's:-j *[0-9]*::g'`"
439
440 if [ "${ARCH}" = "amd64" -o "${ARCH}" = "x86" -o "${ARCH}" = "hppa" -o \
441 "${ARCH}" = "arm" -o "${ARCH}" = "mips" -o "${ARCH}" = "ia64" ]
442 then
443 # these archs will always have "[Pp]rocessor"
444 jobs="$((`grep -c ^[Pp]rocessor /proc/cpuinfo` * 2))"
445
446 elif [ "${ARCH}" = "sparc" -o "${ARCH}" = "sparc64" ]
447 then
448 # sparc always has "ncpus active"
449 jobs="$((`grep "^ncpus active" /proc/cpuinfo | sed -e "s/^.*: //"` * 2))"
450
451 elif [ "${ARCH}" = "alpha" ]
452 then
453 # alpha has "cpus active", but only when compiled with SMP
454 if [ "`grep -c "^cpus active" /proc/cpuinfo`" -eq 1 ]
455 then
456 jobs="$((`grep "^cpus active" /proc/cpuinfo | sed -e "s/^.*: //"` * 2))"
457 else
458 jobs=2
459 fi
460
461 elif [ "${ARCH}" = "ppc" -o "${ARCH}" = "ppc64" ]
462 then
463 # ppc has "processor", but only when compiled with SMP
464 if [ "`grep -c "^processor" /proc/cpuinfo`" -eq 1 ]
465 then
466 jobs="$((`grep -c ^processor /proc/cpuinfo` * 2))"
467 else
468 jobs=2
469 fi
470 elif [ "${ARCH}" = "s390" ]
471 then
472 # s390 has "# processors : "
473 jobs="$((`grep "^\# processors" /proc/cpuinfo | sed -e "s/^.*: //"` * 2))"
474 else
475 jobs="$((`grep -c ^cpu /proc/cpuinfo` * 2))"
476 die "Unknown ARCH -- ${ARCH}!"
477 fi
478
479 # Make sure the number is valid ...
480 if [ "${jobs}" -lt 1 ]
481 then
482 jobs=1
483 fi
484
485 if [ -n "${ADMINPARAM}" ]
486 then
487 if [ "${jobs}" -gt "${ADMINPARAM}" ]
488 then
489 einfo "Setting make jobs to \"-j${ADMINPARAM}\" to ensure successful merge ..."
490 export MAKEOPTS="${MAKEOPTS} -j${ADMINPARAM}"
491 else
492 einfo "Setting make jobs to \"-j${jobs}\" to ensure successful merge ..."
493 export MAKEOPTS="${MAKEOPTS} -j${jobs}"
494 fi
495 fi
496}
497
498# Cheap replacement for when debianutils (and thus mktemp) 375# Cheap replacement for when debianutils (and thus mktemp)
499# does not exist on the users system 376# does not exist on the users system
500# vapier@gentoo.org 377# vapier@gentoo.org
501# 378#
502# Takes just 1 optional parameter (the directory to create tmpfile in) 379# Takes just 1 optional parameter (the directory to create tmpfile in)
503emktemp() { 380emktemp() {
504 local exe="touch" 381 local exe="touch"
505 [ "$1" == "-d" ] && exe="mkdir" && shift 382 [[ $1 == -d ]] && exe="mkdir" && shift
506 local topdir="$1" 383 local topdir=$1
507 384
508 if [ -z "${topdir}" ] 385 if [[ -z ${topdir} ]] ; then
509 then
510 [ -z "${T}" ] \ 386 [[ -z ${T} ]] \
511 && topdir="/tmp" \ 387 && topdir="/tmp" \
512 || topdir="${T}" 388 || topdir=${T}
513 fi 389 fi
514 390
515 if [ -z "$(type -p mktemp)" ] 391 if [[ -z $(type -p mktemp) ]] ; then
516 then
517 local tmp=/ 392 local tmp=/
518 while [ -e "${tmp}" ] ; do 393 while [[ -e ${tmp} ]] ; do
519 tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}" 394 tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}
520 done 395 done
521 ${exe} "${tmp}" 396 ${exe} "${tmp}" || ${exe} -p "${tmp}"
522 echo "${tmp}" 397 echo "${tmp}"
523 else 398 else
524 [ "${exe}" == "touch" ] \ 399 [[ ${exe} == "touch" ]] \
525 && exe="-p" \ 400 && exe="-p" \
526 || exe="-d" 401 || exe="-d"
527 mktemp ${exe} "${topdir}" 402 mktemp ${exe} "${topdir}"
528 fi 403 fi
529} 404}
533# Joe Jezak <josejx@gmail.com> and usata@gentoo.org 408# Joe Jezak <josejx@gmail.com> and usata@gentoo.org
534# FBSD stuff: Aaron Walker <ka0ttic@gentoo.org> 409# FBSD stuff: Aaron Walker <ka0ttic@gentoo.org>
535# 410#
536# egetent(database, key) 411# egetent(database, key)
537egetent() { 412egetent() {
538 if useq ppc-macos ; then 413 if [[ "${USERLAND}" == "Darwin" ]] ; then
539 case "$2" in 414 case "$2" in
540 *[!0-9]*) # Non numeric 415 *[!0-9]*) # Non numeric
541 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }" 416 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
542 ;; 417 ;;
543 *) # Numeric 418 *) # Numeric
544 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }" 419 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
545 ;; 420 ;;
546 esac 421 esac
547 elif useq x86-fbsd ; then 422 elif [[ "${USERLAND}" == "BSD" ]] ; then
548 local action 423 local action
549 if [ "$1" == "passwd" ] 424 if [ "$1" == "passwd" ]
550 then 425 then
551 action="user" 426 action="user"
552 else 427 else
572# homedir: /dev/null 447# homedir: /dev/null
573# groups: none 448# groups: none
574# extra: comment of 'added by portage for ${PN}' 449# extra: comment of 'added by portage for ${PN}'
575enewuser() { 450enewuser() {
576 # get the username 451 # get the username
577 local euser="$1"; shift 452 local euser=$1; shift
578 if [ -z "${euser}" ] 453 if [[ -z ${euser} ]] ; then
579 then
580 eerror "No username specified !" 454 eerror "No username specified !"
581 die "Cannot call enewuser without a username" 455 die "Cannot call enewuser without a username"
582 fi 456 fi
583 457
584 # lets see if the username already exists 458 # lets see if the username already exists
585 if [ "${euser}" == "`egetent passwd \"${euser}\" | cut -d: -f1`" ] 459 if [[ ${euser} == $(egetent passwd "${euser}" | cut -d: -f1) ]] ; then
586 then
587 return 0 460 return 0
588 fi 461 fi
589 einfo "Adding user '${euser}' to your system ..." 462 einfo "Adding user '${euser}' to your system ..."
590 463
591 # options to pass to useradd 464 # options to pass to useradd
592 local opts= 465 local opts=
593 466
594 # handle uid 467 # handle uid
595 local euid="$1"; shift 468 local euid=$1; shift
596 if [ ! -z "${euid}" ] && [ "${euid}" != "-1" ] 469 if [[ ! -z ${euid} ]] && [[ ${euid} != "-1" ]] ; then
597 then
598 if [ "${euid}" -gt 0 ] 470 if [[ ${euid} -gt 0 ]] ; then
599 then
600 if [ ! -z "`egetent passwd ${euid}`" ] 471 if [[ ! -z $(egetent passwd ${euid}) ]] ; then
601 then
602 euid="next" 472 euid="next"
603 fi 473 fi
604 else 474 else
605 eerror "Userid given but is not greater than 0 !" 475 eerror "Userid given but is not greater than 0 !"
606 die "${euid} is not a valid UID" 476 die "${euid} is not a valid UID"
607 fi 477 fi
608 else 478 else
609 euid="next" 479 euid="next"
610 fi 480 fi
611 if [ "${euid}" == "next" ] 481 if [[ ${euid} == "next" ]] ; then
612 then 482 for euid in $(seq 101 999) ; do
613 local pwrange
614 if [ "${USERLAND}" == "BSD" ] ; then
615 pwrange="`jot 898 101`"
616 else
617 pwrange="`seq 101 999`"
618 fi
619 for euid in ${pwrange} ; do
620 [ -z "`egetent passwd ${euid}`" ] && break 483 [[ -z $(egetent passwd ${euid}) ]] && break
621 done 484 done
622 fi 485 fi
623 opts="${opts} -u ${euid}" 486 opts="${opts} -u ${euid}"
624 einfo " - Userid: ${euid}" 487 einfo " - Userid: ${euid}"
625 488
626 # handle shell 489 # handle shell
627 local eshell="$1"; shift 490 local eshell=$1; shift
628 if [ ! -z "${eshell}" ] && [ "${eshell}" != "-1" ] 491 if [[ ! -z ${eshell} ]] && [[ ${eshell} != "-1" ]] ; then
629 then
630 if [ ! -e "${eshell}" ] 492 if [[ ! -e ${eshell} ]] ; then
631 then
632 eerror "A shell was specified but it does not exist !" 493 eerror "A shell was specified but it does not exist !"
633 die "${eshell} does not exist" 494 die "${eshell} does not exist"
634 fi 495 fi
635 else 496 else
636 if [ "${USERLAND}" == "BSD" ] 497 for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null; do
637 then 498 [[ -x ${ROOT}${shell} ]] && break;
638 eshell="/usr/bin/false" 499 done
639 else 500
640 eshell="/bin/false" 501 if [[ ${shell} == "/dev/null" ]]; then
502 eerror "Unable to identify the shell to use"
503 die "Unable to identify the shell to use"
641 fi 504 fi
505
506 eshell=${shell}
642 fi 507 fi
643 einfo " - Shell: ${eshell}" 508 einfo " - Shell: ${eshell}"
644 opts="${opts} -s ${eshell}" 509 opts="${opts} -s ${eshell}"
645 510
646 # handle homedir 511 # handle homedir
647 local ehome="$1"; shift 512 local ehome=$1; shift
648 if [ -z "${ehome}" ] && [ "${eshell}" != "-1" ] 513 if [[ -z ${ehome} ]] || [[ ${ehome} == "-1" ]] ; then
649 then
650 ehome="/dev/null" 514 ehome="/dev/null"
651 fi 515 fi
652 einfo " - Home: ${ehome}" 516 einfo " - Home: ${ehome}"
653 opts="${opts} -d ${ehome}" 517 opts="${opts} -d ${ehome}"
654 518
655 # handle groups 519 # handle groups
656 local egroups="$1"; shift 520 local egroups=$1; shift
657 if [ ! -z "${egroups}" ] 521 if [[ ! -z ${egroups} ]] ; then
658 then
659 local oldifs="${IFS}" 522 local oldifs=${IFS}
660 local defgroup="" exgroups="" 523 local defgroup="" exgroups=""
661 524
662 export IFS="," 525 export IFS=","
663 for g in ${egroups} 526 for g in ${egroups} ; do
664 do
665 export IFS="${oldifs}" 527 export IFS=${oldifs}
666 if [ -z "`egetent group \"${g}\"`" ] 528 if [[ -z $(egetent group "${g}") ]] ; then
667 then
668 eerror "You must add group ${g} to the system first" 529 eerror "You must add group ${g} to the system first"
669 die "${g} is not a valid GID" 530 die "${g} is not a valid GID"
670 fi 531 fi
671 if [ -z "${defgroup}" ] 532 if [[ -z ${defgroup} ]] ; then
672 then
673 defgroup="${g}" 533 defgroup=${g}
674 else 534 else
675 exgroups="${exgroups},${g}" 535 exgroups="${exgroups},${g}"
676 fi 536 fi
677 export IFS="," 537 export IFS=","
678 done 538 done
679 export IFS="${oldifs}" 539 export IFS=${oldifs}
680 540
681 opts="${opts} -g ${defgroup}" 541 opts="${opts} -g ${defgroup}"
682 if [ ! -z "${exgroups}" ] 542 if [[ ! -z ${exgroups} ]] ; then
683 then
684 opts="${opts} -G ${exgroups:1}" 543 opts="${opts} -G ${exgroups:1}"
685 fi 544 fi
686 else 545 else
687 egroups="(none)" 546 egroups="(none)"
688 fi 547 fi
689 einfo " - Groups: ${egroups}" 548 einfo " - Groups: ${egroups}"
690 549
691 # handle extra and add the user 550 # handle extra and add the user
692 local eextra="$@"
693 local oldsandbox="${SANDBOX_ON}" 551 local oldsandbox=${SANDBOX_ON}
694 export SANDBOX_ON="0" 552 export SANDBOX_ON="0"
695 if useq ppc-macos 553 case ${USERLAND} in
696 then 554 Darwin)
697 ### Make the user 555 ### Make the user
698 if [ -z "${eextra}" ] 556 if [[ -z $@ ]] ; then
699 then
700 dscl . create /users/${euser} uid ${euid} 557 dscl . create /users/${euser} uid ${euid}
701 dscl . create /users/${euser} shell ${eshell} 558 dscl . create /users/${euser} shell ${eshell}
702 dscl . create /users/${euser} home ${ehome} 559 dscl . create /users/${euser} home ${ehome}
703 dscl . create /users/${euser} realname "added by portage for ${PN}" 560 dscl . create /users/${euser} realname "added by portage for ${PN}"
704 ### Add the user to the groups specified 561 ### Add the user to the groups specified
705 local oldifs="${IFS}" 562 local oldifs=${IFS}
706 export IFS="," 563 export IFS=","
707 for g in ${egroups} 564 for g in ${egroups} ; do
708 do
709 dscl . merge /groups/${g} users ${euser} 565 dscl . merge /groups/${g} users ${euser}
710 done 566 done
711 export IFS="${oldifs}" 567 export IFS=${oldifs}
712 else 568 else
713 einfo "Extra options are not supported on macos yet" 569 einfo "Extra options are not supported on Darwin yet"
714 einfo "Please report the ebuild along with the info below" 570 einfo "Please report the ebuild along with the info below"
715 einfo "eextra: ${eextra}" 571 einfo "eextra: $@"
716 die "Required function missing" 572 die "Required function missing"
717 fi 573 fi
718 elif use x86-fbsd ; then 574 ;;
719 if [ -z "${eextra}" ] 575 BSD)
720 then 576 if [[ -z $@ ]] ; then
721 pw useradd ${euser} ${opts} \ 577 pw useradd ${euser} ${opts} \
722 -c "added by portage for ${PN}" \ 578 -c "added by portage for ${PN}" \
723 die "enewuser failed" 579 die "enewuser failed"
724 else 580 else
725 einfo " - Extra: ${eextra}" 581 einfo " - Extra: $@"
726 pw useradd ${euser} ${opts} \ 582 pw useradd ${euser} ${opts} \
727 -c ${eextra} || die "enewuser failed" 583 "$@" || die "enewuser failed"
728 fi 584 fi
729 else 585 ;;
730 if [ -z "${eextra}" ] 586 *)
731 then 587 if [[ -z $@ ]] ; then
732 useradd ${opts} ${euser} \ 588 useradd ${opts} ${euser} \
733 -c "added by portage for ${PN}" \ 589 -c "added by portage for ${PN}" \
734 || die "enewuser failed" 590 || die "enewuser failed"
735 else 591 else
736 einfo " - Extra: ${eextra}" 592 einfo " - Extra: $@"
737 useradd ${opts} ${euser} ${eextra} \ 593 useradd ${opts} ${euser} "$@" \
738 || die "enewuser failed" 594 || die "enewuser failed"
739 fi 595 fi
596 ;;
597 esac
598
599 if [[ ! -e ${ROOT}/${ehome} ]] ; then
600 einfo " - Creating ${ehome} in ${ROOT}"
601 mkdir -p "${ROOT}/${ehome}"
602 chown ${euser} "${ROOT}/${ehome}"
603 chmod 755 "${ROOT}/${ehome}"
740 fi 604 fi
605
741 export SANDBOX_ON="${oldsandbox}" 606 export SANDBOX_ON=${oldsandbox}
742
743 if [ ! -e "${ehome}" ] && [ ! -e "${D}/${ehome}" ]
744 then
745 einfo " - Creating ${ehome} in ${D}"
746 dodir ${ehome}
747 fowners ${euser} ${ehome}
748 fperms 755 ${ehome}
749 fi
750} 607}
751 608
752# Simplify/standardize adding groups to the system 609# Simplify/standardize adding groups to the system
753# vapier@gentoo.org 610# vapier@gentoo.org
754# 611#
783 then 640 then
784 if [ "${egid}" -gt 0 ] 641 if [ "${egid}" -gt 0 ]
785 then 642 then
786 if [ -z "`egetent group ${egid}`" ] 643 if [ -z "`egetent group ${egid}`" ]
787 then 644 then
788 if useq ppc-macos ; then 645 if [[ "${USERLAND}" == "Darwin" ]]; then
789 opts="${opts} ${egid}" 646 opts="${opts} ${egid}"
790 else 647 else
791 opts="${opts} -g ${egid}" 648 opts="${opts} -g ${egid}"
792 fi 649 fi
793 else 650 else
807 opts="${opts} ${eextra}" 664 opts="${opts} ${eextra}"
808 665
809 # add the group 666 # add the group
810 local oldsandbox="${SANDBOX_ON}" 667 local oldsandbox="${SANDBOX_ON}"
811 export SANDBOX_ON="0" 668 export SANDBOX_ON="0"
812 if useq ppc-macos ; then 669 if [[ "${USERLAND}" == "Darwin" ]]; then
813 if [ ! -z "${eextra}" ]; 670 if [ ! -z "${eextra}" ];
814 then 671 then
815 einfo "Extra options are not supported on macos yet" 672 einfo "Extra options are not supported on Darwin/OS X yet"
816 einfo "Please report the ebuild along with the info below" 673 einfo "Please report the ebuild along with the info below"
817 einfo "eextra: ${eextra}" 674 einfo "eextra: ${eextra}"
818 die "Required function missing" 675 die "Required function missing"
819 fi 676 fi
820 677
821 # If we need the next available 678 # If we need the next available
822 case ${egid} in 679 case ${egid} in
823 *[!0-9]*) # Non numeric 680 *[!0-9]*) # Non numeric
824 for egid in `jot 898 101`; do 681 for egid in $(seq 101 999); do
825 [ -z "`egetent group ${egid}`" ] && break 682 [ -z "`egetent group ${egid}`" ] && break
826 done 683 done
827 esac 684 esac
828 dscl . create /groups/${egroup} gid ${egid} 685 dscl . create /groups/${egroup} gid ${egid}
829 dscl . create /groups/${egroup} passwd '*' 686 dscl . create /groups/${egroup} passwd '*'
830 elif use x86-fbsd ; then 687 elif [[ "${USERLAND}" == "BSD" ]] ; then
831 case ${egid} in 688 case ${egid} in
832 *[!0-9]*) # Non numeric 689 *[!0-9]*) # Non numeric
833 for egid in `jot 898 101`; do 690 for egid in $(seq 101 999); do
834 [ -z "`egetent group ${egid}`" ] && break 691 [ -z "`egetent group ${egid}`" ] && break
835 done 692 done
836 esac 693 esac
837 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed" 694 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed"
838 else 695 else
870# name: the name that will show up in the menu 727# name: the name that will show up in the menu
871# icon: give your little like a pretty little icon ... 728# icon: give your little like a pretty little icon ...
872# this can be relative (to /usr/share/pixmaps) or 729# this can be relative (to /usr/share/pixmaps) or
873# a full path to an icon 730# a full path to an icon
874# type: what kind of application is this ? for categories: 731# type: what kind of application is this ? for categories:
875# http://www.freedesktop.org/wiki/Standards_2fmenu_2dspec 732# http://www.freedesktop.org/Standards/desktop-entry-spec
876# path: if your app needs to startup in a specific dir 733# path: if your app needs to startup in a specific dir
877make_desktop_entry() { 734make_desktop_entry() {
878 [[ -z $1 ]] && eerror "make_desktop_entry: You must specify the executable" && return 1 735 [[ -z $1 ]] && eerror "make_desktop_entry: You must specify the executable" && return 1
879 736
880 local exec=${1} 737 local exec=${1}
906 dev) 763 dev)
907 type="Development" 764 type="Development"
908 ;; 765 ;;
909 766
910 games) 767 games)
911 [[ -z ${path} ]] && path=${GAMES_BINDIR}
912
913 case ${catmin} in 768 case ${catmin} in
914 action) type=ActionGame;; 769 action) type=ActionGame;;
915 arcade) type=ArcadeGame;; 770 arcade) type=ArcadeGame;;
916 board) type=BoardGame;; 771 board) type=BoardGame;;
917 kid) type=KidsGame;; 772 kid) type=KidsGame;;
982 *) 837 *)
983 type= 838 type=
984 ;; 839 ;;
985 esac 840 esac
986 fi 841 fi
987 842 if [ "${SLOT}" == "0" ] ; then
843 local desktop_name="${PN}"
844 else
845 local desktop_name="${PN}-${SLOT}"
846 fi
988 local desktop=${T}/${exec%% *}-${P}.desktop 847 local desktop=${T}/${exec%% *}-${desktop_name}.desktop
989 848
990echo "[Desktop Entry] 849echo "[Desktop Entry]
991Encoding=UTF-8 850Encoding=UTF-8
992Version=0.9.2 851Version=0.9.2
993Name=${name} 852Name=${name}
1038 doins "${i}" 897 doins "${i}"
1039 elif [[ -d ${i} ]] ; then 898 elif [[ -d ${i} ]] ; then
1040 for j in "${i}"/*.desktop ; do 899 for j in "${i}"/*.desktop ; do
1041 doins "${j}" 900 doins "${j}"
1042 done 901 done
1043 fi 902 fi
1044 done 903 done
1045} 904}
1046newmenu() { 905newmenu() {
1047 insinto /usr/share/applications 906 insinto /usr/share/applications
1048 newins "$1" "$2" 907 newins "$1" "$2"
1056 doins "${i}" 915 doins "${i}"
1057 elif [[ -d ${i} ]] ; then 916 elif [[ -d ${i} ]] ; then
1058 for j in "${i}"/*.png ; do 917 for j in "${i}"/*.png ; do
1059 doins "${j}" 918 doins "${j}"
1060 done 919 done
1061 fi 920 fi
1062 done 921 done
1063} 922}
1064newicon() { 923newicon() {
1065 insinto /usr/share/pixmaps 924 insinto /usr/share/pixmaps
1066 newins "$1" "$2" 925 newins "$1" "$2"
1071############################################################## 930##############################################################
1072 931
1073 932
1074# for internal use only (unpack_pdv and unpack_makeself) 933# for internal use only (unpack_pdv and unpack_makeself)
1075find_unpackable_file() { 934find_unpackable_file() {
1076 local src="$1" 935 local src=$1
1077 if [ -z "${src}" ] 936 if [[ -z ${src} ]] ; then
1078 then
1079 src="${DISTDIR}/${A}" 937 src=${DISTDIR}/${A}
1080 else 938 else
1081 if [ -e "${DISTDIR}/${src}" ] 939 if [[ -e ${DISTDIR}/${src} ]] ; then
1082 then
1083 src="${DISTDIR}/${src}" 940 src=${DISTDIR}/${src}
1084 elif [ -e "${PWD}/${src}" ] 941 elif [[ -e ${PWD}/${src} ]] ; then
1085 then
1086 src="${PWD}/${src}" 942 src=${PWD}/${src}
1087 elif [ -e "${src}" ] 943 elif [[ -e ${src} ]] ; then
1088 then
1089 src="${src}" 944 src=${src}
1090 fi
1091 fi 945 fi
1092 [ ! -e "${src}" ] && die "Could not find requested archive ${src}" 946 fi
947 [[ ! -e ${src} ]] && return 1
1093 echo "${src}" 948 echo "${src}"
1094} 949}
1095 950
1096# Unpack those pesky pdv generated files ... 951# Unpack those pesky pdv generated files ...
1097# They're self-unpacking programs with the binary package stuffed in 952# They're self-unpacking programs with the binary package stuffed in
1112# lseek 967# lseek
1113# root@vapier 0 pdv_unpack # strace -elseek ./hldsupdatetool.bin 968# root@vapier 0 pdv_unpack # strace -elseek ./hldsupdatetool.bin
1114# lseek(3, -4, SEEK_END) = 2981250 969# lseek(3, -4, SEEK_END) = 2981250
1115# thus we would pass in the value of '4' as the second parameter. 970# thus we would pass in the value of '4' as the second parameter.
1116unpack_pdv() { 971unpack_pdv() {
1117 local src="`find_unpackable_file $1`" 972 local src=$(find_unpackable_file $1)
1118 local sizeoff_t="$2" 973 local sizeoff_t=$2
1119 974
975 [[ -z ${src} ]] && die "Could not locate source for '$1'"
1120 [ -z "${sizeoff_t}" ] && die "No idea what off_t size was used for this pdv :(" 976 [[ -z ${sizeoff_t} ]] && die "No idea what off_t size was used for this pdv :("
1121 977
1122 local shrtsrc="`basename ${src}`" 978 local shrtsrc="`basename ${src}`"
1123 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 979 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
1124 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"` 980 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"`
1125 local tailskip=`tail -c $((${sizeoff_t}*2)) ${src} | head -c ${sizeoff_t} | hexdump -e \"%i\"` 981 local tailskip=`tail -c $((${sizeoff_t}*2)) ${src} | head -c ${sizeoff_t} | hexdump -e \"%i\"`
1191# Usage: unpack_makeself [file to unpack] [offset] [tail|dd] 1047# Usage: unpack_makeself [file to unpack] [offset] [tail|dd]
1192# - If the file is not specified then unpack will utilize ${A}. 1048# - If the file is not specified then unpack will utilize ${A}.
1193# - If the offset is not specified then we will attempt to extract 1049# - If the offset is not specified then we will attempt to extract
1194# the proper offset from the script itself. 1050# the proper offset from the script itself.
1195unpack_makeself() { 1051unpack_makeself() {
1196 local src="$(find_unpackable_file "$1")" 1052 local src=$(find_unpackable_file "$1")
1197 local skip="$2" 1053 local skip=$2
1198 local exe="$3" 1054 local exe=$3
1199 1055
1056 [[ -z ${src} ]] && die "Could not locate source for '$1'"
1057
1200 local shrtsrc="$(basename "${src}")" 1058 local shrtsrc=$(basename "${src}")
1201 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 1059 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
1202 if [ -z "${skip}" ] 1060 if [ -z "${skip}" ]
1203 then 1061 then
1204 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`" 1062 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`"
1205 local skip=0 1063 local skip=0
1276check_license() { 1134check_license() {
1277 local lic=$1 1135 local lic=$1
1278 if [ -z "${lic}" ] ; then 1136 if [ -z "${lic}" ] ; then
1279 lic="${PORTDIR}/licenses/${LICENSE}" 1137 lic="${PORTDIR}/licenses/${LICENSE}"
1280 else 1138 else
1281 if [ -e "${PORTDIR}/licenses/${src}" ] ; then 1139 if [ -e "${PORTDIR}/licenses/${lic}" ] ; then
1282 lic="${PORTDIR}/licenses/${src}" 1140 lic="${PORTDIR}/licenses/${lic}"
1283 elif [ -e "${PWD}/${src}" ] ; then 1141 elif [ -e "${PWD}/${lic}" ] ; then
1284 lic="${PWD}/${src}" 1142 lic="${PWD}/${lic}"
1285 elif [ -e "${src}" ] ; then 1143 elif [ -e "${lic}" ] ; then
1286 lic="${src}" 1144 lic="${lic}"
1287 fi
1288 fi 1145 fi
1146 fi
1289 [ ! -f "${lic}" ] && die "Could not find requested license ${src}" 1147 [ ! -f "${lic}" ] && die "Could not find requested license ${lic}"
1290 local l="`basename ${lic}`" 1148 local l="`basename ${lic}`"
1291 1149
1292 # here is where we check for the licenses the user already 1150 # here is where we check for the licenses the user already
1293 # accepted ... if we don't find a match, we make the user accept 1151 # accepted ... if we don't find a match, we make the user accept
1294 local shopts=$- 1152 local shopts=$-
1465# displayed and we'll hang out here until: 1323# displayed and we'll hang out here until:
1466# (1) the file is found on a mounted cdrom 1324# (1) the file is found on a mounted cdrom
1467# (2) the user hits CTRL+C 1325# (2) the user hits CTRL+C
1468cdrom_locate_file_on_cd() { 1326cdrom_locate_file_on_cd() {
1469 while [[ -z ${CDROM_ROOT} ]] ; do 1327 while [[ -z ${CDROM_ROOT} ]] ; do
1470 local dir="$(dirname ${@})" 1328 local dir=$(dirname "$*")
1471 local file="$(basename ${@})" 1329 local file=$(basename "$*")
1472 local mline="" 1330 local mline=""
1473 local showedmsg=0 1331 local showedmsg=0
1474 1332
1475 for mline in $(mount | egrep -e '(iso|cdrom)' | awk '{print $3}') ; do 1333 for mline in $(mount | egrep -e '(iso|cdrom)' | awk '{print $3}') ; do
1476 [[ -d ${mline}/${dir} ]] || continue 1334 [[ -d ${mline}/${dir} ]] || continue
1477 [[ ! -z $(find ${mline}/${dir} -iname ${file} -maxdepth 1) ]] \ 1335 [[ ! -z $(find ${mline}/${dir} -maxdepth 1 -iname ${file}) ]] \
1478 && export CDROM_ROOT=${mline} 1336 && export CDROM_ROOT=${mline}
1479 done 1337 done
1480 1338
1481 if [[ -z ${CDROM_ROOT} ]] ; then 1339 if [[ -z ${CDROM_ROOT} ]] ; then
1482 echo 1340 echo
1497 fi 1355 fi
1498 showedmsg=1 1356 showedmsg=1
1499 fi 1357 fi
1500 einfo "Press return to scan for the cd again" 1358 einfo "Press return to scan for the cd again"
1501 einfo "or hit CTRL+C to abort the emerge." 1359 einfo "or hit CTRL+C to abort the emerge."
1360 echo
1361 einfo "If you are having trouble with the detection"
1362 einfo "of your CD, it is possible that you do not have"
1363 einfo "Joliet support enabled in your kernel. Please"
1364 einfo "check that CONFIG_JOLIET is enabled in your kernel."
1502 read 1365 read
1503 fi 1366 fi
1504 done 1367 done
1505} 1368}
1506 1369
1570 while ((i--)) ; do 1433 while ((i--)) ; do
1571 ewarn "PLEASE UPDATE TO YOUR PACKAGE TO USE linux-info.eclass" 1434 ewarn "PLEASE UPDATE TO YOUR PACKAGE TO USE linux-info.eclass"
1572 done 1435 done
1573 export EUTILS_ECLASS_PORTAGE_ARCH="${ARCH}" 1436 export EUTILS_ECLASS_PORTAGE_ARCH="${ARCH}"
1574 case ${ARCH} in 1437 case ${ARCH} in
1575 x86) export ARCH="i386";; 1438 x86) export ARCH="i386";;
1576 amd64) export ARCH="x86_64";; 1439 amd64) export ARCH="x86_64";;
1577 hppa) export ARCH="parisc";; 1440 hppa) export ARCH="parisc";;
1578 mips) export ARCH="mips";; 1441 mips) export ARCH="mips";;
1579 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! 1442 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!
1580 *) export ARCH="${ARCH}";; 1443 *) export ARCH="${ARCH}";;
1581 esac 1444 esac
1582} 1445}
1583 1446
1584# set's ARCH back to what portage expects 1447# set's ARCH back to what portage expects
1585set_arch_to_portage() { 1448set_arch_to_portage() {
1629 LIB=$1 1492 LIB=$1
1630 1493
1631 if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then 1494 if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then
1632 SONAME=`basename ${LIB}` 1495 SONAME=`basename ${LIB}`
1633 1496
1634 einfo "An old version of an installed library was detected on your system." 1497 ewarn "An old version of an installed library was detected on your system."
1635 einfo "In order to avoid breaking packages that link against is, this older version" 1498 ewarn "In order to avoid breaking packages that link against it, this older version"
1636 einfo "is not being removed. In order to make full use of this newer version," 1499 ewarn "is not being removed. In order to make full use of this newer version,"
1637 einfo "you will need to execute the following command:" 1500 ewarn "you will need to execute the following command:"
1638 einfo " revdep-rebuild --soname ${SONAME}" 1501 ewarn " revdep-rebuild --soname ${SONAME}"
1639 einfo 1502 ewarn
1640 einfo "After doing that, you can safely remove ${LIB}" 1503 ewarn "After doing that, you can safely remove ${LIB}"
1641 einfo "Note: 'emerge gentoolkit' to get revdep-rebuild" 1504 ewarn "Note: 'emerge gentoolkit' to get revdep-rebuild"
1642 fi 1505 fi
1643} 1506}
1644 1507
1645# Hack for people to figure out if a package was built with 1508# Hack for people to figure out if a package was built with
1646# certain USE flags 1509# certain USE flags
1692dopamd() { 1555dopamd() {
1693 [[ -z $1 ]] && die "dopamd requires at least one argument" 1556 [[ -z $1 ]] && die "dopamd requires at least one argument"
1694 1557
1695 use pam || return 0 1558 use pam || return 0
1696 1559
1697 insinto /etc/pam.d 1560 INSDESTTREE=/etc/pam.d \
1698 doins "$@" || die "failed to install $@" 1561 doins "$@" || die "failed to install $@"
1699} 1562}
1700# newpamd <old name> <new name> 1563# newpamd <old name> <new name>
1701# 1564#
1702# Install pam file <old name> as <new name> in /etc/pam.d 1565# Install pam file <old name> as <new name> in /etc/pam.d
1703newpamd() { 1566newpamd() {
1704 [[ $# -ne 2 ]] && die "newpamd requires two arguements" 1567 [[ $# -ne 2 ]] && die "newpamd requires two arguements"
1705 1568
1706 use pam || return 0 1569 use pam || return 0
1707 1570
1708 insinto /etc/pam.d 1571 INSDESTTREE=/etc/pam.d \
1709 newins "$1" "$2" || die "failed to install $1 as $2" 1572 newins "$1" "$2" || die "failed to install $1 as $2"
1710} 1573}
1711 1574
1712# make a wrapper script ... 1575# make a wrapper script ...
1713# NOTE: this was originally games_make_wrapper, but I noticed other places where 1576# NOTE: this was originally games_make_wrapper, but I noticed other places where

Legend:
Removed from v.1.167  
changed lines
  Added in v.1.200

  ViewVC Help
Powered by ViewVC 1.1.20