#!/bin/sh


# Awk out the version from source
ver="?.?.?"
ver=`grep "char" src/main.c | awk '/egg_version/ {print $4}' | sed -e 's/\"//g' | sed -e 's/\;//g'`
numver=`grep "int" src/main.c | awk '/egg_numver =/ {print $4}' |  sed -e 's/\;//g'`
PACKNAME=`grep "PACKNAME " pack/pack.cfg | awk '/PACKNAME/ {print $2}'`

echo "*** wraith v${ver}/${numver} builder ***"

usage() 
{
    echo "Usage: $0 [-d] [-c] [-T] [-t dir] type"
    echo "	-c	   - Cleans up old binaries/files before compile 	(default: off)"
    echo "	-d	   - Builds a debug package. 				(default: off)"
    echo "	-t dir	   - Where to search for TCL libraries. 		(usually not needed)"
    echo "	-T	   - Builds TCL if it is not on the system		(defauly: off)"
    echo "	type	   - One of the following: all, leaf, hub."
}

debug=0
all=0
hub=0
leaf=0
clean=0
type=
tcldir=
buildtcl=0

while getopts t:Tcdh opt ; do
        case "$opt" in
	c) clean=1 ;;
        d) debug=1 ;;
	t) tcldir="$OPTARG" ;;
	h) usage; exit 0 ;;
	T) buildtcl=1 ;;
        *) usage; exit 1 ;;

        esac
done

shift $(($OPTIND - 1))

if [ $buildtcl = "1" ]; then
 echo "Hold tight"
 misc/maketcl
 rm -rf tcl8.4.4*
 echo "Done. (You must run ./build again with normal parameters)"
 exit 0
fi

if test -z "$1"; then
 usage
 exit 1
else
 if [ $1 = "all" ]; then
  all=1
 elif [ $1 = "leaf" ]; then
  leaf=1
  type="leaf"
 elif [ $1 = "hub" ]; then
  hub=1
  type="hub"
 else
  all=1
#  usage
#  exit 1
 fi
fi

if [ $debug = "1" ]; then
 d="d"
else
 d=""
fi

if [ $all = "1" ]; then
 type="all"
 leaf=1
 hub=1
fi

############# CHECK FOR pack/ FILES #################

# Figure what bins we're making
case `uname` in
  Linux) os=Linux;;
  FreeBSD) case `uname -r` in
    5*) os=FreeBSD5;;
    4*) os=FreeBSD4;;
    3*) os=FreeBSD3;;
  esac;;
  OpenBSD) os=OpenBSD;;
esac

if test -z $os
then
  echo "[!] Automated packaging disabled, `uname` isn't recognized"
fi

echo "[*] Building ${PACKNAME}::${type} for $os"

# Run ./configure, then verify it's ok
echo "[*] Configuring..."
umask 077 >/dev/null

if test -z "$tcldir"; then
  echo "[*] Searching for TCL in default paths (use '-t dir' to change)"
  ./configure --silent --disable-tcl-threads
else
  echo "[*] Searching for TCL in: $tcldir"
  ./configure --silent --disable-tcl-threads --with-tcllib=${tcldir}/lib/libtcl8.4.a --with-tclinc=${tcldir}/include/tcl.h
fi


MAKE="`which gmake`"
if test -z "${MAKE}"; then
 MAKE="`which make`"
fi

echo "[*] Using '${MAKE}'"

# make clean, just in case
if [ $clean = "1" ]; then
 echo "[*] Cleaning up old binaries/files..."
 ${MAKE} clean > /dev/null
fi

_leaf()
{
  if [ $leaf = "1" ]; then
   # Build leaf and check
   echo "[*] Building ${d}leaf..."
   ${MAKE} ${d}leaf -s
   if ! test -f leaf
   then
     echo "[!] ${d}leaf build failed"
     exit 1
   fi
  fi
}

_hub()
{
  if [ $hub = "1" ]; then
   # Build hub and check
   echo "[*] Building ${d}hub..."
   ${MAKE} ${d}hub -s
   if ! test -f hub
   then
     echo "[!] ${d}hub build failed"
     exit 1
   fi
  fi
}

if [ -f stamp.hub ]; then
 _hub
 _leaf
else
 _leaf
 _hub
fi

# Wrap it nicely up into an archive
echo "[*] Packaging..."

if [ $all = "1" ]; then
 fls="leaf hub"
elif [ $leaf = "1" ]; then
 fls="leaf"
elif [ $hub = "1" ]; then
 fls="hub"
fi

if test -n "$d"; then
 d="-debug"
fi

for bin in $fls
do
  mv -f $bin $bin.$os.$numver${d}
done

tar -zcf ${PACKNAME}.$os.$numver${d}.tgz *.$os.$numver${d}
rm -f *$os.$numver${d}
echo "Binaries are now in '${PACKNAME}.$os.$numver${d}.tgz'."
exit 0

