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

Diff of /eclass/eutils.eclass

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

Revision 1.158 Revision 1.206
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.158 2005/03/17 02:45:10 vapier Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.206 2005/10/07 16:21:48 flameeyes 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
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}
63 18
64# 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
65# 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
66# outputting to a terminal, don't wait. For compatability purposes, the argument 21# outputting to a terminal, don't wait. For compatability purposes, the argument
67# must be an integer greater than zero. 22# must be an integer greater than zero.
109gen_usr_ldscript() { 64gen_usr_ldscript() {
110 local libdir="$(get_libdir)" 65 local libdir="$(get_libdir)"
111 # Just make sure it exists 66 # Just make sure it exists
112 dodir /usr/${libdir} 67 dodir /usr/${libdir}
113 68
69 for lib in "${@}" ; do
114 cat > "${D}/usr/${libdir}/${1}" << END_LDSCRIPT 70 cat > "${D}/usr/${libdir}/${lib}" <<-END_LDSCRIPT
115/* GNU ld script 71 /* GNU ld script
116 Because Gentoo have critical dynamic libraries 72 Since Gentoo has critical dynamic libraries
117 in /lib, and the static versions in /usr/lib, we 73 in /lib, and the static versions in /usr/lib,
118 need to have a "fake" dynamic lib in /usr/lib, 74 we need to have a "fake" dynamic lib in /usr/lib,
119 otherwise we run into linking problems. 75 otherwise we run into linking problems.
120 See bug #4411 on http://bugs.gentoo.org/ for 76
121 more info. */ 77 See bug http://bugs.gentoo.org/4411 for more info.
78 */
122GROUP ( /${libdir}/${1} ) 79 GROUP ( /${libdir}/${lib} )
123END_LDSCRIPT 80 END_LDSCRIPT
124 fperms a+x "/usr/${libdir}/${1}" 81 fperms a+x "/usr/${libdir}/${lib}"
82 done
125} 83}
126 84
127# Simple function to draw a line consisting of '=' the same length as $* 85# Simple function to draw a line consisting of '=' the same length as $*
86# - only to be used by epatch()
128# 87#
129# <azarah@gentoo.org> (11 Nov 2002) 88# <azarah@gentoo.org> (11 Nov 2002)
130# 89#
131draw_line() { 90draw_line() {
132 local i=0 91 local i=0
158EPATCH_SOURCE="${WORKDIR}/patch" 117EPATCH_SOURCE="${WORKDIR}/patch"
159# Default extension for patches 118# Default extension for patches
160EPATCH_SUFFIX="patch.bz2" 119EPATCH_SUFFIX="patch.bz2"
161# Default options for patch 120# Default options for patch
162# 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
163EPATCH_OPTS="-g0" 122# Set --no-backup-if-mismatch so we don't leave '.orig' files behind.
123EPATCH_OPTS="-g0 --no-backup-if-mismatch"
164# 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,
165# and not the full path .. 125# and not the full path ..
166EPATCH_EXCLUDE="" 126EPATCH_EXCLUDE=""
167# Change the printed message for a single patch. 127# Change the printed message for a single patch.
168EPATCH_SINGLE_MSG="" 128EPATCH_SINGLE_MSG=""
129# Change the printed message for multiple patches.
130EPATCH_MULTI_MSG="Applying various patches (bugfixes/updates) ..."
169# Force applying bulk patches even if not following the style: 131# Force applying bulk patches even if not following the style:
170# 132#
171# ??_${ARCH}_foo.${EPATCH_SUFFIX} 133# ??_${ARCH}_foo.${EPATCH_SUFFIX}
172# 134#
173EPATCH_FORCE="no" 135EPATCH_FORCE="no"
211 local PATCH_TARGET="${T}/$$.patch" 173 local PATCH_TARGET="${T}/$$.patch"
212 local PATCH_SUFFIX="" 174 local PATCH_SUFFIX=""
213 local SINGLE_PATCH="no" 175 local SINGLE_PATCH="no"
214 local x="" 176 local x=""
215 177
178 unset P4CONFIG P4PORT P4USER # keep perforce at bay #56402
179
216 if [ "$#" -gt 1 ] 180 if [ "$#" -gt 1 ]
217 then 181 then
218 local m="" 182 local m=""
219 einfo "${#} patches to apply ..."
220 for m in "$@" ; do 183 for m in "$@" ; do
221 epatch "${m}" 184 epatch "${m}"
222 done 185 done
223 return 0 186 return 0
224 fi 187 fi
278 ;; 241 ;;
279 esac 242 esac
280 243
281 if [ "${SINGLE_PATCH}" = "no" ] 244 if [ "${SINGLE_PATCH}" = "no" ]
282 then 245 then
283 einfo "Applying various patches (bugfixes/updates) ..." 246 einfo "${EPATCH_MULTI_MSG}"
284 fi 247 fi
285 for x in ${EPATCH_SOURCE} 248 for x in ${EPATCH_SOURCE}
286 do 249 do
287 # New ARCH dependant patch naming scheme ... 250 # New ARCH dependant patch naming scheme ...
288 # 251 #
289 # ???_arch_foo.patch 252 # ???_arch_foo.patch
290 # 253 #
291 if [ -f ${x} ] && \ 254 if [ -f ${x} ] && \
292 ([ "${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}" ] || \
293 [ "${EPATCH_FORCE}" = "yes" ]) 256 [ "${EPATCH_FORCE}" = "yes" ])
294 then 257 then
295 local count=0 258 local count=0
296 local popts="${EPATCH_OPTS}" 259 local popts="${EPATCH_OPTS}"
297 local patchname=${x##*/} 260 local patchname=${x##*/}
407 then 370 then
408 einfo "Done with patching" 371 einfo "Done with patching"
409 fi 372 fi
410} 373}
411 374
412# This function return true if we are using the NPTL pthreads
413# implementation.
414#
415# <azarah@gentoo.org> (06 March 2003)
416#
417have_NPTL() {
418 cat > ${T}/test-nptl.c <<-"END"
419 #define _XOPEN_SOURCE
420 #include <unistd.h>
421 #include <stdio.h>
422
423 int main()
424 {
425 char buf[255];
426 char *str = buf;
427
428 confstr(_CS_GNU_LIBPTHREAD_VERSION, str, 255);
429 if (NULL != str) {
430 printf("%s\n", str);
431 if (NULL != strstr(str, "NPTL"))
432 return 0;
433 }
434
435 return 1;
436 }
437 END
438
439 einfon "Checking for _CS_GNU_LIBPTHREAD_VERSION support in glibc ..."
440 if gcc -o ${T}/nptl ${T}/test-nptl.c &> /dev/null
441 then
442 echo "yes"
443 einfon "Checking what PTHREADS implementation we have ..."
444 if ${T}/nptl
445 then
446 return 0
447 else
448 return 1
449 fi
450 else
451 echo "no"
452 fi
453
454 return 1
455}
456
457# This function check how many cpu's are present, and then set
458# -j in MAKEOPTS accordingly.
459#
460# Thanks to nall <nall@gentoo.org> for this.
461#
462get_number_of_jobs() {
463 local jobs=0
464
465 if [ ! -r /proc/cpuinfo ]
466 then
467 return 1
468 fi
469
470 # This bit is from H?kan Wessberg <nacka-gentoo@refug.org>, bug #13565.
471 if [ "`egrep "^[[:space:]]*MAKEOPTS=" /etc/make.conf | wc -l`" -gt 0 ]
472 then
473 ADMINOPTS="`egrep "^[[:space:]]*MAKEOPTS=" /etc/make.conf | cut -d= -f2 | sed 's/\"//g'`"
474 ADMINPARAM="`echo ${ADMINOPTS} | gawk '{match($0, /-j *[0-9]*/, opt); print opt[0]}'`"
475 ADMINPARAM="${ADMINPARAM/-j}"
476 fi
477
478 export MAKEOPTS="`echo ${MAKEOPTS} | sed -e 's:-j *[0-9]*::g'`"
479
480 if [ "${ARCH}" = "amd64" -o "${ARCH}" = "x86" -o "${ARCH}" = "hppa" -o \
481 "${ARCH}" = "arm" -o "${ARCH}" = "mips" -o "${ARCH}" = "ia64" ]
482 then
483 # these archs will always have "[Pp]rocessor"
484 jobs="$((`grep -c ^[Pp]rocessor /proc/cpuinfo` * 2))"
485
486 elif [ "${ARCH}" = "sparc" -o "${ARCH}" = "sparc64" ]
487 then
488 # sparc always has "ncpus active"
489 jobs="$((`grep "^ncpus active" /proc/cpuinfo | sed -e "s/^.*: //"` * 2))"
490
491 elif [ "${ARCH}" = "alpha" ]
492 then
493 # alpha has "cpus active", but only when compiled with SMP
494 if [ "`grep -c "^cpus active" /proc/cpuinfo`" -eq 1 ]
495 then
496 jobs="$((`grep "^cpus active" /proc/cpuinfo | sed -e "s/^.*: //"` * 2))"
497 else
498 jobs=2
499 fi
500
501 elif [ "${ARCH}" = "ppc" -o "${ARCH}" = "ppc64" ]
502 then
503 # ppc has "processor", but only when compiled with SMP
504 if [ "`grep -c "^processor" /proc/cpuinfo`" -eq 1 ]
505 then
506 jobs="$((`grep -c ^processor /proc/cpuinfo` * 2))"
507 else
508 jobs=2
509 fi
510 elif [ "${ARCH}" = "s390" ]
511 then
512 # s390 has "# processors : "
513 jobs="$((`grep "^\# processors" /proc/cpuinfo | sed -e "s/^.*: //"` * 2))"
514 else
515 jobs="$((`grep -c ^cpu /proc/cpuinfo` * 2))"
516 die "Unknown ARCH -- ${ARCH}!"
517 fi
518
519 # Make sure the number is valid ...
520 if [ "${jobs}" -lt 1 ]
521 then
522 jobs=1
523 fi
524
525 if [ -n "${ADMINPARAM}" ]
526 then
527 if [ "${jobs}" -gt "${ADMINPARAM}" ]
528 then
529 einfo "Setting make jobs to \"-j${ADMINPARAM}\" to ensure successful merge ..."
530 export MAKEOPTS="${MAKEOPTS} -j${ADMINPARAM}"
531 else
532 einfo "Setting make jobs to \"-j${jobs}\" to ensure successful merge ..."
533 export MAKEOPTS="${MAKEOPTS} -j${jobs}"
534 fi
535 fi
536}
537
538# Cheap replacement for when debianutils (and thus mktemp) 375# Cheap replacement for when debianutils (and thus mktemp)
539# does not exist on the users system 376# does not exist on the users system
540# vapier@gentoo.org 377# vapier@gentoo.org
541# 378#
542# Takes just 1 optional parameter (the directory to create tmpfile in) 379# Takes just 1 optional parameter (the directory to create tmpfile in)
543emktemp() { 380emktemp() {
544 local exe="touch" 381 local exe="touch"
545 [ "$1" == "-d" ] && exe="mkdir" && shift 382 [[ $1 == -d ]] && exe="mkdir" && shift
546 local topdir="$1" 383 local topdir=$1
547 384
548 if [ -z "${topdir}" ] 385 if [[ -z ${topdir} ]] ; then
549 then
550 [ -z "${T}" ] \ 386 [[ -z ${T} ]] \
551 && topdir="/tmp" \ 387 && topdir="/tmp" \
552 || topdir="${T}" 388 || topdir=${T}
553 fi 389 fi
554 390
555 if [ -z "$(type -p mktemp)" ] 391 if [[ -z $(type -p mktemp) ]] ; then
556 then
557 local tmp=/ 392 local tmp=/
558 while [ -e "${tmp}" ] ; do 393 while [[ -e ${tmp} ]] ; do
559 tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}" 394 tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}
560 done 395 done
561 ${exe} "${tmp}" 396 ${exe} "${tmp}" || ${exe} -p "${tmp}"
562 echo "${tmp}" 397 echo "${tmp}"
563 else 398 else
564 [ "${exe}" == "touch" ] \ 399 [[ ${exe} == "touch" ]] \
565 && exe="-p" \ 400 && exe="-p" \
566 || exe="-d" 401 || exe="-d"
567 mktemp ${exe} "${topdir}" 402 mktemp ${exe} "${topdir}"
568 fi 403 fi
569} 404}
573# Joe Jezak <josejx@gmail.com> and usata@gentoo.org 408# Joe Jezak <josejx@gmail.com> and usata@gentoo.org
574# FBSD stuff: Aaron Walker <ka0ttic@gentoo.org> 409# FBSD stuff: Aaron Walker <ka0ttic@gentoo.org>
575# 410#
576# egetent(database, key) 411# egetent(database, key)
577egetent() { 412egetent() {
578 if useq ppc-macos ; then 413 case ${CHOST} in
414 *-darwin*)
579 case "$2" in 415 case "$2" in
580 *[!0-9]*) # Non numeric 416 *[!0-9]*) # Non numeric
581 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }" 417 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
582 ;; 418 ;;
583 *) # Numeric 419 *) # Numeric
584 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }" 420 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
585 ;; 421 ;;
586 esac 422 esac
587 elif useq x86-fbsd ; then 423 ;;
588 local action 424 *-freebsd*)
589 if [ "$1" == "passwd" ] 425 local opts action="user"
590 then 426 [[ $1 == "passwd" ]] || action="group"
591 action="user" 427
592 else 428 # lookup by uid/gid
593 action="group" 429 if [[ $2 == [[:digit:]]* ]] ; then
430 [[ ${action} == "user" ]] && opts="-u" || opts="-g"
594 fi 431 fi
432
595 pw show "${action}" "$2" -q 433 pw show ${action} ${opts} "$2" -q
596 else 434 ;;
435 *-netbsd*)
436 grep "$2:\*:" /etc/$1
437 ;;
438 *)
597 which nscd >& /dev/null && nscd -i "$1" 439 type -p nscd >& /dev/null && nscd -i "$1"
598 getent "$1" "$2" 440 getent "$1" "$2"
599 fi 441 ;;
442 esac
600} 443}
601 444
602# Simplify/standardize adding users to the system 445# Simplify/standardize adding users to the system
603# vapier@gentoo.org 446# vapier@gentoo.org
604# 447#
612# homedir: /dev/null 455# homedir: /dev/null
613# groups: none 456# groups: none
614# extra: comment of 'added by portage for ${PN}' 457# extra: comment of 'added by portage for ${PN}'
615enewuser() { 458enewuser() {
616 # get the username 459 # get the username
617 local euser="$1"; shift 460 local euser=$1; shift
618 if [ -z "${euser}" ] 461 if [[ -z ${euser} ]] ; then
619 then
620 eerror "No username specified !" 462 eerror "No username specified !"
621 die "Cannot call enewuser without a username" 463 die "Cannot call enewuser without a username"
622 fi 464 fi
623 465
624 # lets see if the username already exists 466 # lets see if the username already exists
625 if [ "${euser}" == "`egetent passwd \"${euser}\" | cut -d: -f1`" ] 467 if [[ ${euser} == $(egetent passwd "${euser}" | cut -d: -f1) ]] ; then
626 then
627 return 0 468 return 0
628 fi 469 fi
629 einfo "Adding user '${euser}' to your system ..." 470 einfo "Adding user '${euser}' to your system ..."
630 471
631 # options to pass to useradd 472 # options to pass to useradd
632 local opts= 473 local opts=
633 474
634 # handle uid 475 # handle uid
635 local euid="$1"; shift 476 local euid=$1; shift
636 if [ ! -z "${euid}" ] && [ "${euid}" != "-1" ] 477 if [[ ! -z ${euid} ]] && [[ ${euid} != "-1" ]] ; then
637 then
638 if [ "${euid}" -gt 0 ] 478 if [[ ${euid} -gt 0 ]] ; then
639 then
640 if [ ! -z "`egetent passwd ${euid}`" ] 479 if [[ ! -z $(egetent passwd ${euid}) ]] ; then
641 then
642 euid="next" 480 euid="next"
643 fi 481 fi
644 else 482 else
645 eerror "Userid given but is not greater than 0 !" 483 eerror "Userid given but is not greater than 0 !"
646 die "${euid} is not a valid UID" 484 die "${euid} is not a valid UID"
647 fi 485 fi
648 else 486 else
649 euid="next" 487 euid="next"
650 fi 488 fi
651 if [ "${euid}" == "next" ] 489 if [[ ${euid} == "next" ]] ; then
652 then 490 for euid in $(seq 101 999) ; do
653 local pwrange
654 if [ "${USERLAND}" == "BSD" ] ; then
655 pwrange="`jot 898 101`"
656 else
657 pwrange="`seq 101 999`"
658 fi
659 for euid in ${pwrange} ; do
660 [ -z "`egetent passwd ${euid}`" ] && break 491 [[ -z $(egetent passwd ${euid}) ]] && break
661 done 492 done
662 fi 493 fi
663 opts="${opts} -u ${euid}" 494 opts="${opts} -u ${euid}"
664 einfo " - Userid: ${euid}" 495 einfo " - Userid: ${euid}"
665 496
666 # handle shell 497 # handle shell
667 local eshell="$1"; shift 498 local eshell=$1; shift
668 if [ ! -z "${eshell}" ] && [ "${eshell}" != "-1" ] 499 if [[ ! -z ${eshell} ]] && [[ ${eshell} != "-1" ]] ; then
669 then
670 if [ ! -e "${eshell}" ] 500 if [[ ! -e ${eshell} ]] ; then
671 then
672 eerror "A shell was specified but it does not exist !" 501 eerror "A shell was specified but it does not exist !"
673 die "${eshell} does not exist" 502 die "${eshell} does not exist"
674 fi 503 fi
675 else 504 else
676 if [ "${USERLAND}" == "BSD" ] 505 for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null ; do
677 then 506 [[ -x ${ROOT}${shell} ]] && break
678 eshell="/usr/bin/false" 507 done
679 else 508
680 eshell="/bin/false" 509 if [[ ${shell} == "/dev/null" ]] ; then
510 eerror "Unable to identify the shell to use"
511 die "Unable to identify the shell to use"
681 fi 512 fi
513
514 eshell=${shell}
682 fi 515 fi
683 einfo " - Shell: ${eshell}" 516 einfo " - Shell: ${eshell}"
684 opts="${opts} -s ${eshell}" 517 opts="${opts} -s ${eshell}"
685 518
686 # handle homedir 519 # handle homedir
687 local ehome="$1"; shift 520 local ehome=$1; shift
688 if [ -z "${ehome}" ] && [ "${eshell}" != "-1" ] 521 if [[ -z ${ehome} ]] || [[ ${ehome} == "-1" ]] ; then
689 then
690 ehome="/dev/null" 522 ehome="/dev/null"
691 fi 523 fi
692 einfo " - Home: ${ehome}" 524 einfo " - Home: ${ehome}"
693 opts="${opts} -d ${ehome}" 525 opts="${opts} -d ${ehome}"
694 526
695 # handle groups 527 # handle groups
696 local egroups="$1"; shift 528 local egroups=$1; shift
697 if [ ! -z "${egroups}" ] 529 if [[ ! -z ${egroups} ]] ; then
698 then
699 local oldifs="${IFS}" 530 local oldifs=${IFS}
700 local defgroup="" exgroups="" 531 local defgroup="" exgroups=""
701 532
702 export IFS="," 533 export IFS=","
703 for g in ${egroups} 534 for g in ${egroups} ; do
704 do
705 export IFS="${oldifs}" 535 export IFS=${oldifs}
706 if [ -z "`egetent group \"${g}\"`" ] 536 if [[ -z $(egetent group "${g}") ]] ; then
707 then
708 eerror "You must add group ${g} to the system first" 537 eerror "You must add group ${g} to the system first"
709 die "${g} is not a valid GID" 538 die "${g} is not a valid GID"
710 fi 539 fi
711 if [ -z "${defgroup}" ] 540 if [[ -z ${defgroup} ]] ; then
712 then
713 defgroup="${g}" 541 defgroup=${g}
714 else 542 else
715 exgroups="${exgroups},${g}" 543 exgroups="${exgroups},${g}"
716 fi 544 fi
717 export IFS="," 545 export IFS=","
718 done 546 done
719 export IFS="${oldifs}" 547 export IFS=${oldifs}
720 548
721 opts="${opts} -g ${defgroup}" 549 opts="${opts} -g ${defgroup}"
722 if [ ! -z "${exgroups}" ] 550 if [[ ! -z ${exgroups} ]] ; then
723 then
724 opts="${opts} -G ${exgroups:1}" 551 opts="${opts} -G ${exgroups:1}"
725 fi 552 fi
726 else 553 else
727 egroups="(none)" 554 egroups="(none)"
728 fi 555 fi
729 einfo " - Groups: ${egroups}" 556 einfo " - Groups: ${egroups}"
730 557
731 # handle extra and add the user 558 # handle extra and add the user
732 local eextra="$@"
733 local oldsandbox="${SANDBOX_ON}" 559 local oldsandbox=${SANDBOX_ON}
734 export SANDBOX_ON="0" 560 export SANDBOX_ON="0"
735 if useq ppc-macos 561 case ${CHOST} in
736 then 562 *-darwin*)
737 ### Make the user 563 ### Make the user
738 if [ -z "${eextra}" ] 564 if [[ -z $@ ]] ; then
739 then
740 dscl . create /users/${euser} uid ${euid} 565 dscl . create /users/${euser} uid ${euid}
741 dscl . create /users/${euser} shell ${eshell} 566 dscl . create /users/${euser} shell ${eshell}
742 dscl . create /users/${euser} home ${ehome} 567 dscl . create /users/${euser} home ${ehome}
743 dscl . create /users/${euser} realname "added by portage for ${PN}" 568 dscl . create /users/${euser} realname "added by portage for ${PN}"
744 ### Add the user to the groups specified 569 ### Add the user to the groups specified
745 local oldifs="${IFS}" 570 local oldifs=${IFS}
746 export IFS="," 571 export IFS=","
747 for g in ${egroups} 572 for g in ${egroups} ; do
748 do
749 dscl . merge /groups/${g} users ${euser} 573 dscl . merge /groups/${g} users ${euser}
750 done 574 done
751 export IFS="${oldifs}" 575 export IFS=${oldifs}
752 else 576 else
753 einfo "Extra options are not supported on macos yet" 577 einfo "Extra options are not supported on Darwin yet"
754 einfo "Please report the ebuild along with the info below" 578 einfo "Please report the ebuild along with the info below"
755 einfo "eextra: ${eextra}" 579 einfo "eextra: $@"
756 die "Required function missing" 580 die "Required function missing"
757 fi 581 fi
758 elif use x86-fbsd ; then 582 ;;
759 if [ -z "${eextra}" ] 583 *-freebsd*)
760 then 584 if [[ -z $@ ]] ; then
761 pw useradd ${euser} ${opts} \ 585 pw useradd ${euser} ${opts} \
762 -c "added by portage for ${PN}" \ 586 -c "added by portage for ${PN}" \
763 die "enewuser failed" 587 die "enewuser failed"
764 else 588 else
765 einfo " - Extra: ${eextra}" 589 einfo " - Extra: $@"
766 pw useradd ${euser} ${opts} \ 590 pw useradd ${euser} ${opts} \
767 -c ${eextra} || die "enewuser failed" 591 "$@" || die "enewuser failed"
768 fi 592 fi
769 else 593 ;;
770 if [ -z "${eextra}" ] 594 *)
771 then 595 if [[ -z $@ ]] ; then
772 useradd ${opts} ${euser} \ 596 useradd ${opts} ${euser} \
773 -c "added by portage for ${PN}" \ 597 -c "added by portage for ${PN}" \
774 || die "enewuser failed" 598 || die "enewuser failed"
775 else 599 else
776 einfo " - Extra: ${eextra}" 600 einfo " - Extra: $@"
777 useradd ${opts} ${euser} ${eextra} \ 601 useradd ${opts} ${euser} "$@" \
778 || die "enewuser failed" 602 || die "enewuser failed"
779 fi 603 fi
604 ;;
605 esac
606
607 if [[ ! -e ${ROOT}/${ehome} ]] ; then
608 einfo " - Creating ${ehome} in ${ROOT}"
609 mkdir -p "${ROOT}/${ehome}"
610 chown ${euser} "${ROOT}/${ehome}"
611 chmod 755 "${ROOT}/${ehome}"
780 fi 612 fi
613
781 export SANDBOX_ON="${oldsandbox}" 614 export SANDBOX_ON=${oldsandbox}
782
783 if [ ! -e "${ehome}" ] && [ ! -e "${D}/${ehome}" ]
784 then
785 einfo " - Creating ${ehome} in ${D}"
786 dodir ${ehome}
787 fowners ${euser} ${ehome}
788 fperms 755 ${ehome}
789 fi
790} 615}
791 616
792# Simplify/standardize adding groups to the system 617# Simplify/standardize adding groups to the system
793# vapier@gentoo.org 618# vapier@gentoo.org
794# 619#
823 then 648 then
824 if [ "${egid}" -gt 0 ] 649 if [ "${egid}" -gt 0 ]
825 then 650 then
826 if [ -z "`egetent group ${egid}`" ] 651 if [ -z "`egetent group ${egid}`" ]
827 then 652 then
828 if useq ppc-macos ; then 653 if [[ "${CHOST}" == *-darwin* ]]; then
829 opts="${opts} ${egid}" 654 opts="${opts} ${egid}"
830 else 655 else
831 opts="${opts} -g ${egid}" 656 opts="${opts} -g ${egid}"
832 fi 657 fi
833 else 658 else
847 opts="${opts} ${eextra}" 672 opts="${opts} ${eextra}"
848 673
849 # add the group 674 # add the group
850 local oldsandbox="${SANDBOX_ON}" 675 local oldsandbox="${SANDBOX_ON}"
851 export SANDBOX_ON="0" 676 export SANDBOX_ON="0"
852 if useq ppc-macos ; then 677 case ${CHOST} in
678 *-darwin*)
853 if [ ! -z "${eextra}" ]; 679 if [ ! -z "${eextra}" ];
854 then 680 then
855 einfo "Extra options are not supported on macos yet" 681 einfo "Extra options are not supported on Darwin/OS X yet"
856 einfo "Please report the ebuild along with the info below" 682 einfo "Please report the ebuild along with the info below"
857 einfo "eextra: ${eextra}" 683 einfo "eextra: ${eextra}"
858 die "Required function missing" 684 die "Required function missing"
859 fi 685 fi
860 686
861 # If we need the next available 687 # If we need the next available
862 case ${egid} in 688 case ${egid} in
863 *[!0-9]*) # Non numeric 689 *[!0-9]*) # Non numeric
864 for egid in `jot 898 101`; do 690 for egid in $(seq 101 999); do
865 [ -z "`egetent group ${egid}`" ] && break 691 [ -z "`egetent group ${egid}`" ] && break
866 done 692 done
867 esac 693 esac
868 dscl . create /groups/${egroup} gid ${egid} 694 dscl . create /groups/${egroup} gid ${egid}
869 dscl . create /groups/${egroup} passwd '*' 695 dscl . create /groups/${egroup} passwd '*'
870 elif use x86-fbsd ; then 696 ;;
697
698 *-freebsd*)
871 case ${egid} in 699 case ${egid} in
872 *[!0-9]*) # Non numeric 700 *[!0-9]*) # Non numeric
873 for egid in `jot 898 101`; do 701 for egid in $(seq 101 999); do
874 [ -z "`egetent group ${egid}`" ] && break 702 [ -z "`egetent group ${egid}`" ] && break
875 done 703 done
876 esac 704 esac
877 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed" 705 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed"
878 else 706 ;;
707
708 *-netbsd*)
709 case ${egid} in
710 *[!0-9]*) # Non numeric
711 for egid in $(seq 101 999); do
712 [ -z "`egetent group ${egid}`" ] && break
713 done
714 esac
715 groupadd ${egroup} -g ${egid} || die "enewgroup failed"
716 ;;
717
718 *)
879 groupadd ${opts} ${egroup} || die "enewgroup failed" 719 groupadd ${opts} ${egroup} || die "enewgroup failed"
880 fi 720 ;;
721 esac
881 export SANDBOX_ON="${oldsandbox}" 722 export SANDBOX_ON="${oldsandbox}"
882} 723}
883 724
884# Simple script to replace 'dos2unix' binaries 725# Simple script to replace 'dos2unix' binaries
885# vapier@gentoo.org 726# vapier@gentoo.org
910# name: the name that will show up in the menu 751# name: the name that will show up in the menu
911# icon: give your little like a pretty little icon ... 752# icon: give your little like a pretty little icon ...
912# this can be relative (to /usr/share/pixmaps) or 753# this can be relative (to /usr/share/pixmaps) or
913# a full path to an icon 754# a full path to an icon
914# type: what kind of application is this ? for categories: 755# type: what kind of application is this ? for categories:
915# http://www.freedesktop.org/wiki/Standards_2fmenu_2dspec 756# http://www.freedesktop.org/Standards/desktop-entry-spec
916# path: if your app needs to startup in a specific dir 757# path: if your app needs to startup in a specific dir
917make_desktop_entry() { 758make_desktop_entry() {
918 [[ -z $1 ]] && eerror "make_desktop_entry: You must specify the executable" && return 1 759 [[ -z $1 ]] && eerror "make_desktop_entry: You must specify the executable" && return 1
919 760
920 local exec=${1} 761 local exec=${1}
942 *) type=;; 783 *) type=;;
943 esac 784 esac
944 ;; 785 ;;
945 786
946 dev) 787 dev)
947 type=Development 788 type="Development"
948 ;; 789 ;;
949 790
950 games) 791 games)
951 [[ -z ${path} ]] && path=${GAMES_BINDIR}
952
953 case ${catmin} in 792 case ${catmin} in
954 action) type=ActionGame;; 793 action) type=ActionGame;;
955 arcade) type=ArcadeGame;; 794 arcade) type=ArcadeGame;;
956 board) type=BoardGame;; 795 board) type=BoardGame;;
957 kid) type=KidsGame;; 796 kid) type=KidsGame;;
962 simulation) type=Simulation;; 801 simulation) type=Simulation;;
963 sports) type=SportsGame;; 802 sports) type=SportsGame;;
964 strategy) type=StrategyGame;; 803 strategy) type=StrategyGame;;
965 *) type=;; 804 *) type=;;
966 esac 805 esac
967 type=Game;${type} 806 type="Game;${type}"
968 ;; 807 ;;
969 808
970 mail) 809 mail)
971 type=Network;Email 810 type="Network;Email"
972 ;; 811 ;;
973 812
974 media) 813 media)
975 case ${catmin} in 814 case ${catmin} in
976 gfx) type=Graphics;; 815 gfx) type=Graphics;;
978 sound) type=Audio;; 817 sound) type=Audio;;
979 tv) type=TV;; 818 tv) type=TV;;
980 video) type=Video;; 819 video) type=Video;;
981 *) type=;; 820 *) type=;;
982 esac 821 esac
983 type=AudioVideo;${type} 822 type="AudioVideo;${type}"
984 ;; 823 ;;
985 824
986 net) 825 net)
987 case ${catmin} in 826 case ${catmin} in
988 dialup) type=Dialup;; 827 dialup) type=Dialup;;
993 news) type=News;; 832 news) type=News;;
994 nntp) type=News;; 833 nntp) type=News;;
995 p2p) type=FileTransfer;; 834 p2p) type=FileTransfer;;
996 *) type=;; 835 *) type=;;
997 esac 836 esac
998 type=Network;${type} 837 type="Network;${type}"
999 ;; 838 ;;
1000 839
1001 sci) 840 sci)
1002 case ${catmin} in 841 case ${catmin} in
1003 astro*) type=Astronomoy;; 842 astro*) type=Astronomoy;;
1005 calc*) type=Calculator;; 844 calc*) type=Calculator;;
1006 chem*) type=Chemistry;; 845 chem*) type=Chemistry;;
1007 geo*) type=Geology;; 846 geo*) type=Geology;;
1008 math*) type=Math;; 847 math*) type=Math;;
1009 *) type=;; 848 *) type=;;
1010 esac 849 esac
1011 type=Science;${type} 850 type="Science;${type}"
1012 ;; 851 ;;
1013 852
1014 www) 853 www)
1015 case ${catmin} in 854 case ${catmin} in
1016 client) type=WebBrowser;; 855 client) type=WebBrowser;;
1017 *) type=;; 856 *) type=;;
1018 esac 857 esac
1019 type=Network 858 type="Network"
1020 ;; 859 ;;
1021 860
1022 *) 861 *)
1023 type= 862 type=
1024 ;; 863 ;;
1025 esac 864 esac
1026 fi 865 fi
1027 866 if [ "${SLOT}" == "0" ] ; then
867 local desktop_name="${PN}"
868 else
869 local desktop_name="${PN}-${SLOT}"
870 fi
1028 local desktop=${T}/${exec%% *}-${P}.desktop 871 local desktop=${T}/${exec%% *}-${desktop_name}.desktop
1029 872
1030echo "[Desktop Entry] 873echo "[Desktop Entry]
1031Encoding=UTF-8 874Encoding=UTF-8
1032Version=0.9.2 875Version=0.9.2
1033Name=${name} 876Name=${name}
1036Exec=${exec} 879Exec=${exec}
1037Path=${path} 880Path=${path}
1038Icon=${icon} 881Icon=${icon}
1039Categories=Application;${type};" > "${desktop}" 882Categories=Application;${type};" > "${desktop}"
1040 883
884 (
885 # wrap the env here so that the 'insinto' call
886 # doesn't corrupt the env of the caller
1041 insinto /usr/share/applications 887 insinto /usr/share/applications
1042 doins "${desktop}" 888 doins "${desktop}"
1043 889 )
1044 return 0
1045} 890}
1046 891
1047# Make a GDM/KDM Session file 892# Make a GDM/KDM Session file
1048# 893#
1049# make_desktop_entry(<title>, <command>) 894# make_desktop_entry(<title>, <command>)
1050# title: File to execute to start the Window Manager 895# title: File to execute to start the Window Manager
1051# command: Name of the Window Manager 896# command: Name of the Window Manager
1052 897
1053make_session_desktop() { 898make_session_desktop() {
1054
1055 [ -z "$1" ] && eerror "make_session_desktop: You must specify the title" && return 1 899 [[ -z $1 ]] && eerror "make_session_desktop: You must specify the title" && return 1
1056 [ -z "$2" ] && eerror "make_session_desktop: You must specify the command" && return 1 900 [[ -z $2 ]] && eerror "make_session_desktop: You must specify the command" && return 1
1057 901
1058 local title="${1}" 902 local title=$1
1059 local command="${2}" 903 local command=$2
1060 local desktop="${T}/${wm}.desktop" 904 local desktop=${T}/${wm}.desktop
1061 905
1062echo "[Desktop Entry] 906echo "[Desktop Entry]
1063Encoding=UTF-8 907Encoding=UTF-8
1064Name=${title} 908Name=${title}
1065Comment=This session logs you into ${title} 909Comment=This session logs you into ${title}
1067TryExec=${command} 911TryExec=${command}
1068Type=Application" > "${desktop}" 912Type=Application" > "${desktop}"
1069 913
1070 insinto /usr/share/xsessions 914 insinto /usr/share/xsessions
1071 doins "${desktop}" 915 doins "${desktop}"
1072
1073 return 0
1074} 916}
1075 917
1076domenu() { 918domenu() {
1077 local i 919 local i j
1078 local j
1079 insinto /usr/share/applications 920 insinto /usr/share/applications
1080 for i in ${@} 921 for i in "$@" ; do
1081 do
1082 if [ -f "${i}" ]; 922 if [[ -f ${i} ]] ; then
1083 then
1084 doins ${i} 923 doins "${i}"
1085 elif [ -d "${i}" ]; 924 elif [[ -d ${i} ]] ; then
1086 then
1087 for j in ${i}/*.desktop 925 for j in "${i}"/*.desktop ; do
1088 do
1089 doins ${j} 926 doins "${j}"
1090 done 927 done
1091 fi 928 fi
1092 done 929 done
1093} 930}
931newmenu() {
932 insinto /usr/share/applications
933 newins "$1" "$2"
934}
1094 935
1095doicon() { 936doicon() {
1096 local i 937 local i j
1097 local j
1098 insinto /usr/share/pixmaps 938 insinto /usr/share/pixmaps
1099 for i in ${@} 939 for i in "$@" ; do
1100 do
1101 if [ -f "${i}" ]; 940 if [[ -f ${i} ]] ; then
1102 then
1103 doins ${i} 941 doins "${i}"
1104 elif [ -d "${i}" ]; 942 elif [[ -d ${i} ]] ; then
1105 then
1106 for j in ${i}/*.png 943 for j in "${i}"/*.png ; do
1107 do
1108 doins ${j} 944 doins "${j}"
1109 done 945 done
1110 fi 946 fi
1111 done 947 done
948}
949newicon() {
950 insinto /usr/share/pixmaps
951 newins "$1" "$2"
1112} 952}
1113 953
1114############################################################## 954##############################################################
1115# END: Handle .desktop files and menu entries # 955# END: Handle .desktop files and menu entries #
1116############################################################## 956##############################################################
1117 957
1118 958
1119# for internal use only (unpack_pdv and unpack_makeself) 959# for internal use only (unpack_pdv and unpack_makeself)
1120find_unpackable_file() { 960find_unpackable_file() {
1121 local src="$1" 961 local src=$1
1122 if [ -z "${src}" ] 962 if [[ -z ${src} ]] ; then
1123 then
1124 src="${DISTDIR}/${A}" 963 src=${DISTDIR}/${A}
1125 else 964 else
1126 if [ -e "${DISTDIR}/${src}" ] 965 if [[ -e ${DISTDIR}/${src} ]] ; then
1127 then
1128 src="${DISTDIR}/${src}" 966 src=${DISTDIR}/${src}
1129 elif [ -e "${PWD}/${src}" ] 967 elif [[ -e ${PWD}/${src} ]] ; then
1130 then
1131 src="${PWD}/${src}" 968 src=${PWD}/${src}
1132 elif [ -e "${src}" ] 969 elif [[ -e ${src} ]] ; then
1133 then
1134 src="${src}" 970 src=${src}
1135 fi
1136 fi 971 fi
1137 [ ! -e "${src}" ] && die "Could not find requested archive ${src}" 972 fi
973 [[ ! -e ${src} ]] && return 1
1138 echo "${src}" 974 echo "${src}"
1139} 975}
1140 976
1141# Unpack those pesky pdv generated files ... 977# Unpack those pesky pdv generated files ...
1142# They're self-unpacking programs with the binary package stuffed in 978# They're self-unpacking programs with the binary package stuffed in
1157# lseek 993# lseek
1158# root@vapier 0 pdv_unpack # strace -elseek ./hldsupdatetool.bin 994# root@vapier 0 pdv_unpack # strace -elseek ./hldsupdatetool.bin
1159# lseek(3, -4, SEEK_END) = 2981250 995# lseek(3, -4, SEEK_END) = 2981250
1160# thus we would pass in the value of '4' as the second parameter. 996# thus we would pass in the value of '4' as the second parameter.
1161unpack_pdv() { 997unpack_pdv() {
1162 local src="`find_unpackable_file $1`" 998 local src=$(find_unpackable_file $1)
1163 local sizeoff_t="$2" 999 local sizeoff_t=$2
1164 1000
1001 [[ -z ${src} ]] && die "Could not locate source for '$1'"
1165 [ -z "${sizeoff_t}" ] && die "No idea what off_t size was used for this pdv :(" 1002 [[ -z ${sizeoff_t} ]] && die "No idea what off_t size was used for this pdv :("
1166 1003
1167 local shrtsrc="`basename ${src}`" 1004 local shrtsrc="`basename ${src}`"
1168 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 1005 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
1169 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"` 1006 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"`
1170 local tailskip=`tail -c $((${sizeoff_t}*2)) ${src} | head -c ${sizeoff_t} | hexdump -e \"%i\"` 1007 local tailskip=`tail -c $((${sizeoff_t}*2)) ${src} | head -c ${sizeoff_t} | hexdump -e \"%i\"`
1236# Usage: unpack_makeself [file to unpack] [offset] [tail|dd] 1073# Usage: unpack_makeself [file to unpack] [offset] [tail|dd]
1237# - If the file is not specified then unpack will utilize ${A}. 1074# - If the file is not specified then unpack will utilize ${A}.
1238# - If the offset is not specified then we will attempt to extract 1075# - If the offset is not specified then we will attempt to extract
1239# the proper offset from the script itself. 1076# the proper offset from the script itself.
1240unpack_makeself() { 1077unpack_makeself() {
1241 local src="$(find_unpackable_file "$1")" 1078 local src=$(find_unpackable_file "$1")
1242 local skip="$2" 1079 local skip=$2
1243 local exe="$3" 1080 local exe=$3
1244 1081
1082 [[ -z ${src} ]] && die "Could not locate source for '$1'"
1083
1245 local shrtsrc="$(basename "${src}")" 1084 local shrtsrc=$(basename "${src}")
1246 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 1085 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
1247 if [ -z "${skip}" ] 1086 if [ -z "${skip}" ]
1248 then 1087 then
1249 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`" 1088 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`"
1250 local skip=0 1089 local skip=0
1321check_license() { 1160check_license() {
1322 local lic=$1 1161 local lic=$1
1323 if [ -z "${lic}" ] ; then 1162 if [ -z "${lic}" ] ; then
1324 lic="${PORTDIR}/licenses/${LICENSE}" 1163 lic="${PORTDIR}/licenses/${LICENSE}"
1325 else 1164 else
1326 if [ -e "${PORTDIR}/licenses/${src}" ] ; then 1165 if [ -e "${PORTDIR}/licenses/${lic}" ] ; then
1327 lic="${PORTDIR}/licenses/${src}" 1166 lic="${PORTDIR}/licenses/${lic}"
1328 elif [ -e "${PWD}/${src}" ] ; then 1167 elif [ -e "${PWD}/${lic}" ] ; then
1329 lic="${PWD}/${src}" 1168 lic="${PWD}/${lic}"
1330 elif [ -e "${src}" ] ; then 1169 elif [ -e "${lic}" ] ; then
1331 lic="${src}" 1170 lic="${lic}"
1332 fi
1333 fi 1171 fi
1172 fi
1334 [ ! -f "${lic}" ] && die "Could not find requested license ${src}" 1173 [ ! -f "${lic}" ] && die "Could not find requested license ${lic}"
1335 local l="`basename ${lic}`" 1174 local l="`basename ${lic}`"
1336 1175
1337 # here is where we check for the licenses the user already 1176 # here is where we check for the licenses the user already
1338 # accepted ... if we don't find a match, we make the user accept 1177 # accepted ... if we don't find a match, we make the user accept
1339 local shopts=$- 1178 local shopts=$-
1510# displayed and we'll hang out here until: 1349# displayed and we'll hang out here until:
1511# (1) the file is found on a mounted cdrom 1350# (1) the file is found on a mounted cdrom
1512# (2) the user hits CTRL+C 1351# (2) the user hits CTRL+C
1513cdrom_locate_file_on_cd() { 1352cdrom_locate_file_on_cd() {
1514 while [[ -z ${CDROM_ROOT} ]] ; do 1353 while [[ -z ${CDROM_ROOT} ]] ; do
1515 local dir="$(dirname ${@})" 1354 local dir=$(dirname "$*")
1516 local file="$(basename ${@})" 1355 local file=$(basename "$*")
1517 local mline="" 1356 local mline=""
1518 local showedmsg=0 1357 local showedmsg=0
1519 1358
1520 for mline in $(mount | egrep -e '(iso|cdrom)' | awk '{print $3}') ; do 1359 for mline in $(mount | egrep -e '(iso|cdrom)' | awk '{print $3}') ; do
1521 [[ -d ${mline}/${dir} ]] || continue 1360 [[ -d ${mline}/${dir} ]] || continue
1522 [[ ! -z $(find ${mline}/${dir} -iname ${file} -maxdepth 1) ]] \ 1361 [[ ! -z $(find ${mline}/${dir} -maxdepth 1 -iname ${file}) ]] \
1523 && export CDROM_ROOT=${mline} 1362 && export CDROM_ROOT=${mline}
1524 done 1363 done
1525 1364
1526 if [[ -z ${CDROM_ROOT} ]] ; then 1365 if [[ -z ${CDROM_ROOT} ]] ; then
1527 echo 1366 echo
1542 fi 1381 fi
1543 showedmsg=1 1382 showedmsg=1
1544 fi 1383 fi
1545 einfo "Press return to scan for the cd again" 1384 einfo "Press return to scan for the cd again"
1546 einfo "or hit CTRL+C to abort the emerge." 1385 einfo "or hit CTRL+C to abort the emerge."
1386 echo
1387 einfo "If you are having trouble with the detection"
1388 einfo "of your CD, it is possible that you do not have"
1389 einfo "Joliet support enabled in your kernel. Please"
1390 einfo "check that CONFIG_JOLIET is enabled in your kernel."
1547 read 1391 read
1548 fi 1392 fi
1549 done 1393 done
1550} 1394}
1551 1395
1595 else 1439 else
1596 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA" 1440 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA"
1597 fi 1441 fi
1598 done 1442 done
1599 if [[ -z ${newls} ]] ; then 1443 if [[ -z ${newls} ]] ; then
1600 unset LINGUAS 1444 export LINGUAS=""
1601 else 1445 else
1602 export LINGUAS=${newls:1} 1446 export LINGUAS=${newls:1}
1603 fi 1447 fi
1604} 1448}
1605 1449
1615 while ((i--)) ; do 1459 while ((i--)) ; do
1616 ewarn "PLEASE UPDATE TO YOUR PACKAGE TO USE linux-info.eclass" 1460 ewarn "PLEASE UPDATE TO YOUR PACKAGE TO USE linux-info.eclass"
1617 done 1461 done
1618 export EUTILS_ECLASS_PORTAGE_ARCH="${ARCH}" 1462 export EUTILS_ECLASS_PORTAGE_ARCH="${ARCH}"
1619 case ${ARCH} in 1463 case ${ARCH} in
1620 x86) export ARCH="i386";; 1464 x86) export ARCH="i386";;
1621 amd64) export ARCH="x86_64";; 1465 amd64) export ARCH="x86_64";;
1622 hppa) export ARCH="parisc";; 1466 hppa) export ARCH="parisc";;
1623 mips) export ARCH="mips";; 1467 mips) export ARCH="mips";;
1624 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! 1468 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!
1625 *) export ARCH="${ARCH}";; 1469 *) export ARCH="${ARCH}";;
1626 esac 1470 esac
1627} 1471}
1628 1472
1629# set's ARCH back to what portage expects 1473# set's ARCH back to what portage expects
1630set_arch_to_portage() { 1474set_arch_to_portage() {
1674 LIB=$1 1518 LIB=$1
1675 1519
1676 if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then 1520 if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then
1677 SONAME=`basename ${LIB}` 1521 SONAME=`basename ${LIB}`
1678 1522
1679 einfo "An old version of an installed library was detected on your system." 1523 ewarn "An old version of an installed library was detected on your system."
1680 einfo "In order to avoid breaking packages that link against is, this older version" 1524 ewarn "In order to avoid breaking packages that link against it, this older version"
1681 einfo "is not being removed. In order to make full use of this newer version," 1525 ewarn "is not being removed. In order to make full use of this newer version,"
1682 einfo "you will need to execute the following command:" 1526 ewarn "you will need to execute the following command:"
1683 einfo " revdep-rebuild --soname ${SONAME}" 1527 ewarn " revdep-rebuild --soname ${SONAME}"
1684 einfo 1528 ewarn
1685 einfo "After doing that, you can safely remove ${LIB}" 1529 ewarn "After doing that, you can safely remove ${LIB}"
1686 einfo "Note: 'emerge gentoolkit' to get revdep-rebuild" 1530 ewarn "Note: 'emerge gentoolkit' to get revdep-rebuild"
1687 fi 1531 fi
1688} 1532}
1689 1533
1690# Hack for people to figure out if a package was built with 1534# Hack for people to figure out if a package was built with
1691# certain USE flags 1535# certain USE flags
1737dopamd() { 1581dopamd() {
1738 [[ -z $1 ]] && die "dopamd requires at least one argument" 1582 [[ -z $1 ]] && die "dopamd requires at least one argument"
1739 1583
1740 use pam || return 0 1584 use pam || return 0
1741 1585
1742 insinto /etc/pam.d 1586 INSDESTTREE=/etc/pam.d \
1743 # these are the default doins options, but be explicit just in case
1744 insopts -m 0644 -o root -g root
1745 doins "$@" || die "failed to install $@" 1587 doins "$@" || die "failed to install $@"
1746} 1588}
1747# newpamd <old name> <new name> 1589# newpamd <old name> <new name>
1748# 1590#
1749# Install pam file <old name> as <new name> in /etc/pam.d 1591# Install pam file <old name> as <new name> in /etc/pam.d
1750newpamd() { 1592newpamd() {
1751 [[ $# -ne 2 ]] && die "newpamd requires two arguements" 1593 [[ $# -ne 2 ]] && die "newpamd requires two arguements"
1752 1594
1753 use pam || return 0 1595 use pam || return 0
1754 1596
1755 insinto /etc/pam.d 1597 INSDESTTREE=/etc/pam.d \
1756 # these are the default doins options, but be explicit just in case
1757 insopts -m 0644 -o root -g root
1758 newins "$1" "$2" || die "failed to install $1 as $2" 1598 newins "$1" "$2" || die "failed to install $1 as $2"
1759} 1599}
1600
1601# make a wrapper script ...
1602# NOTE: this was originally games_make_wrapper, but I noticed other places where
1603# this could be used, so I have moved it here and made it not games-specific
1604# -- wolf31o2
1605# $1 == wrapper name
1606# $2 == binary to run
1607# $3 == directory to chdir before running binary
1608# $4 == extra LD_LIBRARY_PATH's (make it : delimited)
1609# $5 == path for wrapper
1610make_wrapper() {
1611 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5
1612 local tmpwrapper=$(emktemp)
1613 # We don't want to quote ${bin} so that people can pass complex
1614 # things as $bin ... "./someprog --args"
1615 cat << EOF > "${tmpwrapper}"
1616#!/bin/sh
1617cd "${chdir:-.}"
1618if [ "\${LD_LIBRARY_PATH+set}" = "set" ] && [ -n "${libdir}" ] ; then
1619 export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}"
1620fi
1621exec ${bin} "\$@"
1622EOF
1623 chmod go+rx "${tmpwrapper}"
1624 if [[ -n ${path} ]] ; then
1625 exeinto "${path}"
1626 newexe "${tmpwrapper}" "${wrapper}"
1627 else
1628 newbin "${tmpwrapper}" "${wrapper}"
1629 fi
1630}

Legend:
Removed from v.1.158  
changed lines
  Added in v.1.206

  ViewVC Help
Powered by ViewVC 1.1.20