ZOFILES=std.zo initial.zo more_util.zo univ.zo termfw.zo extraction.zo term.zo more_util.zo listset.zo listmap.zo genterm.zo gen_command.zo gentermio.zo printer.zo search.zo machine.zo pretty.zo command.zo matching.zo trad.zo tactics.zo discriminate.zo program.zo print_program.zo annote.zo verify.zo lexer.zo fmlterm.zo fwfomatch.zo fwtofml.zo fmlenv.zo lazy.zo compile.zo vernac.zo coqtoplevel.zo optimise.zo caml.zo coq.zo version.zo centaur.zo
CLIBFILES=-lunix ../LIB/libc/libcoqc.a
XCLIBFILES=-lunix ../LIB/libc/libcoqc.a ../LIB/librt/Xlib/libx.a
ZOXFILES=interface.zo inter_top.zo
ZMKTOP=camlmktop
CAMLDIR=
ZC=camlc
ZDEP=../bin/camldep
ZLIBS=-I ../LIB/libc -I ../LIB/stream-pp -I ../LIB/librt/rt
ZLIBOBJS=prelude.zo funqueue.zo impqueue.zo pp_control.zo pp.zo stdpp.zo
ZFLAGS= $(ZLIBS)
DESTDIR=/usr/local/bin
MANDIR=/usr/man/man1
CAMLLIB=/usr/local/lib/caml-light
ARCH=`/bin/arch`

all: version coq xcoq state.coq

coq: $(ZOFILES) goml.zo
	$(ZC) $(ZLIBS) -custom -o coq $(ZLIBOBJS) $(ZOFILES) goml.zo $(CLIBFILES)
	@-chmod g+w coq

xcoq: $(ZOFILES) $(ZOXFILES) xgo.zo
	$(ZC) $(ZLIBS) -custom -o xcoq rt.zo $(ZLIBOBJS) $(ZOFILES) $(ZOXFILES) xgo.zo $(XCLIBFILES) -lX11
	@-chmod g+w xcoq

toplevel::
	$(ZMKTOP) $(ZLIBS) -custom -o camllight-getwd.out getwd.zi unix.zi $(CLIBFILES)
	@-chmod g+w camllight-getwd.out

x-toplevel::
	$(ZMKTOP) $(ZLIBS) -custom -o camllight-x-getwd.out getwd.zi unix.zi rt.zo rt.zi $(XCLIBFILES) -lX11
	@-chmod g+w camllight-x-getwd.out

install::
	cp coq ../RELEASED/$(ARCH)/coq.out
	cp state.coq ../RELEASED/$(ARCH)/state.coq
	cp xcoq ../RELEASED/$(ARCH)/xcoq.out || true

state.coq: machine.zo coq
	./coq -os state </dev/null
	@-chmod g+w state.coq
	@-chmod g+w state.coq

clean::
	rm -f state.coq

version: version.zi
	echo "let version = \"V5.8.3 - `date`\";;" > version.ml
	$(ZC) -c $(ZFLAGS) version.ml
	@-chmod g+w version.zo

bench:: state.coq
	time ../coql -image ./coq -is ./state.coq < ../THEORIES/benchmark.v > benchmark.log 2>&1
	@-chmod g+w benchmark.log
	egrep Warn benchmark.log || true
	egrep Error benchmark.log || true
	egrep error benchmark.log || true

long-bench:: state.coq
	time ../coql -image ./coq -is ./state.coq < ../THEORIES/long-benchmark.v > benchmark.log 2>&1
	@-chmod g+w benchmark.log
	egrep Warn benchmark.log || true
	egrep Error benchmark.log || true
	egrep error benchmark.log || true

.SUFFIXES: .mli .ml .zo .zi

.mli.zi:
	$(ZC) $(ZFLAGS) -c $<
	@-chmod g+w $@

.ml.zo:
	$(ZC) $(ZFLAGS) -c $<
	@-chmod g+w $@

