# Makefile,v

include ../config/Makefile

INCLUDES=-I ../main -I ../boot -I ../lib
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) $(CAMLP5N)o$(EXE) $(CAMLP5N)sch$(EXE)
COPT=$(OBJS:.cmo=.cmx) $(CAMLP5N)o.opt

all: $(COUT) mk$(CAMLP5N).sh META
opt: $(COPT) mk$(CAMLP5N).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)/$(CAMLP5N)|" META.tpl > META


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

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

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

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

mk$(CAMLP5N).opt.sh: mkcamlp5.opt.sh.tpl
	sed -e "s!LIBDIR!$(LIBDIR)!g" -e "s!OCAMLN!$(OCAMLN)!g" -e "s!CAMLP5N!$(CAMLP5N)!g" mkcamlp5.opt.sh.tpl > mk$(CAMLP5N).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/$(CAMLP5N) ./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/$(CAMLP5N) ./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 mk$(CAMLP5N).sh mk$(CAMLP5N).opt.sh $(CAMLP5N)o$(EXE) $(CAMLP5N)sch$(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) -name $(CAMLP5N) $$i | \
	  sed -e 's| $(OTOP)| $$(OTOP)|g' >> .depend; \
	done

get_promote:

install:
	-$(MKDIR) "$(DESTDIR)$(LIBDIR)/$(CAMLP5N)" "$(DESTDIR)$(BINDIR)"
	rm -f "$(DESTDIR)$(LIBDIR)/$(CAMLP5N)/pa_lex.cmo"
	cp $(OBJS) "$(DESTDIR)$(LIBDIR)/$(CAMLP5N)/."
	cp lib.sml "$(DESTDIR)$(LIBDIR)/$(CAMLP5N)/."
	cp $(CAMLP5N)o$(EXE) $(CAMLP5N)sch$(EXE) "$(DESTDIR)$(BINDIR)/."
	cp mk$(CAMLP5N).sh "$(DESTDIR)$(BINDIR)/mk$(CAMLP5N)"
	chmod a+x "$(DESTDIR)$(BINDIR)/mk$(CAMLP5N)"
	if test -f pa_o.cmx; then \
	  cp $(OBJS:.cmo=.cmx) "$(DESTDIR)$(LIBDIR)/$(CAMLP5N)/."; \
	  for i in $(OBJS:.cmo=); do \
	    cp $$i$(EXT_OBJ) "$(DESTDIR)$(LIBDIR)/$(CAMLP5N)/."; \
	  done; \
	  cp $(CAMLP5N)o.opt "$(DESTDIR)$(BINDIR)/."; \
	  cp mk$(CAMLP5N).opt.sh "$(DESTDIR)$(BINDIR)/mk$(CAMLP5N).opt"; \
	  chmod a+x "$(DESTDIR)$(BINDIR)/mk$(CAMLP5N).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
