#!/bin/sh

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

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

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
    for sourceFile in $SOURCE utdatabase${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"

echo "all: ddutil.a ddutilp.a ddutilu.a ddutilup.a

clean:
	rm -f obj/* objp/* obju/* objup/*

install: ddutil.a ddutilp.a ddutilu.a ddutilup.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

" >> Makefile

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

utdatabase$SUFFIX.c utdatabase$SUFFIX.h: DatadrawUtil.dd
	datadraw $DATADRAW_FLAGS -s utdatabase$SUFFIX.c -h utdatabase$SUFFIX.h DatadrawUtil.dd
" >> Makefile

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

    $CC -M $CFLAGS -DUT_USE_UTDATABASE $SOURCE utdatabase${SUFFIX}.c | sed "s/^\([^ ].*\.o:\)/obj$SUFFIX\/\1/" >> Makefile

}

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

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