# Makefile for the Camlot compiler
# Regis Cridlig 1993

include ../configuration

RM=rm -f

Z2K2=z2k2  # fichier a batir

FILES= config.ml misc.ml constants.ml globals.ml \
  locations.ml errors.ml syntax.ml hashtable.ml modules.ml builtins.ml \
  prim_c.ml prim_decl.ml types.ml print_types.ml print_decl.ml \
  type_errors.ml typing.ml k2.ml tr_env.ml match.ml tr_stream.ml \
  par_aux.ml parser.ml lexer.ml typing_decl.ml typing_intf.ml \
  print_decl.ml front.ml convert.ml globalise.ml ecrit.ml \
  compiler.ml z2k2.ml

work: $(Z2K2)

clean : ; - ${RM} $(FILES:.ml=.zi) $(FILES:.ml=.zo) $(FILES:.ml=.ki) \
	          $(FILES:.ml=.k2) $(FILES:.ml=.c) $(FILES:.ml=.o)   \
		   parser.ml parser.mli lexer.ml zinc.zi zinc.zo config.ml

scratch : clean
	- $(RM) $(Z2K2)

install:
	cp $(Z2K2) $(LIBDIR)/$(Z2K2)

# suffixe rules:

.SUFFIXES: .mli .ml .zi .zo .ki .o

%.zi: %.mli
	${ZC} ${ZFLAGS} $<

%.zo: %.mli %.ml %.zi
	$(ZC) $(ZFLAGS) -c $*.ml

%.zi %.zo: %.ml
	${ZC} ${ZFLAGS} -c $<

%.ki: %.mli
	$(Z2K2) $(ZFLAGS) $<

%.o: %.mli %.ml %.ki
	$(CAMLOT) $(ZFLAGS) -c $*.ml

%.ki %.o: %.ml
	$(CAMLOT) ${ZFLAGS} -c $<

lexer.ml: lexer.mll
	$(LEX) lexer.mll

parser.ml parser.mli: parser.mly
	$(YACC) parser.mly

config.ml: config.mlp
	cp config.mlp config.ml
	@echo "let path_library = ref \"$(LIBDIR)/\""  >> config.ml
	@echo "and path_tmp     =     \"$(TMP)/\""     >> config.ml
	@echo "and path_include =     \"$(LIBDIR)/\";;">> config.ml

# on batit le compilateur

$(Z2K2): $(FILES:.ml=.zo)
	$(ZC) $(ZFLAGS) -o $@ $^

### dependances

config.zi config.zo:
misc.zi:
misc.zo: config.zi
constants.zi:
constants.zo: misc.zi
globals.zi: constants.zi
globals.zo: constants.zi
locations.zi:
locations.zo: misc.zi
errors.zi errors.zo: misc.zi constants.zi globals.zi locations.zi
syntax.zi: constants.zi locations.zi globals.zi k2.zi
syntax.zo:
hashtable.zi:
hashtable.zo: misc.zi
modules.zi modules.zo: misc.zi constants.zi globals.zi errors.zi k2.zi
builtins.zi builtins.zo: misc.zi constants.zi globals.zi modules.zi
prim_c.zi prim_c.zo: k2.zi
prim_decl.zi: k2.zi globals.zi
prim_decl.zo: k2.zi globals.zi misc.zi prim_c.zi
types.zi types.zo: misc.zi globals.zi builtins.zi constants.zi modules.zi
print_types.zi print_types.zo: misc.zi constants.zi globals.zi builtins.zi types.zi modules.zi
print_decl.zi print_decl.zo: misc.zi constants.zi globals.zi print_types.zi
type_errors.zi type_errors.zo: misc.zi constants.zi globals.zi errors.zi locations.zi syntax.zi types.zi print_types.zi k2.zi
typing.zi typing.zo: misc.zi constants.zi globals.zi syntax.zi builtins.zi modules.zi types.zi errors.zi type_errors.zi locations.zi k2.zi
par_aux.zi par_aux.zo: constants.zi globals.zi locations.zi syntax.zi modules.zi builtins.zi errors.zi
parser.zi: syntax.zi
parser.zo: par_aux.zi constants.zi globals.zi builtins.zi syntax.zi types.zi typing.zi prim_decl.zi k2.zi
lexer.zi lexer.zo: misc.zi parser.zi
typing_decl.zi typing_decl.zo: constants.zi globals.zi builtins.zi locations.zi syntax.zi modules.zi types.zi print_types.zi typing.zi type_errors.zi k2.zi
typing_intf.zi typing_intf.zo: misc.zi globals.zi modules.zi types.zi type_errors.zi k2.zi
k2.zi k2.zo: constants.zi hashtable.zi globals.zi
tr_env.zi tr_env.zo: misc.zi constants.zi syntax.zi k2.zi globals.zi type_errors.zi
tr_stream.zi tr_stream.zo: misc.zi constants.zi syntax.zi k2.zi match.zi tr_env.zi hashtable.zi config.zi
match.zi: syntax.zi k2.zi locations.zi globals.zi
match.zo: misc.zi constants.zi globals.zi syntax.zi locations.zi k2.zi
front.zi front.zo: misc.zi constants.zi globals.zi syntax.zi locations.zi builtins.zi k2.zi match.zi prim_decl.zi types.zi tr_env.zi tr_stream.zo type_errors.zi
convert.zi: k2.zi 
convert.zo: k2.zi misc.zi
globalise.zi: hashtable.zi k2.zi
globalise.zo: hashtable.zi k2.zi misc.zi constants.zi convert.zi
ecrit.zi: k2.zi
ecrit.zo: misc.zi k2.zi constants.zi globals.zi builtins.zi config.zi match.zi
compiler.zi:
compiler.zo: misc.zi constants.zi lexer.zi parser.zi locations.zi syntax.zi builtins.zi hashtable.zi globals.zi modules.zi types.zi type_errors.zi typing.zi typing_decl.zi typing_intf.zi front.zi globalise.zi ecrit.zi k2.zi config.zi print_decl.zi
z2k2.zi z2k2.zo: misc.zi modules.zi compiler.zi config.zi

