#!/bin/bash

myname=`basename $0`

getopt -T 2>/dev/null
if [ "$?" -ne 4 ]; then
    echo "$myname: enhanced getopt required"
    exit 1
fi

usage() {
    echo
    echo "$myname: Select a particular JACK implementation by switching links"
    echo
    echo "Usage: $myname [-hfwt] -j <name>"
    echo 
    echo " -h, --help: print out usage and exit"
    echo " -f, --fix:  If there are no active links, make some."
    echo "             If there's a jackd link, make the libjack link match it."
    echo " -t, --test: Do nothing but print name of current jackd (jackd or jackdmp)."
    echo " -j <name>, --jackd <name>: Use the specified JACK program (jackd or jackdmp)."
    echo
    exit 2
}

options=`getopt -n "$myname" -o hfwtj: -l help,fix,test,jackd: -- "$@"`
[ "$?" -ne 0 ] && exit 1

fix=""
test=""
jackd=""

eval set -- "$options"

while true; do
    case "$1" in
	-h|--help)  usage;;
	-f|--fix)   fix=1; shift;;
	-t|--test)  test=1; shift;;
	-j|--jackd) jackd="$2"; shift 2;;
	--)         shift; break;;
	*) echo "Internal error in command line parser: arg \"$1\" read"; exit 1;;
    esac
done

if [ -n "$fix" -a -n "$jackd" ] ; then
    fix="" # default action will do the same if jackd specified
fi

if [ -n "$test" -o -n "$fix" ] ; then
    if ls -l /etc/jackd/jackd-link | grep -q 'jackdmp' ; then
        jackd=jackdmp
    else
        jackd=jackd
    fi
fi

if [ -n "$test" ]; then
    echo $jackd
    exit 0
fi

[ -z "$jackd" ] && usage

case "$jackd" in
    jackd)
	bin=`ls /usr/bin/jackd.bin-* | tail -1`
	for x in /usr/lib/libjack-0.1*.so.0.0.*; do
	    if [ -f "$x" -a ! -L "$x" ]; then
		lib="$x"
	    fi
        done
	;;
    jackdmp)
	bin=/usr/bin/jackdmp.bin
	lib=`ls /usr/lib/libjackmp.so.0.0.* | tail -1`
	;;
    *) usage;;
esac

if [ ! -x "$bin" ]; then
    echo "No suitable jackd found"
    exit 1
fi
if [ ! -f "$lib" ]; then
    echo "No suitable libjack found"
    exit 1
fi

#if [ ! -L /usr/bin/jackd ]; then
#    echo "/usr/bin/jackd is not a symbolic link"
#    exit 1
#fi

if [ ! -L /usr/lib/libjack.so.0.0.23 ]; then
    echo "/usr/lib/libjack.so.0.0.23 is not a symbolic link"
    exit 1
fi

sudo ln -fs $bin /etc/jackd/jackd-link || exit 1
sudo ln -fs $lib /etc/jackd/libjack-link || exit 1

exit 0
