#!/bin/bash
#

# This wrapper around the colm program (and bootstrap programs) allows us to
# limit ourselves to one output file per makefile rule. It packs up multiple
# colm output files into one pack file, which is used as an intermediate file.
# We can extract the individual files from the pack one at a time, in separate
# rules.
#
# Ultimately this functionality should be rolled into the colm program itself.
# Until that is complete, this wrapper exists.
#

unset CMD
unset ARGS
unset OUTPUT
unset PACKS

while getopts "w:p:o:e:x:RcD:I:L:vdlirS:M:vHh?-:sVa:m:b:E:" opt; do

	# For the colm wrapper case.
	case "$opt" in
		w)
			# Which command to wrap.
			CMD=$OPTARG
		;;
		o)
			# Pack file name. For wrapping.
			OUTPUT=$OPTARG
		;;
		[pexm]) 
			ARGS="$ARGS -$opt $OPTARG.pack"
			PACKS="$PACKS $OPTARG.pack"
		;;
		[DILSMambE-])   ARGS="$ARGS -$opt $OPTARG" ;;
		[RcvdlirvHhsV]) ARGS="$ARGS -$opt" ;;
		?)
			exit 1;
		;;
	esac
done

# Shift over the args.
shift $((OPTIND - 1));

INPUT="$1"
if [ -z "$INPUT" ]; then
	echo colm-wrap: no input file given >&2
	exit 1
fi

if [ -z "$OUTPUT" ]; then
	echo colm-wrap: no output file given >&2
	exit 1
fi

# Default command to colm.
if [ "${INPUT%.pack}" != "$INPUT" ]; then
	tar -xmf "$INPUT" "$OUTPUT.pack"
	mv $OUTPUT.pack $OUTPUT
	EXIT_STATUS=$?
else
	CMD=${CMD:=colm}
	if [ "`basename $CMD`" != "$CMD" ]; then
		COLM=$CMD
	else
		if [ "`basename $0`" != "$0" ] && [ -x "`dirname $0`/$CMD" ]; then
			COLM="`dirname $0`/$CMD"
		else
			COLM=/usr/bin/$CMD
		fi
	fi

	$COLM $ARGS "$INPUT"
	EXIT_STATUS=$?
	if [ $EXIT_STATUS = 0 ]; then
		tar -cf "$OUTPUT" $PACKS
	fi
	rm -f $PACKS
fi

exit $EXIT_STATUS

