# Makefile for ASDL-generated files.  Many of these need to be repaired before
# use;  all repairs are done in this directory.

SRC=Absyn.asdl Assertions.asdl
MODULES=Camelot_absyn_ASDL Assertions_ASDL
mODULES=camelot_absyn_ASDL assertions_ASDL

HS:= $(addsuffix .hs, $(MODULES)) $(addsuffix Util.hs, $(MODULES))
SML:= $(addsuffix .sml, $(MODULES)) $(addsuffix Util.sml, $(MODULES))
OCAML:= $(addsuffix .ml, $(mODULES)) $(addsuffix Util.ml, $(mODULES))

all: $(SML) $(OCAML) $(HS)

allsml=$(wildcard *.sml)

$(SML): $(SRC)
	./asdlGen -p std,sexp -l sml $^
	$(MAKE) repair-sml

repair-sml:  # Do we really need t?
	-mkdir t
	rm -rf t/*
	mv $(allsml) t/
	$(MAKE) -f mk.nosig $(allsml)
	rm -r t

$(OCAML): $(SRC)
	./asdlGen -p std,sexp -l ocaml $^
	$(MAKE) repair-ocaml
	touch $(OCAML)  # This was commented out;  why??

repair-ocaml: 
	sed 's/SexpPkl.IOError/StdPkl.IOError/g' assertions_ASDLUtil.ml > tmp.sed
	mv tmp.sed assertions_ASDLUtil.ml
	sed 's/SexpPkl.IOError/StdPkl.IOError/g' camelot_absyn_ASDLUtil.ml > tmp.sed
	mv tmp.sed camelot_absyn_ASDLUtil.ml


$(HS): $(SRC)
	./asdlGen -p std,sexp -l haskell $^
	$(MAKE) repair-hs

STDPKL := StdPkl.hs
SEXPLEX := SexpLex.hs
STDPRIMSUTIL := StdPrimsUtil.hs
repair-hs: # use sed scripts to fix bad output from asdlGen
	-mkdir t
	-rm -rf t/*
	mv $(HS) t/
	$(MAKE) -f mk.noioError $(HS)
	mv $(STDPKL) t/
	./fixStdPkl t/$(STDPKL) > $(STDPKL)
	mv $(SEXPLEX) t/
	./fixSexpLex t/$(SEXPLEX) > $(SEXPLEX)
	mv $(STDPRIMSUTIL) t/
	./fixStdPrimsUtil t/$(STDPRIMSUTIL) > $(STDPRIMSUTIL)
	rm -r t

clean:
	rm -f *.sig *.sml *.cm *.ml *.mli *.hs
