# $Id: Makefile,v 1.32 2000/11/15 01:48:03 selinger Exp $

all: ppl ppli

# ----------------------------------------------------------------------
# common rules

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

.ml.cmo:
	ocamlc -c $<

.mli.cmi:
	ocamlc -c $<

.ml.cmx:
	ocamlopt -c $<

# ----------------------------------------------------------------------
# lexer and parser

parser.ml parser.mli: parser.mly
	ocamlyacc parser.mly

lexer.ml: lexer.mll
	ocamllex lexer.mll

OBJS = library.cmo lambda.cmo types.cmo exn.cmo stdlib.cmo opt.cmo cbn.cmo \
	parser.cmo lexer.cmo frontend.cmo unifier.cmo pseudo.cmo typing.cmo \
	compiler.cmo 

OPTS = library.cmx lambda.cmx types.cmx exn.cmx stdlib.cmx opt.cmx cbn.cmx \
	parser.cmx lexer.cmx frontend.cmx unifier.cmx pseudo.cmx typing.cmx \
	compiler.cmx

ppl: $(OBJS) ppl.cmo
	ocamlc -o ppl $(OBJS) ppl.cmo

ppl.cma: $(OBJS)
	ocamlc -a -o ppl.cma $(OBJS)

ppl.opt: $(OPTS) ppl.cmx
	ocamlopt -o ppl.opt $(OPTS) ppl.cmx
	strip ppl.opt

# ----------------------------------------------------------------------
# ppli target

ppli: ppli.in
	echo \#!`which wish` > ppli
	cat ppli.in >> ppli
	chmod +x ppli

# ----------------------------------------------------------------------
# make distribution

DISTDIR=ppl-0.2

dist: depend
	(cd doc; make)
	rm -rf $(DISTDIR)
	mkdir $(DISTDIR) $(DISTDIR)/doc $(DISTDIR)/examples
	cp -p *.ml Makefile depend lexer.mll parser.mly ppli.in pseudolib.h *.pc ChangeLog $(DISTDIR)
	rm $(DISTDIR)/lexer.ml $(DISTDIR)/parser.ml
	cp -p doc/ppl.dvi doc/ppl.ps doc/ppl.2up.ps doc/ppl.pdf doc/INSTALL doc/index.html $(DISTDIR)/doc
	cp -p samplefiles/*.ppl samplefiles/programs.txt $(DISTDIR)/examples
	tar -cf $(DISTDIR).tar $(DISTDIR)
	rm -rf $(DISTDIR)
	gzip -f $(DISTDIR).tar

# ----------------------------------------------------------------------
# make (or update) website

WEBBASE=/u/selinger/www/ppl

www:
	make dist
	cp -p $(DISTDIR).tar.gz $(WEBBASE)
	cp -p doc/ppl.dvi doc/ppl.ps doc/ppl.2up.ps doc/ppl.pdf doc/INSTALL $(WEBBASE)/doc
	(cd $(WEBBASE); tar -zxf $(DISTDIR).tar.gz)
	(cd $(WEBBASE)/doc; gzip -f ppl.dvi ppl.ps ppl.2up.ps ppl.pdf)
	cp -p doc/index.html $(WEBBASE)
	chmod -R a+rX $(WEBBASE)
	echo "Reminder: directory $(WEBBASE)/bin must be maintained manually"


# ----------------------------------------------------------------------
# auxiliary targets

clean: 
	rm -f *~ *.cma *.cmo *.cmi *.cmx *.o parser.ml parser.mli lexer.ml

cleanall: clean
	rm -f ppl ppli ppl.opt $(DISTDIR).tar $(DISTDIR).tar.gz

# ----------------------------------------------------------------------
# dependencies

depend: lexer.ml parser.ml parser.mli
	ocamldep *.ml *.mli > depend

include depend
