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

Diff of /eclass/eutils.eclass

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

Revision 1.1.1.1 Revision 1.144
1# Copyright 1999-2005 Gentoo Foundation 1# Copyright 1999-2004 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.1.1.1 2005/11/30 09:59:15 chriswhite Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.144 2005/02/03 22:11:33 chriswhite 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 portability 12inherit multilib
13ECLASS=eutils
14INHERITED="$INHERITED $ECLASS"
13 15
14DEPEND="!bootstrap? ( sys-devel/patch )" 16DEPEND="!bootstrap? ( sys-devel/patch )"
15# sys-apps/shadow is needed for useradd, etc, bug #94745.
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 CPU_FLAGS=$1
38 USER_CPU=`grep "flags" /proc/cpuinfo`
39
40 for flags in `seq 1 ${#CPU_FLAGS[@]}`
41 do
42 if has ${CPU_FLAGS[$flags - 1]} $USER_CPU && ! has ${CPU_FLAGS[$flags - 1]} $USE
43 then
44 ewarn "Your system is ${CPU_FLAGS[$flags - 1]} capable but you don't have it enabled!"
45 ewarn "You might be cross compiling (in this case set CROSSCOMPILE to 1 to disable this warning."
46 fi
47
48 if ! has ${CPU_FLAGS[$flags - 1]} $USER_CPU && has ${CPU_FLAGS[$flags -1]} $USE
49 then
50 ewarn "You have ${CPU_FLAGS[$flags - 1]} support enabled but your processor doesn't"
51 ewarn "Seem to support it! You might be cross compiling or do not have /proc filesystem"
52 ewarn "enabled. If either is the case, set CROSSCOMPILE to 1 to disable this warning."
53 fi
54 done
55}
18 56
19# Wait for the supplied number of seconds. If no argument is supplied, defaults 57# 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 58# 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 59# outputting to a terminal, don't wait. For compatability purposes, the argument
22# must be an integer greater than zero. 60# must be an integer greater than zero.
64gen_usr_ldscript() { 102gen_usr_ldscript() {
65 local libdir="$(get_libdir)" 103 local libdir="$(get_libdir)"
66 # Just make sure it exists 104 # Just make sure it exists
67 dodir /usr/${libdir} 105 dodir /usr/${libdir}
68 106
69 for lib in "${@}" ; do
70 cat > "${D}/usr/${libdir}/${lib}" <<-END_LDSCRIPT 107 cat > "${D}/usr/${libdir}/${1}" << END_LDSCRIPT
71 /* GNU ld script 108/* GNU ld script
72 Since Gentoo has critical dynamic libraries 109 Because Gentoo have critical dynamic libraries
73 in /lib, and the static versions in /usr/lib, 110 in /lib, and the static versions in /usr/lib, we
74 we need to have a "fake" dynamic lib in /usr/lib, 111 need to have a "fake" dynamic lib in /usr/lib,
75 otherwise we run into linking problems. 112 otherwise we run into linking problems.
76 113 See bug #4411 on http://bugs.gentoo.org/ for
77 See bug http://bugs.gentoo.org/4411 for more info. 114 more info. */
78 */
79 GROUP ( /${libdir}/${lib} ) 115GROUP ( /${libdir}/${1} )
80 END_LDSCRIPT 116END_LDSCRIPT
81 fperms a+x "/usr/${libdir}/${lib}" 117 fperms a+x "/usr/${libdir}/${1}"
82 done
83} 118}
84 119
85# Simple function to draw a line consisting of '=' the same length as $* 120# Simple function to draw a line consisting of '=' the same length as $*
86# - only to be used by epatch()
87# 121#
88# <azarah@gentoo.org> (11 Nov 2002) 122# <azarah@gentoo.org> (11 Nov 2002)
89# 123#
90draw_line() { 124draw_line() {
91 local i=0 125 local i=0
117EPATCH_SOURCE="${WORKDIR}/patch" 151EPATCH_SOURCE="${WORKDIR}/patch"
118# Default extension for patches 152# Default extension for patches
119EPATCH_SUFFIX="patch.bz2" 153EPATCH_SUFFIX="patch.bz2"
120# Default options for patch 154# Default options for patch
121# Set -g0 to keep RCS, ClearCase, Perforce and SCCS happy. Bug #24571 155# Set -g0 to keep RCS, ClearCase, Perforce and SCCS happy. Bug #24571
122# Set --no-backup-if-mismatch so we don't leave '.orig' files behind. 156EPATCH_OPTS="-g0"
123EPATCH_OPTS="-g0 --no-backup-if-mismatch"
124# List of patches not to apply. Not this is only file names, 157# List of patches not to apply. Not this is only file names,
125# and not the full path .. 158# and not the full path ..
126EPATCH_EXCLUDE="" 159EPATCH_EXCLUDE=""
127# Change the printed message for a single patch. 160# Change the printed message for a single patch.
128EPATCH_SINGLE_MSG="" 161EPATCH_SINGLE_MSG=""
129# Change the printed message for multiple patches.
130EPATCH_MULTI_MSG="Applying various patches (bugfixes/updates) ..."
131# Force applying bulk patches even if not following the style: 162# Force applying bulk patches even if not following the style:
132# 163#
133# ??_${ARCH}_foo.${EPATCH_SUFFIX} 164# ??_${ARCH}_foo.${EPATCH_SUFFIX}
134# 165#
135EPATCH_FORCE="no" 166EPATCH_FORCE="no"
166# hand its a directory, it will set EPATCH_SOURCE to this. 197# hand its a directory, it will set EPATCH_SOURCE to this.
167# 198#
168# <azarah@gentoo.org> (10 Nov 2002) 199# <azarah@gentoo.org> (10 Nov 2002)
169# 200#
170epatch() { 201epatch() {
171 _epatch_assert() { local _pipestatus=${PIPESTATUS[*]}; [[ ${_pipestatus// /} -eq 0 ]] ; }
172 local PIPE_CMD="" 202 local PIPE_CMD=""
173 local STDERR_TARGET="${T}/$$.out" 203 local STDERR_TARGET="${T}/$$.out"
174 local PATCH_TARGET="${T}/$$.patch" 204 local PATCH_TARGET="${T}/$$.patch"
175 local PATCH_SUFFIX="" 205 local PATCH_SUFFIX=""
176 local SINGLE_PATCH="no" 206 local SINGLE_PATCH="no"
177 local x="" 207 local x=""
178 208
179 unset P4CONFIG P4PORT P4USER # keep perforce at bay #56402
180
181 if [ "$#" -gt 1 ] 209 if [ "$#" -gt 1 ]
182 then 210 then
183 local m="" 211 local m=""
212 einfo "${#} patches to apply ..."
184 for m in "$@" ; do 213 for m in "$@" ; do
185 epatch "${m}" 214 epatch "${m}"
186 done 215 done
187 return 0 216 return 0
188 fi 217 fi
242 ;; 271 ;;
243 esac 272 esac
244 273
245 if [ "${SINGLE_PATCH}" = "no" ] 274 if [ "${SINGLE_PATCH}" = "no" ]
246 then 275 then
247 einfo "${EPATCH_MULTI_MSG}" 276 einfo "Applying various patches (bugfixes/updates) ..."
248 fi 277 fi
249 for x in ${EPATCH_SOURCE} 278 for x in ${EPATCH_SOURCE}
250 do 279 do
251 # New ARCH dependant patch naming scheme ... 280 # New ARCH dependant patch naming scheme ...
252 # 281 #
253 # ???_arch_foo.patch 282 # ???_arch_foo.patch
254 # 283 #
255 if [ -f ${x} ] && \ 284 if [ -f ${x} ] && \
256 ([ "${SINGLE_PATCH}" = "yes" -o "${x/_all_}" != "${x}" -o "${x/_${ARCH}_}" != "${x}" ] || \ 285 ([ "${SINGLE_PATCH}" = "yes" -o "${x/_all_}" != "${x}" -o "`eval echo \$\{x/_${ARCH}_\}`" != "${x}" ] || \
257 [ "${EPATCH_FORCE}" = "yes" ]) 286 [ "${EPATCH_FORCE}" = "yes" ])
258 then 287 then
259 local count=0 288 local count=0
260 local popts="${EPATCH_OPTS}" 289 local popts="${EPATCH_OPTS}"
261 local patchname=${x##*/}
262 290
263 if [ -n "${EPATCH_EXCLUDE}" ] 291 if [ -n "${EPATCH_EXCLUDE}" ]
264 then 292 then
265 if [ "${EPATCH_EXCLUDE/${patchname}}" != "${EPATCH_EXCLUDE}" ] 293 if [ "`eval echo \$\{EPATCH_EXCLUDE/${x##*/}\}`" != "${EPATCH_EXCLUDE}" ]
266 then 294 then
267 continue 295 continue
268 fi 296 fi
269 fi 297 fi
270 298
272 then 300 then
273 if [ -n "${EPATCH_SINGLE_MSG}" ] 301 if [ -n "${EPATCH_SINGLE_MSG}" ]
274 then 302 then
275 einfo "${EPATCH_SINGLE_MSG}" 303 einfo "${EPATCH_SINGLE_MSG}"
276 else 304 else
277 einfo "Applying ${patchname} ..." 305 einfo "Applying ${x##*/} ..."
278 fi 306 fi
279 else 307 else
280 einfo " ${patchname} ..." 308 einfo " ${x##*/} ..."
281 fi 309 fi
282 310
283 echo "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 311 echo "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
284 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 312 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
285 313
286 # Allow for prefix to differ ... im lazy, so shoot me :/ 314 # Allow for prefix to differ ... im lazy, so shoot me :/
287 while [ "${count}" -lt 5 ] 315 while [ "${count}" -lt 5 ]
288 do 316 do
289 # Generate some useful debug info ... 317 # Generate some useful debug info ...
290 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 318 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
291 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 319 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
292 320
293 if [ "${PATCH_SUFFIX}" != "patch" ] 321 if [ "${PATCH_SUFFIX}" != "patch" ]
294 then 322 then
295 echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 323 echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
296 echo "${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 324 echo "${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
297 else 325 else
298 PATCH_TARGET="${x}" 326 PATCH_TARGET="${x}"
299 fi 327 fi
300 328
301 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 329 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
302 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 330 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
303 331
304 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 332 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
305 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 333 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
306 334
307 if [ "${PATCH_SUFFIX}" != "patch" ] 335 if [ "${PATCH_SUFFIX}" != "patch" ]
308 then 336 then
309 if ! (${PIPE_CMD} ${x} > ${PATCH_TARGET}) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1 337 if ! (${PIPE_CMD} ${x} > ${PATCH_TARGET}) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1
310 then 338 then
311 echo 339 echo
312 eerror "Could not extract patch!" 340 eerror "Could not extract patch!"
313 #die "Could not extract patch!" 341 #die "Could not extract patch!"
314 count=5 342 count=5
315 break 343 break
316 fi 344 fi
317 fi 345 fi
318 346
319 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f ; _epatch_assert) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1 347 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1
320 then 348 then
321 draw_line "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 349 draw_line "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
322 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 350 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
323 echo "ACTUALLY APPLYING ${patchname} ..." >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 351 echo "ACTUALLY APPLYING ${x##*/} ..." >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
324 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 352 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
325 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 353 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
326 354
327 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 2>&1 355 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 2>&1
328 _epatch_assert
329 356
330 if [ "$?" -ne 0 ] 357 if [ "$?" -ne 0 ]
331 then 358 then
332 cat ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 359 cat ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
333 echo 360 echo
334 eerror "A dry-run of patch command succeeded, but actually" 361 eerror "A dry-run of patch command succeeded, but actually"
335 eerror "applying the patch failed!" 362 eerror "applying the patch failed!"
336 #die "Real world sux compared to the dreamworld!" 363 #die "Real world sux compared to the dreamworld!"
337 count=5 364 count=5
338 fi 365 fi
339 366
340 rm -f ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 367 rm -f ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
341 368
342 break 369 break
343 fi 370 fi
344 371
345 count=$((count + 1)) 372 count=$((count + 1))
351 fi 378 fi
352 379
353 if [ "${count}" -eq 5 ] 380 if [ "${count}" -eq 5 ]
354 then 381 then
355 echo 382 echo
356 eerror "Failed Patch: ${patchname} !" 383 eerror "Failed Patch: ${x##*/}!"
357 eerror " ( ${PATCH_TARGET} )"
358 eerror 384 eerror
359 eerror "Include in your bugreport the contents of:" 385 eerror "Include in your bugreport the contents of:"
360 eerror 386 eerror
361 eerror " ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}" 387 eerror " ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}"
362 echo 388 echo
363 die "Failed Patch: ${patchname}!" 389 die "Failed Patch: ${x##*/}!"
364 fi 390 fi
365 391
366 rm -f ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 392 rm -f ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
367 393
368 eend 0 394 eend 0
369 fi 395 fi
370 done 396 done
371 if [ "${SINGLE_PATCH}" = "no" ] 397 if [ "${SINGLE_PATCH}" = "no" ]
372 then 398 then
373 einfo "Done with patching" 399 einfo "Done with patching"
400 fi
401}
402
403# This function return true if we are using the NPTL pthreads
404# implementation.
405#
406# <azarah@gentoo.org> (06 March 2003)
407#
408have_NPTL() {
409 cat > ${T}/test-nptl.c <<-"END"
410 #define _XOPEN_SOURCE
411 #include <unistd.h>
412 #include <stdio.h>
413
414 int main()
415 {
416 char buf[255];
417 char *str = buf;
418
419 confstr(_CS_GNU_LIBPTHREAD_VERSION, str, 255);
420 if (NULL != str) {
421 printf("%s\n", str);
422 if (NULL != strstr(str, "NPTL"))
423 return 0;
424 }
425
426 return 1;
427 }
428 END
429
430 einfon "Checking for _CS_GNU_LIBPTHREAD_VERSION support in glibc ..."
431 if gcc -o ${T}/nptl ${T}/test-nptl.c &> /dev/null
432 then
433 echo "yes"
434 einfon "Checking what PTHREADS implementation we have ..."
435 if ${T}/nptl
436 then
437 return 0
438 else
439 return 1
440 fi
441 else
442 echo "no"
443 fi
444
445 return 1
446}
447
448# This function check how many cpu's are present, and then set
449# -j in MAKEOPTS accordingly.
450#
451# Thanks to nall <nall@gentoo.org> for this.
452#
453get_number_of_jobs() {
454 local jobs=0
455
456 if [ ! -r /proc/cpuinfo ]
457 then
458 return 1
459 fi
460
461 # This bit is from H?kan Wessberg <nacka-gentoo@refug.org>, bug #13565.
462 if [ "`egrep "^[[:space:]]*MAKEOPTS=" /etc/make.conf | wc -l`" -gt 0 ]
463 then
464 ADMINOPTS="`egrep "^[[:space:]]*MAKEOPTS=" /etc/make.conf | cut -d= -f2 | sed 's/\"//g'`"
465 ADMINPARAM="`echo ${ADMINOPTS} | gawk '{match($0, /-j *[0-9]*/, opt); print opt[0]}'`"
466 ADMINPARAM="${ADMINPARAM/-j}"
467 fi
468
469 export MAKEOPTS="`echo ${MAKEOPTS} | sed -e 's:-j *[0-9]*::g'`"
470
471 if [ "${ARCH}" = "amd64" -o "${ARCH}" = "x86" -o "${ARCH}" = "hppa" -o \
472 "${ARCH}" = "arm" -o "${ARCH}" = "mips" -o "${ARCH}" = "ia64" ]
473 then
474 # these archs will always have "[Pp]rocessor"
475 jobs="$((`grep -c ^[Pp]rocessor /proc/cpuinfo` * 2))"
476
477 elif [ "${ARCH}" = "sparc" -o "${ARCH}" = "sparc64" ]
478 then
479 # sparc always has "ncpus active"
480 jobs="$((`grep "^ncpus active" /proc/cpuinfo | sed -e "s/^.*: //"` * 2))"
481
482 elif [ "${ARCH}" = "alpha" ]
483 then
484 # alpha has "cpus active", but only when compiled with SMP
485 if [ "`grep -c "^cpus active" /proc/cpuinfo`" -eq 1 ]
486 then
487 jobs="$((`grep "^cpus active" /proc/cpuinfo | sed -e "s/^.*: //"` * 2))"
488 else
489 jobs=2
490 fi
491
492 elif [ "${ARCH}" = "ppc" -o "${ARCH}" = "ppc64" ]
493 then
494 # ppc has "processor", but only when compiled with SMP
495 if [ "`grep -c "^processor" /proc/cpuinfo`" -eq 1 ]
496 then
497 jobs="$((`grep -c ^processor /proc/cpuinfo` * 2))"
498 else
499 jobs=2
500 fi
501 elif [ "${ARCH}" = "s390" ]
502 then
503 # s390 has "# processors : "
504 jobs="$((`grep "^\# processors" /proc/cpuinfo | sed -e "s/^.*: //"` * 2))"
505 else
506 jobs="$((`grep -c ^cpu /proc/cpuinfo` * 2))"
507 die "Unknown ARCH -- ${ARCH}!"
508 fi
509
510 # Make sure the number is valid ...
511 if [ "${jobs}" -lt 1 ]
512 then
513 jobs=1
514 fi
515
516 if [ -n "${ADMINPARAM}" ]
517 then
518 if [ "${jobs}" -gt "${ADMINPARAM}" ]
519 then
520 einfo "Setting make jobs to \"-j${ADMINPARAM}\" to ensure successful merge ..."
521 export MAKEOPTS="${MAKEOPTS} -j${ADMINPARAM}"
522 else
523 einfo "Setting make jobs to \"-j${jobs}\" to ensure successful merge ..."
524 export MAKEOPTS="${MAKEOPTS} -j${jobs}"
525 fi
374 fi 526 fi
375} 527}
376 528
377# Cheap replacement for when debianutils (and thus mktemp) 529# Cheap replacement for when debianutils (and thus mktemp)
378# does not exist on the users system 530# does not exist on the users system
379# vapier@gentoo.org 531# vapier@gentoo.org
380# 532#
381# Takes just 1 optional parameter (the directory to create tmpfile in) 533# Takes just 1 optional parameter (the directory to create tmpfile in)
382emktemp() { 534emktemp() {
383 local exe="touch" 535 local exe="touch"
384 [[ $1 == -d ]] && exe="mkdir" && shift 536 [ "$1" == "-d" ] && exe="mkdir" && shift
385 local topdir=$1 537 local topdir="$1"
386 538
387 if [[ -z ${topdir} ]] ; then 539 if [ -z "${topdir}" ]
540 then
388 [[ -z ${T} ]] \ 541 [ -z "${T}" ] \
389 && topdir="/tmp" \ 542 && topdir="/tmp" \
390 || topdir=${T} 543 || topdir="${T}"
391 fi 544 fi
392 545
393 if [[ -z $(type -p mktemp) ]] ; then 546 if [ -z "$(type -p mktemp)" ]
547 then
394 local tmp=/ 548 local tmp=/
395 while [[ -e ${tmp} ]] ; do 549 while [ -e "${tmp}" ] ; do
396 tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM} 550 tmp="${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}"
397 done 551 done
398 ${exe} "${tmp}" || ${exe} -p "${tmp}" 552 ${exe} "${tmp}"
399 echo "${tmp}" 553 echo "${tmp}"
400 else 554 else
401 [[ ${exe} == "touch" ]] \ 555 [ "${exe}" == "touch" ] \
402 && exe="-p" \ 556 && exe="-p" \
403 || exe="-d" 557 || exe="-d"
404 mktemp ${exe} "${topdir}" 558 mktemp ${exe} "${topdir}"
405 fi 559 fi
406} 560}
410# Joe Jezak <josejx@gmail.com> and usata@gentoo.org 564# Joe Jezak <josejx@gmail.com> and usata@gentoo.org
411# FBSD stuff: Aaron Walker <ka0ttic@gentoo.org> 565# FBSD stuff: Aaron Walker <ka0ttic@gentoo.org>
412# 566#
413# egetent(database, key) 567# egetent(database, key)
414egetent() { 568egetent() {
415 case ${CHOST} in 569 if useq ppc-macos ; then
416 *-darwin*)
417 case "$2" in 570 case "$2" in
418 *[!0-9]*) # Non numeric 571 *[!0-9]*) # Non numeric
419 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }" 572 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
420 ;; 573 ;;
421 *) # Numeric 574 *) # Numeric
422 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }" 575 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
423 ;; 576 ;;
424 esac 577 esac
425 ;; 578 elif useq x86-fbsd ; then
426 *-freebsd*) 579 local action
427 local opts action="user" 580 if [ "$1" == "passwd" ]
428 [[ $1 == "passwd" ]] || action="group" 581 then
429 582 action="user"
430 # lookup by uid/gid 583 else
431 if [[ $2 == [[:digit:]]* ]] ; then 584 action="group"
432 [[ ${action} == "user" ]] && opts="-u" || opts="-g"
433 fi 585 fi
434
435 pw show ${action} ${opts} "$2" -q 586 pw show "${action}" "$2" -q
436 ;; 587 else
437 *-netbsd*|*-openbsd*)
438 grep "$2:\*:" /etc/$1
439 ;;
440 *)
441 type -p nscd >& /dev/null && nscd -i "$1" 588 which nscd >& /dev/null && nscd -i "$1"
442 getent "$1" "$2" 589 getent "$1" "$2"
443 ;; 590 fi
444 esac
445} 591}
446 592
447# Simplify/standardize adding users to the system 593# Simplify/standardize adding users to the system
448# vapier@gentoo.org 594# vapier@gentoo.org
449# 595#
457# homedir: /dev/null 603# homedir: /dev/null
458# groups: none 604# groups: none
459# extra: comment of 'added by portage for ${PN}' 605# extra: comment of 'added by portage for ${PN}'
460enewuser() { 606enewuser() {
461 # get the username 607 # get the username
462 local euser=$1; shift 608 local euser="$1"; shift
463 if [[ -z ${euser} ]] ; then 609 if [ -z "${euser}" ]
610 then
464 eerror "No username specified !" 611 eerror "No username specified !"
465 die "Cannot call enewuser without a username" 612 die "Cannot call enewuser without a username"
466 fi 613 fi
467 614
468 # lets see if the username already exists 615 # lets see if the username already exists
469 if [[ ${euser} == $(egetent passwd "${euser}" | cut -d: -f1) ]] ; then 616 if [ "${euser}" == "`egetent passwd \"${euser}\" | cut -d: -f1`" ]
617 then
470 return 0 618 return 0
471 fi 619 fi
472 einfo "Adding user '${euser}' to your system ..." 620 einfo "Adding user '${euser}' to your system ..."
473 621
474 # options to pass to useradd 622 # options to pass to useradd
475 local opts= 623 local opts=
476 624
477 # handle uid 625 # handle uid
478 local euid=$1; shift 626 local euid="$1"; shift
479 if [[ ! -z ${euid} ]] && [[ ${euid} != "-1" ]] ; then 627 if [ ! -z "${euid}" ] && [ "${euid}" != "-1" ]
628 then
480 if [[ ${euid} -gt 0 ]] ; then 629 if [ "${euid}" -gt 0 ]
630 then
481 if [[ ! -z $(egetent passwd ${euid}) ]] ; then 631 if [ ! -z "`egetent passwd ${euid}`" ]
632 then
482 euid="next" 633 euid="next"
483 fi 634 fi
484 else 635 else
485 eerror "Userid given but is not greater than 0 !" 636 eerror "Userid given but is not greater than 0 !"
486 die "${euid} is not a valid UID" 637 die "${euid} is not a valid UID"
487 fi 638 fi
488 else 639 else
489 euid="next" 640 euid="next"
490 fi 641 fi
491 if [[ ${euid} == "next" ]] ; then 642 if [ "${euid}" == "next" ]
492 for euid in $(seq 101 999) ; do 643 then
644 local pwrange
645 if [ "${USERLAND}" == "BSD" ] ; then
646 pwrange="`jot 898 101`"
647 else
648 pwrange="`seq 101 999`"
649 fi
650 for euid in ${pwrange} ; do
493 [[ -z $(egetent passwd ${euid}) ]] && break 651 [ -z "`egetent passwd ${euid}`" ] && break
494 done 652 done
495 fi 653 fi
496 opts="${opts} -u ${euid}" 654 opts="${opts} -u ${euid}"
497 einfo " - Userid: ${euid}" 655 einfo " - Userid: ${euid}"
498 656
499 # handle shell 657 # handle shell
500 local eshell=$1; shift 658 local eshell="$1"; shift
501 if [[ ! -z ${eshell} ]] && [[ ${eshell} != "-1" ]] ; then 659 if [ ! -z "${eshell}" ] && [ "${eshell}" != "-1" ]
660 then
502 if [[ ! -e ${eshell} ]] ; then 661 if [ ! -e "${eshell}" ]
662 then
503 eerror "A shell was specified but it does not exist !" 663 eerror "A shell was specified but it does not exist !"
504 die "${eshell} does not exist" 664 die "${eshell} does not exist"
505 fi 665 fi
506 else 666 else
507 for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null ; do 667 if [ "${USERLAND}" == "BSD" ]
508 [[ -x ${ROOT}${shell} ]] && break 668 then
509 done 669 eshell="/usr/bin/false"
510 670 else
511 if [[ ${shell} == "/dev/null" ]] ; then 671 eshell="/bin/false"
512 eerror "Unable to identify the shell to use"
513 die "Unable to identify the shell to use"
514 fi 672 fi
515
516 eshell=${shell}
517 fi 673 fi
518 einfo " - Shell: ${eshell}" 674 einfo " - Shell: ${eshell}"
519 opts="${opts} -s ${eshell}" 675 opts="${opts} -s ${eshell}"
520 676
521 # handle homedir 677 # handle homedir
522 local ehome=$1; shift 678 local ehome="$1"; shift
523 if [[ -z ${ehome} ]] || [[ ${ehome} == "-1" ]] ; then 679 if [ -z "${ehome}" ] && [ "${eshell}" != "-1" ]
680 then
524 ehome="/dev/null" 681 ehome="/dev/null"
525 fi 682 fi
526 einfo " - Home: ${ehome}" 683 einfo " - Home: ${ehome}"
527 opts="${opts} -d ${ehome}" 684 opts="${opts} -d ${ehome}"
528 685
529 # handle groups 686 # handle groups
530 local egroups=$1; shift 687 local egroups="$1"; shift
531 if [[ ! -z ${egroups} ]] ; then 688 if [ ! -z "${egroups}" ]
689 then
532 local oldifs=${IFS} 690 local oldifs="${IFS}"
533 local defgroup="" exgroups="" 691 local defgroup="" exgroups=""
534 692
535 export IFS="," 693 export IFS=","
536 for g in ${egroups} ; do 694 for g in ${egroups}
695 do
537 export IFS=${oldifs} 696 export IFS="${oldifs}"
538 if [[ -z $(egetent group "${g}") ]] ; then 697 if [ -z "`egetent group \"${g}\"`" ]
698 then
539 eerror "You must add group ${g} to the system first" 699 eerror "You must add group ${g} to the system first"
540 die "${g} is not a valid GID" 700 die "${g} is not a valid GID"
541 fi 701 fi
542 if [[ -z ${defgroup} ]] ; then 702 if [ -z "${defgroup}" ]
703 then
543 defgroup=${g} 704 defgroup="${g}"
544 else 705 else
545 exgroups="${exgroups},${g}" 706 exgroups="${exgroups},${g}"
546 fi 707 fi
547 export IFS="," 708 export IFS=","
548 done 709 done
549 export IFS=${oldifs} 710 export IFS="${oldifs}"
550 711
551 opts="${opts} -g ${defgroup}" 712 opts="${opts} -g ${defgroup}"
552 if [[ ! -z ${exgroups} ]] ; then 713 if [ ! -z "${exgroups}" ]
714 then
553 opts="${opts} -G ${exgroups:1}" 715 opts="${opts} -G ${exgroups:1}"
554 fi 716 fi
555 else 717 else
556 egroups="(none)" 718 egroups="(none)"
557 fi 719 fi
558 einfo " - Groups: ${egroups}" 720 einfo " - Groups: ${egroups}"
559 721
560 # handle extra and add the user 722 # handle extra and add the user
723 local eextra="$@"
561 local oldsandbox=${SANDBOX_ON} 724 local oldsandbox="${SANDBOX_ON}"
562 export SANDBOX_ON="0" 725 export SANDBOX_ON="0"
563 case ${CHOST} in 726 if useq ppc-macos
564 *-darwin*) 727 then
565 ### Make the user 728 ### Make the user
566 if [[ -z $@ ]] ; then 729 if [ -z "${eextra}" ]
730 then
567 dscl . create /users/${euser} uid ${euid} 731 dscl . create /users/${euser} uid ${euid}
568 dscl . create /users/${euser} shell ${eshell} 732 dscl . create /users/${euser} shell ${eshell}
569 dscl . create /users/${euser} home ${ehome} 733 dscl . create /users/${euser} home ${ehome}
570 dscl . create /users/${euser} realname "added by portage for ${PN}" 734 dscl . create /users/${euser} realname "added by portage for ${PN}"
571 ### Add the user to the groups specified 735 ### Add the user to the groups specified
572 local oldifs=${IFS} 736 local oldifs="${IFS}"
573 export IFS="," 737 export IFS=","
574 for g in ${egroups} ; do 738 for g in ${egroups}
739 do
575 dscl . merge /groups/${g} users ${euser} 740 dscl . merge /groups/${g} users ${euser}
576 done 741 done
577 export IFS=${oldifs} 742 export IFS="${oldifs}"
578 else 743 else
579 einfo "Extra options are not supported on Darwin yet" 744 einfo "Extra options are not supported on macos yet"
580 einfo "Please report the ebuild along with the info below" 745 einfo "Please report the ebuild along with the info below"
581 einfo "eextra: $@" 746 einfo "eextra: ${eextra}"
582 die "Required function missing" 747 die "Required function missing"
583 fi 748 fi
584 ;; 749 elif use x86-fbsd ; then
585 *-freebsd*) 750 if [ -z "${eextra}" ]
586 if [[ -z $@ ]] ; then 751 then
587 pw useradd ${euser} ${opts} \ 752 pw useradd ${euser} ${opts} \
588 -c "added by portage for ${PN}" \ 753 -c "added by portage for ${PN}" \
589 die "enewuser failed" 754 die "enewuser failed"
590 else 755 else
591 einfo " - Extra: $@" 756 einfo " - Extra: ${eextra}"
592 pw useradd ${euser} ${opts} \ 757 pw useradd ${euser} ${opts} \
593 "$@" || die "enewuser failed" 758 -c ${eextra} || die "enewuser failed"
594 fi 759 fi
595 ;;
596
597 *-netbsd*)
598 if [[ -z $@ ]] ; then
599 useradd ${opts} ${euser} || die "enewuser failed"
600 else 760 else
601 einfo " - Extra: $@" 761 if [ -z "${eextra}" ]
602 useradd ${opts} ${euser} "$@" || die "enewuser failed" 762 then
603 fi
604 ;;
605
606 *-openbsd*)
607 if [[ -z $@ ]] ; then
608 useradd -u ${euid} -s ${eshell} \
609 -d ${ehome} -c "Added by portage for ${PN}" \
610 -g ${egroups} ${euser} || die "enewuser failed"
611 else
612 einfo " - Extra: $@"
613 useradd -u ${euid} -s ${eshell} \
614 -d ${ehome} -c "Added by portage for ${PN}" \
615 -g ${egroups} ${euser} "$@" || die "enewuser failed"
616 fi
617 ;;
618
619 *)
620 if [[ -z $@ ]] ; then
621 useradd ${opts} ${euser} \ 763 useradd ${opts} ${euser} \
622 -c "added by portage for ${PN}" \ 764 -c "added by portage for ${PN}" \
623 || die "enewuser failed" 765 || die "enewuser failed"
624 else 766 else
625 einfo " - Extra: $@" 767 einfo " - Extra: ${eextra}"
626 useradd ${opts} ${euser} "$@" \ 768 useradd ${opts} ${euser} ${eextra} \
627 || die "enewuser failed" 769 || die "enewuser failed"
628 fi 770 fi
629 ;;
630 esac
631
632 if [[ ! -e ${ROOT}/${ehome} ]] ; then
633 einfo " - Creating ${ehome} in ${ROOT}"
634 mkdir -p "${ROOT}/${ehome}"
635 chown ${euser} "${ROOT}/${ehome}"
636 chmod 755 "${ROOT}/${ehome}"
637 fi 771 fi
638
639 export SANDBOX_ON=${oldsandbox} 772 export SANDBOX_ON="${oldsandbox}"
773
774 if [ ! -e "${ehome}" ] && [ ! -e "${D}/${ehome}" ]
775 then
776 einfo " - Creating ${ehome} in ${D}"
777 dodir ${ehome}
778 fowners ${euser} ${ehome}
779 fperms 755 ${ehome}
780 fi
640} 781}
641 782
642# Simplify/standardize adding groups to the system 783# Simplify/standardize adding groups to the system
643# vapier@gentoo.org 784# vapier@gentoo.org
644# 785#
673 then 814 then
674 if [ "${egid}" -gt 0 ] 815 if [ "${egid}" -gt 0 ]
675 then 816 then
676 if [ -z "`egetent group ${egid}`" ] 817 if [ -z "`egetent group ${egid}`" ]
677 then 818 then
678 if [[ "${CHOST}" == *-darwin* ]]; then 819 if useq ppc-macos ; then
679 opts="${opts} ${egid}" 820 opts="${opts} ${egid}"
680 else 821 else
681 opts="${opts} -g ${egid}" 822 opts="${opts} -g ${egid}"
682 fi 823 fi
683 else 824 else
697 opts="${opts} ${eextra}" 838 opts="${opts} ${eextra}"
698 839
699 # add the group 840 # add the group
700 local oldsandbox="${SANDBOX_ON}" 841 local oldsandbox="${SANDBOX_ON}"
701 export SANDBOX_ON="0" 842 export SANDBOX_ON="0"
702 case ${CHOST} in 843 if useq ppc-macos ; then
703 *-darwin*)
704 if [ ! -z "${eextra}" ]; 844 if [ ! -z "${eextra}" ];
705 then 845 then
706 einfo "Extra options are not supported on Darwin/OS X yet" 846 einfo "Extra options are not supported on macos yet"
707 einfo "Please report the ebuild along with the info below" 847 einfo "Please report the ebuild along with the info below"
708 einfo "eextra: ${eextra}" 848 einfo "eextra: ${eextra}"
709 die "Required function missing" 849 die "Required function missing"
710 fi 850 fi
711 851
712 # If we need the next available 852 # If we need the next available
713 case ${egid} in 853 case ${egid} in
714 *[!0-9]*) # Non numeric 854 *[!0-9]*) # Non numeric
715 for egid in $(seq 101 999); do 855 for egid in `jot 898 101`; do
716 [ -z "`egetent group ${egid}`" ] && break 856 [ -z "`egetent group ${egid}`" ] && break
717 done 857 done
718 esac 858 esac
719 dscl . create /groups/${egroup} gid ${egid} 859 dscl . create /groups/${egroup} gid ${egid}
720 dscl . create /groups/${egroup} passwd '*' 860 dscl . create /groups/${egroup} passwd '*'
721 ;; 861 elif use x86-fbsd ; then
722
723 *-freebsd*)
724 case ${egid} in 862 case ${egid} in
725 *[!0-9]*) # Non numeric 863 *[!0-9]*) # Non numeric
726 for egid in $(seq 101 999); do 864 for egid in `jot 898 101`; do
727 [ -z "`egetent group ${egid}`" ] && break 865 [ -z "`egetent group ${egid}`" ] && break
728 done 866 done
729 esac 867 esac
730 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed" 868 pw groupadd ${egroup} -g ${egid} || die "enewgroup failed"
731 ;; 869 else
732
733 *-netbsd*)
734 case ${egid} in
735 *[!0-9]*) # Non numeric
736 for egid in $(seq 101 999); do
737 [ -z "`egetent group ${egid}`" ] && break
738 done
739 esac
740 groupadd -g ${egid} ${egroup} || die "enewgroup failed"
741 ;;
742
743 *)
744 groupadd ${opts} ${egroup} || die "enewgroup failed" 870 groupadd ${opts} ${egroup} || die "enewgroup failed"
745 ;; 871 fi
746 esac
747 export SANDBOX_ON="${oldsandbox}" 872 export SANDBOX_ON="${oldsandbox}"
748} 873}
749 874
750# Simple script to replace 'dos2unix' binaries 875# Simple script to replace 'dos2unix' binaries
751# vapier@gentoo.org 876# vapier@gentoo.org
776# name: the name that will show up in the menu 901# name: the name that will show up in the menu
777# icon: give your little like a pretty little icon ... 902# icon: give your little like a pretty little icon ...
778# this can be relative (to /usr/share/pixmaps) or 903# this can be relative (to /usr/share/pixmaps) or
779# a full path to an icon 904# a full path to an icon
780# type: what kind of application is this ? for categories: 905# type: what kind of application is this ? for categories:
781# http://www.freedesktop.org/Standards/desktop-entry-spec 906# http://www.freedesktop.org/standards/menu-spec/
782# path: if your app needs to startup in a specific dir 907# path: if your app needs to startup in a specific dir
783make_desktop_entry() { 908make_desktop_entry() {
784 [[ -z $1 ]] && eerror "make_desktop_entry: You must specify the executable" && return 1 909 [ -z "$1" ] && eerror "make_desktop_entry: You must specify the executable" && return 1
785 910
786 local exec=${1} 911 local exec="${1}"
787 local name=${2:-${PN}} 912 local name="${2:-${PN}}"
788 local icon=${3:-${PN}.png} 913 local icon="${3:-${PN}.png}"
789 local type=${4} 914 local type="${4}"
790 local path=${5} 915 local subdir="${6}"
791 916 local path="${5:-${GAMES_BINDIR}}"
792 if [[ -z ${type} ]] ; then 917 if [ -z "${type}" ]
793 local catmaj=${CATEGORY%%-*} 918 then
794 local catmin=${CATEGORY##*-} 919 case ${CATEGORY} in
795 case ${catmaj} in 920 "app-emulation")
796 app) 921 type=Emulator
797 case ${catmin} in 922 subdir="Emulation"
798 admin) type=System;;
799 cdr) type=DiscBurning;;
800 dicts) type=Dictionary;;
801 editors) type=TextEditor;;
802 emacs) type=TextEditor;;
803 emulation) type=Emulator;;
804 laptop) type=HardwareSettings;;
805 office) type=Office;;
806 vim) type=TextEditor;;
807 xemacs) type=TextEditor;;
808 *) type=;;
809 esac
810 ;; 923 ;;
811 924 "games-"*)
812 dev) 925 type=Game
813 type="Development" 926 subdir="Games"
814 ;; 927 ;;
815 928 "net-"*)
816 games) 929 type=Network
817 case ${catmin} in 930 subdir="${type}"
818 action) type=ActionGame;;
819 arcade) type=ArcadeGame;;
820 board) type=BoardGame;;
821 kid) type=KidsGame;;
822 emulation) type=Emulator;;
823 puzzle) type=LogicGame;;
824 rpg) type=RolePlaying;;
825 roguelike) type=RolePlaying;;
826 simulation) type=Simulation;;
827 sports) type=SportsGame;;
828 strategy) type=StrategyGame;;
829 *) type=;;
830 esac
831 type="Game;${type}"
832 ;; 931 ;;
833
834 mail)
835 type="Network;Email"
836 ;;
837
838 media)
839 case ${catmin} in
840 gfx) type=Graphics;;
841 radio) type=Tuner;;
842 sound) type=Audio;;
843 tv) type=TV;;
844 video) type=Video;;
845 *) type=;;
846 esac
847 type="AudioVideo;${type}"
848 ;;
849
850 net)
851 case ${catmin} in
852 dialup) type=Dialup;;
853 ftp) type=FileTransfer;;
854 im) type=InstantMessaging;;
855 irc) type=IRCClient;;
856 mail) type=Email;;
857 news) type=News;;
858 nntp) type=News;;
859 p2p) type=FileTransfer;;
860 *) type=;;
861 esac
862 type="Network;${type}"
863 ;;
864
865 sci)
866 case ${catmin} in
867 astro*) type=Astronomy;;
868 bio*) type=Biology;;
869 calc*) type=Calculator;;
870 chem*) type=Chemistry;;
871 geo*) type=Geology;;
872 math*) type=Math;;
873 *) type=;;
874 esac
875 type="Science;${type}"
876 ;;
877
878 www)
879 case ${catmin} in
880 client) type=WebBrowser;;
881 *) type=;;
882 esac
883 type="Network"
884 ;;
885
886 *) 932 *)
887 type= 933 type=
934 subdir=
888 ;; 935 ;;
889 esac 936 esac
890 fi 937 fi
891 if [ "${SLOT}" == "0" ] ; then
892 local desktop_name="${PN}"
893 else
894 local desktop_name="${PN}-${SLOT}"
895 fi
896 local desktop=${T}/${exec%% *}-${desktop_name}.desktop 938 local desktop="${T}/${exec}.desktop"
897 939
898echo "[Desktop Entry] 940echo "[Desktop Entry]
899Encoding=UTF-8 941Encoding=UTF-8
900Version=0.9.2 942Version=0.9.2
901Name=${name} 943Name=${name}
904Exec=${exec} 946Exec=${exec}
905Path=${path} 947Path=${path}
906Icon=${icon} 948Icon=${icon}
907Categories=Application;${type};" > "${desktop}" 949Categories=Application;${type};" > "${desktop}"
908 950
909 (
910 # wrap the env here so that the 'insinto' call
911 # doesn't corrupt the env of the caller
912 insinto /usr/share/applications 951 insinto /usr/share/applications
913 doins "${desktop}" 952 doins "${desktop}"
914 ) 953
954 return 0
915} 955}
916 956
917# Make a GDM/KDM Session file 957# Make a GDM/KDM Session file
918# 958#
919# make_desktop_entry(<title>, <command>) 959# make_desktop_entry(<title>, <command>)
920# title: File to execute to start the Window Manager 960# title: File to execute to start the Window Manager
921# command: Name of the Window Manager 961# command: Name of the Window Manager
922 962
923make_session_desktop() { 963make_session_desktop() {
964
924 [[ -z $1 ]] && eerror "make_session_desktop: You must specify the title" && return 1 965 [ -z "$1" ] && eerror "make_session_desktop: You must specify the title" && return 1
925 [[ -z $2 ]] && eerror "make_session_desktop: You must specify the command" && return 1 966 [ -z "$2" ] && eerror "make_session_desktop: You must specify the command" && return 1
926 967
927 local title=$1 968 local title="${1}"
928 local command=$2 969 local command="${2}"
929 local desktop=${T}/${wm}.desktop 970 local desktop="${T}/${wm}.desktop"
930 971
931echo "[Desktop Entry] 972echo "[Desktop Entry]
932Encoding=UTF-8 973Encoding=UTF-8
933Name=${title} 974Name=${title}
934Comment=This session logs you into ${title} 975Comment=This session logs you into ${title}
936TryExec=${command} 977TryExec=${command}
937Type=Application" > "${desktop}" 978Type=Application" > "${desktop}"
938 979
939 insinto /usr/share/xsessions 980 insinto /usr/share/xsessions
940 doins "${desktop}" 981 doins "${desktop}"
982
983 return 0
941} 984}
942 985
943domenu() { 986domenu() {
944 local i j 987 local i
988 local j
945 insinto /usr/share/applications 989 insinto /usr/share/applications
946 for i in "$@" ; do 990 for i in ${@}
991 do
947 if [[ -f ${i} ]] ; then 992 if [ -f "${i}" ];
993 then
948 doins "${i}" 994 doins ${i}
949 elif [[ -d ${i} ]] ; then 995 elif [ -d "${i}" ];
996 then
950 for j in "${i}"/*.desktop ; do 997 for j in ${i}/*.desktop
998 do
951 doins "${j}" 999 doins ${j}
952 done 1000 done
953 fi 1001 fi
954 done 1002 done
955} 1003}
956newmenu() {
957 insinto /usr/share/applications
958 newins "$1" "$2"
959}
960 1004
961doicon() { 1005doicon() {
962 local i j 1006 local i
1007 local j
963 insinto /usr/share/pixmaps 1008 insinto /usr/share/pixmaps
964 for i in "$@" ; do 1009 for i in ${@}
1010 do
965 if [[ -f ${i} ]] ; then 1011 if [ -f "${i}" ];
1012 then
966 doins "${i}" 1013 doins ${i}
967 elif [[ -d ${i} ]] ; then 1014 elif [ -d "${i}" ];
1015 then
968 for j in "${i}"/*.png ; do 1016 for j in ${i}/*.png
1017 do
969 doins "${j}" 1018 doins ${j}
970 done 1019 done
971 fi 1020 fi
972 done 1021 done
973}
974newicon() {
975 insinto /usr/share/pixmaps
976 newins "$1" "$2"
977} 1022}
978 1023
979############################################################## 1024##############################################################
980# END: Handle .desktop files and menu entries # 1025# END: Handle .desktop files and menu entries #
981############################################################## 1026##############################################################
982 1027
983 1028
984# for internal use only (unpack_pdv and unpack_makeself) 1029# for internal use only (unpack_pdv and unpack_makeself)
985find_unpackable_file() { 1030find_unpackable_file() {
986 local src=$1 1031 local src="$1"
987 if [[ -z ${src} ]] ; then 1032 if [ -z "${src}" ]
1033 then
988 src=${DISTDIR}/${A} 1034 src="${DISTDIR}/${A}"
989 else 1035 else
990 if [[ -e ${DISTDIR}/${src} ]] ; then 1036 if [ -e "${DISTDIR}/${src}" ]
1037 then
991 src=${DISTDIR}/${src} 1038 src="${DISTDIR}/${src}"
992 elif [[ -e ${PWD}/${src} ]] ; then 1039 elif [ -e "${PWD}/${src}" ]
1040 then
993 src=${PWD}/${src} 1041 src="${PWD}/${src}"
994 elif [[ -e ${src} ]] ; then 1042 elif [ -e "${src}" ]
1043 then
995 src=${src} 1044 src="${src}"
996 fi
997 fi 1045 fi
998 [[ ! -e ${src} ]] && return 1 1046 fi
1047 [ ! -e "${src}" ] && die "Could not find requested archive ${src}"
999 echo "${src}" 1048 echo "${src}"
1000} 1049}
1001 1050
1002# Unpack those pesky pdv generated files ... 1051# Unpack those pesky pdv generated files ...
1003# They're self-unpacking programs with the binary package stuffed in 1052# They're self-unpacking programs with the binary package stuffed in
1018# lseek 1067# lseek
1019# root@vapier 0 pdv_unpack # strace -elseek ./hldsupdatetool.bin 1068# root@vapier 0 pdv_unpack # strace -elseek ./hldsupdatetool.bin
1020# lseek(3, -4, SEEK_END) = 2981250 1069# lseek(3, -4, SEEK_END) = 2981250
1021# thus we would pass in the value of '4' as the second parameter. 1070# thus we would pass in the value of '4' as the second parameter.
1022unpack_pdv() { 1071unpack_pdv() {
1023 local src=$(find_unpackable_file $1) 1072 local src="`find_unpackable_file $1`"
1024 local sizeoff_t=$2 1073 local sizeoff_t="$2"
1025 1074
1026 [[ -z ${src} ]] && die "Could not locate source for '$1'"
1027 [[ -z ${sizeoff_t} ]] && die "No idea what off_t size was used for this pdv :(" 1075 [ -z "${sizeoff_t}" ] && die "No idea what off_t size was used for this pdv :("
1028 1076
1029 local shrtsrc=$(basename "${src}") 1077 local shrtsrc="`basename ${src}`"
1030 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 1078 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
1031 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"` 1079 local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"`
1032 local tailskip=`tail -c $((${sizeoff_t}*2)) ${src} | head -c ${sizeoff_t} | hexdump -e \"%i\"` 1080 local tailskip=`tail -c $((${sizeoff_t}*2)) ${src} | head -c ${sizeoff_t} | hexdump -e \"%i\"`
1033 1081
1034 # grab metadata for debug reasons 1082 # grab metadata for debug reasons
1098# Usage: unpack_makeself [file to unpack] [offset] [tail|dd] 1146# Usage: unpack_makeself [file to unpack] [offset] [tail|dd]
1099# - If the file is not specified then unpack will utilize ${A}. 1147# - If the file is not specified then unpack will utilize ${A}.
1100# - If the offset is not specified then we will attempt to extract 1148# - If the offset is not specified then we will attempt to extract
1101# the proper offset from the script itself. 1149# the proper offset from the script itself.
1102unpack_makeself() { 1150unpack_makeself() {
1103 local src_input=${1:-${A}}
1104 local src=$(find_unpackable_file "${src_input}") 1151 local src="$(find_unpackable_file "$1")"
1105 local skip=$2 1152 local skip="$2"
1106 local exe=$3 1153 local exe="$3"
1107 1154
1108 [[ -z ${src} ]] && die "Could not locate source for '${src_input}'"
1109
1110 local shrtsrc=$(basename "${src}") 1155 local shrtsrc="$(basename "${src}")"
1111 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 1156 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
1112 if [[ -z ${skip} ]] ; then 1157 if [ -z "${skip}" ]
1158 then
1113 local ver=$(grep -a '#.*Makeself' "${src}" | awk '{print $NF}') 1159 local ver="`grep -a '#.*Makeself' ${src} | awk '{print $NF}'`"
1114 local skip=0 1160 local skip=0
1115 exe=tail 1161 exe=tail
1116 case ${ver} in 1162 case ${ver} in
1117 1.5.*) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same 1163 1.5.*) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same
1118 skip=$(grep -a ^skip= "${src}" | cut -d= -f2) 1164 skip=$(grep -a ^skip= "${src}" | cut -d= -f2)
1130 ;; 1176 ;;
1131 2.1.3) 1177 2.1.3)
1132 skip=`grep -a ^offset= "${src}" | awk '{print $3}'` 1178 skip=`grep -a ^offset= "${src}" | awk '{print $3}'`
1133 let skip="skip + 1" 1179 let skip="skip + 1"
1134 ;; 1180 ;;
1135 2.1.4|2.1.5) 1181 2.1.4)
1136 skip=$(grep -a offset=.*head.*wc "${src}" | awk '{print $3}' | head -n 1) 1182 skip=$(grep -a offset=.*head.*wc "${src}" | awk '{print $3}' | head -n 1)
1137 skip=$(head -n ${skip} "${src}" | wc -c) 1183 skip=$(head -n ${skip} "${src}" | wc -c)
1138 exe="dd" 1184 exe="dd"
1139 ;; 1185 ;;
1140 *) 1186 *)
1185check_license() { 1231check_license() {
1186 local lic=$1 1232 local lic=$1
1187 if [ -z "${lic}" ] ; then 1233 if [ -z "${lic}" ] ; then
1188 lic="${PORTDIR}/licenses/${LICENSE}" 1234 lic="${PORTDIR}/licenses/${LICENSE}"
1189 else 1235 else
1190 if [ -e "${PORTDIR}/licenses/${lic}" ] ; then 1236 if [ -e "${PORTDIR}/licenses/${src}" ] ; then
1191 lic="${PORTDIR}/licenses/${lic}" 1237 lic="${PORTDIR}/licenses/${src}"
1192 elif [ -e "${PWD}/${lic}" ] ; then 1238 elif [ -e "${PWD}/${src}" ] ; then
1193 lic="${PWD}/${lic}" 1239 lic="${PWD}/${src}"
1194 elif [ -e "${lic}" ] ; then 1240 elif [ -e "${src}" ] ; then
1195 lic="${lic}" 1241 lic="${src}"
1196 fi
1197 fi 1242 fi
1243 fi
1198 [ ! -f "${lic}" ] && die "Could not find requested license ${lic}" 1244 [ ! -f "${lic}" ] && die "Could not find requested license ${src}"
1199 local l="`basename ${lic}`" 1245 local l="`basename ${lic}`"
1200 1246
1201 # here is where we check for the licenses the user already 1247 # here is where we check for the licenses the user already
1202 # accepted ... if we don't find a match, we make the user accept 1248 # accepted ... if we don't find a match, we make the user accept
1203 local shopts=$- 1249 local shopts=$-
1259 # first we figure out how many cds we're dealing with by 1305 # first we figure out how many cds we're dealing with by
1260 # the # of files they gave us 1306 # the # of files they gave us
1261 local cdcnt=0 1307 local cdcnt=0
1262 local f= 1308 local f=
1263 for f in "$@" ; do 1309 for f in "$@" ; do
1264 ((++cdcnt)) 1310 cdcnt=$((cdcnt + 1))
1265 export CDROM_CHECK_${cdcnt}="$f" 1311 export CDROM_CHECK_${cdcnt}="$f"
1266 done 1312 done
1267 export CDROM_TOTAL_CDS=${cdcnt} 1313 export CDROM_TOTAL_CDS=${cdcnt}
1268 export CDROM_CURRENT_CD=1 1314 export CDROM_CURRENT_CD=1
1269 1315
1270 # now we see if the user gave use CD_ROOT ... 1316 # now we see if the user gave use CD_ROOT ...
1271 # if they did, let's just believe them that it's correct 1317 # if they did, let's just believe them that it's correct
1318 if [[ ! -z ${CD_ROOT} ]] ; then
1319 export CDROM_ROOT=${CD_ROOT}
1320 einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}"
1321 return
1322 fi
1323 # do the same for CD_ROOT_X
1272 if [[ -n ${CD_ROOT}${CD_ROOT_1} ]] ; then 1324 if [[ ! -z ${CD_ROOT_1} ]] ; then
1273 local var= 1325 local var=
1274 cdcnt=0 1326 cdcnt=0
1275 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do 1327 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do
1276 ((++cdcnt)) 1328 cdcnt=$((cdcnt + 1))
1277 var="CD_ROOT_${cdcnt}" 1329 var="CD_ROOT_${cdcnt}"
1278 [[ -z ${!var} ]] && var="CD_ROOT"
1279 if [[ -z ${!var} ]] ; then 1330 if [[ -z ${!var} ]] ; then
1280 eerror "You must either use just the CD_ROOT" 1331 eerror "You must either use just the CD_ROOT"
1281 eerror "or specify ALL the CD_ROOT_X variables." 1332 eerror "or specify ALL the CD_ROOT_X variables."
1282 eerror "In this case, you will need ${CDROM_TOTAL_CDS} CD_ROOT_X variables." 1333 eerror "In this case, you will need ${CDROM_TOTAL_CDS} CD_ROOT_X variables."
1283 die "could not locate CD_ROOT_${cdcnt}" 1334 die "could not locate CD_ROOT_${cdcnt}"
1284 fi 1335 fi
1336 export CDROM_ROOTS_${cdcnt}="${!var}"
1285 done 1337 done
1286 export CDROM_ROOT=${CD_ROOT_1:-${CD_ROOT}} 1338 export CDROM_ROOT=${CDROM_ROOTS_1}
1287 einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}" 1339 einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}"
1288 export CDROM_SET=-1
1289 for f in ${CDROM_CHECK_1//:/ } ; do
1290 ((++CDROM_SET))
1291 [[ -e ${CD_ROOT}/${f} ]] && break
1292 done
1293 export CDROM_MATCH=${f}
1294 return 1340 return
1295 fi 1341 fi
1296 1342
1297 # User didn't help us out so lets make sure they know they can
1298 # simplify the whole process ...
1299 if [[ ${CDROM_TOTAL_CDS} -eq 1 ]] ; then 1343 if [[ ${CDROM_TOTAL_CDS} -eq 1 ]] ; then
1300 einfo "This ebuild will need the ${CDROM_NAME:-cdrom for ${PN}}" 1344 einfon "This ebuild will need the "
1345 if [[ -z ${CDROM_NAME} ]] ; then
1346 echo "cdrom for ${PN}."
1347 else
1348 echo "${CDROM_NAME}."
1349 fi
1301 echo 1350 echo
1302 einfo "If you do not have the CD, but have the data files" 1351 einfo "If you do not have the CD, but have the data files"
1303 einfo "mounted somewhere on your filesystem, just export" 1352 einfo "mounted somewhere on your filesystem, just export"
1304 einfo "the variable CD_ROOT so that it points to the" 1353 einfo "the variable CD_ROOT so that it points to the"
1305 einfo "directory containing the files." 1354 einfo "directory containing the files."
1309 echo 1358 echo
1310 else 1359 else
1311 einfo "This package will need access to ${CDROM_TOTAL_CDS} cds." 1360 einfo "This package will need access to ${CDROM_TOTAL_CDS} cds."
1312 cdcnt=0 1361 cdcnt=0
1313 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do 1362 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do
1314 ((++cdcnt)) 1363 cdcnt=$((cdcnt + 1))
1315 var="CDROM_NAME_${cdcnt}" 1364 var="CDROM_NAME_${cdcnt}"
1316 [[ ! -z ${!var} ]] && einfo " CD ${cdcnt}: ${!var}" 1365 [[ ! -z ${!var} ]] && einfo " CD ${cdcnt}: ${!var}"
1317 done 1366 done
1318 echo 1367 echo
1319 einfo "If you do not have the CDs, but have the data files" 1368 einfo "If you do not have the CDs, but have the data files"
1320 einfo "mounted somewhere on your filesystem, just export" 1369 einfo "mounted somewhere on your filesystem, just export"
1321 einfo "the following variables so they point to the right place:" 1370 einfo "the following variables so they point to the right place:"
1322 einfon "" 1371 einfon ""
1323 cdcnt=0 1372 cdcnt=0
1324 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do 1373 while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]] ; do
1325 ((++cdcnt)) 1374 cdcnt=$((cdcnt + 1))
1326 echo -n " CD_ROOT_${cdcnt}" 1375 echo -n " CD_ROOT_${cdcnt}"
1327 done 1376 done
1328 echo 1377 echo
1329 einfo "Or, if you have all the files in the same place, or" 1378 einfo "Or, if you have all the files in the same place, or"
1330 einfo "you only have one cdrom, you can export CD_ROOT" 1379 einfo "you only have one cdrom, you can export CD_ROOT"
1333 echo 1382 echo
1334 einfo "For example:" 1383 einfo "For example:"
1335 einfo "export CD_ROOT_1=/mnt/cdrom" 1384 einfo "export CD_ROOT_1=/mnt/cdrom"
1336 echo 1385 echo
1337 fi 1386 fi
1338
1339 export CDROM_SET=""
1340 export CDROM_CURRENT_CD=0 1387 export CDROM_CURRENT_CD=0
1341 cdrom_load_next_cd 1388 cdrom_load_next_cd
1342} 1389}
1343 1390
1344# this is only used when you need access to more than one cd. 1391# this is only used when you need access to more than one cd.
1345# when you have finished using the first cd, just call this function. 1392# when you have finished using the first cd, just call this function.
1346# when it returns, CDROM_ROOT will be pointing to the second cd. 1393# when it returns, CDROM_ROOT will be pointing to the second cd.
1347# remember, you can only go forward in the cd chain, you can't go back. 1394# remember, you can only go forward in the cd chain, you can't go back.
1348cdrom_load_next_cd() { 1395cdrom_load_next_cd() {
1396 export CDROM_CURRENT_CD=$((CDROM_CURRENT_CD + 1))
1349 local var 1397 local var=
1350 ((++CDROM_CURRENT_CD)) 1398
1399 if [[ ! -z ${CD_ROOT} ]] ; then
1400 einfo "Using same root as before for CD #${CDROM_CURRENT_CD}"
1401 return
1402 fi
1351 1403
1352 unset CDROM_ROOT 1404 unset CDROM_ROOT
1353 var=CD_ROOT_${CDROM_CURRENT_CD} 1405 var=CDROM_ROOTS_${CDROM_CURRENT_CD}
1354 [[ -z ${!var} ]] && var="CD_ROOT"
1355 if [[ -z ${!var} ]] ; then 1406 if [[ -z ${!var} ]] ; then
1356 var="CDROM_CHECK_${CDROM_CURRENT_CD}" 1407 var="CDROM_CHECK_${CDROM_CURRENT_CD}"
1357 _cdrom_locate_file_on_cd ${!var} 1408 cdrom_locate_file_on_cd ${!var}
1358 else 1409 else
1359 export CDROM_ROOT=${!var} 1410 export CDROM_ROOT=${!var}
1360 fi 1411 fi
1361 1412
1362 einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}" 1413 einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}"
1367# all it does is try to locate a give file on a cd ... if the cd isn't 1418# all it does is try to locate a give file on a cd ... if the cd isn't
1368# found, then a message asking for the user to insert the cdrom will be 1419# found, then a message asking for the user to insert the cdrom will be
1369# displayed and we'll hang out here until: 1420# displayed and we'll hang out here until:
1370# (1) the file is found on a mounted cdrom 1421# (1) the file is found on a mounted cdrom
1371# (2) the user hits CTRL+C 1422# (2) the user hits CTRL+C
1372_cdrom_locate_file_on_cd() { 1423cdrom_locate_file_on_cd() {
1373 local mline=""
1374 local showedmsg=0
1375
1376 while [[ -z ${CDROM_ROOT} ]] ; do 1424 while [[ -z ${CDROM_ROOT} ]] ; do
1377 local i=0
1378 local -a cdset=(${*//:/ })
1379 if [[ -n ${CDROM_SET} ]] ; then
1380 cdset=(${cdset[${CDROM_SET}]})
1381 fi
1382
1383 while [[ -n ${cdset[${i}]} ]] ; do
1384 local dir=$(dirname ${cdset[${i}]}) 1425 local dir="$(dirname ${@})"
1385 local file=$(basename ${cdset[${i}]}) 1426 local file="$(basename ${@})"
1427 local mline=""
1428 local showedmsg=0
1386 1429
1387 for mline in $(mount | gawk '/(iso|cdrom|fs=cdfss)/ {print $3}') ; do 1430 for mline in $(mount | egrep -e '(iso|cdrom)' | awk '{print $3}') ; do
1388 [[ -d ${mline}/${dir} ]] || continue 1431 [[ -d ${mline}/${dir} ]] || continue
1389 if [[ -n $(find ${mline}/${dir} -maxdepth 1 -iname ${file}) ]] ; then 1432 [[ ! -z $(find ${mline}/${dir} -iname ${file} -maxdepth 1) ]] \
1390 export CDROM_ROOT=${mline} 1433 && export CDROM_ROOT=${mline}
1391 export CDROM_SET=${i} 1434 done
1392 export CDROM_MATCH=${cdset[${i}]} 1435
1393 return 1436 if [[ -z ${CDROM_ROOT} ]] ; then
1437 echo
1438 if [[ ${showedmsg} -eq 0 ]] ; then
1439 if [[ ${CDROM_TOTAL_CDS} -eq 1 ]] ; then
1440 if [[ -z ${CDROM_NAME} ]] ; then
1441 einfo "Please insert the cdrom for ${PN} now !"
1442 else
1443 einfo "Please insert the ${CDROM_NAME} cdrom now !"
1444 fi
1445 else
1446 if [[ -z ${CDROM_NAME_1} ]] ; then
1447 einfo "Please insert cd #${CDROM_CURRENT_CD} for ${PN} now !"
1448 else
1449 local var="CDROM_NAME_${CDROM_CURRENT_CD}"
1450 einfo "Please insert+mount the ${!var} cdrom now !"
1451 fi
1394 fi 1452 fi
1395 done 1453 showedmsg=1
1396
1397 ((++i))
1398 done
1399
1400 echo
1401 if [[ ${showedmsg} -eq 0 ]] ; then
1402 if [[ ${CDROM_TOTAL_CDS} -eq 1 ]] ; then
1403 if [[ -z ${CDROM_NAME} ]] ; then
1404 einfo "Please insert+mount the cdrom for ${PN} now !"
1405 else
1406 einfo "Please insert+mount the ${CDROM_NAME} cdrom now !"
1407 fi
1408 else
1409 if [[ -z ${CDROM_NAME_1} ]] ; then
1410 einfo "Please insert+mount cd #${CDROM_CURRENT_CD} for ${PN} now !"
1411 else
1412 local var="CDROM_NAME_${CDROM_CURRENT_CD}"
1413 einfo "Please insert+mount the ${!var} cdrom now !"
1414 fi
1415 fi 1454 fi
1416 showedmsg=1
1417 fi
1418 einfo "Press return to scan for the cd again" 1455 einfo "Press return to scan for the cd again"
1419 einfo "or hit CTRL+C to abort the emerge." 1456 einfo "or hit CTRL+C to abort the emerge."
1420 echo
1421 einfo "If you are having trouble with the detection"
1422 einfo "of your CD, it is possible that you do not have"
1423 einfo "Joliet support enabled in your kernel. Please"
1424 einfo "check that CONFIG_JOLIET is enabled in your kernel."
1425 read 1457 read
1458 fi
1426 done 1459 done
1427} 1460}
1428 1461
1429# Make sure that LINGUAS only contains languages that 1462# Make sure that LINGUAS only contains languages that
1430# a package can support 1463# a package can support
1438# directories and uses the intersection of the lists. 1471# directories and uses the intersection of the lists.
1439# The -u builds a list of po files found in all the 1472# The -u builds a list of po files found in all the
1440# directories and uses the union of the lists. 1473# directories and uses the union of the lists.
1441strip-linguas() { 1474strip-linguas() {
1442 local ls newls 1475 local ls newls
1443 if [[ $1 == "-i" ]] || [[ $1 == "-u" ]] ; then 1476 if [ "$1" == "-i" ] || [ "$1" == "-u" ] ; then
1444 local op=$1; shift 1477 local op="$1"; shift
1445 ls=" $(find "$1" -name '*.po' -printf '%f ') "; shift 1478 ls=" $(find "$1" -name '*.po' -printf '%f ') "; shift
1446 local d f 1479 local d f
1447 for d in "$@" ; do 1480 for d in "$@" ; do
1448 if [[ ${op} == "-u" ]] ; then 1481 if [ "${op}" == "-u" ] ; then
1449 newls=${ls} 1482 newls="${ls}"
1450 else 1483 else
1451 newls="" 1484 newls=""
1452 fi 1485 fi
1453 for f in $(find "$d" -name '*.po' -printf '%f ') ; do 1486 for f in $(find "$d" -name '*.po' -printf '%f ') ; do
1454 if [[ ${op} == "-i" ]] ; then 1487 if [ "${op}" == "-i" ] ; then
1455 [[ ${ls/ ${f} /} != ${ls} ]] && newls="${newls} ${f}" 1488 [ "${ls/ ${f} /}" != "${ls}" ] && newls="${newls} ${f}"
1456 else 1489 else
1457 [[ ${ls/ ${f} /} == ${ls} ]] && newls="${newls} ${f}" 1490 [ "${ls/ ${f} /}" == "${ls}" ] && newls="${newls} ${f}"
1458 fi 1491 fi
1459 done 1492 done
1460 ls=${newls} 1493 ls="${newls}"
1461 done 1494 done
1462 ls=${ls//.po} 1495 ls="${ls//.po}"
1463 else 1496 else
1464 ls=$@ 1497 ls="$@"
1465 fi 1498 fi
1466 1499
1467 ls=" ${ls} " 1500 ls=" ${ls} "
1468 newls="" 1501 newls=""
1469 for f in ${LINGUAS} ; do 1502 for f in ${LINGUAS} ; do
1470 if [[ ${ls/ ${f} /} != ${ls} ]] ; then 1503 if [ "${ls/ ${f} /}" != "${ls}" ] ; then
1471 newls="${newls} ${f}" 1504 newls="${newls} ${f}"
1472 else 1505 else
1473 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA" 1506 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA"
1474 fi 1507 fi
1475 done 1508 done
1476 if [[ -z ${newls} ]] ; then 1509 if [ -z "${newls}" ] ; then
1477 export LINGUAS="" 1510 unset LINGUAS
1478 else 1511 else
1479 export LINGUAS=${newls:1} 1512 export LINGUAS="${newls}"
1480 fi 1513 fi
1481} 1514}
1482 1515
1483# moved from kernel.eclass since they are generally useful outside of 1516# moved from kernel.eclass since they are generally useful outside of
1484# kernel.eclass -iggy (20041002) 1517# kernel.eclass -iggy (20041002)
1492 while ((i--)) ; do 1525 while ((i--)) ; do
1493 ewarn "PLEASE UPDATE TO YOUR PACKAGE TO USE linux-info.eclass" 1526 ewarn "PLEASE UPDATE TO YOUR PACKAGE TO USE linux-info.eclass"
1494 done 1527 done
1495 export EUTILS_ECLASS_PORTAGE_ARCH="${ARCH}" 1528 export EUTILS_ECLASS_PORTAGE_ARCH="${ARCH}"
1496 case ${ARCH} in 1529 case ${ARCH} in
1497 x86) export ARCH="i386";; 1530 x86) export ARCH="i386";;
1498 amd64) export ARCH="x86_64";; 1531 amd64) export ARCH="x86_64";;
1499 hppa) export ARCH="parisc";; 1532 hppa) export ARCH="parisc";;
1500 mips) export ARCH="mips";; 1533 mips) export ARCH="mips";;
1501 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! 1534 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!
1502 *) export ARCH="${ARCH}";; 1535 *) export ARCH="${ARCH}";;
1503 esac 1536 esac
1504} 1537}
1505 1538
1506# set's ARCH back to what portage expects 1539# set's ARCH back to what portage expects
1507set_arch_to_portage() { 1540set_arch_to_portage() {
1551 LIB=$1 1584 LIB=$1
1552 1585
1553 if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then 1586 if [ -n "${LIB}" -a -f "${ROOT}${LIB}" ]; then
1554 SONAME=`basename ${LIB}` 1587 SONAME=`basename ${LIB}`
1555 1588
1556 ewarn "An old version of an installed library was detected on your system." 1589 einfo "An old version of an installed library was detected on your system."
1557 ewarn "In order to avoid breaking packages that link against it, this older version" 1590 einfo "In order to avoid breaking packages that link against is, this older version"
1558 ewarn "is not being removed. In order to make full use of this newer version," 1591 einfo "is not being removed. In order to make full use of this newer version,"
1559 ewarn "you will need to execute the following command:" 1592 einfo "you will need to execute the following command:"
1560 ewarn " revdep-rebuild --soname ${SONAME}" 1593 einfo " revdep-rebuild --soname ${SONAME}"
1561 ewarn 1594 einfo
1562 ewarn "After doing that, you can safely remove ${LIB}" 1595 einfo "After doing that, you can safely remove ${LIB}"
1563 ewarn "Note: 'emerge gentoolkit' to get revdep-rebuild" 1596 einfo "Note: 'emerge gentoolkit' to get revdep-rebuild"
1564 fi 1597 fi
1565} 1598}
1566 1599
1567# Hack for people to figure out if a package was built with 1600# Hack for people to figure out if a package was built with
1568# certain USE flags 1601# certain USE flags
1578 [[ ${opt:0:1} = "-" ]] && shift || opt="-a" 1611 [[ ${opt:0:1} = "-" ]] && shift || opt="-a"
1579 1612
1580 local PKG=$(best_version $1) 1613 local PKG=$(best_version $1)
1581 shift 1614 shift
1582 1615
1583 local USEFILE=${ROOT}/var/db/pkg/${PKG}/USE 1616 local USEFILE="${ROOT}/var/db/pkg/${PKG}/USE"
1584
1585 # if the USE file doesnt exist, assume the $PKG is either
1586 # injected or package.provided
1587 [[ ! -e ${USEFILE} ]] && return 0 1617 [[ ! -e ${USEFILE} ]] && return 1
1588 1618
1589 local USE_BUILT=$(<${USEFILE}) 1619 local USE_BUILT=$(<${USEFILE})
1590 while [[ $# -gt 0 ]] ; do 1620 while [[ $# -gt 0 ]] ; do
1591 if [[ ${opt} = "-o" ]] ; then 1621 if [[ ${opt} = "-o" ]] ; then
1592 has $1 ${USE_BUILT} && return 0 1622 has $1 ${USE_BUILT} && return 0
1609 patch -p0 "${f}" "${PORTDIR}/eclass/ELT-patches/nocxx/nocxx.patch" > /dev/null 1639 patch -p0 "${f}" "${PORTDIR}/eclass/ELT-patches/nocxx/nocxx.patch" > /dev/null
1610 done 1640 done
1611 eend 0 1641 eend 0
1612} 1642}
1613 1643
1614# dopamd <file> [more files] 1644# dopamd [ file ] [ new file ]
1615# 1645#
1616# Install pam auth config file in /etc/pam.d 1646# Install pam auth config file in /etc/pam.d
1647#
1648# The first argument, 'file' is required. Install as 'new file', if
1649# specified.
1650
1617dopamd() { 1651dopamd() {
1652 local pamd="$1" newpamd="${2:-$1}"
1618 [[ -z $1 ]] && die "dopamd requires at least one argument" 1653 [[ -z "$1" ]] && die "dopamd requires at least one argument."
1619 1654
1620 use pam || return 0 1655 use pam || return 0
1621 1656
1622 INSDESTTREE=/etc/pam.d \ 1657 insinto /etc/pam.d
1623 doins "$@" || die "failed to install $@" 1658 # these are the default doins options, but be explicit just in case
1659 insopts -m 0644 -o root -g root
1660 newins ${pamd} ${newpamd} || die "failed to install ${newpamd}"
1624} 1661}
1625# newpamd <old name> <new name>
1626#
1627# Install pam file <old name> as <new name> in /etc/pam.d
1628newpamd() {
1629 [[ $# -ne 2 ]] && die "newpamd requires two arguements"
1630
1631 use pam || return 0
1632
1633 INSDESTTREE=/etc/pam.d \
1634 newins "$1" "$2" || die "failed to install $1 as $2"
1635}
1636
1637# make a wrapper script ...
1638# NOTE: this was originally games_make_wrapper, but I noticed other places where
1639# this could be used, so I have moved it here and made it not games-specific
1640# -- wolf31o2
1641# $1 == wrapper name
1642# $2 == binary to run
1643# $3 == directory to chdir before running binary
1644# $4 == extra LD_LIBRARY_PATH's (make it : delimited)
1645# $5 == path for wrapper
1646make_wrapper() {
1647 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5
1648 local tmpwrapper=$(emktemp)
1649 # We don't want to quote ${bin} so that people can pass complex
1650 # things as $bin ... "./someprog --args"
1651 cat << EOF > "${tmpwrapper}"
1652#!/bin/sh
1653cd "${chdir:-.}"
1654if [ -n "${libdir}" ] ; then
1655 if [ "\${LD_LIBRARY_PATH+set}" = "set" ] ; then
1656 export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}"
1657 else
1658 export LD_LIBRARY_PATH="${libdir}"
1659 fi
1660fi
1661exec ${bin} "\$@"
1662EOF
1663 chmod go+rx "${tmpwrapper}"
1664 if [[ -n ${path} ]] ; then
1665 exeinto "${path}"
1666 newexe "${tmpwrapper}" "${wrapper}"
1667 else
1668 newbin "${tmpwrapper}" "${wrapper}"
1669 fi
1670}

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.144

  ViewVC Help
Powered by ViewVC 1.1.20