#!/bin/ksh

DIR="`pwd`"
basename "$DIR" | IFS=- read NAME VERSION

ABI=""
MAKE=gmake
JOBS=2
CFGOPTS=""
LOCALDIR="/usr/local"
PREFIX="$LOCALDIR"
PKG_CONFIG_PATH="/usr/lib/pkgconfig"

if [ -f .abi ]; then
    read OABI <.abi
fi

MORE=yes
while [ $MORE = yes ]; do
    case "$1" in
	-m|--abi)
	    ABI="$2"
	    shift
	    ;;
	-m32)
	    ABI=32
	    ;;
	-m64)
	    ABI=64
	    ;;
	-j|--jobs)
	    JOBS="$2"
	    shift
	    ;;
	-M|--make)
	    MAKE="$2"
	    shift
	    ;;
	-|--)
	    shift
	    MORE=no
	    ;;
	-*)
	    CFGOPTS="$CFGOPTS $1"
	    ;;
	*)
	    MORE=no
	    ;;
    esac
    if [ $MORE = yes ]; then
	shift
    fi
done

if [ -f ../build.opts ]; then
    . ../build.opts
fi

if [ "$ABI" = "" ]; then
    if [ "$OABI" != "" ]; then
	ABI="$OABI"
    else
	ABI=64
	echo "Assuming -m$ABI"
    fi
fi

if [ "$ABI" != "$OABI" ]; then
    $MAKE distclean
    rm -f .abi
    if [ "$1" = "distclean" ]; then
	exit 0
    fi
fi

LIBDIR="$PREFIX/lib"
LOCALLIBDIR="$LOCALDIR/lib"

case "$ABI" in
    32)
	PATH="/usr/local/bin/i386:/usr/local/bin:/usr/bin/i386:/usr/bin"
	;;
    *)
	PATH="/usr/local/bin/amd64:/usr/local/bin:/usr/bin/amd64:/usr/bin"
	LIBDIR="$LIBDIR/$ABI"
	LOCALLIBDIR="$LOCALLIBDIR/$ABI"
	PKG_CONFIG_PATH="/usr/lib/$ABI/pkgconfig"
esac

if [ -d ../bin ]; then
    CURDIR="`pwd`"
    PATH="`dirname $CURDIR`/bin:$PATH"
fi

export PATH

echo "$VERSION" | IFS="." read MAJOR MINOR PATCH
PDIR="../Patches/${MAJOR}.${MINOR}"
if [ ! -f .patched ]; then
    if [ -d "$PDIR" ]; then
	echo "APPLYING PATCHES:"
	for F in ${PDIR}/*.patch; do
	    echo "  $F"
	    patch -p1 -s <"$F" || exit 1
	done
	echo ""
    fi
    touch .patched
fi

if [ ! -f .abi ]; then
    PKG_CONFIG_PATH="$LOCALLIBDIR/pkgconfig:$PKG_CONFIG_PATH"
    export PKG_CONFIG_PATH

    env MAKE="$MAKE" CC="gcc -m$ABI" CXX="g++ -m$ABI" CFLAGS="-D_POSIX_PTHREAD_SEMANTICS -I. -I/usr/local/include" LDFLAGS="-L. -L$LOCALLIBDIR -R$LOCALLIBDIR" ./configure --prefix="${PREFIX}" --libdir="$LIBDIR" $CFGOPTS || exit 1

    echo "$ABI" >.abi
fi

if [ ! -d "$LIBDIR" ]; then
    mkdir -p "$LIBDIR"
    if [ "$ABI" = 32 ]; then
	ln -sf . "$LIBDIR/32"
    fi
fi

exec $MAKE -j"$JOBS" "$@"


