-# Makefile, used for the DDP manuals.sgml area
+# Makefile, used for the developers-reference in DocBook XML
-MANUAL := $(notdir $(shell pwd))
-PUBLISHDIR := /org/www.debian.org/www/doc/manuals
+# Note: This Makefile should work perfectly without the debian/ directory.
-SOURCES := $(wildcard *.sgml)
+SOURCES := $(wildcard *.dbk) common.ent version.ent
-TARGETS := $(foreach fmt,html txt pdf,developers-reference.$(fmt)) \
- $(filter-out developers-reference.ja.pdf, \
- $(foreach langext,.ja .fr, \
- $(foreach fmt,html txt pdf,developers-reference$(langext).$(fmt))))
+FORMATS := html txt pdf epub
+LANGS := de fr ja
+TARGETS := $(foreach fmt,$(FORMATS),developers-reference.$(fmt)) \
+ $(foreach lng,$(LANGS), \
+ $(foreach fmt,$(FORMATS), \
+ $(lng)/developers-reference.$(fmt)))
+# list of targets, that currently cannot build
+#BLACKLIST := ja/developers-reference.pdf
-# programs for creating output
-DEBIANDOC2HTML := debiandoc2html -c
-DEBIANDOC2TEXT := debiandoc2text
-DEBIANDOC2LATEX := debiandoc2latex
-DEBIANDOC2PS := debiandoc2latexps
-DEBIANDOC2PDF := debiandoc2latexpdf
-
-make_directory := install -d -m 755
-install_file := install -m 644 -p
+# hopefully overwritten by caller, e.g. debian/rules
+VERSION=unknown
+PUBDATE=unknown
-MAX_TEX_RECURSION := 5
+# programs for creating output
+XP=xsltproc --nonet --novalid --xinclude
+XL=xmllint --nonet --noout --postvalid --xinclude
+# dblatex 0.2.8 has some problems (e.g. #465221 and Japanese does
+# not build)
+# Alternatives:
+# - docbook2pdf (seems to die on UTF-8, #431085); and
+# - fop is currently in contrib, but can go to main, see #366783
+# - xmlroff (not mature enough, #182445)
+DBLATEX=dblatex --style=db2latex
+TRANSLATE=po4a po4a/po4a.cfg
+
+# XSL files and parameters
+# note: the URL is used as identifier, no HTTP is used!
+DOCBOOK_XSL=http://docbook.sourceforge.net/release/xsl/current
+# for HTML output
+DBK2HTML=$(CURDIR)/html.xsl
+# all in one file for text output
+DBK2HTML1=$(CURDIR)/txt.xsl
.PHONY: all
-all: $(TARGETS)
+all: $(filter-out $(BLACKLIST), $(TARGETS))
.PHONY: validate
-validate: $(addsuffix .validate,$(SOURCES))
+validate: $(SOURCES)
+ $(XL) index.dbk
-# hmmm, this rule may need to be revised/tested
+%/validate: $(addprefix %/,$(SOURCES))
+ cd $(@D) && $(XL) index.dbk
+
+# This rule controls the build and installation on the website
+# Logs are here: http://www-master.debian.org/build-logs/ddp/
+.PHONY: publish
publish: all
[ -d $(PUBLISHDIR) ] || exit 1
- rm -f $(PUBLISHDIR)/$(MANUAL)/*.html
- $(make_directory) $(PUBLISHDIR)/$(MANUAL)
- $(install_file) developers-reference*.html/*.html \
- $(PUBLISHDIR)/$(MANUAL)
-
-developers-reference.html: developers-reference.sgml
- $(DEBIANDOC2HTML) -l C $<
-
-developers-reference.html/*: developers-reference.html
-
-developers-reference.%.html: developers-reference.%.sgml
- $(DEBIANDOC2HTML) -l $* $<
-
-developers-reference.txt: developers-reference.sgml
- $(DEBIANDOC2TEXT) -l C -O $< > $@
-
-developers-reference.%.txt: developers-reference.%.sgml
- $(DEBIANDOC2TEXT) -l $* -O $< > $@
-
-developers-reference.tex: developers-reference.sgml
- $(DEBIANDOC2LATEX) -l C -O $< > $@
-
-developers-reference.%.tex: developers-reference.%.sgml
- $(DEBIANDOC2LATEX) -l $* -O $< > $@
-
-developers-reference.ps: developers-reference.sgml
- $(DEBIANDOC2PS) -l C $<
-
-developers-reference.%.ps: developers-reference.%.sgml
- $(DEBIANDOC2PS) -l $* $<
-
-developers-reference.pdf: developers-reference.sgml
- $(DEBIANDOC2PDF) -l C $<
-
-developers-reference.%.pdf: developers-reference.%.sgml
- $(DEBIANDOC2PDF) -l $* $<
-
-version.ent: debian/changelog
- ./debian/rules $@
-
-%.validate : % version.ent
- nsgmls -wall -gues $<
- touch $@
-
-USERMAP := ../../ddp/CVSROOT/users
-.PHONY: prepare
-prepare:
- @[ -f CVS/Root -a -f $(USERMAP) ] || \
- ( echo "silly rabbit, prepare is for Adam" 1>&2; exit 1 )
- cvs2cl -r --usermap $(USERMAP)
- cvs ci -m "update for next release" ChangeLog
+ install -d -m 755 $(PUBLISHDIR)/developers-reference
+ rm -f $(PUBLISHDIR)/developers-reference/*.html
+ rm -f en && ln -sf . en
+ $(foreach format,$(FORMATS),$(foreach lang,en $(LANGS),for file in $(lang)/*.$(format); do if [ -e "$$file" ]; then cp --preserve=timestamps $$file $(PUBLISHDIR)/developers-reference/$$(basename $$file .$(format)).$(lang).$(format); fi; done;))
+ ln -sf index.en.html $(PUBLISHDIR)/developers-reference/index.html
+ ln -sf developers-reference.en.pdf $(PUBLISHDIR)/developers-reference/developers-reference.pdf
+ ln -sf developers-reference.en.txt $(PUBLISHDIR)/developers-reference/developers-reference.txt
+ ln -sf developers-reference.en.epub $(PUBLISHDIR)/developers-reference/developers-reference.epub
+
+.PHONY: developers-reference.html %/developers-reference.html
+developers-reference.html: $(CURDIR)/index.html
+%/developers-reference.html: $(addprefix %/,index.html)
+ @true
+
+.PRECIOUS: %/index.html
+index.html: $(CURDIR)/developers-reference.html
+%/index.html: $(addprefix %/,$(SOURCES))
+ cd $(@D) && $(XP) $(DBK2HTML) index.dbk
+
+# There must be an easier way than recursive make!
+.PRECIOUS: %.dbk %.ent
+ifndef LINGUA
+%.dbk %.ent: FORCE
+ $(TRANSLATE)
+ $(MAKE) $@ LINGUA=`basename $(@D)`
+
+FORCE:
+else
+$(LINGUA)/%.dbk: %.dbk po4a/$(LINGUA).po
+ $(TRANSLATE)
+
+$(LINGUA)/common.ent: common.ent
+ cd $(@D) && ln -sf ../$(@F) .
+endif
+
+developers-reference.txt: $(CURDIR)/developers-reference.txt
+%/developers-reference.txt: $(addprefix %/,$(SOURCES))
+ $(XP) $(DBK2HTML1) $(@D)/index.dbk \
+ | LC_ALL=C.UTF-8 w3m -o display_charset=UTF-8 -cols 70 -dump -no-graph -T text/html > $@
+
+XSLT := xslt
+
+developers-reference.pdf: $(CURDIR)/developers-reference.pdf
+%/developers-reference.pdf: $(addprefix %/,$(SOURCES))
+ $(DBLATEX) $(@D)/index.dbk \
+ --backend=xetex \
+ --xsl-user=$(XSLT)/user_param.xsl \
+ --xsl-user=$(XSLT)/xetex_param.xsl \
+ --param=lingua=$(@D) \
+ && mv $(@D)/index.dbk.pdf $@
+
+developers-reference.epub: $(CURDIR)/developers-reference.epub
+%/developers-reference.epub: $(addprefix %/,$(SOURCES))
+ TOP=`pwd` && cd $(@D) && xmlto epub index.dbk && mv index.epub $(@F)
+
+.PHONY: pot
+pot: po4a/po/developers-reference.pot
+po4a/po/developers-reference.pot: %.dbk
+ $(TRANSLATE)
+
+ifdef LINGUA
+.PHONY: updatepo
+updatepo: po4a/po/$(LINGUA).po
+po4a/po/$(LINGUA).po: %.dbk
+ $(TRANSLATE)
+endif
+
+tidypo:
+ for po in po4a/po/*.po; do \
+ msgcat -o $$po $$po; \
+ done
+
+checkpo:
+ @for po in po4a/po/*.po; do \
+ msgfmt -vv $$po; \
+ done
+
+%/version.ent:
+ echo '<!ENTITY version "$(VERSION)">' > $@
+ echo '<!ENTITY pubdate "$(PUBDATE)">' >> $@
.PHONY: clean
clean:
- rm -rf developers-reference*.html
- rm -f developers-reference*.txt developers-reference*.pdf \
- developers-reference*.ps developers-reference*.lout* lout.li \
- developers-reference*.sasp* developers-reference*.tex \
- developers-reference*.aux developers-reference*.toc \
- developers-reference*.idx developers-reference*.log \
- developers-reference*.out developers-reference*.dvi \
- developers-reference*.tpt
+ rm -f *.fo *.html *.pdf *.txt *.epub
+ for L in $(LANGS); do rm -rf `basename ./"$$L"/`; done
rm -f version.ent
rm -f `find . -name "*~" -o -name "*.bak"`
- rm -f *.validate
rm -f *~ *.bak .#* core
.PHONY: distclean
distclean: clean
rm -f *.rej *.orig
-developers-reference$(SRCEXT).sgml: version.ent common.ent
-
-html: $(MANUAL).html
-
# if rule bomb out, delete the target
.DELETE_ON_ERROR: