#!/bin/sh

SOURCE="util.c
utmanage.c
utmem.c
utpersist.c
utrand.c"

ARCH=`uname -s`
if [ "$ARCH" = "CYGWIN_NT-5.1" ]; then
    SOURCE="$SOURCE utcygwin.c"
else
    SOURCE="$SOURCE utunix.c"
fi

if [ "$CC" = "" ]; then
    CC=gcc
fi
CFLAGS="-g -Wall -W -Wno-unused-parameter -Wno-unused-function"

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
	CFLAGS="$CFLAGS -DMALLOC"
	useDmalloc=true
    elif [ "${1%=*}" = "CFLAGS" ]; then
	CFLAGS=${1#*=}
	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

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

makeMakefileTop () {
    SUFFIX=$1
    UPPER_SUFFIX=`echo $SUFFIX | tr '[a-z]' '[A-Z]'`

    if [ ! -d obj$SUFFIX ]; then
	mkdir obj$SUFFIX
    fi
    echo "OBJECTS$UPPER_SUFFIX=\\" >> Makefile
    FILE_SUFFIX=`echo $SUFFIX | sed 's/-dbg//'`
    for sourceFile in $SOURCE utdatabase${FILE_SUFFIX}.c; do
	objFile="obj$SUFFIX/`basename $sourceFile | sed 's/\.c$/.o/'`"
	echo "$objFile\\" >> Makefile
    done
    echo >> Makefile
}

makeMakefileTop ""
makeMakefileTop "p"
makeMakefileTop "u"
makeMakefileTop "up"
makeMakefileTop "-dbg"
makeMakefileTop "p-dbg"
makeMakefileTop "u-dbg"
makeMakefileTop "up-dbg"

echo 'all: debug optimized

debug dev:
	@echo "Making debug build:"
	@$(MAKE) -f Makefile ddutil-dbg.a CFLAGS="$(CFLAGS) -DDD_DEBUG"
	@$(MAKE) -f Makefile ddutilp-dbg.a CFLAGS="$(CFLAGS) -DDD_DEBUG"
	@$(MAKE) -f Makefile ddutilu-dbg.a CFLAGS="$(CFLAGS) -DDD_DEBUG"
	@$(MAKE) -f Makefile ddutilup-dbg.a CFLAGS="$(CFLAGS) -DDD_DEBUG"

optimized opt rel:
	@echo "Making release build:"
	@$(MAKE) -f Makefile ddutil.a CFLAGS="$(CFLAGS) -O2"
	@$(MAKE) -f Makefile ddutilp.a CFLAGS="$(CFLAGS) -O2"
	@$(MAKE) -f Makefile ddutilu.a CFLAGS="$(CFLAGS) -O2"
	@$(MAKE) -f Makefile ddutilup.a CFLAGS="$(CFLAGS) -O2"

clean:
	rm -f obj/* objp/* obju/* objup/* obj-dbg/* objp-dbg/* obju-dbg/* objup-dbg/* *.a

install: ddutil.a ddutilp.a ddutilu.a ddutilup.a ddutil-dbg.a ddutilp-dbg.a ddutilu-dbg.a ddutilup-dbg.a
	install -d \$(PREFIX)/include
	install -d \$(PREFIX)/lib
	install ddutil.h \$(PREFIX)/include
	install utdatabase.h \$(PREFIX)/include
	install utdatabasep.h \$(PREFIX)/include
	install utdatabaseu.h \$(PREFIX)/include
	install utdatabaseup.h \$(PREFIX)/include
	install utmem.h \$(PREFIX)/include
	install utpersist.h \$(PREFIX)/include
	install uttypes.h \$(PREFIX)/include
	install ddutil.a \$(PREFIX)/lib/libddutil.a
	install ddutilp.a \$(PREFIX)/lib/libddutilp.a
	install ddutilu.a \$(PREFIX)/lib/libddutilu.a
	install ddutilup.a \$(PREFIX)/lib/libddutilup.a
	install ddutil-dbg.a \$(PREFIX)/lib/libddutil-dbg.a
	install ddutilp-dbg.a \$(PREFIX)/lib/libddutilp-dbg.a
	install ddutilu-dbg.a \$(PREFIX)/lib/libddutilu-dbg.a
	install ddutilup-dbg.a \$(PREFIX)/lib/libddutilup-dbg.a

' >> Makefile

makeMakefileBottom () {
    SUFFIX=$1
    NONDBG_SUFFIX=`echo $1 | sed 's/-dbg//'`
    DATADRAW_FLAGS=$2
    UPPER_SUFFIX=`echo $SUFFIX | tr '[a-z]' '[A-Z]'`
    UPPER_NONDBG_SUFFIX=`echo $NONDBG_SUFFIX | tr '[a-z]' '[A-Z]'`
    echo "ddutil$SUFFIX.a: \$(OBJECTS$UPPER_SUFFIX)
	ar -rcs ddutil$SUFFIX.a \$(OBJECTS$UPPER_SUFFIX)

" >> Makefile

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

    if [ "$SUFFIX" == "$NONDBG_SUFFIX" ]; then
        echo "utdatabase$SUFFIX.c utdatabase$SUFFIX.h: DatadrawUtil.dd
	datadraw $DATADRAW_FLAGS -s utdatabase$SUFFIX.c -h utdatabase$SUFFIX.h DatadrawUtil.dd

" >> Makefile
    fi
    $CC -M $CFLAGS -DUT_USE_UTDATABASE $SOURCE utdatabase${NONDBG_SUFFIX}.c | sed "s/^\([^ ].*\.o:\)/obj$SUFFIX\/\1/" | sed 's/ \([a-z]\):/ \/cygdrive\/\1/g' >> Makefile
    echo >> Makefile
}

makeMakefileBottom "" ""
makeMakefileBottom "p" "-p"
makeMakefileBottom "u" "-u"
makeMakefileBottom "up" "-u -p"
makeMakefileBottom "-dbg" ""
makeMakefileBottom "p-dbg" "-p"
makeMakefileBottom "u-dbg" "-u"
makeMakefileBottom "up-dbg" "-u -p"

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