#!/bin/sh

yawsdir="/usr/lib/erlang/lib/yaws-1.65"
vardir="/var/"
erl="/usr/bin/erl"
run_erl="/usr/lib/erlang/bin//run_erl"
to_erl="/usr/lib/erlang/bin//to_erl"

case `uname` in
    CYGWIN*)
	yawsdir=`cygpath --windows $yawsdir`
	werl=""
	delim=\\;;
    *)
        delim=/
esac


ENV_PGM=`which env`



help()
{
    echo "usage:  "
    echo ""
    echo 
    echo "       yaws -i | --interactive         -- interactive (no daemon) mode"
    echo "       yaws -w | --winteractive        -- cygwin interactive (werl) "
    echo "       yaws --daemon                   -- daemon mode"
    
    echo ""
    
    echo ""
    echo "       Auxilliary flags for the daemon: "
    echo "            --id Id          --  Set system id"
    echo "            --debug          --  debug mode "
    echo "            --conf File      --  set config file"
    echo "            --tracetraf      --  trace traffic"
    echo "            --tracehttp      --  trace http traffic"
    echo "            --traceout       --  trace output to stdout"
    echo "            --version        --  print version"
    echo "            --pa path        --  add load path"
    echo "            --mnesiadir dir  --  start Mnesia in dir"
    echo "            --proto_dist Mod     --  use Mod for distrib"
    echo "            --sname xxx      --  start with sname xxx"
    echo "            --name xxx       --  start with name xxx"
    echo "            --runmod mod     --  call mod:start/0 at startup"
    echo "            --heart          --  auto restart yaws if it crashes"
    echo "            --erlarg X       --  pass argument X to $erl"
    echo "            --run_erl X      --  use run_erl with pipe-id X"
    echo "            --to_erl X       --  connect to pipe-id X"
    
    echo ""
    
    echo "ctl functions ... "
    echo "        yaws --hup [--id ID]       -- hup the daemon, reload conf"
    echo "        yaws --stops [--id ID]     -- stop the daemon "
    echo "        yaws --status [--id ID]    -- query the daemon status "
    echo "        yaws --load Modules        -- load modules "
    echo "        yaws --ls                  -- list Yaws nodes and their status"
    echo "        yaws --ctltrace traffic|http    -- toggle trace of running daemon"
    echo "        yaws --check YawsFile [IncDirs] -- test compile File "
    exit 1
}



debug="";
daemon="";
interactive="";
trace="";
conf="";
runmod="";
sname="";
heart="";
xpath="";
mnesia="";
id="default";
pdist=""
erlarg=""

while [ $# -gt 0 ] 
  do
  arg=$1
  shift;
  case $arg in
      -i|--interactive)
	  interactive="true";
	  debug=" -yaws debug ";
	  daemon="";;
      -w|--winteractive)
	  interactive="true";
	  debug=" -yaws debug ";
	  daemon="";
	  erl=$werl;;
      -D|--daemon)
	  daemon=" -detached ";;
      -d|--debug)
	  debug=" -boot start_sasl -yaws debug ";;
      -t|--tracetraf)
	  trace=" -yaws trace traffic ";;
      -T|--tracehttp)
	  trace=" -yaws trace http ";;
      -I|--id)
	  id=$1
	  shift;;
      -x|--traceout)
	  traceoutput=" -yaws traceoutput ";;
      --trace)
	  traceoutput=" -yaws traceoutput ";
	  trace=" -yaws trace traffic ";;
      -M|--mnesiadir)
	  mnesia=" -mnesia dir '"$1"' -run mnesia start"
	  shift;;
      -c|--conf)
	  conf=" -conf $1 "
	  shift;;
      -pa|--pa)
	  xpath=" ${xpath} -pa $1 "
	  shift;;
      -r|--runmod)
	  runmod=" -runmod $1 "
	  shift;;
      -h|--hup)
	  ex="$erl -noshell -pa ${yawsdir}${delim}ebin -s yaws_ctl hup";;
      -s|--stop)
	  ex="$erl -noshell -pa ${yawsdir}${delim}ebin -s yaws_ctl stop";;
      -ls|--ls)
	  ex="$erl -noshell -pa ${yawsdir}${delim}ebin -s yaws_ctl ls";;
      -S|--status)
	  ex="$erl -noshell -pa ${yawsdir}${delim}ebin -s yaws_ctl status";;
      -load|--load)
	  $erl -noshell -pa ${yawsdir}${delim}ebin -s yaws_ctl load ${id} $*
	  exit 0;;
      -j|--ctltrace)
	  ex="$erl -noshell -pa ${yawsdir}${delim}ebin -s yaws_ctl trace $1"
	  shift;;
      -v|--version) 
	  exec $erl -noshell -pa ${yawsdir}${delim}ebin -s yaws printversion;
	  exit 0;;
      --sname|-sname)
	  sname=" -sname $1 "
	  shift;;
      -name|--name)
	  sname=" -name $1 "
	  shift;;
      -heart|--heart)
	  heart=" -heart ";;
      -proto_dist|--proto_dist)
	  pdist=" -proto_dist $1 "
	  shift;;
      -erlarg|--erlarg)
	  erlarg="$erlarg $1 "
	  shift;;
      -check|--check)
	  mkdir ${HOME}/.yaws/ 2> /dev/null
	  mkdir ${HOME}/.yaws/${ID} 2> /dev/null
	  out=`exec $erl -noshell -pa ${yawsdir}${delim}ebin ${xpath} -s yaws_ctl check ${id} $*`
	  if [ "$?" = "0" ]; then
	      echo "$out"
	      echo "$1" ok
	      exit 0
	  fi
	  echo "$out"
	  exit 1;;
      --to_erl)
	  TO_ERL=yes
	  PIPE_DIR="${vardir}/run/yaws/pipe/$1"
	  shift;;
      --run_erl)
	  RUN_ERL=yes
	  daemon=""
	  PIPE_DIR="${vardir}/run/yaws/pipe/$1"
	  LOG_DIR="${vardir}/log/yaws/erlang-log/$1"
	  shift;;
      *)
	  help
  esac
done


if [ ! -z "${ex}" ]; then
    exec ${ex} ${id}
    exit 0
fi

if [ -n "$TO_ERL" ]; then
    $to_erl $PIPE_DIR/
    exit 0
fi

if [ -n "$RUN_ERL" ]; then
    if [ ! -d $LOG_DIR ]; then
	mkdir -p $LOG_DIR
    fi
    if [ ! -d $PIPE_DIR ]; then
	mkdir -p $PIPE_DIR
    fi
    RUN_ERL="$run_erl -daemon $PIPE_DIR/ $LOG_DIR"
else
    RUN_ERL="eval"
fi

if [ ! -z "${id}" ]; then
    id="-yaws id ${id}"
fi

trace="${trace} ${traceoutput}"

[ "$run_erl" = "eval" ] && [ -z "$daemon" ] && [ -z "$interactive" ] && help

XEC="${daemon} ${heart} -pa ${yawsdir}${delim}ebin  ${xpath} ${sname} ${pdist} ${erlarg} ${debug} -run yaws ${trace} ${conf} ${runmod} ${mnesia} ${id}"

if [ -z "$heart" ] || [ -z "$daemon" ]; then
    HEART_COMMAND="";
else
    export HEART_COMMAND="${ENV_PGM} HEART=true \"$erl\" $XEC";
fi

${RUN_ERL} "exec $erl $XEC"
