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 "$@"

Reply via email to