/[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.171
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.171 2005/05/13 00:30:33 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=""
170 local x="" 175 local x=""
171 176
172 if [ "$#" -gt 1 ] 177 if [ "$#" -gt 1 ]
173 then 178 then
174 local m="" 179 local m=""
175 einfo "${#} patches to apply ..."
176 for m in "$@" ; do 180 for m in "$@" ; do
177 epatch "${m}" 181 epatch "${m}"
178 done 182 done
179 return 0 183 return 0
180 fi 184 fi
248 ([ "${SINGLE_PATCH}" = "yes" -o "${x/_all_}" != "${x}" -o "`eval echo \$\{x/_${ARCH}_\}`" != "${x}" ] || \ 252 ([ "${SINGLE_PATCH}" = "yes" -o "${x/_all_}" != "${x}" -o "`eval echo \$\{x/_${ARCH}_\}`" != "${x}" ] || \
249 [ "${EPATCH_FORCE}" = "yes" ]) 253 [ "${EPATCH_FORCE}" = "yes" ])
250 then 254 then
251 local count=0 255 local count=0
252 local popts="${EPATCH_OPTS}" 256 local popts="${EPATCH_OPTS}"
257 local patchname=${x##*/}
253 258
254 if [ -n "${EPATCH_EXCLUDE}" ] 259 if [ -n "${EPATCH_EXCLUDE}" ]
255 then 260 then
256 if [ "`eval echo \$\{EPATCH_EXCLUDE/${x##*/}\}`" != "${EPATCH_EXCLUDE}" ] 261 if [ "${EPATCH_EXCLUDE/${patchname}}" != "${EPATCH_EXCLUDE}" ]
257 then 262 then
258 continue 263 continue
259 fi 264 fi
260 fi 265 fi
261 266
263 then 268 then
264 if [ -n "${EPATCH_SINGLE_MSG}" ] 269 if [ -n "${EPATCH_SINGLE_MSG}" ]
265 then 270 then
266 einfo "${EPATCH_SINGLE_MSG}" 271 einfo "${EPATCH_SINGLE_MSG}"
267 else 272 else
268 einfo "Applying ${x##*/} ..." 273 einfo "Applying ${patchname} ..."
269 fi 274 fi
270 else 275 else
271 einfo " ${x##*/} ..." 276 einfo " ${patchname} ..."
272 fi 277 fi
273 278
274 echo "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 279 echo "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
275 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 280 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
276 281
277 # Allow for prefix to differ ... im lazy, so shoot me :/ 282 # Allow for prefix to differ ... im lazy, so shoot me :/
278 while [ "${count}" -lt 5 ] 283 while [ "${count}" -lt 5 ]
279 do 284 do
280 # Generate some useful debug info ... 285 # Generate some useful debug info ...
281 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 286 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
282 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 287 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
283 288
284 if [ "${PATCH_SUFFIX}" != "patch" ] 289 if [ "${PATCH_SUFFIX}" != "patch" ]
285 then 290 then
286 echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 291 echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
287 echo "${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 292 echo "${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
288 else 293 else
289 PATCH_TARGET="${x}" 294 PATCH_TARGET="${x}"
290 fi 295 fi
291 296
292 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 297 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
293 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 298 echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
294 299
295 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 300 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
296 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 301 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
297 302
298 if [ "${PATCH_SUFFIX}" != "patch" ] 303 if [ "${PATCH_SUFFIX}" != "patch" ]
299 then 304 then
300 if ! (${PIPE_CMD} ${x} > ${PATCH_TARGET}) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1 305 if ! (${PIPE_CMD} ${x} > ${PATCH_TARGET}) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1
301 then 306 then
302 echo 307 echo
303 eerror "Could not extract patch!" 308 eerror "Could not extract patch!"
304 #die "Could not extract patch!" 309 #die "Could not extract patch!"
305 count=5 310 count=5
306 break 311 break
307 fi 312 fi
308 fi 313 fi
309 314
310 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1 315 if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1
311 then 316 then
312 draw_line "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 317 draw_line "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
313 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 318 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
314 echo "ACTUALLY APPLYING ${x##*/} ..." >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 319 echo "ACTUALLY APPLYING ${patchname} ..." >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
315 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 320 echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
316 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 321 draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
317 322
318 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 2>&1 323 cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 2>&1
319 324
320 if [ "$?" -ne 0 ] 325 if [ "$?" -ne 0 ]
321 then 326 then
322 cat ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 327 cat ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
323 echo 328 echo
324 eerror "A dry-run of patch command succeeded, but actually" 329 eerror "A dry-run of patch command succeeded, but actually"
325 eerror "applying the patch failed!" 330 eerror "applying the patch failed!"
326 #die "Real world sux compared to the dreamworld!" 331 #die "Real world sux compared to the dreamworld!"
327 count=5 332 count=5
328 fi 333 fi
329 334
330 rm -f ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 335 rm -f ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
331 336
332 break 337 break
333 fi 338 fi
334 339
335 count=$((count + 1)) 340 count=$((count + 1))
341 fi 346 fi
342 347
343 if [ "${count}" -eq 5 ] 348 if [ "${count}" -eq 5 ]
344 then 349 then
345 echo 350 echo
346 eerror "Failed Patch: ${x##*/}!" 351 eerror "Failed Patch: ${patchname} !"
352 eerror " ( ${PATCH_TARGET} )"
347 eerror 353 eerror
348 eerror "Include in your bugreport the contents of:" 354 eerror "Include in your bugreport the contents of:"
349 eerror 355 eerror
350 eerror " ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}" 356 eerror " ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}"
351 echo 357 echo
352 die "Failed Patch: ${x##*/}!" 358 die "Failed Patch: ${patchname}!"
353 fi 359 fi
354 360
355 rm -f ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 361 rm -f ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
356 362
357 eend 0 363 eend 0
358 fi 364 fi
359 done 365 done
360 if [ "${SINGLE_PATCH}" = "no" ] 366 if [ "${SINGLE_PATCH}" = "no" ]
361 then 367 then
362 einfo "Done with patching" 368 einfo "Done with patching"
363 fi 369 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} 370}
410 371
411# This function check how many cpu's are present, and then set 372# This function check how many cpu's are present, and then set
412# -j in MAKEOPTS accordingly. 373# -j in MAKEOPTS accordingly.
413# 374#
864# name: the name that will show up in the menu 825# name: the name that will show up in the menu
865# icon: give your little like a pretty little icon ... 826# icon: give your little like a pretty little icon ...
866# this can be relative (to /usr/share/pixmaps) or 827# this can be relative (to /usr/share/pixmaps) or
867# a full path to an icon 828# a full path to an icon
868# type: what kind of application is this ? for categories: 829# type: what kind of application is this ? for categories:
869# http://www.freedesktop.org/standards/menu-spec/ 830# http://www.freedesktop.org/wiki/Standards_2fmenu_2dspec
870# path: if your app needs to startup in a specific dir 831# path: if your app needs to startup in a specific dir
871make_desktop_entry() { 832make_desktop_entry() {
872 [ -z "$1" ] && eerror "make_desktop_entry: You must specify the executable" && return 1 833 [[ -z $1 ]] && eerror "make_desktop_entry: You must specify the executable" && return 1
873 834
874 local exec="${1}" 835 local exec=${1}
875 local name="${2:-${PN}}" 836 local name=${2:-${PN}}
876 local icon="${3:-${PN}.png}" 837 local icon=${3:-${PN}.png}
877 local type="${4}" 838 local type=${4}
878 local subdir="${6}" 839 local path=${5}
879 local path="${5:-${GAMES_BINDIR}}" 840
880 if [ -z "${type}" ] 841 if [[ -z ${type} ]] ; then
881 then 842 local catmaj=${CATEGORY%%-*}
882 case ${CATEGORY} in 843 local catmin=${CATEGORY##*-}
883 "app-emulation") 844 case ${catmaj} in
884 type=Emulator 845 app)
885 subdir="Emulation" 846 case ${catmin} in
847 admin) type=System;;
848 cdr) type=DiscBurning;;
849 dicts) type=Dictionary;;
850 editors) type=TextEditor;;
851 emacs) type=TextEditor;;
852 emulation) type=Emulator;;
853 laptop) type=HardwareSettings;;
854 office) type=Office;;
855 vim) type=TextEditor;;
856 xemacs) type=TextEditor;;
857 *) type=;;
858 esac
886 ;; 859 ;;
887 "games-"*) 860
888 type=Game 861 dev)
889 subdir="Games" 862 type="Development"
890 ;; 863 ;;
891 "net-"*) 864
892 type=Network 865 games)
893 subdir="${type}" 866 [[ -z ${path} ]] && path=${GAMES_BINDIR}
867
868 case ${catmin} in
869 action) type=ActionGame;;
870 arcade) type=ArcadeGame;;
871 board) type=BoardGame;;
872 kid) type=KidsGame;;
873 emulation) type=Emulator;;
874 puzzle) type=LogicGame;;
875 rpg) type=RolePlaying;;
876 roguelike) type=RolePlaying;;
877 simulation) type=Simulation;;
878 sports) type=SportsGame;;
879 strategy) type=StrategyGame;;
880 *) type=;;
881 esac
882 type="Game;${type}"
894 ;; 883 ;;
884
885 mail)
886 type="Network;Email"
887 ;;
888
889 media)
890 case ${catmin} in
891 gfx) type=Graphics;;
892 radio) type=Tuner;;
893 sound) type=Audio;;
894 tv) type=TV;;
895 video) type=Video;;
896 *) type=;;
897 esac
898 type="AudioVideo;${type}"
899 ;;
900
901 net)
902 case ${catmin} in
903 dialup) type=Dialup;;
904 ftp) type=FileTransfer;;
905 im) type=InstantMessaging;;
906 irc) type=IRCClient;;
907 mail) type=Email;;
908 news) type=News;;
909 nntp) type=News;;
910 p2p) type=FileTransfer;;
911 *) type=;;
912 esac
913 type="Network;${type}"
914 ;;
915
916 sci)
917 case ${catmin} in
918 astro*) type=Astronomoy;;
919 bio*) type=Biology;;
920 calc*) type=Calculator;;
921 chem*) type=Chemistry;;
922 geo*) type=Geology;;
923 math*) type=Math;;
924 *) type=;;
925 esac
926 type="Science;${type}"
927 ;;
928
929 www)
930 case ${catmin} in
931 client) type=WebBrowser;;
932 *) type=;;
933 esac
934 type="Network"
935 ;;
936
895 *) 937 *)
896 type= 938 type=
897 subdir=
898 ;; 939 ;;
899 esac 940 esac
900 fi 941 fi
942
901 local desktop="${T}/${exec}.desktop" 943 local desktop=${T}/${exec%% *}-${P}.desktop
902 944
903echo "[Desktop Entry] 945echo "[Desktop Entry]
904Encoding=UTF-8 946Encoding=UTF-8
905Version=0.9.2 947Version=0.9.2
906Name=${name} 948Name=${name}
922# make_desktop_entry(<title>, <command>) 964# make_desktop_entry(<title>, <command>)
923# title: File to execute to start the Window Manager 965# title: File to execute to start the Window Manager
924# command: Name of the Window Manager 966# command: Name of the Window Manager
925 967
926make_session_desktop() { 968make_session_desktop() {
927
928 [ -z "$1" ] && eerror "make_session_desktop: You must specify the title" && return 1 969 [[ -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 970 [[ -z $2 ]] && eerror "make_session_desktop: You must specify the command" && return 1
930 971
931 local title="${1}" 972 local title=$1
932 local command="${2}" 973 local command=$2
933 local desktop="${T}/${wm}.desktop" 974 local desktop=${T}/${wm}.desktop
934 975
935echo "[Desktop Entry] 976echo "[Desktop Entry]
936Encoding=UTF-8 977Encoding=UTF-8
937Name=${title} 978Name=${title}
938Comment=This session logs you into ${title} 979Comment=This session logs you into ${title}
940TryExec=${command} 981TryExec=${command}
941Type=Application" > "${desktop}" 982Type=Application" > "${desktop}"
942 983
943 insinto /usr/share/xsessions 984 insinto /usr/share/xsessions
944 doins "${desktop}" 985 doins "${desktop}"
945
946 return 0
947} 986}
948 987
949domenu() { 988domenu() {
950 local i 989 local i j
951 local j
952 insinto /usr/share/applications 990 insinto /usr/share/applications
953 for i in ${@} 991 for i in "$@" ; do
954 do
955 if [ -f "${i}" ]; 992 if [[ -f ${i} ]] ; then
956 then
957 doins ${i} 993 doins "${i}"
958 elif [ -d "${i}" ]; 994 elif [[ -d ${i} ]] ; then
959 then
960 for j in ${i}/*.desktop 995 for j in "${i}"/*.desktop ; do
961 do
962 doins ${j} 996 doins "${j}"
963 done 997 done
964 fi 998 fi
965 done 999 done
966} 1000}
1001newmenu() {
1002 insinto /usr/share/applications
1003 newins "$1" "$2"
1004}
967 1005
968doicon() { 1006doicon() {
969 local i 1007 local i j
970 local j
971 insinto /usr/share/pixmaps 1008 insinto /usr/share/pixmaps
972 for i in ${@} 1009 for i in "$@" ; do
973 do
974 if [ -f "${i}" ]; 1010 if [[ -f ${i} ]] ; then
975 then
976 doins ${i} 1011 doins "${i}"
977 elif [ -d "${i}" ]; 1012 elif [[ -d ${i} ]] ; then
978 then
979 for j in ${i}/*.png 1013 for j in "${i}"/*.png ; do
980 do
981 doins ${j} 1014 doins "${j}"
982 done 1015 done
983 fi 1016 fi
984 done 1017 done
1018}
1019newicon() {
1020 insinto /usr/share/pixmaps
1021 newins "$1" "$2"
985} 1022}
986 1023
987############################################################## 1024##############################################################
988# END: Handle .desktop files and menu entries # 1025# END: Handle .desktop files and menu entries #
989############################################################## 1026##############################################################
1390 local mline="" 1427 local mline=""
1391 local showedmsg=0 1428 local showedmsg=0
1392 1429
1393 for mline in $(mount | egrep -e '(iso|cdrom)' | awk '{print $3}') ; do 1430 for mline in $(mount | egrep -e '(iso|cdrom)' | awk '{print $3}') ; do
1394 [[ -d ${mline}/${dir} ]] || continue 1431 [[ -d ${mline}/${dir} ]] || continue
1395 [[ ! -z $(find ${mline}/${dir} -iname ${file} -maxdepth 1) ]] \ 1432 [[ ! -z $(find ${mline}/${dir} -maxdepth 1 -iname ${file}) ]] \
1396 && export CDROM_ROOT=${mline} 1433 && export CDROM_ROOT=${mline}
1397 done 1434 done
1398 1435
1399 if [[ -z ${CDROM_ROOT} ]] ; then 1436 if [[ -z ${CDROM_ROOT} ]] ; then
1400 echo 1437 echo
1434# directories and uses the intersection of the lists. 1471# directories and uses the intersection of the lists.
1435# 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
1436# directories and uses the union of the lists. 1473# directories and uses the union of the lists.
1437strip-linguas() { 1474strip-linguas() {
1438 local ls newls 1475 local ls newls
1439 if [ "$1" == "-i" ] || [ "$1" == "-u" ] ; then 1476 if [[ $1 == "-i" ]] || [[ $1 == "-u" ]] ; then
1440 local op="$1"; shift 1477 local op=$1; shift
1441 ls=" $(find "$1" -name '*.po' -printf '%f ') "; shift 1478 ls=" $(find "$1" -name '*.po' -printf '%f ') "; shift
1442 local d f 1479 local d f
1443 for d in "$@" ; do 1480 for d in "$@" ; do
1444 if [ "${op}" == "-u" ] ; then 1481 if [[ ${op} == "-u" ]] ; then
1445 newls="${ls}" 1482 newls=${ls}
1446 else 1483 else
1447 newls="" 1484 newls=""
1448 fi 1485 fi
1449 for f in $(find "$d" -name '*.po' -printf '%f ') ; do 1486 for f in $(find "$d" -name '*.po' -printf '%f ') ; do
1450 if [ "${op}" == "-i" ] ; then 1487 if [[ ${op} == "-i" ]] ; then
1451 [ "${ls/ ${f} /}" != "${ls}" ] && newls="${newls} ${f}" 1488 [[ ${ls/ ${f} /} != ${ls} ]] && newls="${newls} ${f}"
1452 else 1489 else
1453 [ "${ls/ ${f} /}" == "${ls}" ] && newls="${newls} ${f}" 1490 [[ ${ls/ ${f} /} == ${ls} ]] && newls="${newls} ${f}"
1454 fi 1491 fi
1455 done 1492 done
1456 ls="${newls}" 1493 ls=${newls}
1457 done 1494 done
1458 ls="${ls//.po}" 1495 ls=${ls//.po}
1459 else 1496 else
1460 ls="$@" 1497 ls=$@
1461 fi 1498 fi
1462 1499
1463 ls=" ${ls} " 1500 ls=" ${ls} "
1464 newls="" 1501 newls=""
1465 for f in ${LINGUAS} ; do 1502 for f in ${LINGUAS} ; do
1466 if [ "${ls/ ${f} /}" != "${ls}" ] ; then 1503 if [[ ${ls/ ${f} /} != ${ls} ]] ; then
1467 newls="${newls} ${f}" 1504 newls="${newls} ${f}"
1468 else 1505 else
1469 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA" 1506 ewarn "Sorry, but ${PN} does not support the ${f} LINGUA"
1470 fi 1507 fi
1471 done 1508 done
1472 if [ -z "${newls}" ] ; then 1509 if [[ -z ${newls} ]] ; then
1473 unset LINGUAS 1510 export LINGUAS=""
1474 else 1511 else
1475 export LINGUAS="${newls}" 1512 export LINGUAS=${newls:1}
1476 fi 1513 fi
1477} 1514}
1478 1515
1479# moved from kernel.eclass since they are generally useful outside of 1516# moved from kernel.eclass since they are generally useful outside of
1480# kernel.eclass -iggy (20041002) 1517# kernel.eclass -iggy (20041002)
1602 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
1603 done 1640 done
1604 eend 0 1641 eend 0
1605} 1642}
1606 1643
1607# dopamd [ file ] [ new file ] 1644# dopamd <file> [more files]
1608# 1645#
1609# Install pam auth config file in /etc/pam.d 1646# 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() { 1647dopamd() {
1615 local pamd="$1" newpamd="${2:-$1}"
1616 [[ -z "$1" ]] && die "dopamd requires at least one argument." 1648 [[ -z $1 ]] && die "dopamd requires at least one argument"
1617 1649
1618 use pam || return 0 1650 use pam || return 0
1619 1651
1620 insinto /etc/pam.d 1652 insinto /etc/pam.d
1621 # these are the default doins options, but be explicit just in case 1653 doins "$@" || die "failed to install $@"
1622 insopts -m 0644 -o root -g root
1623 newins ${pamd} ${newpamd} || die "failed to install ${newpamd}"
1624} 1654}
1655# newpamd <old name> <new name>
1656#
1657# Install pam file <old name> as <new name> in /etc/pam.d
1658newpamd() {
1659 [[ $# -ne 2 ]] && die "newpamd requires two arguements"
1660
1661 use pam || return 0
1662
1663 insinto /etc/pam.d
1664 newins "$1" "$2" || die "failed to install $1 as $2"
1665}
1666
1667# make a wrapper script ...
1668# NOTE: this was originally games_make_wrapper, but I noticed other places where
1669# this could be used, so I have moved it here and made it not games-specific
1670# -- wolf31o2
1671# $1 == wrapper name
1672# $2 == binary to run
1673# $3 == directory to chdir before running binary
1674# $4 == extra LD_LIBRARY_PATH's (make it : delimited)
1675# $5 == path for wrapper
1676make_wrapper() {
1677 local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5
1678 local tmpwrapper=$(emktemp)
1679 cat << EOF > "${tmpwrapper}"
1680#!/bin/sh
1681cd "${chdir}"
1682export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}"
1683exec ${bin} "\$@"
1684EOF
1685 chmod go+rx "${tmpwrapper}"
1686 if [ -n "${5}" ]
1687 then
1688 exeinto ${5}
1689 newexe "${tmpwrapper}" "${wrapper}"
1690 else
1691 newbin "${tmpwrapper}" "${wrapper}"
1692 fi
1693}

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

  ViewVC Help
Powered by ViewVC 1.1.20