#!/bin/sh

load=0
load_all=0
fname=""
libdir=""

if [ `dirname $0` = "." ] && [ $PWD != "/etc/init.d" ]; then
    BINDIR=.
    [ -e .libs ] && LIBDIR=.libs || LIBDIR=.
    ETCDIR=.
    libdir=$LIBDIR
else
    BINDIR=/usr/bin
    LIBDIR=/usr/lib
    # i hate autoconf:
    if [ "/etc" = "/usr/etc" ]; then
	ETCDIR=/etc/ceph
    else
	ETCDIR=/etc/ceph
    fi
    libdir="$LIBDIR/rados-classes"
fi

load_opt="changed"

usage="usage: $0 [option]... [cls_filename]\n"
usage=$usage"options:\n"
usage=$usage"\t-L, --libdir <path>\n"
usage=$usage"\t-l, --load\n"
usage=$usage"\t-a, --load-all\n"
usage=$usage"\t-c, --conf <ceph.conf>\n"
usage=$usage"\t-o, --overwrite\n"
usage=$usage"\t-e, --excl\n"

conf=$ETCDIR/ceph.conf

usage_exit() {
	printf "$usage"
	exit 1
}

err_exit() {
	echo "Error: $*"
	exit 1
}

while [ $# -ge 1 ]; do
case $1 in
    -L | --libdir )
	    shift
            libdir=$1
	    ;;
    -l | --load )
	    load=1
	    ;;
    -a | --load-all )
	    load_all=1
	    ;;
    -o | --overwrite )
	    load_opt="overwrite"
	    ;;
    -e | --excl )
	    load_opt="excl"
	    ;;
    -c | --conf )
	    shift
	    conf=$1
	    ;;
    * )
	    [ -n "$fname" ] && usage_exit
	    fname=$1
	    ;;

esac
shift
done

[ -z "$fname" ] && [ $load_all -eq 0 ] && usage_exit


load() {
	fn=$1
	$BINDIR/ceph -c $conf class add -i $fn `$BINDIR/cclsinfo $fn` $load_opt
}

load_all() {
	all=`find $libdir -name 'libcls_*.so*' -type f`;
	if [ -n "$all" ]; then
		for fn in $all; do
			echo Loading class: $fn: `$BINDIR/cclsinfo $fn`
			load $fn
		done
	fi
}

[ $load -eq 1 ] && load $fname
[ $load_all -eq 1 ] && load_all

