#!/bin/sh
usage() {
	
	cat << EOF
usage :
	--help                : show usage
	--prefix=             : set installation prefix [/usr/local]
	--libvol-prefix=      : set where to find vol librairies and headers (optionnal)
	--cc=                 : set C++ compiler        [g++]
	--doc=                : generate doc (yes/no)   [no]
Option for voldraw :
	--with-voldraw        : try to build voldraw too [no]
	--yacc=               : set yacc                [bison -y]
	--lex=                : set lex                 [flex]
	--bison-hack          : use it if you experiment problem with bison
EOF

}

my_which() {

	type $1 > /dev/null 2>&1
	return $?
}

PREFIX=/usr/local
CC=g++
VOL_INCLUDE=
VOL_LPATH=
LEX=flex
YACC="bison -y"
LEX_LIB=
BISON_HACK=
MAKE_VOLDRAW=
MAKEDOC=

for i in $*
do
	case "$i" in 
	--prefix=*)
		PREFIX=`echo "$i" | cut -d = -f2`
		;;
	--help)
		usage
		exit 0
		;;
	--cc=*)
		CC=`echo "$i" | cut -d = -f2`
		;;
	--libvol-prefix=*)
		volprefix=`echo "$i" | cut -d = -f2`
		VOL_INCLUDE="-I$volprefix/include"
		VOL_LPATH="-L$volprefix/lib"
		;;
	--yacc=*)
		YACC=`echo "$i" | cut -d = -f2`
		[ "$MAKE_VOLDRAW" = voldraw ] || echo "useless option --yacc without --with-voldraw" >&2
		;;
	--lex=*)
		LEX=`echo "$i" | cut -d = -f2`
		[ "$MAKE_VOLDRAW" = voldraw ] || echo "useless option --lex without --with-voldraw" >&2
		;;
	--doc=*)
		a=`echo "$i" | cut -d = -f2`
        if [ "$a" = yes ]
        then
            MAKEDOC=doc
        else if [ "$a" = no ]
        then
            MAKEDOC=
        else
            usage
            exit 1
        fi
        fi
        ;;
	--bison-hack)
		BISON_HACK="-D__attribute__\\(x\\)=\\(\\#\\#x\\)\\; -D__unused__"
		[ "$MAKE_VOLDRAW" = voldraw ] || echo "useless option --bison-hack without --with-voldraw" >&2
		;;
	--with-voldraw)
		MAKE_VOLDRAW=voldraw
		;;
	*)
		usage
		exit 1
	esac
done

printf "%s" "Checking for $CC ... "
if my_which $CC
then
	printf "ok\n"
else
	printf "%s\n" "NOT FOUND"
	exit 1
fi

if [ -n "$MAKEDOC" ]
then
	printf "Checking for doxygen ... "
	if my_which doxygen
	then
		printf "ok\n"
	else
		printf "NOT FOUND\n"
		echo "Warning : documentation will not be generated because doxygen is not installed !" 1>&2
	fi
fi

# check that libvol works !
cat > /tmp/$$.cc << EOF
#include <vol.h>

int main() {
	Vol v(10, 10, 10, 0);
	return 0;
}
EOF

printf "checking that libvol works ... "
if $CC -c /tmp/$$.cc -o /tmp/$$.e $VOL_INCLUDE $VOL_LPATH -lvol -lm > /dev/null 2>&1
then
	printf "ok\n"
	rm -f /tmp/$$.cc
else
	printf "FAILED !\nCheck that libvol is correctly installed.\n"
	exit 1
fi

check_lex_yacc() {

	printf "checking for $1 ... "
	if [ -z "$3" ]
	then
		if my_which $1
		then
			CHECK_LEX_YACC="$1"
			printf "$1 ok\n"
		else
			if ! my_which $2
			then
				CHECK_LEX_YACC="$2"
				printf "$2 ok\n"
			else
				printf "FAILED !\n"
				echo "ERROR : you should install $1 or $2 !\n" >&2
				exit 1
			fi
		fi
	else
		if my_which $3
		then
			CHECK_LEX_YACC="$3"
			printf "$3 ok\n"
		else
			printf "$3 not found !\n" >&2
			exit 1
		fi
	fi

}

if [ "$MAKE_VOLDRAW" = voldraw ]
then 
	check_lex_yacc yacc bison "$YACC"
	YACC=$CHECK_LEX_YACC
	check_lex_yacc lex flex "$LEX"
	LEX=$CHECK_LEX_YACC
	[ `basename "$LEX"` = lex ] && LEX_LIB=-ll
	[ `basename "$LEX"` = flex ] && LEX_LIB=-lfl
fi

cat > makefile.in << EOF
CC=$CC
PREFIX=$PREFIX
VOL_INCLUDE=$VOL_INCLUDE
VOL_LPATH=$VOL_LPATH
YACC=$YACC
LEX=$LEX
LEX_LIB=$LEX_LIB
BISON_HACK=$BISON_HACK
MAKE_VOLDRAW=$MAKE_VOLDRAW
MAKEDOC=$MAKEDOC
EOF
