
default: all

WEB_APPS=        $(addprefix WebApp/,Index About ReadBug ListBugs Message \
                                     Attachment UserInfo Users Info Mbox \
                                     Test MIME)
OTHER_APPS=      $(addprefix App/,Bootstrap Email Foo)
APPS=            $(WEB_APPS) $(OTHER_APPS)
Database_MODULES=$(addprefix Database/,SQLite3)
Bark_MODULES=    $(addprefix Bark/,Auth BugDB ConfigT Core DatabaseT \
								   ExtensibleError \
                                   MakePage NoAuth Privs Types UserT Utils)
CGI_MODULES=     $(addprefix CGI/,CGIT Cookie Multipart)
HTML_MODULES=    $(addprefix HTML/,HTMLData HTMLT)
Iconv_MODULES=   $(addprefix Iconv/,Iconv)
Lock_MODULES=    $(addprefix Lock/,Lock)
Message_MODULES= $(addprefix Message/,ABNF Base64 EncodingQ Headers Parse \
                                      QuotedPrintable Utils Types Flatten \
                                      Date ContentDisposition EncodedWord)
MODULES=         $(Bark_MODULES) $(CGI_MODULES) $(HTML_MODULES) \
                 $(Iconv_MODULES) $(Lock_MODULES) $(Message_MODULES) \
				 $(Database_MODULES)

APP_SRCS=$(addsuffix .hs,$(APPS))
APP_OBJS=$(addsuffix .o,$(APPS))
APP_INTS=$(addsuffix .hi,$(APPS))
MODULE_SRCS=$(addsuffix .hs,$(MODULES))
MODULE_OBJS=$(addsuffix .o,$(MODULES))
MODULE_INTS=$(addsuffix .hi,$(MODULES))
SRCS=$(APP_SRCS) $(MODULE_SRCS)
OBJS=$(APP_OBJS) $(MODULE_OBJS)
INTS=$(APP_INTS) $(MODULE_INTS)

GHC622=$(shell if [ "`ghc -V | grep "6\.2\.2"`" = "" ]; \
               then echo -n ""; else echo -n GHC622; fi )

GHC640=$(shell if [ "`ghc -V | grep "6\.4$$"`" = "" ]; \
               then echo -n ""; else echo -n GHC640; fi )

#GHC_OPTS_CGIT.o=$(GHC_OPTS) -fallow-overlapping-instances \
#                            -fallow-undecidable-instances
GHC_OPTS = -Wall \
           -fglasgow-exts \
           -fallow-overlapping-instances -fallow-undecidable-instances \
           -package parsec -package network -package unix \
		   -lsqlite3
#GHC_OPTS += -Werror
ifeq "$(GHC622)" "GHC622"
GHC_OPTS += -package haskell-src
else
GHC_OPTS += -package template-haskell -package mtl
endif

all: $(APPS)
	if [ -x ./post-build.sh ]; then ./post-build.sh; fi

echo_WEB_APPS:
	echo $(WEB_APPS)

$(APPS): %: %.o $(MODULE_OBJS)
	ghc $(GHC_OPTS) $(MODULE_OBJS) $< -o $@

$(APP_OBJS): %.o: %.hs
	ghc -main-is `echo $* | sed "s#/#.#g"`.main \
	    $(if $(GHC_OPTS_$@),$(GHC_OPTS_$@),$(GHC_OPTS)) -c $< -o $@
	touch $*.hi

$(MODULE_OBJS): %.o: %.hs
	ghc $(if $(GHC_OPTS_$@),$(GHC_OPTS_$@),$(GHC_OPTS)) -c $< -o $@
	touch $*.hi

$(INTS): %.hi: %.o
	@:

%.hs: %.hsc
	hsc2hs $< -o $@

clean:
	rm -f .depend $(APPS) $(OBJS) $(INTS) Lock/Lock.hs Database/SQLite3.hs

.depend: $(SRCS)
	ghc $(GHC_OPTS) -M -optdep-f -optdep.depend $(SRCS)

include .depend

.PHONY: all clean default echo_WEB_APPS

