#!/bin/sh

name="$0"

usage () {
    cat <<EOF >&2
Usage: $name [options...]
where option is one of:
  -b    show JavaScript parser bootstrap, then stop
  -t    show parsed JavaScript as Coke program tree, then stop
  -e    show Coke program top-level expression evaluation
  -s    show Coke program top-level expression evaluation
  -x    show Coke generated native code (currently BROKEN on PowerPC)
  -h    print generated HTML, then stop
  -o    open a browser on the generated HTML
EOF
    exit 1
}

show=all
stop=none
boot=no

while [ $# -gt 0 ]; do
    case $1 in
	-b)	boot=yes;	show=boot;  stop=boot;	shift;;
	-t)			show=tree;  stop=tree;	shift;;
	-e)			show=eval;  stop=eval;	shift;;
	-s)			show=synt;  stop=synt;	shift;;
	-x)			show=exec;  stop=exec;	shift;;
	-h)			show=html;  stop=html;	shift;;
	-o)			show=open;  stop=open;	shift;;
	*)	usage ;;
    esac
done

run () {
    echo ++ $*
    $*
}

gen () {
    out="$1"
    shift
    echo ++ $*
    $* > $out
}

gen2 () {
    out="$1"
    shift
    echo ++ $*
    $* | tee $out
}

if [ $boot = yes ]; then
    gen compiler-boot.m4o	./m4 bootstrap.m4o compiler.m4
    gen compiler.m4o		./m4 compiler-boot.m4o compiler.m4
    run				cmp  compiler-boot.m4o compiler.m4o
    gen javascript.m4o		./m4 compiler.m4o javascript.m4
fi

[ $show = boot ]	&& cat javascript.m4o
[ $stop = boot ]	&& exit 0

gen demo.tree	./m4 javascript.m4o demo.js
gen demo.k	./cleanup demo.tree

[ $show = tree ]	&& cat demo.k
[ $stop = tree ]	&& exit 0

[ $show = eval ]	&& flags="$flags -ve"
[ $show = synt ]	&& flags="$flags -vs"
[ $show = exec ]	&& flags="$flags -vx"

gen2 demo.html	../jolt/main $flags ds-lib.k demo.k

[ $stop = coke ]	&& exit 0
[ $stop = exec ]	&& exit 0
[ $stop = html ]	&& exit 0

[ $show = open ]	&& run open demo.html

[ $stop = open ]	&& exit 0
