foozy@708: # This makefile requires GNU make. foozy@708: foozy@708: sources := \ foozy@708: 00book.tex \ foozy@708: 99book.bib \ foozy@708: 99defs.tex \ foozy@708: build_id.tex \ foozy@708: branch.tex \ foozy@708: collab.tex \ foozy@708: concepts.tex \ foozy@708: custom.sty \ foozy@708: daily.tex \ foozy@708: filenames.tex \ foozy@708: hg_id.tex \ foozy@708: hgext.tex \ foozy@708: hook.tex \ foozy@708: intro.tex \ foozy@708: mq.tex \ foozy@708: mq-collab.tex \ foozy@708: preface.tex \ foozy@708: srcinstall.tex \ foozy@708: template.tex \ foozy@708: tour-basic.tex \ foozy@708: tour-merge.tex \ foozy@708: undo.tex \ foozy@708: foozy@708: foozy@708: image-sources := \ foozy@708: feature-branches.dot \ foozy@708: filelog.svg \ foozy@708: kdiff3.png \ foozy@708: metadata.svg \ foozy@708: mq-stack.svg \ foozy@708: note.png \ foozy@708: revlog.svg \ foozy@708: snapshot.svg \ foozy@708: tour-history.svg \ foozy@708: tour-merge-conflict.svg \ foozy@708: tour-merge-merge.svg \ foozy@708: tour-merge-pull.svg \ foozy@708: tour-merge-sep-repos.svg \ foozy@708: undo-manual.dot \ foozy@708: undo-manual-merge.dot \ foozy@708: undo-non-tip.dot \ foozy@708: undo-simple.dot \ foozy@708: wdir.svg \ foozy@708: wdir-after-commit.svg \ foozy@708: wdir-branch.svg \ foozy@708: wdir-merge.svg \ foozy@708: wdir-pre-branch.svg \ foozy@708: foozy@708: foozy@708: image-dot := $(filter %.dot,$(image-sources)) foozy@708: image-svg := $(filter %.svg,$(image-sources)) foozy@708: image-png := $(filter %.png,$(image-sources)) foozy@708: foozy@708: image-pdf := \ foozy@708: $(image-dot:%.dot=%.pdf) \ foozy@708: $(image-svg:%.svg=%.pdf) \ foozy@708: $(image-png) \ foozy@708: foozy@708: foozy@708: bb-pdf := \ foozy@708: $(image-dot:%.dot=%.bb) \ foozy@708: $(image-svg:%.svg=%.bb) \ foozy@708: $(image-png:%.png=%.bb) \ foozy@708: foozy@708: foozy@708: image-html := \ foozy@708: $(image-dot:%.dot=%.png) \ foozy@708: $(image-svg:%.svg=%.png) \ foozy@708: $(image-png) \ foozy@708: foozy@708: foozy@708: example-sources := \ foozy@708: backout \ foozy@708: bisect \ foozy@708: branching \ foozy@708: branch-named \ foozy@708: branch-repo \ foozy@708: cmdref \ foozy@708: daily.copy \ foozy@708: daily.files \ foozy@708: daily.rename \ foozy@708: daily.revert \ foozy@708: extdiff \ foozy@708: filenames \ foozy@708: hook.msglen \ foozy@708: hook.simple \ foozy@708: hook.ws \ foozy@708: issue29 \ foozy@708: mq.guards \ foozy@708: mq.qinit-help \ foozy@708: mq.dodiff \ foozy@708: mq.id \ foozy@708: mq.tarball \ foozy@708: mq.tools \ foozy@708: mq.tutorial \ foozy@708: rename.divergent \ foozy@708: rollback \ foozy@708: tag \ foozy@708: template.simple \ foozy@708: template.svnstyle \ foozy@708: tour \ foozy@708: tour-merge-conflict \ foozy@708: foozy@708: foozy@708: example-prereqs := \ foozy@708: /usr/bin/merge \ foozy@708: foozy@708: foozy@708: binary-staffs := \ foozy@708: kdiff3.png \ foozy@708: note.png \ foozy@708: examples/data/netplug-1.2.5.tar.bz2 \ foozy@708: examples/data/netplug-1.2.8.tar.bz2 \ foozy@708: foozy@708: foozy@708: dist-sources := \ foozy@708: ../html/hgicon.png \ foozy@708: ../html/index.html.var \ foozy@708: ../html/index.en.html \ foozy@708: foozy@708: foozy@708: latex-options = \ foozy@708: -interaction batchmode \ foozy@708: -output-directory $(dir $(1)) \ foozy@708: -jobname $(basename $(notdir $(1))) \ foozy@708: foozy@708: hg = $(shell which hg) foozy@708: foozy@708: hg-id = foozy@708: foozy@708: hg-version = unknown foozy@708: foozy@708: ######################################## foozy@708: foozy@708: SVG2PNG = sh svg2png.sh foozy@708: foozy@708: SVG2EPS = sh svg2eps.sh foozy@708: foozy@708: GS = gs foozy@708: foozy@708: MAKEINDEX= mendex -J -f foozy@708: foozy@708: ######################################## foozy@708: foozy@708: all: pdf html foozy@708: foozy@708: pdf: pdf/hgbook.pdf foozy@708: foozy@708: define pdf foozy@708: mkdir -p $(dir $@) foozy@708: platex $(call latex-options,$@) $(1) \ foozy@708: || (rm -f $@; exit 1) foozy@708: cp 99book.bib $(dir $@) foozy@708: cd $(dir $@) && jbibtex $(basename $(notdir $@)) foozy@708: cd $(dir $@) && $(MAKEINDEX) $(basename $(notdir $@)) foozy@708: platex $(call latex-options,$@) $(1) \ foozy@708: || (rm -f $@; exit 1) foozy@708: platex $(call latex-options,$@) $(1) \ foozy@708: || (rm -f $@; exit 1) foozy@708: export TEXINPUTS=..; cd $(dir $@) && dvipdfmx $(basename $(notdir $@)) foozy@708: # if grep 'Reference.*undefined' $(@:.pdf=.log); then exit 1; fi foozy@708: endef foozy@708: foozy@708: pdf/hgbook.pdf: $(sources) atbegxxx.tex foozy@708: pdf/hgbook.pdf: $(image-pdf) foozy@708: pdf/hgbook.pdf: $(bb-pdf) foozy@708: #pdf/hgbook.pdf: examples foozy@708: pdf/hgbook.pdf: 00book_pdf.tex foozy@708: $(call pdf,00book_pdf.tex) foozy@708: foozy@708: html: onepage split foozy@708: foozy@708: htlatex := htlatex.sh foozy@708: foozy@708: onepage: $(htlatex) foozy@708: onepage: html/onepage/hgbook.html foozy@708: onepage: html/onepage/hgbook.css foozy@708: onepage: $(image-html:%=html/onepage/%) foozy@708: foozy@708: html/onepage/%: % foozy@708: cp $< $@ foozy@708: foozy@708: split: $(htlatex) foozy@708: split: html/split/hgbook.html foozy@708: split: html/split/hgbook.css foozy@708: split: $(image-html:%=html/split/%) foozy@708: foozy@708: html/split/%: % foozy@708: cp $< $@ foozy@708: foozy@708: # This is a horrible hack to work around the fact that the htlatex foozy@708: # command in tex4ht is itself a horrible hack. I really don't want to foozy@708: # include verbatim the big wad of TeX that is repeated in that script, foozy@708: # but I've given up and run a hacked copy as htlatex.book here. foozy@708: foozy@708: define htlatex foozy@708: mkdir -p $(dir $@) foozy@708: sh ./htlatex.sh \ foozy@708: $(1) \ foozy@708: "bookhtml,html4-uni,$(2)" \ foozy@708: "$(call latex-options,$@)" \ foozy@708: || (rm -f $@; exit 1) foozy@708: cp 99book.bib $(dir $@) foozy@708: cd $(dir $@) && jbibtex $(basename $(notdir $@)) foozy@708: cd $(dir $@) \ foozy@708: && jtex '\def\filename{{hgbook}{idx}{4dx}{ind}} \input idxmake.4ht' \ foozy@708: && $(MAKEINDEX) \ foozy@708: -o $(basename $(notdir $@)).ind \ foozy@708: $(basename $(notdir $@)).4dx foozy@708: sh ./htlatex.sh \ foozy@708: $(1) \ foozy@708: "bookhtml,html4-uni,$(2)" \ foozy@708: "$(call latex-options,$@)" \ foozy@708: || (rm -f $@; exit 1) foozy@708: sh ./htlatex.sh \ foozy@708: $(1) \ foozy@708: "bookhtml,html4-uni,$(2)" \ foozy@708: "$(call latex-options,$@)" \ foozy@708: || (rm -f $@; exit 1) foozy@708: cd $(dir $@) && tex4ht -f/$(basename $(notdir $@)) -cvalidate -cunihtf foozy@708: cd $(dir $@) && t4ht -f/$(basename $(notdir $@)) foozy@708: python ./fixhtml.py $(dir $@)/*.html foozy@708: rm $(dir $@)/hgbook.css foozy@708: endef foozy@708: foozy@708: html/onepage/hgbook.html: $(sources) foozy@708: html/onepage/hgbook.html: $(image-html) foozy@708: #html/onepage/hgbook.html: examples foozy@708: html/onepage/hgbook.html: bookhtml.cfg foozy@708: html/onepage/hgbook.html: 00book_html.tex foozy@708: $(call htlatex,00book_html.tex) foozy@708: foozy@708: html/split/hgbook.html: $(sources) foozy@708: html/split/hgbook.html: $(image-html) foozy@708: #html/split/hgbook.html: examples foozy@708: html/split/hgbook.html: bookhtml.cfg foozy@708: html/split/hgbook.html: 00book_html.tex foozy@708: $(call htlatex,00book_html.tex,2) foozy@708: foozy@708: # Produce 90dpi PNGs for the web. foozy@708: foozy@708: %.png: %.svg foozy@708: $(SVG2PNG) $@ $< foozy@708: foozy@708: %.svg: %.dot foozy@708: dot -Tsvg -o $@ $< foozy@708: foozy@708: # Produce eps/pdf/bb for the pdf foozy@708: foozy@708: %.pdf: %.eps foozy@708: epstopdf $< foozy@708: foozy@708: %.eps: %.svg foozy@708: $(SVG2EPS) $@ $< foozy@708: foozy@708: %.eps: %.dot foozy@708: dot -Tps -o $@ $< foozy@708: foozy@708: %.bb: %.pdf foozy@708: $(GS) -q -sDEVICE=bbox -dAutoRotatePages=/None - -c quit - \ foozy@708: < $< > $@ 2>&1 foozy@708: foozy@708: %.bb: %.png foozy@708: ebb $< foozy@708: foozy@708: examples: $(example-prereqs) $(binary-staffs) examples/.run foozy@708: foozy@708: examples/.run: $(example-sources:%=examples/%.run) foozy@708: touch examples/.run foozy@708: foozy@708: examples/%.run: examples/% examples/run-example foozy@708: cd examples && python ./run-example $(notdir $<) foozy@708: foozy@708: changelog := $(wildcard ../.hg/store/00changelog.[id]) foozy@708: ifeq ($(changelog),) foozy@708: changelog := $(wildcard ../.hg/00changelog.[id]) foozy@708: endif foozy@708: foozy@708: build_id.tex: $(changelog) foozy@708: echo -n '$(hg-id)' > build_id.tex foozy@708: foozy@708: hg_id.tex: $(hg) foozy@708: echo -n '$(hg-version)' > hg_id.tex foozy@708: foozy@708: clean: foozy@708: rm -rf dist html pdf \ foozy@708: $(image-dot:%.dot=%.pdf) \ foozy@708: $(image-dot:%.dot=%.png) \ foozy@708: $(image-dot:%.dot=%.bb) \ foozy@708: $(image-svg:%.svg=%.pdf) \ foozy@708: $(image-svg:%.svg=%.png) \ foozy@708: $(image-svg:%.svg=%.bb) \ foozy@708: $(image-png:%.png=%.bb) \ foozy@708: examples/*.{lxo,run} examples/.run build_id.tex hg_id.tex foozy@708: rm -f atbegxxx.tex foozy@708: foozy@708: install: pdf split $(dist-sources) foozy@708: rm -rf dist foozy@708: mkdir -p dist foozy@708: cp pdf/hgbook.pdf dist foozy@708: cp html/split/*.{css,html,png} dist foozy@708: cp $(dist-sources) dist foozy@708: foozy@708: rsync: install foozy@708: rsync -avz --delete dist sp.red-bean.com:public_html/hgbook foozy@708: foozy@708: ##### these targets are needed because mq can not handle binary files foozy@708: foozy@708: kdiff3.png: foozy@708: cp ../en/kdiff3.png . foozy@708: foozy@708: note.png: foozy@708: cp ../en/note.png . foozy@708: foozy@708: examples/data/netplug-1.2.5.tar.bz2: foozy@708: mkdir -p examples/data foozy@708: cp ../en/examples/data/netplug-1.2.5.tar.bz2 examples/data foozy@708: foozy@708: examples/data/netplug-1.2.8.tar.bz2: foozy@708: mkdir -p examples/data foozy@708: cp ../en/examples/data/netplug-1.2.8.tar.bz2 examples/data