#!/bin/bash
# install relevant completions, by sourcing every scriptlet
# found in a given directory, and symlinking those matching
# an installed command to another directory

have()
{
    PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin type $1 &>/dev/null
}

usage()
{
    echo "usage: $0 <completion_dir> [installation_dir]"
}

while getopts ":h" flag; do
    case $flag in
	h) usage; exit 0;;
    esac
done

shift $((OPTIND - 1))

completion_dir=/usr/share/bash-completion/completions/
if [ -z "$completion_dir" ]; then
    echo "missing completion directory"
    usage
    exit 1
fi
if [ ! -d $completion_dir ]; then
    echo "invalid directory $completion_dir"
    usage
    exit 1
fi

installation_dir=/var/lib/bash-completion/
if [ ! -d $installation_dir ]; then
    echo "invalid directory $installation_dir"
    usage
    exit 1
fi

# many scripts require this
shopt -s extglob

# and some require this also
UNAME=$(uname -s)
UNAME=${UNAME/CYGWIN_*/Cygwin}

case $UNAME in
    Linux|GNU|GNU/*) USERLAND=GNU ;;
    *) USERLAND=$UNAME ;;
esac

for script in $completion_dir/*; do
    # reset completion
    complete -r

    # source script
    source $script 2>/dev/null

    # check completion output
    output=$(complete -p)

    if [ -z "$output" ]; then
	continue
    fi

    if [ -n "$installation_dir" ]; then
	ln -sf $script $installation_dir/$(basename $script)
    else
	echo "$script OK"
    fi

done
