1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
#!/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
|