#!/bin/sh

yawsdir="/usr/lib/erlang/lib/yaws-1.77"
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 -m $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 "            --setcookie X    --  set an erlang cookie" 
    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 --stop [--id ID]      -- stop the daemon "
    echo "        yaws --debug-dump [--id ID]-- produce a debug dump "
    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;;
      --debug-dump)
          $erl -noshell -pa ${yawsdir}${delim}ebin -s yaws_ctl debug_dump ${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;;
       -setcookie|--setcookie)
         erlarg="$erlarg -setcookie $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"
