####################################################################### # Build debian-reference (v2) # vim: set ts=8: # See README.source for explanation ####################################################################### ### basic parameters (build condition dependent) ALL ####################################################################### # Build from xml only as default (package) -- for squeeze (package) # to avoid regression caused by asciidoc 8.4.1 ifdef DEBIAN_PACKAGE_BUILD_MODE # When executed from pbuilder, debuild, debian/rules, ... BUILD_MODE := deb else # BUILD_MODE value set to asciidoc version number BUILD_MODE := $(shell asciidoc --version) endif # BUILD_MODE value of correct asciidoc version number to use BUILD_MODE_ASCIIDOC := asciidoc 8.2.7 # Please note package build and ddp script overides $(PUBLISHDIR) # if $(PUBLISHDIR) is not set, set it here for testing PUBLISHDIR := $(CURDIR)/html ####################################################################### ### basic parameters (build condition independent) ALL ####################################################################### # base file name excluding file extension DOCNAME := debian-reference # Directories (no trailing slash) PXSLT := xslt PBIN := bin ADOC := asciidoc PODOC := po4a IMAGES := /usr/share/xml/docbook/stylesheet/nwalsh/images # Program name and option XP := xsltproc --nonet --novalid --xinclude #XL := xmllint --nonet --noout --postvalid --xinclude # The threshold should be 80 if translation is completed. THRESHOLD:= 0 TRANSLATE:= po4a-translate -M utf-8 --format docbook --keep $(THRESHOLD) GETTEXT := po4a-gettextize -M utf-8 -L utf-8 --format docbook UPDATEPO:= msgmerge --update --previous --no-wrap # # note: the URL is used as identifier, no HTTP is used! # DOCBOOK_XSL=http://docbook.sourceforge.net/release/xsl/current VERBOSE := # Debian packge archive URL #DEBM := http://ftp.us.debian.org/debian/dists DEBM := http://ftp.jp.debian.org/debian/dists # Debian popcon data source URL UPOPC := http://popcon.debian.org/all-popcon-results.txt.gz # Debian release name and arch used CODE := sid ARCH := amd64 UDEBA := $(DEBM)/$(CODE) UDEBB := $(DEBM)/experimental # language defaults LANGALL := en ja fr it es de pt-br pl zh-tw zh-cn LANGPO := ja fr LANGNEW := LANGSGML = $(filter-out en $(LANGPO), $(LANGALL)) # remotely fetched data cached locally but removed for package DATASRCS:= all-popcon-results.txt packages.txt packages.bkup.txt # AsciiDoc source file names in $(ADOC) directories for local update ASC_NM := 00_preface.txt 01_tutorial.txt 02_package.txt \ 03_sysinit.txt 04_auth.txt 05_network.txt 06_netapp.txt \ 07_xwindow.txt 08_i18nl10n.txt 09_systips.txt 10_datamngt.txt \ 11_dataconv.txt 12_program.txt 99_appendix.txt \ copyright.txt header1.txt header2.txt $(DOCNAME).txt # source asciidoc files (local updates of XML source files requires these under lenny) SRC_ASC := $(addprefix $(ADOC)/, $(ASC_NM)) # source XML inclusion files SRC_ENT := datadatepop.ent datadatesize.ent popcon.ent pkgsize.ent # source PO files (build prcess requires these) SRC_PO := $(addsuffix .po, $(addprefix $(PODOC)/$(DOCNAME)., $(LANGPO))) # pristine source XML / PO files (package build requires these) SRC_XML = $(DOCNAME).raw.xml $(SRC_ENT) $(SRC_PO) ####################################################################### # Build all sources to html and text pages (Default target) ALL/DEB ####################################################################### .PHONY: all dh_in all: html txt css $(MAKE) -C sgml all PUBLISHDIR=$(PUBLISHDIR) "LANG_ALL=$(LANGSGML)" # When building for Debian packages, build debhelper entries for install ifdef DEBIAN_PACKAGE_BUILD_MODE $(MAKE) dh_in endif dh_in: # Generate files for debhelper in debian/ cd $(CURDIR)/debian/ ; \ cp all.postinst-in $(DOCNAME)-common.postinst ; \ for xx in $(LANGALL) ; do \ cp all.postinst-in $(DOCNAME)-$${xx}.postinst ; \ cp all.postrm-in $(DOCNAME)-$${xx}.postrm ; \ case $$xx in \ en) LANGX="English" ;; \ de) LANGX="German" ;; \ fr) LANGX="French" ;; \ fi) LANGX="Finnish" ;; \ es) LANGX="Spanish" ;; \ it) LANGX="Italian" ;; \ ja) LANGX="Japanese" ;; \ pl) LANGX="Polish" ;; \ pt-br) LANGX="Portuguese (Brazil)" ;; \ zh-tw) LANGX="Chinese (Traditional)" ;; \ zh-cn) LANGX="Chinese (Simplified)" ;; \ *) LANGX="$$x" ;; \ esac ; \ sed -e "s/@@/$$xx/" < all.dirs-in >$(DOCNAME)-$${xx}.dirs ; \ sed -e "s/@@/$$xx/" < all.links-in >$(DOCNAME)-$${xx}.links ; \ sed -e "s/@@/$$xx/" < all.install-in >$(DOCNAME)-$${xx}.install ; \ sed -e "s/@@/$$xx/" -e "s/@LANG@/$$LANGX/" < all.doc-base-in >$(DOCNAME)-$${xx}.doc-base ; \ done ####################################################################### # Build all sources to html and text pages for web (DDP on alioth) DDP ####################################################################### .PHONY: publish # $(PUBLISHDIR) is set to be: /org/www.debian.org/www/doc/manuals for master-www publish: -mkdir -p $(PUBLISHDIR)/debian-reference -rm -f $(PUBLISHDIR)/reference # For www.debian.org, relative symlink only -ln -sf debian-reference $(PUBLISHDIR)/reference # When DDP moves to squeeze, change to BUILD_MODE=xml $(MAKE) html txt css BUILD_MODE=asciidoc PUBLISHDIR=$(PUBLISHDIR)/debian-reference "LANGPO=$(LANGPO)" $(MAKE) -C sgml all PUBLISHDIR=$(PUBLISHDIR)/debian-reference "LANG_ALL=$(LANGSGML)" ####################################################################### # Clean targets ALL ####################################################################### .PHONY: clean dh_clean_in distclean clean: echo "BUILD_MODE = \"$(BUILD_MODE)\"" -rm -f *.swp *~ *.tmp -rm -f $(PODOC)/*~ $(ADOC)/*~ -rm -rf html -rm -f $(addsuffix .xml, $(addprefix $(DOCNAME)., en $(LANGPO))) -rm -f $(DOCNAME).en.xmlt common.ent header.txt $(MAKE) -C sgml clean "LANG_ALL=$(LANGSGML)" PUBLISHDIR=$(PUBLISHDIR) $(MAKE) dh_clean_in dh_clean_in: # Clean files for debhelper in debian/ -rm -f $(addsuffix .postinst, $(addprefix debian/$(DOCNAME)-, $(LANGALL))) -rm -f $(addsuffix .postrm, $(addprefix debian/$(DOCNAME)-, $(LANGALL))) -rm -f $(addsuffix .dirs, $(addprefix debian/$(DOCNAME)-, $(LANGALL))) -rm -f $(addsuffix .links, $(addprefix debian/$(DOCNAME)-, $(LANGALL))) -rm -f $(addsuffix .doc-base, $(addprefix debian/$(DOCNAME)-, $(LANGALL))) -rm -f $(addsuffix .install, $(addprefix debian/$(DOCNAME)-, $(LANGALL))) -rm -f $(addsuffix .postinst, $(addprefix debian/$(DOCNAME)-, $(LANGALL))) # Run distclean only for regenerating all locally cached data from remote # (and all raw XML from asciidoc for lenny@local) distclean: clean # We should clean these local cached data for debian package. -rm -f all-popcon-results.txt packages.txt packages.bkup.txt pkg.lst ifndef DEBIAN_PACKAGE_BUILD_MODE ifeq ($(BUILD_MODE),$(BUILD_MODE_ASCIIDOC)) # If not from debian/rules but in asciidoc mode, # remove remotely generated files. -rm -f $(SRC_ENT) endif endif ######################################################################### # Local raw XML file created from asciidoc in lenny LOCAL ######################################################################### #=======================================================================# ifeq ($(BUILD_MODE),$(BUILD_MODE_ASCIIDOC)) #=======================================================================# .SECONDARY: $(SRC_XML) # You can prevent automatic deletion of an intermediate file by # marking it as a "secondary" file. To do this, list it as a # prerequisite of the special target `.SECONDARY'. When a file is # secondary, `make' will not create the file merely because it does not # already exist, but `make' does not automatically delete the file. # Marking a file as secondary also marks it as intermediate. # ----------------------------------------------------------------------- # create a raw XML source from asciidoc source # Regression caused by asciidoc 8.4.1 should be addressed by # "-a no-inline-literal" but .... this does not work. Use lenny only. $(DOCNAME).raw.xml: $(SRC_ASC) echo "BUILD_MODE = \"$(BUILD_MODE)\"" asciidoc -a no-inline-literal -a 'newline=\n' -b docbook -d book -o - $(ADOC)/$(DOCNAME).txt |\ sed -e "/<\/authorinitials>/r $(ADOC)/copyright.txt" |\ xmllint --format - |\ sed -f bin/replace > $@ #=======================================================================# else #=======================================================================# # After squeeze, $(DOCNAME).raw.xml is pristine source and should not be rebuild. # To avoid dependency issues due to "$(DOCNAME).%.xml:", we need this target: $(DOCNAME).raw.xml: echo "BUILD_MODE = \"$(BUILD_MODE)\"" echo "You need to run \"make\" in lenny environment or create it as pristine source." exit 1 #=======================================================================# endif #=======================================================================# ######################################################################### # Local cached data created from remote data by local updates LOCAL ######################################################################### # datadate{pop|size}.ent are generated as secondary side effects # These files are not part of the packaged source all-popcon-results.txt: wget -O - $(UPOPC) | zcat - > $@ echo "" > datadatepop.ent packages.txt: wget -O - $(UDEBA)/main/binary-$(ARCH)/Packages.bz2 | bzcat - > packages.main.tmp grep-dctrl -e -sPackage,Installed-Size -P "." packages.main.tmp > packages.main rm packages.main.tmp wget -O - $(UDEBA)/contrib/binary-$(ARCH)/Packages.bz2 | bzcat - > packages.contrib.tmp grep-dctrl -e -sPackage,Installed-Size -P "." packages.contrib.tmp > packages.contrib rm packages.contrib.tmp wget -O - $(UDEBA)/non-free/binary-$(ARCH)/Packages.bz2 | bzcat - > packages.non-free.tmp grep-dctrl -e -sPackage,Installed-Size -P "." packages.non-free.tmp > packages.non-free rm packages.non-free.tmp cat packages.main packages.contrib packages.non-free >$@ # echo "" > datadatesize.ent echo "" >> datadatesize.ent echo "" >> datadatesize.ent echo "" >> datadatesize.ent echo "" >> datadatesize.ent rm packages.main packages.contrib packages.non-free packages.bkup.txt: wget -O - $(UDEBB)/main/binary-$(ARCH)/Packages.bz2 | bzcat - > packages.bkup.tmp grep-dctrl -e -sPackage,Installed-Size -P "." packages.bkup.tmp > $@ rm packages.bkup.tmp pkg.lst: $(DOCNAME).raw.xml xsltproc --novalid $(VERBOSE) $(PXSLT)/pkg.xsl $< > $@ ######################################################################### # Local base data created from cached data by local updates LOCAL ######################################################################### # These $(SRC_ENT) files are part of the packaged prestine source. # These $(SRC_ENT) need to be rebuild if $(DOCNAME).raw.xml is updated. # But these $(SRC_ENT) do not depend on $(DOCNAME).raw.xml intentionally to # avoid long build tine. Beakage due to these are rare, minor and pedictable. # To rebuild these $(SRC_ENT), do "make distclean" first. .PHONY: xml xml: $(DOCNAME).raw.xml $(SRC_ENT) datadatepop.ent: $(MAKE) all-popcon-results.txt datadatesize.ent: $(MAKE) packages.txt popcon.ent: if ! [ -f $(DOCNAME).raw.xml ]; then $(MAKE) $(DOCNAME).raw.xml ; fi if ! [ -f all-popcon-results.txt ]; then $(MAKE) all-popcon-results.txt ; fi if ! [ -f pkg.lst ] || [ $(DOCNAME).raw.xml -nt pkg.lst ]; then $(MAKE) pkg.lst ; fi echo "" > $@ echo "" >> $@ echo "" >> $@ TOTAL=$(shell sed -n -e 's/^Submissions: *\([^ ]*\) *$$/\1/p' < all-popcon-results.txt) ;\ grep -e '^Package:' all-popcon-results.txt | grep -f pkg.lst | $(PBIN)/popconent $$TOTAL >> $@ pkgsize.ent: if ! [ -f $(DOCNAME).raw.xml ]; then $(MAKE) $(DOCNAME).raw.xml ; fi if ! [ -f packages.txt ]; then $(MAKE) packages.txt ; fi if ! [ -f packages.bkup.txt ]; then $(MAKE) packages.bkup.txt ; fi if ! [ -f pkg.lst ] || [ $(DOCNAME).raw.xml -nt pkg.lst ]; then $(MAKE) pkg.lst ; fi $(PBIN)/sizeent packages.txt packages.bkup.txt < pkg.lst > $@ ######################################################################### # XML file operations ALL ######################################################################### # Create final XML sources common.ent: $(SRC_XML) echo "" > $@ echo "" >> $@ echo "" >> $@ echo "" >> $@ echo "" >> $@ echo "" >> $@ # Update URL list header from $(DOCNAME).raw.xml header.txt: $(ADOC)/header1.txt $(DOCNAME).raw.xml $(ADOC)/header2.txt cat $(ADOC)/header1.txt > $@ xsltproc --novalid $(VERBOSE) $(PXSLT)/urls.xsl $(DOCNAME).raw.xml | sort | uniq |\ sed -e "s/&/\&/g" >> $@ cat $(ADOC)/header2.txt >> $@ # Replace table contents with @-@popcon*@@@ and @@@psize*@-@ and # fix URL referencees and table ID. $(DOCNAME).en.xml: $(DOCNAME).raw.xml header.txt common.ent # use asciidoc generated xml file as main contents xsltproc --novalid $(VERBOSE) $(PXSLT)/table.xsl $(DOCNAME).raw.xml |\ $(PBIN)/colspec.py |\ sed -e '/ $@ # Replace table contents with dummy text and # fix URL referencees and table ID as the template for translation. # This avoids bloated PO/POT files. (tablet.xsl used insted of table.xsl) $(DOCNAME).en.xmlt: $(DOCNAME).raw.xml header.txt # use asciidoc generated xml file as main contents xsltproc --novalid $(VERBOSE) $(PXSLT)/tablet.xsl $(DOCNAME).raw.xml |\ $(PBIN)/colspec.py |\ sed -e '/ $@ ######################################################################### # POT/PO file operations ALL ######################################################################### # Create new POT file in $(PODOC) matching $(DOCNAME).en.xml .PHONY: pot pot: $(PODOC)/$(DOCNAME).pot # create pot file from template xml $(PODOC)/$(DOCNAME).pot: $(DOCNAME).en.xmlt $(GETTEXT) -p $@ -m $< .PHONY: po po: $(foreach lang, $(LANGPO), $(PODOC)/$(DOCNAME).$(lang).po) # Update new PO file in $(PODOC) by POT file $(PODOC)/$(DOCNAME).%.po: $(PODOC)/$(DOCNAME).pot $(UPDATEPO) $@ $< @echo ">>> $@: $$( msgattrib --force-po --no-wrap --fuzzy $@ |grep '^msgid'|wc -l) fuzzy translation" @if [ "$*" = "ja" ]; then msgattrib --force-po --no-wrap --fuzzy $@ ; fi @echo ">>> $@: $$( msgattrib --force-po --no-wrap --untranslated $@ |grep '^msgid'|wc -l) untranslated" @if [ "$*" = "ja" ]; then msgattrib --force-po --no-wrap --untranslated $@ ; fi ######################################################################### # Translate XML files ALL ######################################################################### $(DOCNAME).ja.xml: $(PODOC)/$(DOCNAME).ja.po $(PODOC)/addendum1.ja $(DOCNAME).en.xml $(TRANSLATE) -m $(DOCNAME).en.xml -a $(PODOC)/addendum1.ja -p $< -l $@ $(DOCNAME).%.xml: $(PODOC)/$(DOCNAME).%.po $(DOCNAME).en.xml $(TRANSLATE) -m $(DOCNAME).en.xml -p $< -l $@ ######################################################################### # Create HTML files ALL ######################################################################### .PHONY: css css: -rm -rf $(PUBLISHDIR)/images mkdir -p $(PUBLISHDIR)/images cp -f $(PXSLT)/$(DOCNAME).css $(PUBLISHDIR)/$(DOCNAME).css cd $(IMAGES) ; cp caution.png home.gif important.png next.gif note.png prev.gif tip.png up.gif warning.png $(PUBLISHDIR)/images .PHONY: html1 htmli html htmls html1: $(foreach lang, en $(LANGPO), $(PUBLISHDIR)/$(DOCNAME).$(lang).html) htmli: $(foreach lang, en $(LANGPO), $(PUBLISHDIR)/index.$(lang).html) html: html1 htmli htmls: html css $(PUBLISHDIR)/$(DOCNAME).%.html: $(DOCNAME).%.xml $(SRC_ENT) -mkdir -p $(PUBLISHDIR) $(XP) --stringparam root.filename $(DOCNAME) \ --stringparam base.dir $(PUBLISHDIR)/ \ --stringparam html.ext .$*.html \ --stringparam admon.graphics 0 \ --stringparam callout.graphics 0 \ --stringparam navig.graphics 0 \ --stringparam html.stylesheet $(DOCNAME).css \ xslt/style-onehtml.xsl $< $(PUBLISHDIR)/index.%.html: $(DOCNAME).%.xml $(SRC_ENT) -mkdir -p $(PUBLISHDIR) $(XP) --stringparam root.filename index \ --stringparam base.dir $(PUBLISHDIR)/ \ --stringparam html.ext .$*.html \ --stringparam html.stylesheet $(DOCNAME).css \ xslt/style-html.xsl $< .PHONY: txt txt: $(foreach lang, en $(LANGPO), $(PUBLISHDIR)/$(DOCNAME).$(lang).txt) # Build rule for TXT (non-English) # # (UTF-8 compatibility of debiandoc2text is limitted) $(PUBLISHDIR)/$(DOCNAME).%.txt: $(PUBLISHDIR)/$(DOCNAME).%.html -mkdir -p $(PUBLISHDIR) LC_ALL=en_US.UTF-8 w3m -dump -cols 65 -T text/html $(PUBLISHDIR)/$(DOCNAME).$*.html >$@ ####################################################################### # Build xml/html(indexed) for testing source (local) ALL ####################################################################### # force rebuild when touched po file after asciidoc .PHONY: new new: touch $(ADOC)/00_preface.txt $(MAKE) xml ######################################################################### # Utility targets ALL ######################################################################### .PHONY: url # check url for everything url: url-sanity url-ja url-check-en url-check-ja # check url sanity url-sanity: $(DOCNAME).en.xml @echo "----- Duplicate URL references (start) -----" -sed -ne "/^<\!ENTITY/s/<\!ENTITY \([^ ]*\) .*$$/\" \1 \"/p" < $< | uniq -d | xargs -n 1 grep $< -e | grep -e "^<\!ENTITY" @echo "----- Duplicate URL references (end) -----" # $$/\"\1\"/p" < $< | uniq | xargs -n 1 wget -O /dev/null -nv || echo "**************************************************************" @echo "----- URL check $* (end) -----" # Make list of all "http://en.wikipedia.org/wiki/..." $(PODOC)/wikipedia.list: $(PODOC)/$(DOCNAME).pot sed -ne "s/^msgid \"\(http:\/\/en\.wikipedia\.org\/wiki\/.*\)\"/\1/p" < $< > $@ # Make list of untranslated "http://en.wikipedia.org/wiki/..." $(PODOC)/wikipedia.%.list: $(PODOC)/$(DOCNAME).%.po sed -ne "s/^msgstr \"\(http:\/\/en\.wikipedia\.org\/wiki\/.*\)\"/\1/p" < $< > $@ # Translate all $(PODOC)/wikipedia.%.pot: $(PODOC)/wikipedia.list bin/interwiki $* "PRINT" < $< > $@ # Translate untranslated $(PODOC)/wikipedia.%.po: $(PODOC)/wikipedia.%.list bin/interwiki $* "NO" < $< > $@ # Update new PO file in $(PODOC) by POT file for English typo fix .PHONY: typo typo: -rm -f $(PODOC)/$(DOCNAME).pot.old cp $(PODOC)/$(DOCNAME).pot $(PODOC)/$(DOCNAME).pot.old $(MAKE) $(DOCNAME).en.xmlt $(GETTEXT) -p $(PODOC)/$(DOCNAME).pot -m $(DOCNAME).en.xmlt # repeat for all languages for $$xx in $(LANGPO) ; do \ msguntypot -o $(PODOC)/$(DOCNAME).pot.old -n $(PODOC)/$(DOCNAME).pot $(PODOC)/$(DOCNAME).$$xx.po ;\ done