# $Id: Makefile,v 6.5 2011-03-15 12:12:40 deraugla Exp $

include ../config/Makefile

INCLUDES=-I ../main -I ../boot
OCAMLCFLAGS=$(WARNERR) $(INCLUDES)
OBJS=pa_o.cmo pa_op.cmo pa_oop.cmo pa_sml.cmo pa_lisp.cmo pa_scheme.cmo pa_extfold.cmo pa_extfun.cmo pa_extprint.cmo pa_lefteval.cmo pa_mkast.cmo pa_mktest.cmo pa_pprintf.cmo pa_pragma.cmo pa_reloc.cmo pr_r.cmo pr_ro.cmo pr_rp.cmo pr_o.cmo pr_op.cmo pr_scheme.cmo pr_schemep.cmo pr_extend.cmo pr_extfun.cmo pr_extprint.cmo pr_depend.cmo pr_null.cmo q_phony.cmo
CAMLP5OM=pa_o.cmo pa_op.cmo ../meta/pr_dump.cmo
CAMLP5SCHM=pa_scheme.cmo ../meta/pr_dump.cmo
CAMLP5OMX=pa_o.cmx pa_op.cmx ../meta/pr_dump.cmx
SHELL=/bin/sh
COUT=$(OBJS) camlp5o$(EXE) camlp5sch$(EXE)
COPT=$(OBJS:.cmo=.cmx) camlp5o.opt

all: $(COUT) mkcamlp5.sh META
opt: $(COPT) mkcamlp5.opt.sh

# these ones must be compiled with new created camlp5:

pa_lisp.cmo pa_lisp.cmx: pa_lisp.ml
	$(MAKE) $(NO_PR_DIR) -f Makefile.withnew $@
pa_scheme.cmo pa_scheme.cmx: pa_scheme.ml
	$(MAKE) $(NO_PR_DIR) -f Makefile.withnew $@
pa_extfold.cmo pa_extfold.cmx: pa_extfold.ml
	$(MAKE) $(NO_PR_DIR) -f Makefile.withnew $@
pr_r.cmo pr_r.cmx: pr_r.ml
	$(MAKE) $(NO_PR_DIR) -f Makefile.withnew $@
pr_ro.cmo pr_ro.cmx: pr_ro.ml
	$(MAKE) $(NO_PR_DIR) -f Makefile.withnew $@
pr_rp.cmo pr_rp.cmx: pr_rp.ml
	$(MAKE) $(NO_PR_DIR) -f Makefile.withnew $@
pr_o.cmo pr_o.cmx: pr_o.ml
	$(MAKE) $(NO_PR_DIR) -f Makefile.withnew $@
pr_op.cmo pr_op.cmx: pr_op.ml
	$(MAKE) $(NO_PR_DIR) -f Makefile.withnew $@
pr_scheme.cmo pr_scheme.cmx: pr_scheme.ml
	$(MAKE) $(NO_PR_DIR) -f Makefile.withnew $@
pr_schemep.cmo pr_schemep.cmx: pr_schemep.ml
	$(MAKE) $(NO_PR_DIR) -f Makefile.withnew $@
pr_extend.cmo pr_extend.cmx: pr_extend.ml
	$(MAKE) $(NO_PR_DIR) -f Makefile.withnew $@
pr_extfun.cmo pr_extfun.cmx: pr_extfun.ml
	$(MAKE) $(NO_PR_DIR) -f Makefile.withnew $@
pr_extprint.cmo pr_extprint.cmx: pr_extprint.ml
	$(MAKE) $(NO_PR_DIR) -f Makefile.withnew $@
q_phony.cmo q_phony.cmx: q_phony.ml
	$(MAKE) $(NO_PR_DIR) -f Makefile.withnew $@

META: META.tpl
	sed -e "s|@VERSION@|$(VERSION)|" -e "s|@CAMLP5DIR@|$(LIBDIR)/camlp5|" META.tpl > META


camlp5o$(EXE): ../main/camlp5$(EXE) $(CAMLP5OM)
	rm -f camlp5o$(EXE)
	cd ../main; $(MAKE) CAMLP5=../etc/camlp5o$(EXE) CAMLP5M="-I ../etc $(CAMLP5OM)"

camlp5sch$(EXE): ../main/camlp5$(EXE) $(CAMLP5SCHM)
	rm -f camlp5sch$(EXE)
	cd ../main; $(MAKE) CAMLP5=../etc/camlp5sch$(EXE) CAMLP5M="-I ../etc $(CAMLP5SCHM)"

camlp5o.opt: $(CAMLP5OMX)
	rm -f camlp5o.opt
	cd ../main; $(MAKE) optp5 CAMLP5OPT=../etc/camlp5o.opt CAMLP5M="-I ../etc $(CAMLP5OMX)"

mkcamlp5.sh: mkcamlp5.sh.tpl
	sed -e "s!LIBDIR!$(LIBDIR)!g" mkcamlp5.sh.tpl > mkcamlp5.sh

mkcamlp5.opt.sh: mkcamlp5.opt.sh.tpl
	sed -e "s!LIBDIR!$(LIBDIR)!g" mkcamlp5.opt.sh.tpl > mkcamlp5.opt.sh

