#!/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}'`

clear
case $[(`date '+%s'` % 6)] in
	0) echo "@@@  @@@  @@@  @@@@@@@    @@@@@@   @@@  @@@@@@@  @@@  @@@"
           echo "@@@  @@@  @@@  @@@@@@@@  @@@@@@@@  @@@  @@@@@@@  @@@  @@@"
           echo "@@!  @@!  @@!  @@!  @@@  @@!  @@@  @@!    @@!    @@!  @@@"
           echo "!@!  !@!  !@!  !@!  @!@  !@!  @!@  !@!    !@!    !@!  @!@"
           echo "@!!  !!@  @!@  @!@!!@!   @!@!@!@!  !!@    @!!    @!@!@!@!"
           echo "!@!  !!!  !@!  !!@!@!    !!!@!!!!  !!!    !!!    !!!@!!!!"
           echo "!!:  !!:  !!:  !!: :!!   !!:  !!!  !!:    !!:    !!:  !!!"
           echo ":!:  :!:  :!:  :!:  !:!  :!:  !:!  :!:    :!:    :!:  !:!"
           echo " :::: :: :::   ::   :::  ::   :::   ::     ::    ::   :::"
           echo "  :: :  : :     :   : :   :   : :  :       :      :   : :" ;;

	1) echo "                                                                   *"
           echo "                                                 *         *     **"
           echo "**                                              ***       **     **"
           echo "**                                               *        **     **"
           echo " **    ***    ****     ***  ****                        ******** **"
           echo "  **    ***     ***  *  **** **** *    ****    ***     ********  **  ***"
           echo "  **     ***     ****    **   ****    * ***  *  ***       **     ** * ***"
           echo "  **      **      **     **          *   ****    **       **     ***   ***"
           echo "  **      **      **     **         **    **     **       **     **     **"
           echo "  **      **      **     **         **    **     **       **     **     **"
           echo "  **      **      **     **         **    **     **       **     **     **"
           echo "  **      **      *      **         **    **     **       **     **     **"
           echo "   ******* *******       ***        **    **     **       **     **     **"
           echo "    *****   *****         ***        ***** **    *** *     **    **     **"
           echo "                                      ***   **    ***             **    **"
           echo "                                                                        *"
           echo "                                                                       *"
           echo "                                                                      *"
           echo "                                                                     *" ;;

	2) echo " :::  ===  === :::====  :::====  ::: :::==== :::  ==="
           echo " :::  ===  === :::  === :::  === ::: :::==== :::  ==="
           echo " ===  ===  === =======  ======== ===   ===   ========"
           echo "  ===========  === ===  ===  === ===   ===   ===  ==="
           echo "   ==== ====   ===  === ===  === ===   ===   ===  ===" ;;

	3) echo "                            .__  __  .__"
           echo '     __  _  ______________  |__|/  |_|  |__'
           echo '     \ \/ \/ /\_  __ \__  \ |  \   __\  |  \'
           echo '      \     /  |  | \// __ \|  ||  | |   Y  \'
           echo '       \/\_/   |__|  (____  /__||__| |___|  /'
           echo "                          \/              \/" ;;

	4) echo "     dBPdBPdBP dBBBBBb dBBBBBb     dBP dBBBBBBP dBP dBP"
           echo "                   dBP      BB"
           echo "   dBPdBPdBP   dBBBBK   dBP BB   dBP    dBP   dBBBBBP"  
           echo "  dBPdBPdBP   dBP  BB  dBP  BB  dBP    dBP   dBP dBP"
           echo " dBBBBBBBP   dBP  dB' dBBBBBBB dBP    dBP   dBP dBP" ;;

	5) echo "                                                            /"
           echo "                                             #            #/"
           echo "                                            ###     #     ##"
           echo "##                                           #     ##     ##"
           echo "##                                                 ##     ##"
           echo " ##    ###    ####    ###  /###     /###   ###   ######## ##  /##"
           echo "  ##    ###     ###  / ###/ #### / / ###  / ### ########  ## / ###"
           echo "  ##     ###     ###/   ##   ###/ /   ###/   ##    ##     ##/   ###"
           echo "  ##      ##      ##    ##       ##    ##    ##    ##     ##     ##"
           echo "  ##      ##      ##    ##       ##    ##    ##    ##     ##     ##"
           echo "  ##      ##      ##    ##       ##    ##    ##    ##     ##     ##"
           echo "  ##      ##      ##    ##       ##    ##    ##    ##     ##     ##"
           echo "  ##      /#      /     ##       ##    /#    ##    ##     ##     ##"
           echo "   ######/ ######/      ###       ####/ ##   ### / ##     ##     ##"
           echo "    #####   #####        ###       ###   ##   ##/   ##     ##    ##"
           echo "                                                                 /"
           echo "                                                                /"
           echo "                                                               /"
           echo "                                                              /" ;;
esac
echo

usage() 
{
    echo "Usage: $0 [-c] [-d] [-t dir] [-T] [all|hub|leaf]"
    echo
    echo "    The options are as follows:"
    echo "    -c        Cleans up old binaries/files before compile."
    echo "    -d        Builds a debug package."
    echo "    -t dir    Where to search for TCL libraries."
    echo "    -T        Builds TCL if it is not on the system."
}

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