depend::
	rm -f Makefile.bak
	cp Makefile Makefile.bak
	sed -n -e '1,/^### DO NOT DELETE THIS LINE/p' Makefile.bak > Makefile
	$(ZDEP) *.ml *.mli >> Makefile

### DO NOT DELETE THIS LINE
annote.zo: command.zi tactics.zi listset.zo matching.zi termfw.zi term.zi \
    extraction.zi univ.zi program.zi trad.zi std.zi print_program.zo \
    initial.zi machine.zi 
caml.zo: caml.zi std.zi more_util.zo optimise.zi fmlenv.zi compile.zi \
    fmlterm.zi 
centaur.zo: coqtoplevel.zi tactics.zi listset.zo pretty.zi term.zi std.zi \
    more_util.zo initial.zi printer.zi machine.zi search.zi vernac.zi 
command.zo: command.zi term.zi extraction.zi std.zi pretty.zi initial.zi \
    machine.zi 
compile.zo: compile.zi lazy.zi fwtofml.zi std.zi more_util.zo lexer.zi \
    fmlenv.zi pretty.zi initial.zi fmlterm.zi 
coq.zo: coqtoplevel.zi tactics.zi initial.zi 
coqtoplevel.zo: coqtoplevel.zi command.zi tactics.zi matching.zi univ.zi \
    std.zi more_util.zo lexer.zi initial.zi verify.zo machine.zi vernac.zi 
discriminate.zo: term.zi extraction.zi tactics.zi std.zi initial.zi \
    machine.zi 
extraction.zo: extraction.zi univ.zi initial.zi termfw.zi 
fmlenv.zo: fmlenv.zi fwtofml.zi termfw.zi fwfomatch.zo fmlterm.zi term.zi \
    extraction.zi std.zi initial.zi machine.zi 
fmlterm.zo: fmlterm.zi std.zi initial.zi printer.zi more_util.zo 
fwfomatch.zo: listmap.zi termfw.zi term.zi extraction.zi univ.zi std.zi \
    initial.zi printer.zi machine.zi 
fwtofml.zo: fwtofml.zi std.zi printer.zi initial.zi termfw.zi fwfomatch.zo \
    fmlterm.zi 
gen_command.zo: command.zi termfw.zi term.zi extraction.zi genterm.zo \
    univ.zi std.zi more_util.zo initial.zi 
genterm.zo: listset.zo termfw.zi term.zi extraction.zi univ.zi std.zi \
    more_util.zo initial.zi 
gentermio.zo: extraction.zi genterm.zo more_util.zo initial.zi 
goml.zo: coq.zo coqtoplevel.zi tactics.zi version.zi centaur.zo std.zi \
    initial.zi fmlenv.zi lexer.zi machine.zi compile.zi vernac.zi 
include-x.zo: coq.zo listmap.zi caml.zi fwtofml.zi pretty.zi listset.zo \
    matching.zi termfw.zi fwfomatch.zo annote.zo term.zi extraction.zi \
    program.zi genterm.zo univ.zi trad.zi std.zi fmlenv.zi lexer.zi \
    print_program.zo printer.zi more_util.zo search.zi lazy.zi \
    gen_command.zo command.zi coqtoplevel.zi tactics.zi xgo.zo optimise.zi \
    fmlterm.zi gentermio.zo interface.zi inter_top.zi initial.zi compile.zi \
    verify.zo machine.zi vernac.zi 
include.zo: coq.zo listmap.zi caml.zi fwtofml.zi pretty.zi listset.zo \
    matching.zi termfw.zi fwfomatch.zo annote.zo term.zi goml.zo \
    extraction.zi program.zi genterm.zo univ.zi trad.zi std.zi fmlenv.zi \
    lexer.zi print_program.zo discriminate.zo printer.zi more_util.zo \
    search.zi lazy.zi gen_command.zo command.zi coqtoplevel.zi tactics.zi \
    optimise.zi fmlterm.zi gentermio.zo initial.zi compile.zi verify.zo \
    machine.zi vernac.zi 