bootstrap_scheme:
	@$(MAKE) $(NO_PR_DIR) bootstrap_l L=scheme
compare_scheme:
	@$(MAKE) $(NO_PR_DIR) compare_l L=scheme
bootstrap_lisp:
	@$(MAKE) $(NO_PR_DIR) bootstrap_l L=lisp
compare_lisp:
	@$(MAKE) $(NO_PR_DIR) compare_l L=lisp

bootstrap_l:
	ocamlrun$(EXE) ../boot/camlp5 ./pa_$Lr.cmo -I ../boot pa_extend.cmo ./pr_r.cmo ./pr_extend.cmo ./pr_rp.cmo ./q_phony.cmo pa_$L.ml > tmp
	mv pa_$Lr.ml pa_$Lr.ml.old
	sed -e 's/^;; \(.*\)$$/(* \1 *)/' -e 's/^; \(.*\)$$/(* \1 *)/' -e 's|./pa_$Lr.cmo|pa_r.cmo pa_rp.cmo|' -e 's/$$Id.*\$$/File generated by pretty print; do not edit!/' tmp > pa_$Lr.ml
	rm -f tmp

compare_l:
	ocamlrun$(EXE) ../boot/camlp5 ./pa_$Lr.cmo -I ../boot pa_extend.cmo ./pr_r.cmo ./pr_extend.cmo ./pr_rp.cmo ./q_phony.cmo pa_$L.ml | sed -e 's/^;; \(.*\)$$/(* \1 *)/' -e 's/^; \(.*\)$$/(* \1 *)/' -e 's|./pa_$Lr.cmo|pa_r.cmo pa_rp.cmo|' -e 's/$$Id.*\$$/File generated by pretty print; do not edit!/' | diff -c pa_$Lr.ml -

clean::
	rm -f *.cm* *.pp[io] *.[ao] *.obj *.lib *.bak .*.bak *.out *.opt
	rm -f mkcamlp5.sh mkcamlp5.opt.sh camlp5o$(EXE) camlp5sch$(EXE)
	rm -f META

depend:
	cp .depend .depend.bak
	> .depend
	@export LC_ALL=C; for i in $$(ls *.mli *.ml); do \
	  ../tools/depend.sh $(INCLUDES) $$i | \
	  sed -e 's| $(OTOP)| $$(OTOP)|g' >> .depend; \
	done

get_promote:

install:
	-$(MKDIR) "$(DESTDIR)$(LIBDIR)/camlp5" "$(DESTDIR)$(BINDIR)"
	rm -f "$(DESTDIR)$(LIBDIR)/camlp5/pa_lex.cmo"
	cp $(OBJS) "$(DESTDIR)$(LIBDIR)/camlp5/."
	cp lib.sml "$(DESTDIR)$(LIBDIR)/camlp5/."
	cp camlp5o$(EXE) camlp5sch$(EXE) "$(DESTDIR)$(BINDIR)/."
	cp mkcamlp5.sh "$(DESTDIR)$(BINDIR)/mkcamlp5"
	chmod a+x "$(DESTDIR)$(BINDIR)/mkcamlp5"
	if test -f pa_o.cmx; then \
	  cp $(OBJS:.cmo=.cmx) "$(DESTDIR)$(LIBDIR)/camlp5/."; \
	  for i in $(OBJS:.cmo=); do \
	    cp $$i$(EXT_OBJ) "$(DESTDIR)$(LIBDIR)/camlp5/."; \
	  done; \
	  cp camlp5o.opt "$(DESTDIR)$(BINDIR)/."; \
	  cp mkcamlp5.opt.sh "$(DESTDIR)$(BINDIR)/mkcamlp5.opt"; \
	  chmod a+x "$(DESTDIR)$(BINDIR)/mkcamlp5.opt"; \
	fi

pa_lisp.cmo: pa_lispr.cmo
pa_scheme.cmo: pa_schemer.cmo
pr_extend.cmo: pa_extfun.cmo pa_extprint.cmo pa_pprintf.cmo
pr_extfun.cmo: pa_extfun.cmo pa_extprint.cmo pa_pprintf.cmo
pr_extprint.cmo: pa_extfun.cmo pa_extprint.cmo pa_pprintf.cmo
pr_o.cmo: pa_extfun.cmo pa_extprint.cmo pa_pprintf.cmo
pr_op.cmo: pa_extfun.cmo pa_extprint.cmo pa_pprintf.cmo
pr_r.cmo: pa_extfun.cmo pa_extprint.cmo pa_pprintf.cmo
pr_ro.cmo: pa_extfun.cmo pa_extprint.cmo pa_pprintf.cmo
pr_rp.cmo: pa_extfun.cmo pa_extprint.cmo pa_pprintf.cmo
pr_scheme.cmo: pa_extfun.cmo pa_extprint.cmo pa_pprintf.cmo
pr_schemep.cmo: pa_extfun.cmo pa_extprint.cmo pa_pprintf.cmo
q_phony.cmo: pa_extfun.cmo pa_extprint.cmo pa_pprintf.cmo

include .depend
