PACKAGES = parsec mtl pretty
EXPOSE_PACKAGES = $(addprefix -package , $(PACKAGES))

#CFLAGS = ...
LFLAGS = $(EXPOSE_PACKAGES)

COMPILE = ghc -c
DEPEND = ghc -M
LINK = ghc -o

CORE = Tools/Instances Tools/Errors/Class Tools/Errors \
	Parametric/Error Parametric/AST Parametric/Parser/Error Parametric/Parser Parametric/Pretty \
	PTS/AST PTS/Parser PTS/Pretty PTS/Debug PTS/Diff PTS/Core

PTS = PTS/Main
QUOTE = PTS/Quote PTS/Quote/Main

SRCS = $(addsuffix .hs, $(CORE) $(PTS) $(QUOTE))
HIS = $(addsuffix .hi, $(CORE) $(PTS) $(QUOTE))

PTS_OBJS = $(addsuffix .o, $(CORE) $(PTS))
QUOTE_OBJS = $(addsuffix .o, $(CORE) $(QUOTE))
OBJS = $(addsuffix .o, $(CORE) $(QUOTE) $(PTS))


.PHONY: windows unix depend clean

windows : pts.exe quote.exe

unix : pts quote

pts.exe pts : $(PTS_OBJS)
	@echo "Creating" $@
	rm -f $@
	${LINK} $@ $(LFLAGS) $(PTS_OBJS)

quote.exe quote : $(QUOTE_OBJS)
	@echo "Creating" $@
	rm -f $@
	${LINK} $@ $(LFLAGS) $(QUOTE_OBJS)

%.hi : %.o
	@:

%.o: %.hs
	@echo "Compiling" $@
	$(COMPILE) $< $(CFLAGS)

depend :
	$(DEPEND) $(SRCS)

clean :
	-rm pts pts.exe pts.exe.manifest \
	quote quote.exe quote.exe.manifest \
	$(HIS) $(OBJS)
# DO NOT DELETE: Beginning of Haskell dependencies
PTS/Debug.o : PTS/Debug.hs
Parametric/Pretty.o : Parametric/Pretty.hs
Tools/Instances.o : Tools/Instances.hs
Tools/Errors/Class.o : Tools/Errors/Class.hs
Parametric/Error.o : Parametric/Error.hs
Parametric/Error.o : Tools/Errors/Class.hi
Parametric/Parser/Error.o : Parametric/Parser/Error.hs
Parametric/Parser/Error.o : Parametric/Error.hi
Parametric/AST.o : Parametric/AST.hs
Parametric/AST.o : Tools/Errors/Class.hi
Parametric/AST.o : Parametric/Error.hi
Parametric/Parser.o : Parametric/Parser.hs
Parametric/Parser.o : Parametric/Error.hi
Parametric/Parser.o : Parametric/AST.hi
Parametric/Parser.o : Parametric/Parser/Error.hi
Parametric/Parser.o : Tools/Instances.hi
Parametric/Parser.o : Tools/Errors/Class.hi
PTS/AST.o : PTS/AST.hs
PTS/AST.o : Parametric/AST.hi
PTS/AST.o : Parametric/Error.hi
PTS/AST.o : Tools/Errors/Class.hi
PTS/Pretty.o : PTS/Pretty.hs
PTS/Pretty.o : PTS/AST.hi
PTS/Pretty.o : Parametric/Pretty.hi
PTS/Diff.o : PTS/Diff.hs
PTS/Diff.o : Parametric/Pretty.hi
PTS/Diff.o : PTS/Pretty.hi
PTS/Diff.o : PTS/AST.hi
PTS/Parser.o : PTS/Parser.hs
PTS/Parser.o : PTS/AST.hi
PTS/Parser.o : Parametric/Error.hi
PTS/Parser.o : Parametric/Parser/Error.hi
PTS/Parser.o : Parametric/Parser.hi
PTS/Parser.o : Tools/Errors/Class.hi
PTS/Parser.o : Tools/Instances.hi
PTS/Core.o : PTS/Core.hs
PTS/Core.o : PTS/Debug.hi
PTS/Core.o : Parametric/Pretty.hi
PTS/Core.o : PTS/Diff.hi
PTS/Core.o : PTS/Pretty.hi
PTS/Core.o : PTS/AST.hi
PTS/Core.o : Parametric/Pretty.hi
PTS/Core.o : Parametric/Error.hi
PTS/Core.o : Tools/Errors/Class.hi
Tools/Errors.o : Tools/Errors.hs
Tools/Errors.o : Tools/Errors/Class.hi
Tools/Errors.o : Tools/Instances.hi
PTS/Main.o : PTS/Main.hs
PTS/Main.o : PTS/Debug.hi
PTS/Main.o : PTS/Core.hi
PTS/Main.o : PTS/Parser.hi
PTS/Main.o : PTS/AST.hi
PTS/Main.o : Parametric/Pretty.hi
PTS/Main.o : Parametric/Error.hi
PTS/Main.o : Tools/Errors.hi
PTS/Quote.o : PTS/Quote.hs
PTS/Quote.o : PTS/Debug.hi
PTS/Quote.o : PTS/Pretty.hi
PTS/Quote.o : Parametric/Pretty.hi
PTS/Quote.o : Tools/Errors.hi
PTS/Quote.o : Tools/Errors/Class.hi
PTS/Quote.o : Parametric/Error.hi
PTS/Quote.o : PTS/Parser.hi
PTS/Quote.o : PTS/Core.hi
PTS/Quote.o : PTS/AST.hi
PTS/Quote/Main.o : PTS/Quote/Main.hs
PTS/Quote/Main.o : Parametric/Error.hi
PTS/Quote/Main.o : Tools/Errors.hi
PTS/Quote/Main.o : PTS/AST.hi
PTS/Quote/Main.o : PTS/Pretty.hi
PTS/Quote/Main.o : PTS/Core.hi
PTS/Quote/Main.o : PTS/Parser.hi
PTS/Quote/Main.o : PTS/Quote.hi
# DO NOT DELETE: End of Haskell dependencies
