HC      = ghc
WASHHTML_DIR = WASH
WASH_OPTS = -iasdl -i$(WASHHTML_DIR) -L$(WASHHTML_DIR) -lWASHHTML
HC_OPTS =  $(WASH_OPTS) -package data -package util  -fwarn-incomplete-patterns
#-fglasgow-exts
HC_LD_OPTS =  $(WASH_OPTS) -package data -package util
SH = sh
ifeq ($(OSTYPE),NetBSD)
HC_LD_OPTS += -L/usr/lib
SH = /usr/pkg/emul/linux/bin/sh
endif

EXECT = check_sharing

SRCS = \
	$(wildcard asdl/*.hs) \
	Camelot_absyn.hs \
	Camelot_annot.hs \
	Camelot_annot_UA.hs \
	Camelot_annot_html.hs \
	Camelot_infer_annot.hs \
	Camelot_infer_destr.hs \
	Camelot_infer_annot_UA.hs \
	Camelot_infer_destr_UA.hs \
	Deec_main.hs \
	Misc.hs

OBJS = $(subst .hs,.o,$(SRCS))

.SUFFIXES : .o .hs .hi .lhs .hc .s

ifdef STATIC
$(EXECT): doasdl dowash $(OBJS)
	rm -f $@
	$(HC) -v -o $@ $(HC_LD_OPTS) $(OBJS) >&- 2> $(EXECT).log
	@echo "linking statically..."
	$(SH) -c "`grep collect2 $(EXECT).log | sed 's/collect2/collect2 -static/'`"
	strip $@
else
$(EXECT): doasdl dowash $(OBJS)
	rm -f $@
	$(HC) -o $@ $(HC_LD_OPTS) $(OBJS)
	strip $@
endif

static:
	$(MAKE) $(EXECT) STATIC=1

.PHONY: doasdl dowash
doasdl:
	cd asdl; $(MAKE)

dowash:
	cd $(WASHHTML_DIR); $(MAKE)

depickle: depickle.hs asdl/Camelot_absyn_ASDL.hs asdl/Camelot_absyn_ASDLUtil.hs
	ghc -L/usr/lib -iasdl -fglasgow-exts -package data -package util -o $@ --make $<
	strip $@

clean:
	rm -rf *.o *.hi *.bak *~ $(EXECT)

# Standard suffix rules
.o.hi:
	@:

.lhs.o:
	$(HC) -c $< $(HC_OPTS)

.hs.o:
	$(HC) -c $< $(HC_OPTS)

depend :
	ghc -M $(HC_OPTS) $(SRCS)

# DO NOT DELETE: Beginning of Haskell dependencies
asdl/Assertions_ASDL.o : asdl/Assertions_ASDL.hs
asdl/Assertions_ASDL.o : asdl/StdPrims.hi
asdl/Assertions_ASDL.o : asdl/StdPkl.hi
asdl/Assertions_ASDL.o : asdl/SexpPkl.hi
asdl/Assertions_ASDLUtil.o : asdl/Assertions_ASDLUtil.hs
asdl/Assertions_ASDLUtil.o : asdl/StdPrimsUtil.hi
asdl/Assertions_ASDLUtil.o : asdl/StdPrims.hi
asdl/Assertions_ASDLUtil.o : asdl/Assertions_ASDL.hi
asdl/Assertions_ASDLUtil.o : asdl/StdPkl.hi
asdl/Assertions_ASDLUtil.o : asdl/SexpPkl.hi
asdl/Camelot_absyn_ASDL.o : asdl/Camelot_absyn_ASDL.hs
asdl/Camelot_absyn_ASDL.o : asdl/Assertions_ASDL.hi
asdl/Camelot_absyn_ASDL.o : asdl/StdPrims.hi
asdl/Camelot_absyn_ASDL.o : asdl/StdPkl.hi
asdl/Camelot_absyn_ASDL.o : asdl/SexpPkl.hi
asdl/Camelot_absyn_ASDLUtil.o : asdl/Camelot_absyn_ASDLUtil.hs
asdl/Camelot_absyn_ASDLUtil.o : asdl/Assertions_ASDLUtil.hi
asdl/Camelot_absyn_ASDLUtil.o : asdl/StdPrimsUtil.hi
asdl/Camelot_absyn_ASDLUtil.o : asdl/Assertions_ASDL.hi
asdl/Camelot_absyn_ASDLUtil.o : asdl/StdPrims.hi
asdl/Camelot_absyn_ASDLUtil.o : asdl/Camelot_absyn_ASDL.hi
asdl/Camelot_absyn_ASDLUtil.o : asdl/StdPkl.hi
asdl/Camelot_absyn_ASDLUtil.o : asdl/SexpPkl.hi
asdl/SexpLex.o : asdl/SexpLex.hs
asdl/SexpPkl.o : asdl/SexpPkl.hs
asdl/SexpPkl.o : asdl/SexpLex.hi
asdl/StdPkl.o : asdl/StdPkl.hs
asdl/StdPrims.o : asdl/StdPrims.hs
asdl/StdPrimsUtil.o : asdl/StdPrimsUtil.hs
asdl/StdPrimsUtil.o : asdl/SexpLex.hi
asdl/StdPrimsUtil.o : asdl/SexpPkl.hi
asdl/StdPrimsUtil.o : asdl/StdPkl.hi
asdl/StdPrimsUtil.o : asdl/StdPrims.hi
asdl/StdTypes.o : asdl/StdTypes.hs
asdl/StdTypes.o : asdl/StdPrims.hi
asdl/StdTypes.o : asdl/StdPkl.hi
asdl/StdTypes.o : asdl/SexpPkl.hi
Camelot_absyn.o : Camelot_absyn.hs
Camelot_absyn.o : asdl/Camelot_absyn_ASDLUtil.hi
Camelot_absyn.o : asdl/Camelot_absyn_ASDL.hi
Camelot_absyn.o : asdl/Assertions_ASDL.hi
Camelot_annot.o : Camelot_annot.hs
Camelot_annot.o : Misc.hi
Camelot_annot.o : Camelot_absyn.hi
Camelot_annot.o : asdl/Camelot_absyn_ASDL.hi
Camelot_annot.o : asdl/Assertions_ASDL.hi
Camelot_annot_UA.o : Camelot_annot_UA.hs
Camelot_annot_UA.o : Misc.hi
Camelot_annot_UA.o : Camelot_absyn.hi
Camelot_annot_UA.o : asdl/Camelot_absyn_ASDL.hi
Camelot_annot_UA.o : asdl/Assertions_ASDL.hi
Camelot_annot_html.o : Camelot_annot_html.hs
Camelot_annot_html.o : WASH/HTMLMonad.hi
Camelot_annot_html.o : Misc.hi
Camelot_annot_html.o : ./Camelot_infer_annot.hi
Camelot_annot_html.o : Camelot_annot.hi
Camelot_annot_html.o : Camelot_absyn.hi
Camelot_annot_html.o : asdl/Camelot_absyn_ASDL.hi
Camelot_infer_annot.o : Camelot_infer_annot.hs
Camelot_infer_annot.o : Misc.hi
Camelot_infer_annot.o : Camelot_annot.hi
Camelot_infer_annot.o : Camelot_absyn.hi
Camelot_infer_annot.o : asdl/Camelot_absyn_ASDL.hi
Camelot_infer_destr.o : Camelot_infer_destr.hs
Camelot_infer_destr.o : Misc.hi
Camelot_infer_destr.o : ./Camelot_infer_annot.hi
Camelot_infer_destr.o : Camelot_annot.hi
Camelot_infer_destr.o : Camelot_absyn.hi
Camelot_infer_destr.o : asdl/Camelot_absyn_ASDL.hi
Camelot_infer_annot_UA.o : Camelot_infer_annot_UA.hs
Camelot_infer_annot_UA.o : Misc.hi
Camelot_infer_annot_UA.o : Camelot_annot_UA.hi
Camelot_infer_annot_UA.o : Camelot_absyn.hi
Camelot_infer_annot_UA.o : asdl/Camelot_absyn_ASDL.hi
Camelot_infer_destr_UA.o : Camelot_infer_destr_UA.hs
Camelot_infer_destr_UA.o : Camelot_annot_UA.hi
Camelot_infer_destr_UA.o : Camelot_absyn.hi
Camelot_infer_destr_UA.o : asdl/Camelot_absyn_ASDL.hi
Deec_main.o : Deec_main.hs
Deec_main.o : Misc.hi
Deec_main.o : ./Camelot_infer_destr_UA.hi
Deec_main.o : ./Camelot_infer_annot_UA.hi
Deec_main.o : ./Camelot_infer_destr.hi
Deec_main.o : ./Camelot_infer_annot.hi
Deec_main.o : ./Camelot_annot_html.hi
Deec_main.o : Camelot_annot_UA.hi
Deec_main.o : Camelot_annot.hi
Deec_main.o : asdl/Camelot_absyn_ASDL.hi
Deec_main.o : Camelot_absyn.hi
Misc.o : Misc.hs
# DO NOT DELETE: End of Haskell dependencies
