#!/bin/sh

SOURCE="src/dvadmin.c
src/dvbuild.c
src/dvdatabase.c
src/dvgenerate.c
src/dvgenc.c
src/dvgenh.c
src/dvlexwrap.c
src/dvmain.c
src/dvparse.c
src/dvread.c
src/dvscan.c
src/dvutil.c"

if [ "$CC" = "" ]; then
    CC=gcc
fi
CFLAGS="-g -Wall -W -Wno-unused-parameter -Wno-unused-function -DDD_DEBUG -Iutil"
LIBS="util/ddutil-dbg.a"

if [ "`uname -m`" = x86_64 ]; then
    CFLAGS="$CFLAGS -m64"
fi

PREFIX="/usr/local"
while [ $# != 0 ]; do
    if [ "${1%=*}" = "--prefix" ]; then
	PREFIX=${1#*=}
	echo "Configuring to install into $PREFIX"
    elif [ "$1" = "--dmalloc" ]; then
	LIBS="$LIBS -ldmalloc"
	CFLAGS="$CFLAGS -DMALLOC"
	useDmalloc=true
    elif [ "${1%=*}" = "CFLAGS" ]; then
	CFLAGS="${1#*=} -Iutil"
	echo "Configuring compilation flags to $CFLAGS"
    elif [ "${1%=*}" = "LDFLAGS" ]; then
	LDFLAGS=${1#*=}
	echo "Configuring linking flags to $LDFLAGS"
    else
	echo "Unknown option $1. IGNORING."
    fi
    shift
done

if [ ! -d obj ]; then
    mkdir obj
fi

echo "Building utility Makefile..."
cd util
if [ "$useDemalloc" = "true" ]; then
    ./configure --prefix=$PREFIX --dmalloc
else
    ./configure --prefix=$PREFIX
fi
cd ..

flex -f -Pdvlex -osrc/dvscan.c src/dvscan.l
bison -d -p dv -o src/dvparse.c -b dv src/dvparse.y

echo "CC=$CC
CFLAGS=$CFLAGS
LIBS=$LIBS
PREFIX=$PREFIX
" > Makefile

echo "OBJECTS=\\" >> Makefile
for sourceFile in $SOURCE; do
    objFile="obj/`basename $sourceFile | sed 's/\.c$/.o/'`"
    echo "$objFile\\" >> Makefile
done

echo "

datadraw: \$(OBJECTS) util/ddutil-dbg.a
	\$(CC) \$(CFLAGS) \$(OBJECTS) \$(LIBS) -o datadraw

clean:
	rm -f \$(OBJECTS)
	make -C util clean

install: datadraw
	install -d \$(PREFIX)/bin
	install datadraw \$(PREFIX)/bin
	make -C util PREFIX=\$(PREFIX) install

deb:
	fakeroot debian/rules binary && sudo dpkg -i ../*.deb

# Special targets
src/dvparse.c src/dvparse.h: src/dvparse.y src/dv.h
	bison -d -p dv -o src/dvparse.c -b dv src/dvparse.y

src/dvscan.c: src/dvscan.l src/dvparse.h src/dv.h
	flex -f -Pdvlex -osrc/dvscan.c src/dvscan.l

src/dvdatabase.h src/dvdatabase.c: src/Database.dd
	datadraw src/Database.dd

util/ddutil-dbg.a:
	make -C util

" >> Makefile

for sourceFile in $SOURCE; do
    objFile="obj/`basename $sourceFile | sed 's/\.c$/.o/'`"
    echo "$objFile: $sourceFile
	\$(CC) -c \$(CFLAGS) $sourceFile -o $objFile
" >> Makefile
done

$CC -M $CFLAGS $SOURCE | sed 's/^\([^ ].*\.o:\)/obj\/\1/' | sed 's/ \([a-z]\):/ \/cygdrive\/\1/g' >> Makefile

# This causes datadraw not to run on the first make
touch src/dvdatabase*.[ch]
