| 1 | # Copyright 1999-2006 Gentoo Foundation |
1 | # Copyright 1999-2006 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.267 2007/01/09 15:47:47 vapier Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.279 2007/04/25 09:14:35 carlo Exp $ |
| 4 | # |
4 | # |
| 5 | # This eclass is for general purpose functions that most ebuilds |
5 | # This eclass is for general purpose functions that most ebuilds |
| 6 | # have to implement themselves. |
6 | # have to implement themselves. |
| 7 | # |
7 | # |
| 8 | # NB: If you add anything, please comment it! |
8 | # NB: If you add anything, please comment it! |
| … | |
… | |
| 253 | einfo "${EPATCH_SINGLE_MSG}" |
253 | einfo "${EPATCH_SINGLE_MSG}" |
| 254 | else |
254 | else |
| 255 | einfo "Applying ${patchname} ..." |
255 | einfo "Applying ${patchname} ..." |
| 256 | fi |
256 | fi |
| 257 | else |
257 | else |
| 258 | einfo " ${patchname} ..." |
258 | einfo " ${patchname} ..." |
| 259 | fi |
259 | fi |
| 260 | |
260 | |
| 261 | echo "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} |
261 | echo "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} |
| 262 | echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} |
262 | echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} |
| 263 | |
263 | |
| … | |
… | |
| 892 | if [ "${SLOT}" == "0" ] ; then |
892 | if [ "${SLOT}" == "0" ] ; then |
| 893 | local desktop_name="${PN}" |
893 | local desktop_name="${PN}" |
| 894 | else |
894 | else |
| 895 | local desktop_name="${PN}-${SLOT}" |
895 | local desktop_name="${PN}-${SLOT}" |
| 896 | fi |
896 | fi |
| 897 | local desktop=${T}/${exec%% *}-${desktop_name}.desktop |
897 | local desktop="${T}/$(echo ${exec} | sed 's:[[:space:]/:]:_:g')-${desktop_name}.desktop" |
| 898 | # local desktop=${T}/${exec%% *:-${desktop_name}}.desktop |
898 | #local desktop=${T}/${exec%% *:-${desktop_name}}.desktop |
| 899 | |
899 | |
|
|
900 | cat <<-EOF > "${desktop}" |
| 900 | echo "[Desktop Entry] |
901 | [Desktop Entry] |
| 901 | Encoding=UTF-8 |
902 | Encoding=UTF-8 |
| 902 | Version=0.9.2 |
903 | Version=0.9.2 |
| 903 | Name=${name} |
904 | Name=${name} |
| 904 | Type=Application |
905 | Type=Application |
| 905 | Comment=${DESCRIPTION} |
906 | Comment=${DESCRIPTION} |
| 906 | Exec=${exec} |
907 | Exec=${exec} |
| 907 | TryExec=${exec%% *} |
908 | TryExec=${exec%% *} |
| 908 | Path=${path} |
909 | Path=${path} |
| 909 | Icon=${icon} |
910 | Icon=${icon} |
| 910 | Categories=Application;${type};" > "${desktop}" |
911 | Categories=Application;${type}; |
|
|
912 | EOF |
| 911 | |
913 | |
| 912 | ( |
914 | ( |
| 913 | # wrap the env here so that the 'insinto' call |
915 | # wrap the env here so that the 'insinto' call |
| 914 | # doesn't corrupt the env of the caller |
916 | # doesn't corrupt the env of the caller |
| 915 | insinto /usr/share/applications |
917 | insinto /usr/share/applications |
| 916 | doins "${desktop}" |
918 | doins "${desktop}" |
| 917 | ) |
919 | ) |
| 918 | } |
920 | } |
| 919 | |
921 | |
|
|
922 | |
|
|
923 | # Validate desktop entries using desktop-file-utils |
|
|
924 | # Carsten Lohrke <carlo@gentoo.org> |
|
|
925 | # |
|
|
926 | # Usage: validate_desktop_entries [directory ...] |
|
|
927 | |
|
|
928 | validate_desktop_entries() { |
|
|
929 | if [[ -x /usr/bin/desktop-file-validate ]] ; then |
|
|
930 | einfo "Checking desktop entry validity" |
|
|
931 | local directories="" |
|
|
932 | for d in /usr/share/applications $@ ; do |
|
|
933 | [[ -d ${D}${d} ]] && directories="${directories} ${D}${d}" |
|
|
934 | done |
|
|
935 | if [[ -n ${directories} ]] ; then |
|
|
936 | for FILE in $(find ${directories} -name "*\.desktop" \ |
|
|
937 | -not -path '*.hidden*' | sort -u 2>/dev/null) |
|
|
938 | do |
|
|
939 | local temp=$(desktop-file-validate ${FILE} | grep -v "warning:" | \ |
|
|
940 | sed -e "s|error: ||" -e "s|${FILE}:|--|g" ) |
|
|
941 | [[ -n $temp ]] && elog ${temp/--/${FILE/${D}/}:} |
|
|
942 | done |
|
|
943 | fi |
|
|
944 | echo "" |
|
|
945 | else |
|
|
946 | einfo "Passing desktop entry validity check. Install dev-util/desktop-file-utils, if you want to help to improve Gentoo." |
|
|
947 | fi |
|
|
948 | } |
|
|
949 | |
|
|
950 | |
| 920 | # Make a GDM/KDM Session file |
951 | # Make a GDM/KDM Session file |
| 921 | # |
952 | # |
| 922 | # make_session_desktop(<title>, <command>) |
953 | # make_session_desktop(<title>, <command>) |
| 923 | # title: File to execute to start the Window Manager |
954 | # title: File to execute to start the Window Manager |
| 924 | # command: Name of the Window Manager |
955 | # command: Name of the Window Manager |
| … | |
… | |
| 929 | |
960 | |
| 930 | local title=$1 |
961 | local title=$1 |
| 931 | local command=$2 |
962 | local command=$2 |
| 932 | local desktop=${T}/${wm}.desktop |
963 | local desktop=${T}/${wm}.desktop |
| 933 | |
964 | |
|
|
965 | cat <<-EOF > "${desktop}" |
| 934 | echo "[Desktop Entry] |
966 | [Desktop Entry] |
| 935 | Encoding=UTF-8 |
967 | Encoding=UTF-8 |
| 936 | Name=${title} |
968 | Name=${title} |
| 937 | Comment=This session logs you into ${title} |
969 | Comment=This session logs you into ${title} |
| 938 | Exec=${command} |
970 | Exec=${command} |
| 939 | TryExec=${command} |
971 | TryExec=${command} |
| 940 | Type=Application" > "${desktop}" |
972 | Type=Application |
|
|
973 | EOF |
| 941 | |
974 | |
|
|
975 | ( |
|
|
976 | # wrap the env here so that the 'insinto' call |
|
|
977 | # doesn't corrupt the env of the caller |
| 942 | insinto /usr/share/xsessions |
978 | insinto /usr/share/xsessions |
| 943 | doins "${desktop}" |
979 | doins "${desktop}" |
|
|
980 | ) |
| 944 | } |
981 | } |
| 945 | |
982 | |
| 946 | domenu() { |
983 | domenu() { |
|
|
984 | ( |
|
|
985 | # wrap the env here so that the 'insinto' call |
|
|
986 | # doesn't corrupt the env of the caller |
| 947 | local i j |
987 | local i j ret=0 |
| 948 | insinto /usr/share/applications |
988 | insinto /usr/share/applications |
| 949 | for i in "$@" ; do |
989 | for i in "$@" ; do |
| 950 | if [[ -f ${i} ]] ; then |
990 | if [[ -f ${i} ]] ; then |
| 951 | doins "${i}" |
991 | doins "${i}" |
|
|
992 | ((ret+=$?)) |
| 952 | elif [[ -d ${i} ]] ; then |
993 | elif [[ -d ${i} ]] ; then |
| 953 | for j in "${i}"/*.desktop ; do |
994 | for j in "${i}"/*.desktop ; do |
| 954 | doins "${j}" |
995 | doins "${j}" |
|
|
996 | ((ret+=$?)) |
| 955 | done |
997 | done |
| 956 | fi |
998 | fi |
| 957 | done |
999 | done |
|
|
1000 | exit ${ret} |
|
|
1001 | ) |
| 958 | } |
1002 | } |
| 959 | newmenu() { |
1003 | newmenu() { |
|
|
1004 | ( |
|
|
1005 | # wrap the env here so that the 'insinto' call |
|
|
1006 | # doesn't corrupt the env of the caller |
| 960 | insinto /usr/share/applications |
1007 | insinto /usr/share/applications |
| 961 | newins "$1" "$2" |
1008 | newins "$@" |
|
|
1009 | ) |
| 962 | } |
1010 | } |
| 963 | |
1011 | |
| 964 | doicon() { |
1012 | doicon() { |
|
|
1013 | ( |
|
|
1014 | # wrap the env here so that the 'insinto' call |
|
|
1015 | # doesn't corrupt the env of the caller |
| 965 | local i j |
1016 | local i j ret |
| 966 | insinto /usr/share/pixmaps |
1017 | insinto /usr/share/pixmaps |
| 967 | for i in "$@" ; do |
1018 | for i in "$@" ; do |
| 968 | if [[ -f ${i} ]] ; then |
1019 | if [[ -f ${i} ]] ; then |
| 969 | doins "${i}" |
1020 | doins "${i}" |
|
|
1021 | ((ret+=$?)) |
| 970 | elif [[ -d ${i} ]] ; then |
1022 | elif [[ -d ${i} ]] ; then |
| 971 | for j in "${i}"/*.png ; do |
1023 | for j in "${i}"/*.png ; do |
| 972 | doins "${j}" |
1024 | doins "${j}" |
|
|
1025 | ((ret+=$?)) |
| 973 | done |
1026 | done |
| 974 | fi |
1027 | fi |
| 975 | done |
1028 | done |
|
|
1029 | exit ${ret} |
|
|
1030 | ) |
| 976 | } |
1031 | } |
| 977 | newicon() { |
1032 | newicon() { |
|
|
1033 | ( |
|
|
1034 | # wrap the env here so that the 'insinto' call |
|
|
1035 | # doesn't corrupt the env of the caller |
| 978 | insinto /usr/share/pixmaps |
1036 | insinto /usr/share/pixmaps |
| 979 | newins "$1" "$2" |
1037 | newins "$@" |
|
|
1038 | ) |
| 980 | } |
1039 | } |
| 981 | |
1040 | |
| 982 | ############################################################## |
1041 | ############################################################## |
| 983 | # END: Handle .desktop files and menu entries # |
1042 | # END: Handle .desktop files and menu entries # |
| 984 | ############################################################## |
1043 | ############################################################## |
| … | |
… | |
| 1021 | # lseek |
1080 | # lseek |
| 1022 | # root@vapier 0 pdv_unpack # strace -elseek ./hldsupdatetool.bin |
1081 | # root@vapier 0 pdv_unpack # strace -elseek ./hldsupdatetool.bin |
| 1023 | # lseek(3, -4, SEEK_END) = 2981250 |
1082 | # lseek(3, -4, SEEK_END) = 2981250 |
| 1024 | # thus we would pass in the value of '4' as the second parameter. |
1083 | # thus we would pass in the value of '4' as the second parameter. |
| 1025 | unpack_pdv() { |
1084 | unpack_pdv() { |
| 1026 | local src=$(find_unpackable_file $1) |
1085 | local src=$(find_unpackable_file "$1") |
| 1027 | local sizeoff_t=$2 |
1086 | local sizeoff_t=$2 |
| 1028 | |
1087 | |
| 1029 | [[ -z ${src} ]] && die "Could not locate source for '$1'" |
1088 | [[ -z ${src} ]] && die "Could not locate source for '$1'" |
| 1030 | [[ -z ${sizeoff_t} ]] && die "No idea what off_t size was used for this pdv :(" |
1089 | [[ -z ${sizeoff_t} ]] && die "No idea what off_t size was used for this pdv :(" |
| 1031 | |
1090 | |
| 1032 | local shrtsrc=$(basename "${src}") |
1091 | local shrtsrc=$(basename "${src}") |
| 1033 | echo ">>> Unpacking ${shrtsrc} to ${PWD}" |
1092 | echo ">>> Unpacking ${shrtsrc} to ${PWD}" |
| 1034 | local metaskip=`tail -c ${sizeoff_t} ${src} | hexdump -e \"%i\"` |
1093 | local metaskip=$(tail -c ${sizeoff_t} "${src}" | hexdump -e \"%i\") |
| 1035 | local tailskip=`tail -c $((${sizeoff_t}*2)) ${src} | head -c ${sizeoff_t} | hexdump -e \"%i\"` |
1094 | local tailskip=$(tail -c $((${sizeoff_t}*2)) "${src}" | head -c ${sizeoff_t} | hexdump -e \"%i\") |
| 1036 | |
1095 | |
| 1037 | # grab metadata for debug reasons |
1096 | # grab metadata for debug reasons |
| 1038 | local metafile="$(emktemp)" |
1097 | local metafile=$(emktemp) |
| 1039 | tail -c +$((${metaskip}+1)) ${src} > ${metafile} |
1098 | tail -c +$((${metaskip}+1)) "${src}" > "${metafile}" |
| 1040 | |
1099 | |
| 1041 | # rip out the final file name from the metadata |
1100 | # rip out the final file name from the metadata |
| 1042 | local datafile="`tail -c +$((${metaskip}+1)) ${src} | strings | head -n 1`" |
1101 | local datafile=$(tail -c +$((${metaskip}+1)) "${src}" | strings | head -n 1) |
| 1043 | datafile="`basename ${datafile}`" |
1102 | datafile=$(basename "${datafile}") |
| 1044 | |
1103 | |
| 1045 | # now lets uncompress/untar the file if need be |
1104 | # now lets uncompress/untar the file if need be |
| 1046 | local tmpfile="$(emktemp)" |
1105 | local tmpfile=$(emktemp) |
| 1047 | tail -c +$((${tailskip}+1)) ${src} 2>/dev/null | head -c 512 > ${tmpfile} |
1106 | tail -c +$((${tailskip}+1)) ${src} 2>/dev/null | head -c 512 > ${tmpfile} |
| 1048 | |
1107 | |
| 1049 | local iscompressed="`file -b ${tmpfile}`" |
1108 | local iscompressed=$(file -b "${tmpfile}") |
| 1050 | if [ "${iscompressed:0:8}" == "compress" ] ; then |
1109 | if [[ ${iscompressed:0:8} == "compress" ]] ; then |
| 1051 | iscompressed=1 |
1110 | iscompressed=1 |
| 1052 | mv ${tmpfile}{,.Z} |
1111 | mv ${tmpfile}{,.Z} |
| 1053 | gunzip ${tmpfile} |
1112 | gunzip ${tmpfile} |
| 1054 | else |
1113 | else |
| 1055 | iscompressed=0 |
1114 | iscompressed=0 |
| 1056 | fi |
1115 | fi |
| 1057 | local istar="`file -b ${tmpfile}`" |
1116 | local istar=$(file -b "${tmpfile}") |
| 1058 | if [ "${istar:0:9}" == "POSIX tar" ] ; then |
1117 | if [[ ${istar:0:9} == "POSIX tar" ]] ; then |
| 1059 | istar=1 |
1118 | istar=1 |
| 1060 | else |
1119 | else |
| 1061 | istar=0 |
1120 | istar=0 |
| 1062 | fi |
1121 | fi |
| 1063 | |
1122 | |
| … | |
… | |
| 1155 | dd) exe="dd ibs=${skip} skip=1 obs=1024 conv=sync if='${src}'";; |
1214 | dd) exe="dd ibs=${skip} skip=1 obs=1024 conv=sync if='${src}'";; |
| 1156 | *) die "makeself cant handle exe '${exe}'" |
1215 | *) die "makeself cant handle exe '${exe}'" |
| 1157 | esac |
1216 | esac |
| 1158 | |
1217 | |
| 1159 | # lets grab the first few bytes of the file to figure out what kind of archive it is |
1218 | # lets grab the first few bytes of the file to figure out what kind of archive it is |
| 1160 | local tmpfile="$(emktemp)" |
1219 | local tmpfile=$(emktemp) |
| 1161 | eval ${exe} 2>/dev/null | head -c 512 > "${tmpfile}" |
1220 | eval ${exe} 2>/dev/null | head -c 512 > "${tmpfile}" |
| 1162 | local filetype="$(file -b "${tmpfile}")" |
1221 | local filetype=$(file -b "${tmpfile}") |
| 1163 | case ${filetype} in |
1222 | case ${filetype} in |
| 1164 | *tar\ archive*) |
1223 | *tar\ archive*) |
| 1165 | eval ${exe} | tar --no-same-owner -xf - |
1224 | eval ${exe} | tar --no-same-owner -xf - |
| 1166 | ;; |
1225 | ;; |
| 1167 | bzip2*) |
1226 | bzip2*) |
| … | |
… | |
| 1212 | return 0 |
1271 | return 0 |
| 1213 | fi |
1272 | fi |
| 1214 | done |
1273 | done |
| 1215 | set +o noglob; set -$shopts #reset old shell opts |
1274 | set +o noglob; set -$shopts #reset old shell opts |
| 1216 | |
1275 | |
| 1217 | local licmsg="$(emktemp)" |
1276 | local licmsg=$(emktemp) |
| 1218 | cat << EOF > ${licmsg} |
1277 | cat <<-EOF > ${licmsg} |
| 1219 | ********************************************************** |
1278 | ********************************************************** |
| 1220 | The following license outlines the terms of use of this |
1279 | The following license outlines the terms of use of this |
| 1221 | package. You MUST accept this license for installation to |
1280 | package. You MUST accept this license for installation to |
| 1222 | continue. When you are done viewing, hit 'q'. If you |
1281 | continue. When you are done viewing, hit 'q'. If you |
| 1223 | CTRL+C out of this, the install will not run! |
1282 | CTRL+C out of this, the install will not run! |
| 1224 | ********************************************************** |
1283 | ********************************************************** |
| 1225 | |
1284 | |
| 1226 | EOF |
1285 | EOF |
| 1227 | cat ${lic} >> ${licmsg} |
1286 | cat ${lic} >> ${licmsg} |
| 1228 | ${PAGER:-less} ${licmsg} || die "Could not execute pager (${PAGER}) to accept ${lic}" |
1287 | ${PAGER:-less} ${licmsg} || die "Could not execute pager (${PAGER}) to accept ${lic}" |
| 1229 | einfon "Do you accept the terms of this license (${l})? [yes/no] " |
1288 | einfon "Do you accept the terms of this license (${l})? [yes/no] " |
| 1230 | read alic |
1289 | read alic |
| 1231 | case ${alic} in |
1290 | case ${alic} in |
| … | |
… | |
| 1549 | # preserve_old_lib_notify /usr/$(get_libdir)/libogg.so.0 |
1608 | # preserve_old_lib_notify /usr/$(get_libdir)/libogg.so.0 |
| 1550 | # ... |
1609 | # ... |
| 1551 | # } |
1610 | # } |
| 1552 | |
1611 | |
| 1553 | preserve_old_lib() { |
1612 | preserve_old_lib() { |
| 1554 | if [[ ${EBUILD_PHASE} != "pkg_preinst" ]] ; then |
1613 | if [[ ${EBUILD_PHASE} != "preinst" ]] ; then |
| 1555 | eerror "preserve_old_lib() must be called from pkg_preinst() only" |
1614 | eerror "preserve_old_lib() must be called from pkg_preinst() only" |
| 1556 | # die "Invalid preserve_old_lib() usage" |
1615 | die "Invalid preserve_old_lib() usage" |
| 1557 | fi |
1616 | fi |
| 1558 | [[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve]" |
1617 | [[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve]" |
| 1559 | |
1618 | |
| 1560 | local lib dir |
1619 | local lib dir |
| 1561 | for lib in "$@" ; do |
1620 | for lib in "$@" ; do |
| … | |
… | |
| 1566 | touch "${D}"/${lib} |
1625 | touch "${D}"/${lib} |
| 1567 | done |
1626 | done |
| 1568 | } |
1627 | } |
| 1569 | |
1628 | |
| 1570 | preserve_old_lib_notify() { |
1629 | preserve_old_lib_notify() { |
| 1571 | if [[ ${EBUILD_PHASE} != "pkg_postinst" ]] ; then |
1630 | if [[ ${EBUILD_PHASE} != "postinst" ]] ; then |
| 1572 | eerror "preserve_old_lib_notify() must be called from pkg_postinst() only" |
1631 | eerror "preserve_old_lib_notify() must be called from pkg_postinst() only" |
| 1573 | # die "Invalid preserve_old_lib_notify() usage" |
1632 | die "Invalid preserve_old_lib_notify() usage" |
| 1574 | fi |
1633 | fi |
| 1575 | |
1634 | |
| 1576 | local lib notice=0 |
1635 | local lib notice=0 |
| 1577 | for lib in "$@" ; do |
1636 | for lib in "$@" ; do |
| 1578 | [[ -e ${ROOT}/${lib} ]] || continue |
1637 | [[ -e ${ROOT}/${lib} ]] || continue |
| … | |
… | |
| 1590 | } |
1649 | } |
| 1591 | |
1650 | |
| 1592 | # Hack for people to figure out if a package was built with |
1651 | # Hack for people to figure out if a package was built with |
| 1593 | # certain USE flags |
1652 | # certain USE flags |
| 1594 | # |
1653 | # |
| 1595 | # Usage: built_with_use [-a|-o] <DEPEND ATOM> <List of USE flags> |
1654 | # Usage: built_with_use [--missing <action>] [-a|-o] <DEPEND ATOM> <List of USE flags> |
| 1596 | # ex: built_with_use xchat gtk2 |
1655 | # ex: built_with_use xchat gtk2 |
| 1597 | # |
1656 | # |
| 1598 | # Flags: -a all USE flags should be utilized |
1657 | # Flags: -a all USE flags should be utilized |
| 1599 | # -o at least one USE flag should be utilized |
1658 | # -o at least one USE flag should be utilized |
|
|
1659 | # --missing peform the specified action if the flag is not in IUSE (true/false/die) |
|
|
1660 | # --hidden USE flag we're checking is hidden expanded so it isnt in IUSE |
| 1600 | # Note: the default flag is '-a' |
1661 | # Note: the default flag is '-a' |
| 1601 | built_with_use() { |
1662 | built_with_use() { |
|
|
1663 | local hidden="no" |
|
|
1664 | if [[ $1 == "--hidden" ]] ; then |
|
|
1665 | hidden="yes" |
|
|
1666 | shift |
|
|
1667 | fi |
|
|
1668 | |
|
|
1669 | local missing_action="die" |
|
|
1670 | if [[ $1 == "--missing" ]] ; then |
|
|
1671 | missing_action=$2 |
|
|
1672 | shift ; shift |
|
|
1673 | case ${missing_action} in |
|
|
1674 | true|false|die) ;; |
|
|
1675 | *) die "unknown action '${missing_action}'";; |
|
|
1676 | esac |
|
|
1677 | fi |
|
|
1678 | |
| 1602 | local opt=$1 |
1679 | local opt=$1 |
| 1603 | [[ ${opt:0:1} = "-" ]] && shift || opt="-a" |
1680 | [[ ${opt:0:1} = "-" ]] && shift || opt="-a" |
| 1604 | |
1681 | |
| 1605 | local PKG=$(best_version $1) |
1682 | local PKG=$(best_version $1) |
| 1606 | [[ -z ${PKG} ]] && die "Unable to resolve $1 to an installed package" |
1683 | [[ -z ${PKG} ]] && die "Unable to resolve $1 to an installed package" |
| 1607 | shift |
1684 | shift |
| 1608 | |
1685 | |
| 1609 | local USEFILE=${ROOT}/var/db/pkg/${PKG}/USE |
1686 | local USEFILE=${ROOT}/var/db/pkg/${PKG}/USE |
| 1610 | local IUSEFILE=${ROOT}/var/db/pkg/${PKG}/IUSE |
1687 | local IUSEFILE=${ROOT}/var/db/pkg/${PKG}/IUSE |
| 1611 | |
1688 | |
| 1612 | # if the USE file doesnt exist, assume the $PKG is either |
1689 | # if the IUSE file doesn't exist, the read will error out, we need to handle |
| 1613 | # injected or package.provided |
1690 | # this gracefully |
|
|
1691 | if [[ ! -e ${USEFILE} ]] || [[ ! -e ${IUSEFILE} && ${hidden} == "no" ]] ; then |
|
|
1692 | case ${missing_action} in |
|
|
1693 | true) return 0;; |
|
|
1694 | false) return 1;; |
| 1614 | [[ ! -e ${USEFILE} ]] && die "Unable to determine what USE flags $PKG was built with" |
1695 | die) die "Unable to determine what USE flags $PKG was built with";; |
|
|
1696 | esac |
|
|
1697 | fi |
| 1615 | |
1698 | |
|
|
1699 | if [[ ${hidden} == "no" ]] ; then |
| 1616 | local IUSE_BUILT=$(<${IUSEFILE}) |
1700 | local IUSE_BUILT=$(<${IUSEFILE}) |
| 1617 | # Don't check USE_EXPAND #147237 |
1701 | # Don't check USE_EXPAND #147237 |
| 1618 | local expand |
1702 | local expand |
| 1619 | for expand in $(echo ${USE_EXPAND} | tr '[:upper:]' '[:lower:]') ; do |
1703 | for expand in $(echo ${USE_EXPAND} | tr '[:upper:]' '[:lower:]') ; do |
| 1620 | if [[ $1 == ${expand}_* ]] ; then |
1704 | if [[ $1 == ${expand}_* ]] ; then |
| 1621 | expand="" |
1705 | expand="" |
| 1622 | break |
1706 | break |
| 1623 | fi |
1707 | fi |
| 1624 | done |
1708 | done |
| 1625 | if [[ -n ${expand} ]] ; then |
1709 | if [[ -n ${expand} ]] ; then |
|
|
1710 | if ! has $1 ${IUSE_BUILT} ; then |
|
|
1711 | case ${missing_action} in |
|
|
1712 | true) return 0;; |
|
|
1713 | false) return 1;; |
| 1626 | has $1 ${IUSE_BUILT} || die "$PKG does not actually support the $1 USE flag!" |
1714 | die) die "$PKG does not actually support the $1 USE flag!";; |
|
|
1715 | esac |
|
|
1716 | fi |
|
|
1717 | fi |
| 1627 | fi |
1718 | fi |
| 1628 | |
1719 | |
| 1629 | local USE_BUILT=$(<${USEFILE}) |
1720 | local USE_BUILT=$(<${USEFILE}) |
| 1630 | while [[ $# -gt 0 ]] ; do |
1721 | while [[ $# -gt 0 ]] ; do |
| 1631 | if [[ ${opt} = "-o" ]] ; then |
1722 | if [[ ${opt} = "-o" ]] ; then |