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

Diff of /eclass/eutils.eclass

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

Revision 1.143 Revision 1.178
1# Copyright 1999-2004 Gentoo Foundation 1# Copyright 1999-2005 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.143 2005/01/26 16:19:12 ka0ttic Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.178 2005/05/26 22:09:26 vapier 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.
65gen_usr_ldscript() { 65gen_usr_ldscript() {
66 local libdir="$(get_libdir)" 66 local libdir="$(get_libdir)"
67 # Just make sure it exists 67 # Just make sure it exists
68 dodir /usr/${libdir} 68 dodir /usr/${libdir}
69 69
70 for lib in "${@}" ; do
70 cat > "${D}/usr/${libdir}/${1}" << END_LDSCRIPT 71 cat > "${D}/usr/${libdir}/${lib}" <<-END_LDSCRIPT
71/* GNU ld script 72 /* GNU ld script
72 Because Gentoo have critical dynamic libraries 73 Since Gentoo has critical dynamic libraries
73 in /lib, and the static versions in /usr/lib, we 74 in /lib, and the static versions in /usr/lib,
74 need to have a "fake" dynamic lib in /usr/lib, 75 we need to have a "fake" dynamic lib in /usr/lib,
75 otherwise we run into linking problems. 76 otherwise we run into linking problems.
76 See bug #4411 on http://bugs.gentoo.org/ for 77
77 more info. */ 78 See bug http://bugs.gentoo.org/4411 for more info.
79 */
78GROUP ( /${libdir}/${1} ) 80 GROUP ( /${libdir}/${lib} )
79END_LDSCRIPT 81 END_LDSCRIPT
80 fperms a+x "/usr/${libdir}/${1}" 82 fperms a+x "/usr/${libdir}/${lib}"
83 done
81} 84}
82 85
83# Simple function to draw a line consisting of '=' the same length as $* 86# Simple function to draw a line consisting of '=' the same length as $*
87# - only to be used by epatch()
84# 88#
85# <azarah@gentoo.org> (11 Nov 2002) 89# <azarah@gentoo.org> (11 Nov 2002)
86# 90#
87draw_line() { 91draw_line() {
88 local i=0 92 local i=0
114EPATCH_SOURCE="${WORKDIR}/patch" 118EPATCH_SOURCE="${WORKDIR}/patch"
115# Default extension for patches 119# Default extension for patches
116EPATCH_SUFFIX="patch.bz2" 120EPATCH_SUFFIX="patch.bz2"
117# Default options for patch 121# Default options for patch
118# Set -g0 to keep RCS, ClearCase, Perforce and SCCS happy. Bug #24571 122# Set -g0 to keep RCS, ClearCase, Perforce and SCCS happy. Bug #24571
119EPATCH_OPTS="-g0" 123# Set --no-backup-if-mismatch so we don't leave '.orig' files behind.
124EPATCH_OPTS="-g0 --no-backup-if-mismatch"
120# List of patches not to apply. Not this is only file names, 125# List of patches not to apply. Not this is only file names,
121# and not the full path .. 126# and not the full path ..
122EPATCH_EXCLUDE="" 127EPATCH_EXCLUDE=""
123# Change the printed message for a single patch. 128# Change the printed message for a single patch.
124EPATCH_SINGLE_MSG="" 129EPATCH_SINGLE_MSG=""
130# Change the printed message for multiple patches.
131EPATCH_MULTI_MSG="Applying various patches (bugfixes/updates) ..."
125# Force applying bulk patches even if not following the style: 132# Force applying bulk patches even if not following the style:
126# 133#
127# ??_${ARCH}_foo.${EPATCH_SUFFIX} 134# ??_${ARCH}_foo.${EPATCH_SUFFIX}
128# 135#
129EPATCH_FORCE="no" 136EPATCH_FORCE="no"
170 local x="" 177 local x=""
171 178
172 if [ "$#" -gt 1 ] 179 if [ "$#" -gt 1 ]
173 then 180 then
174 local m="" 181 local m=""
175 einfo "${#} patches to apply ..."
176 for m in "$@" ; do 182 for m in "$@" ; do
177 epatch "${m}" 183 epatch "${m}"
178 done 184 done
179 return 0 185 return 0
180 fi 186 fi
234 ;; 240 ;;
235 esac 241 esac
236 242
237 if [ "${SINGLE_PATCH}" = "no" ] 243 if [ "${SINGLE_PATCH}" = "no" ]
238 then 244 then
239 einfo "Applying various patches (bugfixes/updates) ..." 245 einfo "${EPATCH_MULTI_MSG}"
240 fi 246 fi
241 for x in ${EPATCH_SOURCE} 247 for x in ${EPATCH_SOURCE}
242 do 248 do
243 # New ARCH dependant patch naming scheme ... 249 # New ARCH dependant patch naming scheme ...
244 # 250 #
245 # ???_arch_foo.patch 251 # ???_arch_foo.patch
246 # 252 #
247 if [ -f ${x} ] && \ 253 if [ -f ${x} ] && \
248 ([ "${SINGLE_PATCH}" = "yes" -o "${x/_all_}" != "${x}" -o "`eval echo \$\{x/_${ARCH}_\}`" != "${x}" ] || \ 254 ([ "${SINGLE_PATCH}" = "yes" -o "${x/_all_}" != "${x}" -o "${x/_${ARCH}_}" != "${x}" ] || \
249 [ "${EPATCH_FORCE}" = "yes" ]) 255 [ "${EPATCH_FORCE}" = "yes" ])
250 then 256 then
251 local count=0 257 local count=0
252 local popts="${EPATCH_OPTS}" 258 local popts="${EPATCH_OPTS}"
259 local patchname=${x##*/}
253 260
254 if [ -n "${EPATCH_EXCLUDE}" ] 261 if [ -n "${EPATCH_EXCLUDE}" ]
255 then 262 then
256 if [ "`eval echo \$\{EPATCH_EXCLUDE/${x##*/}\}`" != "${EPATCH_EXCLUDE}" ] 263 if [ "${EPATCH_EXCLUDE/${patchname}}" != "${EPATCH_EXCLUDE}" ]
257 then 264 then
258 continue 265 continue
259 fi 266 fi
260 fi 267 fi
261 268
263 then 270 then
264 if [ -n "${EPATCH_SINGLE_MSG}" ] 271 if [ -n "${EPATCH_SINGLE_MSG}" ]
265 then 272 then
266 einfo "${EPATCH_SINGLE_MSG}" 273 einfo "${EPATCH_SINGLE_MSG}"
267 else 274 else
268 einfo "Applying ${x##*/} ..." 275 einfo "Applying ${patchname} ..."
269 fi 276 fi
270 else 277 else
271 einfo " ${x##*/} ..." 278 einfo " ${patchname} ..."
272 fi 279 fi
273 280
274 echo "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 281 echo "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
275 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 282 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
276 283
277 # Allow for prefix to differ ... im lazy, so shoot me :/ 284 # Allow for prefix to differ ... im lazy, so shoot me :/
278 while [ "${count}" -lt 5 ] 285 while [ "${count}" -lt 5 ]
279 do 286 do
280 # Generate some useful debug info ... 287 # Generate some useful debug info ...
281 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 288 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
282 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 289 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
283 290
284 if [ "${PATCH_SUFFIX}" != "patch" ] 291 if [ "${PATCH_SUFFIX}" != "patch" ]
285 then 292 then
286 echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 293 echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
287 echo "${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 294 echo "${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
288 else 295 else
289 PATCH_TARGET="${x}" 296 PATCH_TARGET="${x}"
290 fi 297 fi
291 298
292 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 299 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
293 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 300 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
294 301
295 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 302 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
296 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 303 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
297 304
298 if [ "${PATCH_SUFFIX}" != "patch" ] 305 if [ "${PATCH_SUFFIX}" != "patch" ]
299 then 306 then
300 if ! (${PIPE_CMD} ${x} > ${PATCH_TARGET}) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1 307 if ! (${PIPE_CMD} ${x} > ${PATCH_TARGET}) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1
301 then 308 then
302 echo 309 echo
303 eerror "Could not extract patch!" 310 eerror "Could not extract patch!"
304 #die "Could not extract patch!" 311 #die "Could not extract patch!"
305 count=5 312 count=5
306 break 313 break
307 fi 314 fi
308 fi 315 fi
309 316
310 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1 317 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1
311 then 318 then
312 draw_line "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 319 draw_line "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
313 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 320 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
314 echo "ACTUALLY APPLYING ${x##*/} ..." >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 321 echo "ACTUALLY APPLYING ${patchname} ..." >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
315 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 322 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
316 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 323 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
317 324
318 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 2>&1 325 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 2>&1
319 326
320 if [ "$?" -ne 0 ] 327 if [ "$?" -ne 0 ]
321 then 328 then
322 cat ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 329 cat ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
323 echo 330 echo
324 eerror "A dry-run of patch command succeeded, but actually" 331 eerror "A dry-run of patch command succeeded, but actually"
325 eerror "applying the patch failed!" 332 eerror "applying the patch failed!"
326 #die "Real world sux compared to the dreamworld!" 333 #die "Real world sux compared to the dreamworld!"
327 count=5 334 count=5
328 fi 335 fi
329 336
330 rm -f ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 337 rm -f ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
331 338
332 break 339 break
333 fi 340 fi
334 341
335 count=$((count + 1)) 342 count=$((count + 1))
341 fi 348 fi
342 349
343 if [ "${count}" -eq 5 ] 350 if [ "${count}" -eq 5 ]
344 then 351 then
345 echo 352 echo
346 eerror "Failed Patch: ${x##*/}!" 353 eerror "Failed Patch: ${patchname} !"
354 eerror " ( ${PATCH_TARGET} )"
347 eerror 355 eerror
348 eerror "Include in your bugreport the contents of:" 356 eerror "Include in your bugreport the contents of:"
349 eerror 357 eerror
350 eerror " ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}" 358 eerror " ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}"
351 echo 359 echo
352 die "Failed Patch: ${x##*/}!" 360 die "Failed Patch: ${patchname}!"
353 fi 361 fi
354 362
355 rm -f ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 363 rm -f ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
356 364
357 eend 0 365 eend 0
358 fi 366 fi
359 done 367 done
360 if [ "${SINGLE_PATCH}" = "no" ] 368 if [ "${SINGLE_PATCH}" = "no" ]
361 then 369 then
362 einfo "Done with patching" 370 einfo "Done with patching"
363 fi
364}
365
366# This function return true if we are using the NPTL pthreads
367# implementation.
368#
369# <azarah@gentoo.org> (06 March 2003)
370#
371have_NPTL() {
372 cat > ${T}/test-nptl.c <<-"END"
373 #define _XOPEN_SOURCE
374 #include <unistd.h>
375 #include <stdio.h>
376
377 int main()
378 {
379 char buf[255];
380 char *str = buf;
381
382 confstr(_CS_GNU_LIBPTHREAD_VERSION, str, 255);
383 if (NULL != str) {
384 printf("%s\n", str);
385 if (NULL != strstr(str, "NPTL"))
386 return 0;
387 }
388
389 return 1;
390 }
391 END
392
393 einfon "Checking for _CS_GNU_LIBPTHREAD_VERSION support in glibc ..."
394 if gcc -o ${T}/nptl ${T}/test-nptl.c &> /dev/null
395 then
396 echo "yes"
397 einfon "Checking what PTHREADS implementation we have ..."
398 if ${T}/nptl
399 then
400 return 0
401 else
402 return 1
403 fi
404 else
405 echo "no"
406 fi
407
408 return 1
409}
410
411# This function check how many cpu's are present, and then set
412# -j in MAKEOPTS accordingly.
413#
414# Thanks to nall <nall@gentoo.org> for this.
415#
416get_number_of_jobs() {
417 local jobs=0
418
419 if [ ! -r /proc/cpuinfo ]
420 then
421 return 1
422 fi
423
424 # This bit is from H?kan Wessberg <nacka-gentoo@refug.org>, bug #13565.
425 if [ "`egrep "^[[:space:]]*MAKEOPTS=" /etc/make.conf | wc -l`" -gt 0 ]
426 then
427 ADMINOPTS="`egrep "^[[:space:]]*MAKEOPTS=" /etc/make.conf | cut -d= -f2 | sed 's/\"//g'`"
428 ADMINPARAM="`echo ${ADMINOPTS} | gawk '{match($0, /-j *[0-9]*/, opt); print opt[0]}'`"
429 ADMINPARAM="${ADMINPARAM/-j}"
430 fi
431
432 export MAKEOPTS="`echo ${MAKEOPTS} | sed -e 's:-j *[0-9]*::g'`"
433
434 if [ "${ARCH}" = "amd64" -o "${ARCH}" = "x86" -o "${ARCH}" = "hppa" -o \
435 "${ARCH}" = "arm" -o "${ARCH}" = "mips" -o "${ARCH}" = "ia64" ]
436 then
437 # these archs will always have "[Pp]rocessor"
438 jobs="$((`grep -c ^[Pp]rocessor /proc/cpuinfo` * 2))"
439
440 elif [ "${ARCH}" = "sparc" -o "${ARCH}" = "sparc64" ]
441 then
442 # sparc always has "ncpus active"
443 jobs="$((`grep "^ncpus active" /proc/cpuinfo | sed -e "s/^.*: //"` * 2))"
444
445 elif [ "${ARCH}" = "alpha" ]
446 then
447 # alpha has "cpus active", but only when compiled with SMP
448 if [ "`grep -c "^cpus active" /proc/cpuinfo`" -eq 1 ]
449 then
450 jobs="$((`grep "^cpus active" /proc/cpuinfo | sed -e "s/^.*: //"` * 2))"
451 else
452 jobs=2
453 fi
454
455 elif [ "${ARCH}" = "ppc" -o "${ARCH}" = "ppc64" ]
456 then
457 # ppc has "processor", but only when compiled with SMP
458 if [ "`grep -c "^processor" /proc/cpuinfo`" -eq 1 ]
459 then
460 jobs="$((`grep -c ^processor /proc/cpuinfo` * 2))"
461 else
462 jobs=2
463 fi
464 elif [ "${ARCH}" = "s390" ]
465 then
466 # s390 has "# processors : "
467 jobs="$((`grep "^\# processors" /proc/cpuinfo | sed -e "s/^.*: //"` * 2))"
468 else
469 jobs="$((`grep -c ^cpu /proc/cpuinfo` * 2))"
470 die "Unknown ARCH -- ${ARCH}!"
471 fi
472
473 # Make sure the number is valid ...
474 if [ "${jobs}" -lt 1 ]
475 then
476 jobs=1
477 fi
478
479 if [ -n "${ADMINPARAM}" ]
480 then
481 if [ "${jobs}" -gt "${ADMINPARAM}" ]
482 then
483 einfo "Setting make jobs to \"-j${ADMINPARAM}\" to ensure successful merge ..."
484 export MAKEOPTS="${MAKEOPTS} -j${ADMINPARAM}"
485 else
486 einfo "Setting make jobs to \"-j${jobs}\" to ensure successful merge ..."
487 export MAKEOPTS="${MAKEOPTS} -j${jobs}"
488 fi
489 fi 371 fi
490} 372}
491 373
492# Cheap replacement for when debianutils (and thus mktemp) 374# Cheap replacement for when debianutils (and thus mktemp)
493# does not exist on the users system 375# does not exist on the users system
637 einfo " - Shell: ${eshell}" 519 einfo " - Shell: ${eshell}"
638 opts="${opts} -s ${eshell}" 520 opts="${opts} -s ${eshell}"
639 521
640 # handle homedir 522 # handle homedir
641 local ehome="$1"; shift 523 local ehome="$1"; shift
642 if [ -z "${ehome}" ] && [ "${eshell}" != "-1" ] 524 if [ -z "${ehome}" ] || [ "${eshell}" == "-1" ]
643 then 525 then
644 ehome="/dev/null" 526 ehome="/dev/null"
645 fi 527 fi
646 einfo " - Home: ${ehome}" 528 einfo " - Home: ${ehome}"
647 opts="${opts} -d ${ehome}" 529 opts="${opts} -d ${ehome}"
864# name: the name that will show up in the menu 746# name: the name that will show up in the menu
865# icon: give your little like a pretty little icon ... 747# icon: give your little like a pretty little icon ...
866# this can be relative (to /usr/share/pixmaps) or 748# this can be relative (to /usr/share/pixmaps) or
867# a full path to an icon 749# a full path to an icon
868# type: what kind of application is this ? for categories: 750# type: what kind of application is this ? for categories:
869# http://www.freedesktop.org/standards/menu-spec/ 751# http://www.freedesktop.org/wiki/Standards_2fmenu_2dspec
870# path: if your app needs to startup in a specific dir 752# path: if your app needs to startup in a specific dir
871make_desktop_entry() { 753make_desktop_entry() {
872 [ -z "$1" ] && eerror "make_desktop_entry: You must specify the executable" && return 1 754 [[ -z $1 ]] && eerror "make_desktop_entry: You must specify the executable" && return 1
873 755
874 local exec="${1}" 756 local exec=${1}
875 local name="${2:-${PN}}" 757 local name=${2:-${PN}}
876 local icon="${3:-${PN}.png}" 758 local icon=${3:-${PN}.png}
877 local type="${4}" 759 local type=${4}
878 local subdir="${6}" 760 local path=${5}
879 local path="${5:-${GAMES_BINDIR}}" 761
880 if [ -z "${type}" ] 762 if [[ -z ${type} ]] ; then
881 then 763 local catmaj=${CATEGORY%%-*}
882 case ${CATEGORY} in 764 local catmin=${CATEGORY##*-}
883 "app-emulation") 765 case ${catmaj} in
884 type=Emulator 766 app)
885 subdir="Emulation" 767 case ${catmin} in
768 admin) type=System;;
769 cdr) type=DiscBurning;;
770 dicts) type=Dictionary;;
771 editors) type=TextEditor;;
772 emacs) type=TextEditor;;
773 emulation) type=Emulator;;
774 laptop) type=HardwareSettings;;
775 office) type=Office;;
776 vim) type=TextEditor;;
777 xemacs) type=TextEditor;;
778 *) type=;;
779 esac
886 ;; 780 ;;
887 "games-"*) 781
888 type=Game 782 dev)
889 subdir="Games" 783 type="Development"
890 ;; 784 ;;
891 "net-"*) 785
892 type=Network 786 games)
893 subdir="${type}" 787 [[ -z ${path} ]] && path=${GAMES_BINDIR}
788
789 case ${catmin} in
790 action) type=ActionGame;;
791 arcade) type=ArcadeGame;;
792 board) type=BoardGame;;
793 kid) type=KidsGame;;
794 emulation) type=Emulator;;
795 puzzle) type=LogicGame;;
796 rpg) type=RolePlaying;;
797 roguelike) type=RolePlaying;;
798 simulation) type=Simulation;;
799 sports) type=SportsGame;;
800 strategy) type=StrategyGame;;
801 *) type=;;
802 esac
803 type="Game;${type}"
894 ;; 804 ;;
805
806 mail)
807 type="Network;Email"
808 ;;
809
810 media)
811 case ${catmin} in
812 gfx) type=Graphics;;
813 radio) type=Tuner;;
814 sound) type=Audio;;
815 tv) type=TV;;
816 video) type=Video;;
817 *) type=;;
818 esac
819 type="AudioVideo;${type}"
820 ;;
821
822 net)
823 case ${catmin} in
824 dialup) type=Dialup;;
825 ftp) type=FileTransfer;;
826 im) type=InstantMessaging;;
827 irc) type=IRCClient;;
828 mail) type=Email;;
829 news) type=News;;
830 nntp) type=News;;
831 p2p) type=FileTransfer;;
832 *) type=;;
833 esac
834 type="Network;${type}"
835 ;;
836
837 sci)
838 case ${catmin} in
839 astro*) type=Astronomoy;;
840 bio*) type=Biology;;
841 calc*) type=Calculator;;
842 chem*) type=Chemistry;;
843 geo*) type=Geology;;
844 math*) type=Math;;
845 *) type=;;
846 esac
847 type="Science;${type}"
848 ;;
849
850 www)
851 case ${catmin} in
852 client) type=WebBrowser;;
853 *) type=;;
854 esac
855 type="Network"
856 ;;
857
895 *) 858 *)
896 type= 859 type=
897 subdir=
898 ;; 860 ;;
899 esac 861 esac
900 fi 862 fi
863 if [ "${SLOT}" == "0" ] ; then
864 local desktop_name="${PN}"
865 else
866 local desktop_name="${PN}-${SLOT}"
867 fi
901 local desktop="${T}/${exec}.desktop" 868 local desktop=${T}/${exec%% *}-${desktop_name}.desktop
902 869
903echo "[Desktop Entry] 870echo "[Desktop Entry]
904Encoding=UTF-8 871Encoding=UTF-8
905Version=0.9.2 872Version=0.9.2
906Name=${name} 873Name=${name}
922# make_desktop_entry(<title>, <command>) 889# make_desktop_entry(<title>, <command>)
923# title: File to execute to start the Window Manager 890# title: File to execute to start the Window Manager
924# command: Name of the Window Manager 891# command: Name of the Window Manager
925 892
926make_session_desktop() { 893make_session_desktop() {
927
928 [ -z "$1" ] && eerror "make_session_desktop: You must specify the title" && return 1 894 [[ -z $1 ]] && eerror "make_session_desktop: You must specify the title" && return 1
929 [ -z "$2" ] && eerror "make_session_desktop: You must specify the command" && return 1 895 [[ -z $2 ]] && eerror "make_session_desktop: You must specify the command" && return 1
930 896
931 local title="${1}" 897 local title=$1
932 local command="${2}" 898 local command=$2
933 local desktop="${T}/${wm}.desktop" 899 local desktop=${T}/${wm}.desktop
934 900
935echo "[Desktop Entry] 901echo "[Desktop Entry]
936Encoding=UTF-8 902Encoding=UTF-8
937Name=${title} 903Name=${title}
938Comment=This session logs you into ${title} 904Comment=This session logs you into ${title}
940TryExec=${command} 906TryExec=${command}
941Type=Application" > "${desktop}" 907Type=Application" > "${desktop}"
942 908
943 insinto /usr/share/xsessions 909 insinto /usr/share/xsessions
944 doins "${desktop}" 910 doins "${desktop}"
945
946 return 0
947} 911}
948 912
949domenu() { 913domenu() {
950 local i 914 local i j
951 local j
952 insinto /usr/share/applications 915 insinto /usr/share/applications
953 for i in ${@} 916 for i in "$@" ; do
954 do
955 if [ -f "${i}" ]; 917 if [[ -f ${i} ]] ; then
956 then
957 doins ${i} 918 doins "${i}"
958 elif [ -d "${i}" ]; 919 elif [[ -d ${i} ]] ; then
959 then
960 for j in ${i}/*.desktop 920 for j in "${i}"/*.desktop ; do
961 do
962 doins ${j} 921 doins "${j}"
963 done 922 done
964 fi 923 fi
965 done 924 done
966} 925}
926newmenu() {
927 insinto /usr/share/applications
928 newins "$1" "$2"
929}
967 930
968doicon() { 931doicon() {
969 local i 932 local i j
970 local j
971 insinto /usr/share/pixmaps 933 insinto /usr/share/pixmaps
972 for i in ${@} 934 for i in "$@" ; do
973 do
974 if [ -f "${i}" ]; 935 if [[ -f ${i} ]] ; then
975 then
976 doins ${i} 936 doins "${i}"
977 elif [ -d "${i}" ]; 937 elif [[ -d ${i} ]] ; then
978 then
979 for j in ${i}/*.png 938 for j in "${i}"/*.png ; do
980 do
981 doins ${j} 939 doins "${j}"
982 done 940 done
983 fi 941 fi
984 done 942 done
943}
944newicon() {
945 insinto /usr/share/pixmaps
946 newins "$1" "$2"
985} 947}
986 948
987############################################################## 949##############################################################
988# END: Handle .desktop files and menu entries # 950# END: Handle .desktop files and menu entries #
989############################################################## 951##############################################################
1390 local mline="" 1352 local mline=""
1391 local showedmsg=0 1353 local showedmsg=0
1392 1354
1393 for mline in $(mount | egrep -e '(iso|cdrom)' | awk '{print $3}') ; do 1355 for mline in $(mount | egrep -e '(iso|cdrom)' | awk '{print $3}') ; do
1394 [[ -d ${mline}/${dir} ]] || continue 1356 [[ -d ${mline}/${dir} ]] || continue
1395 [[ ! -z $(find ${mline}/${dir} -iname ${file} -maxdepth 1) ]] \ 1357 [[ ! -z $(find ${mline}/${dir} -maxdepth 1 -iname ${file}) ]] \
1396 && export CDROM_ROOT=${mline} 1358 && export CDROM_ROOT=${mline}
1397 done 1359 done
1398 1360
1399 if [[ -z ${CDROM_ROOT} ]] ; then 1361 if [[ -z ${CDROM_ROOT} ]] ; then
1400 echo 1362 echo
1434# directories and uses the intersection of the lists. 1396# directories and uses the intersection of the lists.
1435# The -u builds a list of po files found in all the 1397# The -u builds a list of po files found in all the
1436# directories and uses the union of the lists. 1398# directories and uses the union of the lists.
1437strip-linguas() { 1399strip-linguas() {
1438 local ls newls 1400 local ls newls
1439 if [ "$1" == "-i" ] || [ "$1" == "-u" ] ; then 1401 if [[ $1 == "-i" ]] || [[ $1 == "-u" ]] ; then
1440 local op="$1"; shift 1402 local op=$1; shift
1441 ls=" $(find "$1" -name '*.po' -printf '%f ') "; shift 1403 ls=" $(find "$1" -name '*.po' -printf '%f ') "; shift
1442 local d f 1404 local d f
1443 for d in "$@" ; do 1405 for d in "$@" ; do
1444 if [ "${op}" == "-u" ] ; then 1406 if [[ ${op} == "-u" ]] ; then
1445 newls="${ls}" 1407 newls=${ls}
1446 else 1408 else
1447 newls="" 1409 newls=""
1448 fi 1410 fi
1449 for f in $(find "$d" -name '*.po' -printf '%f ') ; do 1411 for f in $(find "$d" -name '*.po' -printf '%f ') ; do
1450 if [ "${op}" == "-i" ] ; then 1412 if [[ ${op} == "-i" ]] ; then
1451 [ "${ls/ ${f} /}" != "${ls}" ] && newls="${newls} ${f}" 1413 [[ ${ls/ ${f} /} != ${ls} ]] && newls="${newls} ${f}"
1452 else 1414 else
1453 [ "${ls/ ${f} /}" == "${ls}" ] && newls="${newls} ${f}" 1415 [[ ${ls/ ${f} /} == ${ls} ]] && newls="${newls} ${f}"
1454 fi 1416 fi
1455 done 1417 done
1456 ls="${newls}" 1418 ls=${newls}
1457 done 1419 done
1458 ls="${ls//.po}" 1420 ls=${ls//.po}
1459 else 1421 else
1460 ls="$@" 1422 ls=$@
1461 fi 1423 fi
1462 1424
1463 ls=" ${ls} " 1425 ls=" ${ls} "
1464 newls="" 1426 newls=""
1465 for f in ${LINGUAS} ; do 1427 for f in ${LINGUAS} ; do
1466 if [ "${ls/ ${f} /}" != "${ls}" ] ; then 1428 if [[ ${ls/ ${f} /} != ${ls} ]] ; then
1467 newls="${newls} ${f}" 1429 newls="${newls} ${f}"
1468 else 1430 else
1469 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA" 1431 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA"
1470 fi 1432 fi
1471 done 1433 done
1472 if [ -z "${newls}" ] ; then 1434 if [[ -z ${newls} ]] ; then
1473 unset LINGUAS 1435 export LINGUAS=""
1474 else 1436 else
1475 export LINGUAS="${newls}" 1437 export LINGUAS=${newls:1}
1476 fi 1438 fi
1477} 1439}
1478 1440
1479# moved from kernel.eclass since they are generally useful outside of 1441# moved from kernel.eclass since they are generally useful outside of
1480# kernel.eclass -iggy (20041002) 1442# kernel.eclass -iggy (20041002)
1488 while ((i--)) ; do 1450 while ((i--)) ; do
1489 ewarn "PLEASE UPDATE TO YOUR PACKAGE TO USE linux-info.eclass" 1451 ewarn "PLEASE UPDATE TO YOUR PACKAGE TO USE linux-info.eclass"
1490 done 1452 done
1491 export EUTILS_ECLASS_PORTAGE_ARCH="${ARCH}" 1453 export EUTILS_ECLASS_PORTAGE_ARCH="${ARCH}"
1492 case ${ARCH} in 1454 case ${ARCH} in
1493 x86) export ARCH="i386";; 1455 x86) export ARCH="i386";;
1494 amd64) export ARCH="x86_64";; 1456 amd64) export ARCH="x86_64";;
1495 hppa) export ARCH="parisc";; 1457 hppa) export ARCH="parisc";;
1496 mips) export ARCH="mips";; 1458 mips) export ARCH="mips";;
1497 sparc) export ARCH="$(tc-arch-kernel)";; # Yeah this is ugly, but it's even WORSE if you don't do this. linux-info.eclass's set_arch_to_kernel is fixed, but won't get used over this one! 1459 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!
1498 *) export ARCH="${ARCH}";; 1460 *) export ARCH="${ARCH}";;
1499 esac 1461 esac
1500} 1462}
1501 1463
1502# set's ARCH back to what portage expects 1464# set's ARCH back to what portage expects
1503set_arch_to_portage() { 1465set_arch_to_portage() {
1602 patch -p0 "${f}" "${PORTDIR}/eclass/ELT-patches/nocxx/nocxx.patch" > /dev/null 1564 patch -p0 "${f}" "${PORTDIR}/eclass/ELT-patches/nocxx/nocxx.patch" > /dev/null
1603 done 1565 done
1604 eend 0 1566 eend 0
1605} 1567}
1606 1568
1607# dopamd [ file ] [ new file ] 1569# dopamd <file> [more files]
1608# 1570#
1609# Install pam auth config file in /etc/pam.d 1571# Install pam auth config file in /etc/pam.d
1610#
1611# The first argument, 'file' is required. Install as 'new file', if
1612# specified.
1613
1614dopamd() { 1572dopamd() {
1615 local pamd="$1" newpamd="${2:-$1}"
1616 [[ -z "$1" ]] && die "dopamd requires at least one argument." 1573 [[ -z $1 ]] && die "dopamd requires at least one argument"
1617 1574
1618 use pam || return 0 1575 use pam || return 0
1619 1576
1620 insinto /etc/pam.d 1577 INSDESTTREE=/etc/pam.d \
1621 # these are the default doins options, but be explicit just in case 1578 doins "$@" || die "failed to install $@"
1622 insopts -m 0644 -o root -g root
1623 newins ${pamd} ${newpamd} || die "failed to install ${newpamd}"
1624} 1579}
1580# newpamd <old name> <new name>
1581#
1582# Install pam file <old name> as <new name> in /etc/pam.d
1583newpamd() {
1584 [[ $# -ne 2 ]] && die "newpamd requires two arguements"
1585
1586 use pam || return 0
1587
1588 INSDESTTREE=/etc/pam.d \
1589 newins "$1" "$2" || die "failed to install $1 as $2"
1590}
1591
1592# make a wrapper script ...
1593# NOTE: this was originally games_make_wrapper, but I noticed other places where
1594# this could be used, so I have moved it here and made it not games-specific
1595# -- wolf31o2
1596# $1 == wrapper name
1597# $2 == binary to run
1598# $3 == directory to chdir before running binary
1599# $4 == extra LD_LIBRARY_PATH's (make it : delimited)
1600# $5 == path for wrapper
1601make_wrapper() {
1602 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5
1603 local tmpwrapper=$(emktemp)
1604 cat << EOF > "${tmpwrapper}"
1605#!/bin/sh
1606cd "${chdir}"
1607export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}"
1608exec ${bin} "\$@"
1609EOF
1610 chmod go+rx "${tmpwrapper}"
1611 if [ -n "${5}" ]
1612 then
1613 exeinto ${5}
1614 newexe "${tmpwrapper}" "${wrapper}"
1615 else
1616 newbin "${tmpwrapper}" "${wrapper}"
1617 fi
1618}

Legend:
Removed from v.1.143  
changed lines
  Added in v.1.178

  ViewVC Help
Powered by ViewVC 1.1.20