initial.zo: initial.zi std.zi 
inter_top.zo: inter_top.zi interface.zi command.zi coqtoplevel.zi \
    tactics.zi std.zi lexer.zi vernac.zi 
interface.zo: interface.zi term.zi tactics.zi std.zi printer.zi initial.zi 
lazy.zo: lazy.zi std.zi more_util.zo fmlenv.zi fmlterm.zi 
lexer.zo: lexer.zi std.zi 
listmap.zo: listmap.zi std.zi more_util.zo 
listset.zo: std.zi more_util.zo 
machine.zo: machine.zi listmap.zi listset.zo term.zi extraction.zi univ.zi \
    std.zi more_util.zo printer.zi initial.zi search.zi 
matching.zo: matching.zi term.zi extraction.zi univ.zi std.zi printer.zi \
    initial.zi 
more_util.zo: std.zi initial.zi 
optimise.zo: optimise.zi std.zi fmlenv.zi compile.zi fmlterm.zi 
pretty.zo: pretty.zi termfw.zi term.zi extraction.zi univ.zi std.zi \
    printer.zi initial.zi machine.zi search.zi 
print_program.zo: term.zi genterm.zo program.zi univ.zi std.zi more_util.zo \
    printer.zi initial.zi termfw.zi 
printer.zo: printer.zi termfw.zi term.zi extraction.zi genterm.zo univ.zi \
    std.zi more_util.zo initial.zi 
program.zo: program.zi term.zi command.zi extraction.zi tactics.zi trad.zi \
    std.zi initial.zi matching.zi machine.zi termfw.zi 
search.zo: search.zi term.zi std.zi more_util.zo printer.zi initial.zi 
std.zo: std.zi 
tactics.zo: tactics.zi command.zi matching.zi term.zi extraction.zi univ.zi \
    trad.zi std.zi more_util.zo printer.zi initial.zi machine.zi search.zi 
term.zo: term.zi extraction.zi univ.zi std.zi more_util.zo initial.zi 
termfw.zo: termfw.zi univ.zi std.zi initial.zi 
trad.zo: trad.zi command.zi term.zi extraction.zi univ.zi std.zi initial.zi \
    machine.zi 
univ.zo: univ.zi std.zi initial.zi 
verify.zo: gen_command.zo command.zi tactics.zi matching.zi gentermio.zo \
    term.zi extraction.zi genterm.zo univ.zi trad.zi std.zi more_util.zo \
    printer.zi initial.zi machine.zi search.zi 
vernac.zo: vernac.zi listset.zo pretty.zi annote.zo term.zi extraction.zi \
    program.zi std.zi discriminate.zo more_util.zo printer.zi lexer.zi \
    search.zi command.zi tactics.zi initial.zi verify.zo machine.zi \
    compile.zi 
version.zo: version.zi 
xgo.zo: coq.zo coqtoplevel.zi tactics.zi version.zi interface.zi std.zi \
    initial.zi fmlenv.zi lexer.zi inter_top.zi machine.zi compile.zi 
caml.zi: fmlterm.zi 
command.zi: extraction.zi initial.zi machine.zi 
compile.zi: std.zi fmlterm.zi 
extraction.zi: initial.zi termfw.zi 
fmlenv.zi: initial.zi machine.zi fmlterm.zi 
fwtofml.zi: initial.zi termfw.zi fmlterm.zi 
lazy.zi: fmlterm.zi 
machine.zi: term.zi extraction.zi univ.zi initial.zi search.zi 
matching.zi: term.zi 
optimise.zi: fmlterm.zi 
pretty.zi: initial.zi machine.zi 
printer.zi: term.zi initial.zi more_util.zo termfw.zi 
program.zi: term.zi command.zi extraction.zi tactics.zi initial.zi \
    termfw.zi 
search.zi: term.zi initial.zi 
tactics.zi: term.zi command.zi initial.zi 
term.zi: extraction.zi univ.zi std.zi initial.zi 
termfw.zi: initial.zi 
trad.zi: term.zi command.zi initial.zi 
vernac.zi: command.zi program.zi tactics.zi std.zi lexer.zi 
