Ryan Hill wrote:
>
> here's a crappy little script to automate it.
>
here's take two. if someone could tell me a simple way to get the
category given a package name, including a way to detect ambiguous
names, i could drop the dependency on app-portage/udept.
anyways it now supports disabling more than one FEATURE and defaults
to appending to the env file with an -o option for overwriting.
it won't rape your dog though it may try. it could also probably be
rewritten using nothing but pure sh, awk, perl, or GWBASIC, but i
think it does what i want it to. ;)
--
fonts / wxWindows / gcc-porting / treecleaners
EFFD 380E 047A 4B51 D2BD C64F 8AA8 8346 F9A4 0662 (0xF9A40662)
#!/bin/bash -
#
# defeature - disable a FEATURE on a per-package basis.
#
# <[EMAIL PROTECTED]>
source /usr/lib/portage/bin/isolated-functions.sh
defeature() {
if [[ ! -w /etc/portage ]]; then
echo
eerror "You don't have write permissions for /etc/portage."
echo
exit 1
fi
local opt overwrite
while getopts o opt; do
case ${opt} in
o) overwrite="true" ;;
'?') print_usage ;;
esac
done
shift $((OPTIND - 1))
[[ $# -lt 2 ]] && print_usage
local pkgcat pkgname
pkgcat=${!#%%/*}
pkgname=${!###/*}
if [[ $(equery w =${pkgname} 2>&1 | grep "No masked" ) ]]; then
echo
eerror "No package found matching \"${pkgname}\"."
echo
exit 1
fi
[[ $pkgcat == $pkgname ]] && pkgcat=
if [[ -z ${pkgcat} ]]; then
# Need a better way to get category - use app-portage/udept for
now
# check for ambiguous package names
if [[ $(dep -1c ${pkgname} | awk 'END { print NR }') -gt 1 ]];
then
echo
eerror "Found multiple categories for \"${pkgname}\"."
eerror "Please use a fully qualified package name
(cat/package)."
echo
exit 1
fi
pkgcat="$(dep -1c ${pkgname})"
# strip whitespace
pkgcat="${pkgcat// /}"
fi
[[ ! -d /etc/portage/env/${pkgcat} ]] && mkdir -p
/etc/portage/env/${pkgcat}
local feathead featloop featlist
featheader="FEATURES=\" \${FEATURES}\""
while [[ ${#} -gt 1 ]]; do
featlist="${featlist} ${1}"
featloop="${featloop}\nFEATURES=\${FEATURES/ ${1}/}"
shift
done
if [[ ${overwrite} ]]; then
echo -e "${featheader}${featloop}" >
/etc/portage/env/${pkgcat}/${pkgname}
else
echo -e "${featheader}${featloop}" >>
/etc/portage/env/${pkgcat}/${pkgname}
fi
if [[ $? -eq 0 ]]; then
echo
einfo "Disabled${featlist} FEATURE(s) for ${pkgcat}/${pkgname}."
einfo
einfo "To re-enable default behaviour for this package, delete"
einfo "/etc/portage/env/${pkgcat}/${pkgname}."
echo
fi
exit 0
}
print_usage() {
echo
eerror "Usage: $(basename $0) [-o] <FEATURE> [FEATURE]
<pkgname>"
eerror
eerror " -o overwrite current settings rather than
append"
echo
exit 1
}
defeature "$@"