#!/bin/sh # Test driver for 'pwebmac.tex' in combination with various TeX engines. # Production tool for all major WEB programs in TeX Live (invoked as # './makeall --new --pdftocfront --tex={pdftex,xetex}'). # Public domain. Originally written by Andreas Scherer, 2020. LONGOPTS=changes,new,outdir:,pdftocfront,tex: SHRTOPTS=cno:pt: CHANGES=false # apply main changefile to WEB source NEW=false # '\input pwebmac' instead of '\input webmac' OUTDIR=. # path where the resulting tarballs are placed PDFTOCFRONT=false # push table-of-contents to front of PDF output TEX=tex # or 'pdftex' or 'xetex' getopt -T >/dev/null if [ $? -eq 4 ] # Check for Linux-getopt with extensions then OPTS=$(getopt -n downloadable-programs -o $SHRTOPTS -l $LONGOPTS -- "$@") else OPTS=$(getopt $SHRTOPTS $*) fi if [ $? -eq 0 ] # Check return code from getopt then eval set -- "$OPTS" else echo "Failed to parse options." >&2; exit 1 fi while true do case "$1" in -c | --changes ) CHANGES=true; shift ;; -n | --new ) NEW=true; shift ;; -o | --outdir ) OUTDIR="$2"; shift 2 ;; -p | --pdftocfront ) PDFTOCFRONT=true; shift ;; -t | --tex ) TEX="$2"; shift 2 ;; -- ) shift; break ;; * ) break ;; esac done KNUTHWHERE=$(locate /bibtex.web) KNUTHWARE=$(dirname $KNUTHWHERE) for f in \ $KNUTHWARE/*.web \ $KNUTHWARE/pdftexdir/pdftex.web \ $KNUTHWARE/xetexdir/xetex.web do if $CHANGES then c=$(basename $f .web) case $c in "pdftex"|"xetex" ) c=$KNUTHWARE/$c c=$(echo $c | sed -e 's?\(texk/\)?Work/\1?') ;; * ) c=$KNUTHWARE/$c ;; esac weave $f $c.ch sed -i -e "s/\(\\\\let\\\\maybe=\)\\\\iftrue/\1\\\\iffalse/" \ $(basename $f .web).tex else weave $f fi f=$(basename $f .web) # use extended macros for TeX Live PDF documentation if $NEW then sed -i -e "1 s/\\\\input webmac/\\\\input pwebmac/" $f.tex fi # replace former convention to indicate "not a title page" # to include page headers for table-of-contents sed -i -e "s/\\\\def\\\\titlepage{F}/\\\\titlefalse/" $f.tex # special treatment for individual WEB programs case $f in # purge conflict between bibtex.web and webmac.tex # 'E' no longer free to be active character # fix table-of-contents page for bibtex "bibtex" ) sed -i -e "s/titlefalse/titletrue/" \ -e "70,77d" $f.tex ;; # make room for new material in weave.web "tangle" ) sed -i -e "s/number{123}/number{125}/" $f.tex ;; # amend '\N' redefinition for PDF outlines in mf.tex and # tex.tex (also pdftex.web and xetex.web); depends on the # extended 'pwebmac.tex' macros "mf"|"tex"|"pdftex"|"xetex" ) if [ "xetex" = $f ] then # purge obsolete macros from XeTeX sed -i -e "/\\\\input xewebmac/d" $f.tex # only XeTeX can process XeTeX TEX=xetex fi if $NEW then if [ "pdftex" = $f ] then # pdfTeX has a looong table-of-contents cat > pdftex.patch << FI \advance\vsize by 4\baselineskip \ifacro\advance\pdfpageheight by 4\baselineskip\fi FI sed -i -e "/\\\\def\\\\topofcontents.*/ { r pdftex.patch }" $f.tex fi # active links in PDF outlines/bookmarks cat > texmf-pdf.patch << FI \ifacro{\toksF={}\makeoutlinetoks{[#2] #3}\outlinedone\outlinedone}\fi FI sed -i -e "/\\\\outer\\\\def\\\\N.*/ { r texmf-pdf.patch }" $f.tex cat > texmf-pdf.patch << FI \ifpdf\special{pdf: outline 0 << /Title (\the\toksE) /Dest [ @thispage /FitH @ypos ] >>}\fi FI sed -i -e "/ \\\\edef\\\\next.*/ { r texmf-pdf.patch }" $f.tex rm texmf-pdf.patch fi ;; esac if $PDFTOCFRONT then # shift table-of-contents pages to the front in PDF sed -i -e "1 s/\(webmac\)/\1\n\\\\input pdfwebtocfront/" $f.tex $TEX $f.tex # run TeX twice fi $TEX $f done if $PDFTOCFRONT then # create tarballs for publication pax vftovp.pdf vptovf.pdf -wvzf $OUTDIR/etc.tar.gz -s ,^,etc/, pax mf.pdf -wvzf $OUTDIR/mf.tar.gz -s ,^,mf/, pax gftodvi.pdf gftopk.pdf gftype.pdf mft.pdf \ -wvzf $OUTDIR/mfware.tar.gz -s ,^,mfware/, pax tex.pdf -wvzf $OUTDIR/tex.tar.gz -s ,^,tex/, pax dvitype.pdf pltotf.pdf pooltype.pdf tftopl.pdf \ -wvzf $OUTDIR/texware.tar.gz -s ,^,texware/, pax tangle.pdf weave.pdf -wvzf $OUTDIR/web.tar.gz -s ,^,web/, pax bibtex.pdf -wvzf $OUTDIR/bibtex.tar.gz -s ,^,bibtex/, pax dvicopy.pdf patgen.pdf pktogf.pdf pktype.pdf \ -wvzf $OUTDIR/other.tar.gz -s ,^,other/, pax pdftex.pdf -wvzf $OUTDIR/pdftex.tar.gz -s ,^,pdftex/, pax xetex.pdf -wvzf $OUTDIR/xetex.tar.gz -s ,^,xetex/, fi exit 0