## preamble ## .PHONY : all install clean tds zip ctan pdf dtx cls sty anc bib recover gloss ind .DEFAULT : all ## programs ## # DOC is the class/package XML document, always the most recently-edited # Note: as of 2017-03-14 this does NOT need to be the same name as the dir, # nor as the name of the principal class/package created DOC := $(shell ls -1t *.xml | grep -v '\.run\.' | grep -vE '^(ucc|lppl|autopack|languages|prepost|readme|template|test|.*\.frags|.*\.bak).xml$$' | head -1 | cut -d . -s -f 1) HERE := $(shell pwd) JAVA := $(shell which java) SAX := $(shell locate saxon9he.jar | tail -1) LXP := $(shell which lxprintf) LMK := $(shell which latexmk) ## classpack ## # ClassPack-specific locations TMF := $(shell kpsewhich -expand-var '$$TEXMFHOME') DEV := $(TMF)/dev CPX := $(DEV)/db2dtx.xsl CPB := $(DEV)/db2bibtex.xsl CPT := $(DEV)/db2md.xsl CPD := $(DEV)/decommentbbl.awk CPP := $(DEV)/prepost.xml IST := $(DEV)/classpack.ist RME := $(DEV)/readme.xml LPPL := $(DEV)/lppl.xml ## metadata ## # Metadata extracted from the document TYPE := $(shell $(LXP) -e book "%s" @userlevel $(DOC).xml) LPROC := $(shell $(LXP) -e 'part[@xml:id="doc"]' "%s" @conformance $(DOC).xml) BPROC := $(shell $(LXP) -e bibliography "%s" @condition $(DOC).xml) BIBREF:= $(shell $(LXP) -e biblioref "%s\n" @linkend $(DOC).xml | wc -l) RFC := $(shell $(LXP) -e book "%s" 'count(//exceptionname)' $(DOC).xml) RFCGOT:= $(shell grep rfc2119 $(DOC).bib 2>/dev/null | wc -l) VER := $(shell $(LXP) -e book "%s.%s" @version @revision $(DOC).xml) #APROC := $(shell $(LXP) -e 'appendix[@arch]' "%s" 'normalize-space(@arch)' $(DOC).xml) ADOX := $(shell $(LXP) -e 'appendix[@arch]' "%s\n" @xlink:href $(DOC).xml) #ADOC := $(shell $(LXP) -e 'appendix[@arch]' "%s" 'substring-before(@xlink:href,".")' $(DOC).xml) #AEXT := $(shell $(LXP) -e 'appendix[@arch]' "%s" 'substring-after(@xlink:href,".")' $(DOC).xml) DOX := $(shell $(LXP) -e appendix "%s " @xlink:href $(DOC).xml) LOC := $(shell $(LXP) -e book "%s" @xml:base $(DOC).xml) ## shortcuts ## # Target shortcuts all : pdf ctan tds #anc : $(ADOC).pdf cls : $(DOC).$(TYPE) ctan : $(DOC)-$(VER).zip dtx : $(DOC).dtx pdf : $(DOC).pdf sty : $(DOC).$(TYPE) zip : $(DOC)-$(VER).zip tds : $(DOC)-$(VER).tds.zip ## dtx ## # Transform the document into a .dtx file $(DOC).dtx $(DOC).ins : $(DOC).xml $(CPX) $(CPB) $(CPT) $(CPD) $(CPP) $(RME) $(JAVA) -Djdk.xml.entityExpansionLimit=0 \ -jar $(SAX) \ -xi:on \ -o:$@ \ -s:$< \ -dtd:on \ -xsl:$(CPX) \ cpdir=$(DEV) \ appdir=$(HERE) $(shell echo $(RFC) exceptionnames, $(RFCGOT) entries in .bib >mflog) ifeq ($(RFC),0) touch $(DOC).bib endif # removed 2018-02-04 and added to end of db2bibtex.xsl #ifeq ($(RFCGOT),0) # cat $(DEV)/rfc2119.bib >>$(DOC).bib #endif # Extract all the files from the .dtx $(DOC).$(TYPE) : $(DOC).dtx $(DOC).ins yes|pdflatex $(DOC).ins ## pdf ## # Create the documentation $(DOC).pdf : $(DOC).dtx $(DOC).$(TYPE) $(DOC).bib $(CPX) $(CPB) $(CPT) $(CPD) $(CPP) # Don't use latexmk for the moment as it fails to do index and glossary # $(LMK) -xelatex -bibtex $< # if XeLaTeX is required, do this block ifeq ($(LPROC),xelatex) $(LMK) -xelatex -bibtex $< # xelatex $< # biber $(DOC) makeindex -s gglo.ist -o $(DOC).gls $(DOC).glo # xelatex $< makeindex -s $(IST) -o $(DOC).ind $(DOC).idx # xelatex $< $(LMK) -xelatex -bibtex $< # or if (pdflatex but no bibtex) else ifeq ($(BIBREF),0) $(LMK) -pdf $< # or if (pdflatex and biblatex) else ifeq ($(BPROC),biber) pdflatex $< biber $(DOC) makeindex -s gglo.ist -o $(DOC).gls $(DOC).glo pdflatex $< makeindex -s $(IST) -o $(DOC).ind $(DOC).idx pdflatex $< # else (pdflatex and bibtex) else pdflatex $< bibtex $(DOC) awk -f $(CPD) $(DOC).bbl | iconv -f ISO-8859-1 -t UTF-8 - >$(DOC).bdc mv -f $(DOC).bdc $(DOC).bbl makeindex -s gglo.ist -o $(DOC).gls $(DOC).glo pdflatex $< makeindex -s $(IST) -o $(DOC).ind $(DOC).idx pdflatex $< endif # TODO: add processing demo/test file[s] ## zip ## # Package as TDS zip file. # Clear out the doc|source|tex|generic directories # then populate them from the MANIFEST # TODO: stop packaging generated files $(DOC)-$(VER).tds.zip : README.md MANIFEST $(DOC).pdf \ $(DOC).dtx $(DOC).ins $(DOC).$(TYPE) Makefile /bin/rm -rf doc/* source/* tex/* dev/$(DOC) 2>>$(DOC).err mkdir -p doc/latex/$(LOC) mkdir -p source/latex/$(LOC) mkdir -p tex/latex/$(LOC) mkdir -p tex/generic/$(LOC) cp -f README.md MANIFEST $(DOC).pdf doc/latex/$(LOC)/ cp -f `cat MANIFEST | grep -E '\.(dtd|awk|sh|xsl|xml|dtx|tex|bib|csv|ins)$$'` source/latex/$(LOC) 2>>zip.log if [ `ls -1 *.cls 2>/dev/null|wc -l` -gt 0 ]; then cp -f *.cls tex/latex/$(LOC); fi if [ `ls -1 *.sty 2>/dev/null|wc -l` -gt 0 ]; then cp -f *.sty tex/latex/$(LOC); fi if [ `ls -1 *.cnf 2>/dev/null|wc -l` -gt 0 ]; then cp -f *.sty tex/latex/$(LOC); fi if [ `cat MANIFEST | grep -E '\.(jpg|png|pdf)$$' | grep -v $(DOC).pdf|wc -l` -gt 0 ]; then cp -f `cat MANIFEST | grep -E '\.(jpg|png|pdf)$$' | grep -v $(DOC).pdf` tex/generic/$(LOC) 2>>zip.log; fi ifeq ($(ADOC),) else cp -f $(ADOX) tex/latex/$(LOC)/ endif ifeq ($(DOC),classpack) mkdir -p dev/$(DOC) for f in awk sh xsl xml dtd; do if [ -f source/latex/$(DOC)/*.$f ]; then mv -f source/latex/$(DOC)/*.$f dev/$(DOC); fi; done endif /bin/rm -f $@ zip -r -FS -T \ --exclude=*.svn* --exclude=*.DS_Store* $@ \ doc/latex/$(LOC) source/latex/$(LOC) tex/latex/$(LOC) tex/generic/* dev/$(DOC) 2>>$(LOC).err ## CTAN ## # Package as zip file for CTAN $(DOC)-$(VER).zip : README.md MANIFEST $(DOC).pdf $(DOC).dtx $(DOC).ins Makefile mkdir -p $(LOC) /bin/rm -rf $(LOC)/* $(LXP) -e '/book/info/revhistory/revision[not(../revision/@version > @version)]' \ "Date of most recent change is %s\n" date/@YYYY-MM-DD $(DOC).xml >VERSION # unzip -v $@|grep -E '[12][0-9]{3}-[01][0-9]-[012][0-9] [0-2][0-9]:[0-5][0-9]'|awk '{print "Date of most-recently-changed file is " $$5 "T" $$6 ":00"}'|sort|tail -1>VERSION cp -f `cat MANIFEST | grep -Ev '(\.dtd|\.xsl|\.xml|\.sh|\.awk|Makefile|MANIFEST)$$'` $(LOC)/ rm -f `lxprintf -e 'part[@xml:id="files"]/chapter' "$(LOC)/%s\n" @xlink:href $(DOC).xml` cp -f $(DOC).dtx $(DOC).ins $(LOC)/ 2>>zip.log /bin/rm -f $@ zip -r -FS -T \ --exclude=*.svn* --exclude=*.DS_Store* $@ \ $(LOC) cp VERSION $(LOC)/VERSION ls -1 $(LOC) >$(LOC)/MANIFEST zip $@ $(LOC)/VERSION $(LOC)/MANIFEST ## install ## # Install locally install : $(DOC)-$(VER).tds.zip $(DOC)-$(VER).zip unzip -o -d $(TMF) $(DOC)-$(VER).tds.zip # svn add $(TMF)/doc/latex/$(LOC) # svn add $(TMF)/source/latex/$(LOC) # svn add $(TMF)/tex/latex/$(LOC) # svn add $(TMF)/tex/generic/ # svn ci -m $(DOC)-install ## recover ## # Recover from fatal LaTeX or Bib error after fixing recover : $(DOC).dtx $(LPROC) --interaction=nonstopmode $(DOC).dtx $(BPROC) $(DOC) gloss : $(DOC).dtx makeindex -s gglo.ist -o $(DOC).gls $(DOC).glo ind : $(DOC).dtx makeindex -s $(IST) -o $(DOC).ind $(DOC).idx bib : $(DOC).dtx $(DOC).bib $(BPROC) $(DOC) ## clean ## # Remove all trace of processing (used for a clean start) clean : /bin/rm -f $(DOC).dtx $(DOC).ins $(DOC).$(TYPE) $(DOC).fls \ $(DOC).aux $(DOC).log $(DOC).toc $(DOC).tex $(DOC).cnf \ $(DOC).bib $(DOC).bbl $(DOC).blg $(DOC).bdc $(DOC).bcf \ $(DOC).glo $(DOC).gls \ $(DOC).idx $(DOC).ilg $(DOC).ind $(DOC).ins \ $(DOC).dvi $(DOC).pdf $(DOC).log $(DOC).err \ README.md MANIFEST VERSION \ $(DOC)-$(VER).zip $(DOC)-$(VER).tds.zip $(DOC).cfg /bin/rm -rf $(LOC) doc source tex ## ancillary ## # not yet ## eof ## ## cd ~/texmf/dev; for f in db2dtx db2bibtex db2md figtab2latex; do ./chunk -p cpdoc $f.xsl; mv $f*.frag classpack; done