CAMLC=ocamlc
COMPFLAGS=$(INCLUDES)
LINKFLAGS=
CAMLYACC=ocamlyacc
YACCFLAGS=-v
CAMLLEX=ocamllex
CAMLDEP=ocamldep
DEPFLAGS=$(INCLUDES)
SHELL=/bin/sh
MKDIR=mkdir -p

INCLUDES=-I utils -I parsing

UTILS=utils/misc.cmo utils/clflags.cmo utils/terminfo.cmo

PARSING=parsing/linenum.cmo parsing/location.cmo parsing/longident.cmo \
  parsing/syntaxerr.cmo parsing/pstream.cmo parsing/parser.cmo \
  parsing/lexer.cmo parsing/parse.cmo

TRANSLOBJS=$(UTILS) $(PARSING) \
  translate.cmo main.cmo

ocaml1to2: $(TRANSLOBJS)
	$(CAMLC) -o ocaml1to2 $(TRANSLOBJS)

clean::
	rm -f ocaml1to2

# The parser

parsing/parser.mli parsing/parser.ml: parsing/parser.mly
	$(CAMLYACC) $(YACCFLAGS) parsing/parser.mly

clean::
	rm -f parsing/parser.mli parsing/parser.ml parsing/parser.output

beforedepend:: parsing/parser.mli parsing/parser.ml

# The lexer

parsing/lexer.ml: parsing/lexer.mll
	$(CAMLLEX) parsing/lexer.mll

clean::
	rm -f parsing/lexer.ml

beforedepend:: parsing/lexer.ml

# The auxiliary lexer for counting line numbers

parsing/linenum.ml: parsing/linenum.mll
	$(CAMLLEX) parsing/linenum.mll

clean::
	rm -f parsing/linenum.ml

beforedepend:: parsing/linenum.ml

# Default rules

.SUFFIXES: .ml .mli .cmo .cmi .cmx

.ml.cmo:
	$(CAMLC) $(COMPFLAGS) -c $<

.mli.cmi:
	$(CAMLC) $(COMPFLAGS) -c $<

.ml.cmx:
	$(CAMLOPT) $(COMPFLAGS) -c $<

# Cleanup

clean::
	rm -f utils/*.cm[iox] utils/*.[so] utils/*~
	rm -f parsing/*.cm[iox] parsing/*.[so] parsing/*~
	rm -f *.cm[iox] *.[so] *~

# Dependencies

depend: beforedepend
	$(CAMLDEP) $(DEPFLAGS) utils/*.mli utils/*.ml parsing/*.mli parsing/*.ml *.mli *.ml > .depend

include .depend
