###
###   Makefile for LFD_INFER
###  
###   original written D.Aspinall and M.Hofmann,
###   modified by S.Jost.
###
###
###   ToDos:
###
###     - read the manual and understand how these Makefiles work in detail!
###
###


# $Id: Makefile,v 1.1 2004/12/07 17:30:41 sjost Exp $

TARGET=arthur
TARGETS=arthur

OCAMLC=ocamlc
OCAMLLEX=ocamllex
OCAMLYACC=ocamlyacc
OCAMLOPT=ocamlopt
OCAMLDEP=ocamldep
INCLUDES= -nolabels                 # add all options here
OCAMLFLAGS=$(INCLUDES)              # add other options for ocamlc here
OCAMLOPTFLAGS=$(INCLUDES)           # add other options for ocamlopt here

ML=$(shell ls *.ml)
MLI=$(shell ls *.mli)
CMO=$(ML:.ml=.cmo)
CMI=$(ML:.ml=.cmi)
CMX=$(ML:.ml=.cmx)

MLL=$(shell ls *.mll)
MLY=$(shell ls *.mly)
PARSERML=$(MLY:.mly=.ml)
LEXERML=$(MLL:.mll=.ml)
PARSER= $(PARSERML) $(LEXERML)

# FIXME: ocamlopt is fussy about the order of its arguments.
# Isn't there a way to recover them using ocamldep?
CMX=common.cmx support.cmx types.cmx syntax.cmx argument.cmx memory.cmx builtin.cmx typcheck.cmx parser.cmx lexer.cmx constraints.cmx inference.cmx exec.cmx main.cmx

# FIXME: ditto ocamlc!
CMO=common.cmo support.cmo types.cmo syntax.cmo argument.cmo memory.cmo builtin.cmo typcheck.cmo parser.cmo lexer.cmo constraints.cmo inference.cmo exec.cmo main.cmo



# avoid automatic deletion of intermediates
.SECONDARY: parser.ml parser.mli lexer.ml
# force rebuilding of target

default:  dep
	$(MAKE) main

FORCE:

opt:	dep
	$(MAKE) main.opt

dep:	.depend

parser:	  $(PARSER)

main.opt: $(PARSER) $(CMX) 
	$(OCAMLOPT) -o $(TARGET) $(OCAMLOPTFLAGS) unix.cmxa $(CMX)

main:	$(PARSER) $(CMO) 
	echo $(CMO)
	$(OCAMLC) -o $(TARGET) $(OCAMLFLAGS) unix.cma $(CMO)



# Common rules
.SUFFIXES: .ml .mll .mly .mli .cmo .cmi .cmx .o

.mll.ml:
	$(OCAMLLEX) $<

.mly.ml:
	$(OCAMLYACC) -v $<

.mly.mli:
	$(OCAMLYACC) $<

#.ml.mli:
#	$(OCAMLC) $(OCAMLFLAGS) -c $<

.ml.cmo:
	$(OCAMLC) $(OCAMLFLAGS) -c $<

.mli.cmi:
	$(OCAMLC) $(OCAMLFLAGS) -c $<

.ml.cmx:
	$(OCAMLOPT) $(OCAMLOPTFLAGS) -c $<

# Clean up
clean:
	clear
	rm -f .depend
	rm -f $(TARGETS)
	rm -f *.cm[iox] *.o
	rm -f parser.mli parser.ml
	rm -f lexer.ml

# Dependencies: must make parser first
.depend: $(PARSER) $(ML)
	$(OCAMLDEP) *.mli *.ml > .depend


# Include dependencies if available
ifeq (.depend,$(wildcard .depend))
include .depend
endif


## Names and real mail addresses of developers
## Arguments for rcs2log for ChangeLog target
#
#DEVELOPERS=\
#  -u "da	David Aspinall	da@dcs.ed.ac.uk" \
#  -u "mxh	Martin Hofmann	mxh@dcs.ed.ac.uk" 
#
#ChangeLog:	FORCE
#	rm -f ChangeLog
#	rcs2log -h "dcs.ed.ac.uk" $(DEVELOPERS) | sed 's|/home/resbnd/src/lfpl/||g' >> ChangeLog.prefix
#	mv ChangeLog ChangeLog.old
#	cat ChangeLog.prefix ChangeLog.old > ChangeLog
#	rm ChangeLog.prefix ChangeLog.old




