BASENAME := index
DESTDIR := html/
MAIN := Main.lhs
DEPS := HelloWorld.lhs RouteFilters.lhs Templates.lhs RqData.lhs FileServing.lhs Reform.markdown.lhs WebRoutes.lhs AcidState.lhs TemplateHaskell.lhs
HELLOWORLD_DEMOS := HelloWorld.lhs
ROUTE_FILTER_DEMOS := MonadPlus.lhs Dir.lhs Dir2.lhs Dirs.lhs Path.lhs FromReqURI.lhs MethodM.lhs MatchMethod.lhs
RQDATA_DEPS := RqDataLimiting.lhs RqDataParsing.lhs Cookies.lhs
RQDATA_DEMOS := HelloRqData.lhs RqDataPost.lhs RqDataError.lhs RqDataUpload.lhs RqDataRead.lhs RqDataCheck.lhs RqDataCheckOther.lhs RqDataOptional.lhs
COOKIE_DEPS := CookieLife.lhs CookieIssues.lhs CookieFeatures.lhs
COOKIE_DEMOS := CookieCounter.lhs
FILESERVING_DEMOS := FileServingDirectory.lhs FileServingSingle.lhs
REFORM_DEMOS :=
ACIDSTATE_DEMOS := AcidStateCounter.lhs IxSet.lhs IxSetDataLens.lhs AcidStateAdvanced.lhs
WEBROUTES_DEMOS := WebRoutesDemo.lhs WebRoutesBoomerang.lhs WebRoutesHSP.lhs
TEMPLATES_DEPS :=
TEMPLATES_DEMOS := HelloBlaze.lhs TemplatesHeist.lhs TemplatesHSP.lhs JMacro.lhs TemplatesHSPI18n.lhs
DEMOS := $(RQDATA_DEMOS) $(ROUTE_FILTER_DEMOS) $(HELLOWORLD_DEMOS) $(TEMPLATES_DEPS) $(TEMPLATES_DEMOS) $(COOKIE_DEMOS) $(FILESERVING_DEMOS) $(REFORM_DEMOS) $(ACIDSTATE_DEMOS) $(WEBROUTES_DEMOS)
EXTRA_DEPS := Makefile
SRC := $(MAIN) $(DEPS) $(ROUTE_FILTER_DEPS) $(DEMOS)
CSS := blog.css hscolour.css
all: $(DESTDIR) $(subst .lhs,.hs,$(addprefix $(DESTDIR),$(DEMOS))) $(addprefix $(DESTDIR),$(CSS)) $(subst .lhs,.html,$(subst .markdown.lhs,.html,$(addprefix $(DESTDIR),$(DEPS)))) $(DESTDIR)$(BASENAME).html html/theme/theme.css html/theme/code-background.jpg html/factorial.tpl $(DESTDIR)Reform.html $(DESTDIR)Reform.hs Reform.markdown.lhs
RouteFilters.html: $(ROUTE_FILTER_DEPS)
RqData.html: $(RQDATA_DEPS) $(RQDATA_DEMOS) $(COOKIE_DEPS) $(COOKIE_DEMOS)
Templates.html : $(TEMPLATES_DEPS) $(TEMPLATES_DEMOS) factorial.tpl-inc html/messages.zip
FileServing.html : FileServing.lhs $(FILESERVING_DEMOS) FileServingAdvanced.lhs
WebRoutes.html : $(WEBROUTES_DEMOS)
AcidState.html : AcidState.lhs $(ACIDSTATE_DEMOS)
Reform.html : Reform.markdown.lhs
TemplateHaskell.html : TemplateHaskell.lhs
html/messages.zip: messages/standard/en.msg messages/standard/en-GB.msg messages/standard/jbo.msg messages/thing/en.msg
zip $@ $^
%.html : %.markdown.lhs header.tpl footer.tpl
cat header.tpl > $@
cpphs --noline -DHsColour $< | sed 's/^] /> /' | ./HsColour -css -partial -lit | markdown --html4tags >> $@
cat footer.tpl >> $@
validate -w --verbose --emacs $@
html/theme/theme.css: theme.css
mkdir -p html/theme
cp $^ $@
html/theme/code-background.jpg: code-background.jpg
mkdir -p html/theme
cp $^ $@
html/factorial.tpl: factorial.tpl
mkdir -p html
cp $^ $@
%.tpl-inc : %.tpl escape-html.hs
runhaskell escape-html.hs $< $@
toc.html: $(subst .lhs,.html,$(subst .markdown.lhs,.html,$(DEPS))) gen-toc.hs
runhaskell gen-toc.hs $^ > toc.html
$(DESTDIR):
mkdir -p $(DESTDIR)
$(DESTDIR)$(BASENAME).html: Main.html
#tidy -q -o $@ Main.html
cp $< $@
@echo ""
@echo "********************************************************************************************"
@echo "Open the following file in your browser, or run 'make open' to automatically open in firefox"
@(echo file://$$(realpath $@))
@echo "********************************************************************************************"
$(DESTDIR)%: %
cp $^ $@
# open the .html file in firefox
# probably will not work if path contains spaces, etc
open: $(BASENAME).html
(firefox -new-tab "file://$$(realpath $<)")
Main.cpphs : $(SRC) $(EXTRA_DEPS) toc.html
EXTRA := template/App.cabal template/Setup.hs
template/% : extra/%
cp $^ $@
TEMPLATE_FILES := $(subst .lhs,.hs,$(addprefix template/,$(SRC))) $(EXTRA)
template: $(TEMPLATE_FILES)
template/%.hs: %.lhs
(mkdir -p `dirname $@`)
cpp -DExtract -traditional-cpp -P $^ | grep -v '{-# OPTIONS_GHC -cpp #-}' | sed -n 's/^> \?//p' > $@
template/%: %
cp $^ $@
test:
runhaskell -cpp -ipages Main.lhs
%.html: %.cpphs
./HsColour -css -partial $< -o$@ -lit
validate -w --verbose --emacs $@
%.cpphs: %.lhs
# cpp -traditional-cpp -DHsColour -P $< $@
cpphs --noline -DHsColour $< -O$@
$(DESTDIR)%.hs: %.markdown.lhs
cpphs --noline $^ | grep -v '{-# LANGUAGE CPP #-}' | sed -n 's/^> \?//p' > $@
# extract a demo
$(DESTDIR)%.hs: %.lhs
cpphs --noline $^ | grep -v '{-# LANGUAGE CPP #-}' | sed -n 's/^> \?//p' > $@
# cpp -DExtract -traditional-cpp -P $^ | grep -v '{-# OPTIONS_GHC -cpp #-}' | sed -n 's/^> \?//p' > $@
clean:
-rm -f $(BASENAME).html Main.html
-rm -f $(TEMPLATE_FILES)
(if test -d template/pages ; then rmdir template/pages ; fi)
(if test -d template ; then rmdir template ; fi)
test-site: all
rsync -avxz --exclude '*.o' --exclude '*.hi' html/ jeremy@happstack.com:public_html/happstack-crashcourse/
%.demo : $(DESTDIR)%.hs
ghc --make -c -o$@ $<
check-demos: $(subst .lhs,.demo,$(DEMOS))
.PHONY: test all clean check-demos