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

Diff of /eclass/eutils.eclass

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

Revision 1.332 Revision 1.359
1# Copyright 1999-2009 Gentoo Foundation 1# Copyright 1999-2011 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.332 2010/02/17 02:22:43 reavertm Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.359 2011/07/20 05:46:46 vapier Exp $
4 4
5# @ECLASS: eutils.eclass 5# @ECLASS: eutils.eclass
6# @MAINTAINER: 6# @MAINTAINER:
7# base-system@gentoo.org 7# base-system@gentoo.org
8# @BLURB: many extra (but common) functions that are used in ebuilds 8# @BLURB: many extra (but common) functions that are used in ebuilds
52} 52}
53 53
54else 54else
55 55
56ebeep() { 56ebeep() {
57 eqawarn "QA Notice: ebeep is not defined in EAPI=3, please file a bug at http://bugs.gentoo.org" 57 ewarn "QA Notice: ebeep is not defined in EAPI=${EAPI}, please file a bug at http://bugs.gentoo.org"
58} 58}
59 59
60epause() { 60epause() {
61 eqawarn "QA Notice: epause is not defined in EAPI=3, please file a bug at http://bugs.gentoo.org" 61 ewarn "QA Notice: epause is not defined in EAPI=${EAPI}, please file a bug at http://bugs.gentoo.org"
62} 62}
63 63
64fi
65
66# @FUNCTION: eqawarn
67# @USAGE: [message]
68# @DESCRIPTION:
69# Proxy to einfo for package managers that don't provide eqawarn and use the PM
70# implementation if available.
71if ! declare -F eqawarn >/dev/null ; then
72 eqawarn() {
73 einfo "$@"
74 }
64fi 75fi
65 76
66# @FUNCTION: ecvs_clean 77# @FUNCTION: ecvs_clean
67# @USAGE: [list of dirs] 78# @USAGE: [list of dirs]
68# @DESCRIPTION: 79# @DESCRIPTION:
189# If you do not specify any options, then epatch will default to the directory 200# If you do not specify any options, then epatch will default to the directory
190# specified by EPATCH_SOURCE. 201# specified by EPATCH_SOURCE.
191# 202#
192# When processing directories, epatch will apply all patches that match: 203# When processing directories, epatch will apply all patches that match:
193# @CODE 204# @CODE
194# ${EPATCH_FORCE} == "yes" 205# if ${EPATCH_FORCE} != "yes"
195# ??_${ARCH}_foo.${EPATCH_SUFFIX} 206# ??_${ARCH}_foo.${EPATCH_SUFFIX}
196# else 207# else
197# *.${EPATCH_SUFFIX} 208# *.${EPATCH_SUFFIX}
198# @CODE 209# @CODE
199# The leading ?? are typically numbers used to force consistent patch ordering. 210# The leading ?? are typically numbers used to force consistent patch ordering.
238 local EPATCH_SUFFIX=$1 249 local EPATCH_SUFFIX=$1
239 250
240 elif [[ -d $1 ]] ; then 251 elif [[ -d $1 ]] ; then
241 # Some people like to make dirs of patches w/out suffixes (vim) 252 # Some people like to make dirs of patches w/out suffixes (vim)
242 set -- "$1"/*${EPATCH_SUFFIX:+."${EPATCH_SUFFIX}"} 253 set -- "$1"/*${EPATCH_SUFFIX:+."${EPATCH_SUFFIX}"}
254
255 elif [[ -f ${EPATCH_SOURCE}/$1 ]] ; then
256 # Re-use EPATCH_SOURCE as a search dir
257 epatch "${EPATCH_SOURCE}/$1"
258 return $?
243 259
244 else 260 else
245 # sanity check ... if it isn't a dir or file, wtf man ? 261 # sanity check ... if it isn't a dir or file, wtf man ?
246 [[ $# -ne 0 ]] && EPATCH_SOURCE=$1 262 [[ $# -ne 0 ]] && EPATCH_SOURCE=$1
247 echo 263 echo
278 # ???_arch_foo.patch 294 # ???_arch_foo.patch
279 # Else, skip this input altogether 295 # Else, skip this input altogether
280 local a=${patchname#*_} # strip the ???_ 296 local a=${patchname#*_} # strip the ???_
281 a=${a%%_*} # strip the _foo.patch 297 a=${a%%_*} # strip the _foo.patch
282 if ! [[ ${SINGLE_PATCH} == "yes" || \ 298 if ! [[ ${SINGLE_PATCH} == "yes" || \
283 ${EPATCH_FORCE} == "yes" || \ 299 ${EPATCH_FORCE} == "yes" || \
284 ${a} == all || \ 300 ${a} == all || \
285 ${a} == ${ARCH} ]] 301 ${a} == ${ARCH} ]]
286 then 302 then
287 continue 303 continue
288 fi 304 fi
289 305
290 # Let people filter things dynamically 306 # Let people filter things dynamically
346 # such patches. 362 # such patches.
347 local abs_paths=$(egrep -n '^[-+]{3} /' "${PATCH_TARGET}" | awk '$2 != "/dev/null" { print }') 363 local abs_paths=$(egrep -n '^[-+]{3} /' "${PATCH_TARGET}" | awk '$2 != "/dev/null" { print }')
348 if [[ -n ${abs_paths} ]] ; then 364 if [[ -n ${abs_paths} ]] ; then
349 count=1 365 count=1
350 printf "NOTE: skipping -p0 due to absolute paths in patch:\n%s\n" "${abs_paths}" >> "${STDERR_TARGET}" 366 printf "NOTE: skipping -p0 due to absolute paths in patch:\n%s\n" "${abs_paths}" >> "${STDERR_TARGET}"
367 fi
368 # Similar reason, but with relative paths.
369 local rel_paths=$(egrep -n '^[-+]{3} [^ ]*[.][.]/' "${PATCH_TARGET}")
370 if [[ -n ${rel_paths} ]] ; then
371 eqawarn "QA Notice: Your patch uses relative paths '../'."
372 eqawarn " In the future this will cause a failure."
373 eqawarn "${rel_paths}"
351 fi 374 fi
352 375
353 # Dynamically detect the correct -p# ... i'm lazy, so shoot me :/ 376 # Dynamically detect the correct -p# ... i'm lazy, so shoot me :/
354 while [[ ${count} -lt 5 ]] ; do 377 while [[ ${count} -lt 5 ]] ; do
355 # Generate some useful debug info ... 378 # Generate some useful debug info ...
422 EPATCH_SOURCE=${EPATCH_SOURCE} \ 445 EPATCH_SOURCE=${EPATCH_SOURCE} \
423 EPATCH_SUFFIX="patch" \ 446 EPATCH_SUFFIX="patch" \
424 EPATCH_FORCE="yes" \ 447 EPATCH_FORCE="yes" \
425 EPATCH_MULTI_MSG="Applying user patches from ${EPATCH_SOURCE} ..." \ 448 EPATCH_MULTI_MSG="Applying user patches from ${EPATCH_SOURCE} ..." \
426 epatch 449 epatch
427 break 450 return 0
428 fi 451 fi
429 done 452 done
453 return 1
430} 454}
431 455
432# @FUNCTION: emktemp 456# @FUNCTION: emktemp
433# @USAGE: [temp dir] 457# @USAGE: [temp dir]
434# @DESCRIPTION: 458# @DESCRIPTION:
478egetent() { 502egetent() {
479 case ${CHOST} in 503 case ${CHOST} in
480 *-darwin[678]) 504 *-darwin[678])
481 case "$2" in 505 case "$2" in
482 *[!0-9]*) # Non numeric 506 *[!0-9]*) # Non numeric
483 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }" 507 nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2\$/) {print \$0;exit;} }"
484 ;; 508 ;;
485 *) # Numeric 509 *) # Numeric
486 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }" 510 nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
487 ;; 511 ;;
488 esac 512 esac
706 fi 730 fi
707 ;; 731 ;;
708 732
709 *) 733 *)
710 if [[ -z $@ ]] ; then 734 if [[ -z $@ ]] ; then
711 useradd ${opts} \ 735 useradd -r ${opts} \
712 -c "added by portage for ${PN}" \ 736 -c "added by portage for ${PN}" \
713 ${euser} \ 737 ${euser} \
714 || die "enewuser failed" 738 || die "enewuser failed"
715 else 739 else
716 einfo " - Extra: $@" 740 einfo " - Extra: $@"
717 useradd ${opts} "$@" \ 741 useradd -r ${opts} "$@" \
718 ${euser} \ 742 ${euser} \
719 || die "enewuser failed" 743 || die "enewuser failed"
720 fi 744 fi
721 ;; 745 ;;
722 esac 746 esac
835 esac 859 esac
836 groupadd -g ${egid} ${egroup} || die "enewgroup failed" 860 groupadd -g ${egid} ${egroup} || die "enewgroup failed"
837 ;; 861 ;;
838 862
839 *) 863 *)
864 # We specify -r so that we get a GID in the system range from login.defs
840 groupadd ${opts} ${egroup} || die "enewgroup failed" 865 groupadd -r ${opts} ${egroup} || die "enewgroup failed"
841 ;; 866 ;;
842 esac 867 esac
843 export SANDBOX_ON="${oldsandbox}" 868 export SANDBOX_ON="${oldsandbox}"
844} 869}
845 870
856 881
857# Make a desktop file ! 882# Make a desktop file !
858# Great for making those icons in kde/gnome startmenu ! 883# Great for making those icons in kde/gnome startmenu !
859# Amaze your friends ! Get the women ! Join today ! 884# Amaze your friends ! Get the women ! Join today !
860# 885#
861# make_desktop_entry(<command>, [name], [icon], [type], [path]) 886# make_desktop_entry(<command>, [name], [icon], [type], [fields])
862# 887#
863# binary: what command does the app run with ? 888# binary: what command does the app run with ?
864# name: the name that will show up in the menu 889# name: the name that will show up in the menu
865# icon: give your little like a pretty little icon ... 890# icon: give your little like a pretty little icon ...
866# this can be relative (to /usr/share/pixmaps) or 891# this can be relative (to /usr/share/pixmaps) or
867# a full path to an icon 892# a full path to an icon
868# type: what kind of application is this ? for categories: 893# type: what kind of application is this ? for categories:
869# http://standards.freedesktop.org/menu-spec/latest/apa.html 894# http://standards.freedesktop.org/menu-spec/latest/apa.html
870# path: if your app needs to startup in a specific dir 895# fields: extra fields to append to the desktop file; a printf string
871make_desktop_entry() { 896make_desktop_entry() {
872 [[ -z $1 ]] && eerror "make_desktop_entry: You must specify the executable" && return 1 897 [[ -z $1 ]] && die "make_desktop_entry: You must specify the executable"
873 898
874 local exec=${1} 899 local exec=${1}
875 local name=${2:-${PN}} 900 local name=${2:-${PN}}
876 local icon=${3:-${PN}} 901 local icon=${3:-${PN}}
877 local type=${4} 902 local type=${4}
878 local path=${5} 903 local fields=${5}
879 904
880 if [[ -z ${type} ]] ; then 905 if [[ -z ${type} ]] ; then
881 local catmaj=${CATEGORY%%-*} 906 local catmaj=${CATEGORY%%-*}
882 local catmin=${CATEGORY##*-} 907 local catmin=${CATEGORY##*-}
883 case ${catmaj} in 908 case ${catmaj} in
884 app) 909 app)
885 case ${catmin} in 910 case ${catmin} in
886 accessibility) type=Accessibility;; 911 accessibility) type=Accessibility;;
887 admin) type=System;; 912 admin) type=System;;
888 antivirus) type=System;; 913 antivirus) type=System;;
889 arch) type=Archiving;; 914 arch) type=Archiving;;
890 backup) type=Archiving;; 915 backup) type=Archiving;;
891 cdr) type=DiscBurning;; 916 cdr) type=DiscBurning;;
892 dicts) type=Dictionary;; 917 dicts) type=Dictionary;;
893 doc) type=Documentation;; 918 doc) type=Documentation;;
894 editors) type=TextEditor;; 919 editors) type=TextEditor;;
895 emacs) type=TextEditor;; 920 emacs) type=TextEditor;;
896 emulation) type=Emulator;; 921 emulation) type=Emulator;;
897 laptop) type=HardwareSettings;; 922 laptop) type=HardwareSettings;;
898 office) type=Office;; 923 office) type=Office;;
899 pda) type=PDA;; 924 pda) type=PDA;;
900 vim) type=TextEditor;; 925 vim) type=TextEditor;;
901 xemacs) type=TextEditor;; 926 xemacs) type=TextEditor;;
902 *) type=;;
903 esac 927 esac
904 ;; 928 ;;
905 929
906 dev) 930 dev)
907 type="Development" 931 type="Development"
908 ;; 932 ;;
909 933
910 games) 934 games)
911 case ${catmin} in 935 case ${catmin} in
912 action|fps) type=ActionGame;; 936 action|fps) type=ActionGame;;
913 arcade) type=ArcadeGame;; 937 arcade) type=ArcadeGame;;
914 board) type=BoardGame;; 938 board) type=BoardGame;;
915 emulation) type=Emulator;; 939 emulation) type=Emulator;;
916 kids) type=KidsGame;; 940 kids) type=KidsGame;;
917 puzzle) type=LogicGame;; 941 puzzle) type=LogicGame;;
918 roguelike) type=RolePlaying;; 942 roguelike) type=RolePlaying;;
919 rpg) type=RolePlaying;; 943 rpg) type=RolePlaying;;
920 simulation) type=Simulation;; 944 simulation) type=Simulation;;
921 sports) type=SportsGame;; 945 sports) type=SportsGame;;
922 strategy) type=StrategyGame;; 946 strategy) type=StrategyGame;;
923 *) type=;;
924 esac 947 esac
925 type="Game;${type}" 948 type="Game;${type}"
926 ;; 949 ;;
927 950
928 gnome) 951 gnome)
937 type="Network;Email" 960 type="Network;Email"
938 ;; 961 ;;
939 962
940 media) 963 media)
941 case ${catmin} in 964 case ${catmin} in
965 gfx)
942 gfx) type=Graphics;; 966 type=Graphics
967 ;;
968 *)
969 case ${catmin} in
943 radio) type=Tuner;; 970 radio) type=Tuner;;
944 sound) type=Audio;; 971 sound) type=Audio;;
945 tv) type=TV;; 972 tv) type=TV;;
946 video) type=Video;; 973 video) type=Video;;
947 *) type=;; 974 esac
975 type="AudioVideo;${type}"
976 ;;
948 esac 977 esac
949 type="AudioVideo;${type}"
950 ;; 978 ;;
951 979
952 net) 980 net)
953 case ${catmin} in 981 case ${catmin} in
954 dialup) type=Dialup;; 982 dialup) type=Dialup;;
955 ftp) type=FileTransfer;; 983 ftp) type=FileTransfer;;
956 im) type=InstantMessaging;; 984 im) type=InstantMessaging;;
957 irc) type=IRCClient;; 985 irc) type=IRCClient;;
958 mail) type=Email;; 986 mail) type=Email;;
959 news) type=News;; 987 news) type=News;;
960 nntp) type=News;; 988 nntp) type=News;;
961 p2p) type=FileTransfer;; 989 p2p) type=FileTransfer;;
962 *) type=;; 990 voip) type=Telephony;;
963 esac 991 esac
964 type="Network;${type}" 992 type="Network;${type}"
965 ;; 993 ;;
966 994
967 sci) 995 sci)
968 case ${catmin} in 996 case ${catmin} in
969 astro*) type=Astronomy;; 997 astro*) type=Astronomy;;
970 bio*) type=Biology;; 998 bio*) type=Biology;;
971 calc*) type=Calculator;; 999 calc*) type=Calculator;;
972 chem*) type=Chemistry;; 1000 chem*) type=Chemistry;;
973 elec*) type=Electronics;; 1001 elec*) type=Electronics;;
974 geo*) type=Geology;; 1002 geo*) type=Geology;;
975 math*) type=Math;; 1003 math*) type=Math;;
976 physics) type=Physics;; 1004 physics) type=Physics;;
977 visual*) type=DataVisualization;; 1005 visual*) type=DataVisualization;;
978 *) type=;;
979 esac 1006 esac
980 type="Science;${type}" 1007 type="Education;Science;${type}"
981 ;; 1008 ;;
982 1009
983 sys) 1010 sys)
984 type="System" 1011 type="System"
985 ;; 1012 ;;
986 1013
987 www) 1014 www)
988 case ${catmin} in 1015 case ${catmin} in
989 client) type=WebBrowser;; 1016 client) type=WebBrowser;;
990 *) type=;;
991 esac 1017 esac
992 type="Network" 1018 type="Network;${type}"
993 ;; 1019 ;;
994 1020
995 *) 1021 *)
996 type= 1022 type=
997 ;; 1023 ;;
1002 else 1028 else
1003 local desktop_name="${PN}-${SLOT}" 1029 local desktop_name="${PN}-${SLOT}"
1004 fi 1030 fi
1005 local desktop="${T}/$(echo ${exec} | sed 's:[[:space:]/:]:_:g')-${desktop_name}.desktop" 1031 local desktop="${T}/$(echo ${exec} | sed 's:[[:space:]/:]:_:g')-${desktop_name}.desktop"
1006 #local desktop=${T}/${exec%% *:-${desktop_name}}.desktop 1032 #local desktop=${T}/${exec%% *:-${desktop_name}}.desktop
1033
1034 # Don't append another ";" when a valid category value is provided.
1035 type=${type%;}${type:+;}
1036
1037 eshopts_push -s extglob
1038 if [[ -n ${icon} && ${icon} != /* ]] && [[ ${icon} == *.xpm || ${icon} == *.png || ${icon} == *.svg ]]; then
1039 ewarn "As described in the Icon Theme Specification, icon file extensions are not"
1040 ewarn "allowed in .desktop files if the value is not an absolute path."
1041 icon=${icon%.@(xpm|png|svg)}
1042 fi
1043 eshopts_pop
1007 1044
1008 cat <<-EOF > "${desktop}" 1045 cat <<-EOF > "${desktop}"
1009 [Desktop Entry] 1046 [Desktop Entry]
1010 Name=${name} 1047 Name=${name}
1011 Type=Application 1048 Type=Application
1012 Comment=${DESCRIPTION} 1049 Comment=${DESCRIPTION}
1013 Exec=${exec} 1050 Exec=${exec}
1014 TryExec=${exec%% *} 1051 TryExec=${exec%% *}
1015 Icon=${icon} 1052 Icon=${icon}
1016 Categories=${type}; 1053 Categories=${type}
1017 EOF 1054 EOF
1018 1055
1019 [[ ${path} ]] && echo "Path=${path}" >> "${desktop}" 1056 if [[ ${fields:-=} != *=* ]] ; then
1057 # 5th arg used to be value to Path=
1058 ewarn "make_desktop_entry: update your 5th arg to read Path=${fields}"
1059 fields="Path=${fields}"
1060 fi
1061 [[ -n ${fields} ]] && printf '%b\n' "${fields}" >> "${desktop}"
1020 1062
1021 ( 1063 (
1022 # wrap the env here so that the 'insinto' call 1064 # wrap the env here so that the 'insinto' call
1023 # doesn't corrupt the env of the caller 1065 # doesn't corrupt the env of the caller
1024 insinto /usr/share/applications 1066 insinto /usr/share/applications
1025 doins "${desktop}" 1067 doins "${desktop}"
1026 ) 1068 ) || die "installing desktop file failed"
1027} 1069}
1028 1070
1029# @FUNCTION: validate_desktop_entries 1071# @FUNCTION: validate_desktop_entries
1030# @USAGE: [directories] 1072# @USAGE: [directories]
1031# @MAINTAINER: 1073# @MAINTAINER:
1310 [[ -z ${src} ]] && die "Could not locate source for '${src_input}'" 1352 [[ -z ${src} ]] && die "Could not locate source for '${src_input}'"
1311 1353
1312 local shrtsrc=$(basename "${src}") 1354 local shrtsrc=$(basename "${src}")
1313 echo ">>> Unpacking ${shrtsrc} to ${PWD}" 1355 echo ">>> Unpacking ${shrtsrc} to ${PWD}"
1314 if [[ -z ${skip} ]] ; then 1356 if [[ -z ${skip} ]] ; then
1315 local ver=$(grep -a '#.*Makeself' "${src}" | awk '{print $NF}') 1357 local ver=$(grep -m1 -a '#.*Makeself' "${src}" | awk '{print $NF}')
1316 local skip=0 1358 local skip=0
1317 exe=tail 1359 exe=tail
1318 case ${ver} in 1360 case ${ver} in
1319 1.5.*|1.6.0-nv) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same 1361 1.5.*|1.6.0-nv) # tested 1.5.{3,4,5} ... guessing 1.5.x series is same
1320 skip=$(grep -a ^skip= "${src}" | cut -d= -f2) 1362 skip=$(grep -a ^skip= "${src}" | cut -d= -f2)
1322 2.0|2.0.1) 1364 2.0|2.0.1)
1323 skip=$(grep -a ^$'\t'tail "${src}" | awk '{print $2}' | cut -b2-) 1365 skip=$(grep -a ^$'\t'tail "${src}" | awk '{print $2}' | cut -b2-)
1324 ;; 1366 ;;
1325 2.1.1) 1367 2.1.1)
1326 skip=$(grep -a ^offset= "${src}" | awk '{print $2}' | cut -b2-) 1368 skip=$(grep -a ^offset= "${src}" | awk '{print $2}' | cut -b2-)
1327 let skip="skip + 1" 1369 (( skip++ ))
1328 ;; 1370 ;;
1329 2.1.2) 1371 2.1.2)
1330 skip=$(grep -a ^offset= "${src}" | awk '{print $3}' | head -n 1) 1372 skip=$(grep -a ^offset= "${src}" | awk '{print $3}' | head -n 1)
1331 let skip="skip + 1" 1373 (( skip++ ))
1332 ;; 1374 ;;
1333 2.1.3) 1375 2.1.3)
1334 skip=`grep -a ^offset= "${src}" | awk '{print $3}'` 1376 skip=`grep -a ^offset= "${src}" | awk '{print $3}'`
1335 let skip="skip + 1" 1377 (( skip++ ))
1336 ;; 1378 ;;
1337 2.1.4|2.1.5) 1379 2.1.4|2.1.5)
1338 skip=$(grep -a offset=.*head.*wc "${src}" | awk '{print $3}' | head -n 1) 1380 skip=$(grep -a offset=.*head.*wc "${src}" | awk '{print $3}' | head -n 1)
1339 skip=$(head -n ${skip} "${src}" | wc -c) 1381 skip=$(head -n ${skip} "${src}" | wc -c)
1340 exe="dd" 1382 exe="dd"
1349 esac 1391 esac
1350 debug-print "Detected Makeself version ${ver} ... using ${skip} as offset" 1392 debug-print "Detected Makeself version ${ver} ... using ${skip} as offset"
1351 fi 1393 fi
1352 case ${exe} in 1394 case ${exe} in
1353 tail) exe="tail -n +${skip} '${src}'";; 1395 tail) exe="tail -n +${skip} '${src}'";;
1354 dd) exe="dd ibs=${skip} skip=1 obs=1024 conv=sync if='${src}'";; 1396 dd) exe="dd ibs=${skip} skip=1 if='${src}'";;
1355 *) die "makeself cant handle exe '${exe}'" 1397 *) die "makeself cant handle exe '${exe}'"
1356 esac 1398 esac
1357 1399
1358 # lets grab the first few bytes of the file to figure out what kind of archive it is 1400 # lets grab the first few bytes of the file to figure out what kind of archive it is
1359 local tmpfile=$(emktemp) 1401 local filetype tmpfile=$(emktemp)
1360 eval ${exe} 2>/dev/null | head -c 512 > "${tmpfile}" 1402 eval ${exe} 2>/dev/null | head -c 512 > "${tmpfile}"
1361 local filetype=$(file -b "${tmpfile}") 1403 filetype=$(file -b "${tmpfile}") || die
1362 case ${filetype} in 1404 case ${filetype} in
1363 *tar\ archive*) 1405 *tar\ archive*)
1364 eval ${exe} | tar --no-same-owner -xf - 1406 eval ${exe} | tar --no-same-owner -xf -
1365 ;; 1407 ;;
1366 bzip2*) 1408 bzip2*)
1492 export CDROM_ROOT=${CD_ROOT_1:-${CD_ROOT}} 1534 export CDROM_ROOT=${CD_ROOT_1:-${CD_ROOT}}
1493 einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}" 1535 einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}"
1494 export CDROM_SET=-1 1536 export CDROM_SET=-1
1495 for f in ${CDROM_CHECK_1//:/ } ; do 1537 for f in ${CDROM_CHECK_1//:/ } ; do
1496 ((++CDROM_SET)) 1538 ((++CDROM_SET))
1497 [[ -e ${CD_ROOT}/${f} ]] && break 1539 [[ -e ${CDROM_ROOT}/${f} ]] && break
1498 done 1540 done
1499 export CDROM_MATCH=${f} 1541 export CDROM_MATCH=${f}
1500 return 1542 return
1501 fi 1543 fi
1502 1544
1676 else 1718 else
1677 newls="" 1719 newls=""
1678 fi 1720 fi
1679 for f in $(find "$d" -name '*.po' -exec basename {} .po ';') ; do 1721 for f in $(find "$d" -name '*.po' -exec basename {} .po ';') ; do
1680 if [[ ${op} == "-i" ]] ; then 1722 if [[ ${op} == "-i" ]] ; then
1681 hasq ${f} ${ls} && newls="${newls} ${f}" 1723 has ${f} ${ls} && newls="${newls} ${f}"
1682 else 1724 else
1683 hasq ${f} ${ls} || newls="${newls} ${f}" 1725 has ${f} ${ls} || newls="${newls} ${f}"
1684 fi 1726 fi
1685 done 1727 done
1686 ls=${newls} 1728 ls=${newls}
1687 done 1729 done
1688 else 1730 else
1690 fi 1732 fi
1691 1733
1692 nols="" 1734 nols=""
1693 newls="" 1735 newls=""
1694 for f in ${LINGUAS} ; do 1736 for f in ${LINGUAS} ; do
1695 if hasq ${f} ${ls} ; then 1737 if has ${f} ${ls} ; then
1696 newls="${newls} ${f}" 1738 newls="${newls} ${f}"
1697 else 1739 else
1698 nols="${nols} ${f}" 1740 nols="${nols} ${f}"
1699 fi 1741 fi
1700 done 1742 done
1755 ewarn "the libraries are not being removed. You need to run revdep-rebuild" 1797 ewarn "the libraries are not being removed. You need to run revdep-rebuild"
1756 ewarn "in order to remove these old dependencies. If you do not have this" 1798 ewarn "in order to remove these old dependencies. If you do not have this"
1757 ewarn "helper program, simply emerge the 'gentoolkit' package." 1799 ewarn "helper program, simply emerge the 'gentoolkit' package."
1758 ewarn 1800 ewarn
1759 fi 1801 fi
1802 # temp hack for #348634 #357225
1803 [[ ${PN} == "mpfr" ]] && lib=${lib##*/}
1760 ewarn " # revdep-rebuild --library ${lib##*/}" 1804 ewarn " # revdep-rebuild --library '${lib}'"
1761 done 1805 done
1762 if [[ ${notice} -eq 1 ]] ; then 1806 if [[ ${notice} -eq 1 ]] ; then
1763 ewarn 1807 ewarn
1764 ewarn "Once you've finished running revdep-rebuild, it should be safe to" 1808 ewarn "Once you've finished running revdep-rebuild, it should be safe to"
1765 ewarn "delete the old libraries. Here is a copy & paste for the lazy:" 1809 ewarn "delete the old libraries. Here is a copy & paste for the lazy:"
1911 else 1955 else
1912 newbin "${tmpwrapper}" "${wrapper}" || die 1956 newbin "${tmpwrapper}" "${wrapper}" || die
1913 fi 1957 fi
1914} 1958}
1915 1959
1916# @FUNCTION: prepalldocs 1960# @FUNCTION: path_exists
1917# @USAGE: 1961# @USAGE: [-a|-o] <paths>
1918# @DESCRIPTION: 1962# @DESCRIPTION:
1919# Compress files in /usr/share/doc which are not already 1963# Check if the specified paths exist. Works for all types of paths
1920# compressed, excluding /usr/share/doc/${PF}/html. 1964# (files/dirs/etc...). The -a and -o flags control the requirements
1921# Uses the ecompressdir to do the compression. 1965# of the paths. They correspond to "and" and "or" logic. So the -a
1922# 2009-02-18 by betelgeuse: 1966# flag means all the paths must exist while the -o flag means at least
1923# Commented because ecompressdir is even more internal to 1967# one of the paths must exist. The default behavior is "and". If no
1924# Portage than prepalldocs (it's not even mentioned in man 5 1968# paths are specified, then the return value is "false".
1925# ebuild). Please submit a better version for review to gentoo-dev 1969path_exists() {
1926# if you want prepalldocs here. 1970 local opt=$1
1927#prepalldocs() { 1971 [[ ${opt} == -[ao] ]] && shift || opt="-a"
1928# if [[ -n $1 ]] ; then
1929# ewarn "prepalldocs: invalid usage; takes no arguments"
1930# fi
1931 1972
1932# cd "${D}" 1973 # no paths -> return false
1933# [[ -d usr/share/doc ]] || return 0 1974 # same behavior as: [[ -e "" ]]
1975 [[ $# -eq 0 ]] && return 1
1934 1976
1935# find usr/share/doc -exec gzip {} + 1977 local p r=0
1936# ecompressdir --ignore /usr/share/doc/${PF}/html 1978 for p in "$@" ; do
1937# ecompressdir --queue /usr/share/doc 1979 [[ -e ${p} ]]
1938#} 1980 : $(( r += $? ))
1981 done
1982
1983 case ${opt} in
1984 -a) return $(( r != 0 )) ;;
1985 -o) return $(( r == $# )) ;;
1986 esac
1987}

Legend:
Removed from v.1.332  
changed lines
  Added in v.1.359

  ViewVC Help
Powered by ViewVC 1.1.20