summaryrefslogtreecommitdiff
path: root/doc/lispref/two-volume.make
blob: 133c50be23e12b496fc46ab5260b7b94835c9941 (plain)
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
# Copyright (C) 2007-2020 Free Software Foundation, Inc.
# See end for copying conditions.

# although it would be nice to use tex rather than pdftex to avoid
# colors, spurious warnings about names being referenced but not
# existing, etc., dvips | ps2pdf doesn't preserve the page size.
# Instead of creating a special dvips config file, put up with the warnings.
# (Note added 2012/05: for me, using texlive-2007-57, pdftex
# doesn't work for reason, but tex does.)
texinfodir=../misc
emacsdir=../emacs

tex = TEXINPUTS=".:$(texinfodir):${emacsdir}:${TEXINPUTS}" pdftex -interaction=nonstopmode

all: vol1.pdf vol2.pdf

# There's probably a better way to do this, without using a temp file.
# Something like:
# tex -jobname=vol1 '\def\SETVOL1 \input{elisp.texi}'
# but I don't know what to use for "\def\SETVOL1".
tex1 = sed '/^@setfilename/a\
@set VOL1' elisp.texi > elisp1tmp.tex && $(tex) -jobname=vol1 elisp1tmp.tex

tex2 = sed '/^@setfilename/a\
@set VOL2' elisp.texi > elisp2tmp.tex && $(tex) -jobname=vol2 elisp2tmp.tex

# elisp.texi specially defines \tocreadfilename when VOL1 or VOL2 is
# set, so we can use our premade .toc's.
#
vol1.pdf: elisp1med-fns-ready elisp1med-aux-ready elisp1med-toc-ready
	@printf '\f Final TeX run for volume 1...\n'
	cp elisp1med-toc-ready elisp1-toc-ready.toc
	cp elisp1med-fns-ready vol1.fns
	cp elisp1med-aux-ready vol1.aux
	$(tex1)
#
vol2.pdf: elisp2med-fns-ready elisp2med-aux-ready elisp2med-toc-ready
	@echo "Final TeX run for volume 2..."
	cp elisp2med-toc-ready elisp2-toc-ready.toc
	cp elisp2med-fns-ready vol2.fns
	cp elisp2med-aux-ready vol2.aux
	$(tex2)

#  intermediate toc files.
#
# vol1 toc: volume 1, page break, volume 2 (with II: prepended).
elisp1med-toc-ready: elisp1med-init elisp2med-init
	echo '@unnchapentry{@b{Volume 1}}{10001}{vol1}{}' >$@
	cat elisp1med-toc >>$@
	echo '@page' >>$@
	echo '@unnchapentry{@b{Volume 2}}{10001}{vol2}{}' >>$@
	sed 's/{\([^}]*\)}$$/{II:\1}/' elisp2med-toc >>$@
#
# vol2 toc: volume 1 (with I: prepended), page break, volume 2.
elisp2med-toc-ready: elisp1med-init elisp2med-init
	echo '@unnchapentry{@b{Volume 1}}{10001}{vol1}{}' >$@
	sed 's/{\([^}]*\)}$$/{I:\1}/' elisp1med-toc >>$@
	echo '@page' >>$@
	echo '@unnchapentry{@b{Volume 2}}{10001}{vol2}{}' >>$@
	cat elisp2med-toc >>$@


#  intermediate aux files.
#
# append vol2's fixed aux to normal vol1.
elisp1med-aux-ready: elisp2med-aux-vol-added
	cat elisp1med-aux $< >$@
#
# prepend vol1's fixed aux to vol2.
elisp2med-aux-ready: elisp1med-aux-vol-added
	cat $< elisp2med-aux >$@

# on -pg entries, append volume number after page number.
elisp1med-aux-vol-added: elisp1med-init
	sed 's/-pg}{\(.*\)}$$/-pg}{\1, vol.@tie1}/' elisp1med-aux >$@
#
elisp2med-aux-vol-added: elisp2med-init
	sed 's/-pg}{\(.*\)}$$/-pg}{\1, vol.@tie2}/' elisp2med-aux >$@

#  intermediate index (fns) file.
#
elisp1med-fns-ready: elisp1med-fn-vol-added elisp2med-fn-vol-added
	cat elisp2med-fn-vol-added >>vol1.fn
	texindex vol1.fn
	cp vol1.fns $@
#
elisp2med-fns-ready: elisp1med-fn-vol-added elisp2med-fn-vol-added
	cat elisp1med-fn-vol-added >>vol2.fn
	texindex vol2.fn
	cp vol2.fns $@

# Insert volume number (I: or II:) into index file.
elisp1med-fn-vol-added: elisp1med-init
	cp vol1.fn elisp1med-fn
	sed 's/}{/}{I:/' elisp1med-fn >$@
#
elisp2med-fn-vol-added: elisp2med-init
	cp vol2.fn elisp2med-fn
	sed 's/}{/}{II:/' elisp2med-fn >$@

# -----------------------------------------------------------------------------
# everything above is essentially a duplicate of everything below. sorry.
# -----------------------------------------------------------------------------

#  intermediate TeX runs.
#
# this generates what would be the final versions -- except the page
# numbers aren't right.  The process of adding the I: and II: changes
# the page breaks, so a few index entries, at least are wrong.  (In
# 2007, x-meta-keysym in vol.II ended up on page 374 when the index had
# it on page 375 from the initial run.)
#
# So, we start all over again, from these fns/aux/toc files.
#
elisp1med-init: elisp1-fns-ready elisp1-aux-ready elisp1init-toc-ready $(texinfodir)/texinfo.tex
	@printf '\f Intermediate TeX run for volume 1...\n'
	cp elisp1init-toc-ready elisp1-toc-ready.toc
	cp elisp1-fns-ready vol1.fns
	cp elisp1-aux-ready vol1.aux
	$(tex1)
	texindex vol1.??
	mv vol1.aux elisp1med-aux
	mv vol1.toc elisp1med-toc
#
elisp2med-init: elisp2-fns-ready elisp2-aux-ready elisp2init-toc-ready $(texinfodir)/texinfo.tex
	@echo "Final TeX run for volume 2..."
	cp elisp2init-toc-ready elisp2-toc-ready.toc
	cp elisp2-fns-ready vol2.fns
	cp elisp2-aux-ready vol2.aux
	$(tex2)
	texindex vol2.??
	mv vol2.aux elisp2med-aux
	mv vol2.toc elisp2med-toc


#  initial toc files.
#
# vol1 toc: volume 1, page break, volume 2 (with II: prepended).
elisp1init-toc-ready: elisp1-init elisp2-init
	echo '@unnchapentry{@b{Volume 1}}{10001}{vol1}{}' >$@
	cat elisp1-toc >>$@
	echo '@page' >>$@
	echo '@unnchapentry{@b{Volume 2}}{10001}{vol2}{}' >>$@
	sed 's/{\([^}]*\)}$$/{II:\1}/' elisp2-toc >>$@
#
# vol2 toc: volume 1 (with I: prepended), page break, volume 2.
elisp2init-toc-ready: elisp1-init elisp2-init
	echo '@unnchapentry{@b{Volume 1}}{10001}{vol1}{}' >$@
	sed 's/{\([^}]*\)}$$/{I:\1}/' elisp1-toc >>$@
	echo '@page' >>$@
	echo '@unnchapentry{@b{Volume 2}}{10001}{vol2}{}' >>$@
	cat elisp2-toc >>$@


#  initial aux files.
#
# append vol2's fixed aux to normal vol1.  The initial runs saved
# elisp1-aux and elisp2-aux.
elisp1-aux-ready: elisp2-aux-vol-added
	cat elisp1-aux $< >$@
#
# prepend vol1's fixed aux to vol2.
elisp2-aux-ready: elisp1-aux-vol-added
	cat $< elisp2-aux >$@

# on -pg entries, append volume number after page number.
elisp1-aux-vol-added: elisp1-init
	sed 's/-pg}{\(.*\)}$$/-pg}{\1, vol.@tie1}/' elisp1-aux >$@
#
elisp2-aux-vol-added: elisp2-init
	sed 's/-pg}{\(.*\)}$$/-pg}{\1, vol.@tie2}/' elisp2-aux >$@

#  initial index (fns) file.
#
# Append other volume's index entries to this one's.
# Index entries in this volume will then take precedence.
elisp1-fns-ready: elisp1-fn-vol-added elisp2-fn-vol-added
	cat elisp2-fn-vol-added >>vol1.fn
	texindex vol1.fn
	cp vol1.fns $@
#
elisp2-fns-ready: elisp1-fn-vol-added elisp2-fn-vol-added
	cat elisp1-fn-vol-added >>vol2.fn
	texindex vol2.fn
	cp vol2.fns $@

# Insert volume number (I: or II:) into index file.
elisp1-fn-vol-added: elisp1-init
	cp vol1.fn elisp1-fn
	sed 's/}{/}{I:/' elisp1-fn >$@
#
elisp2-fn-vol-added: elisp2-init
	cp vol2.fn elisp2-fn
	sed 's/}{/}{II:/' elisp2-fn >$@


#  initial TeX runs.
#
# We use the .fn, .aux, and .toc files created here in subsequent
# processing.  The page numbers generated here will not be correct yet,
# but we run texindex and TeX a second time just to get them closer.
# Otherwise it might take even longer for them to converge.
#
elisp1-init: elisp.texi
	@printf '\f Initial TeX run for volume 1...\n'
	rm -f vol1.aux vol1.toc
	$(tex1)
	texindex vol1.??
	mv vol1.aux elisp1-aux
	mv vol1.toc elisp1-toc
	touch $@
#
elisp2-init: elisp.texi
	@echo "Initial TeX run for volume 2..."
	rm -f vol2.aux vol2.toc
	$(tex2)
	texindex vol2.??
	mv vol2.aux elisp2-aux
	mv vol2.toc elisp2-toc
	touch $@

# COPYING CONDITIONS
#
# This file is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This file is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this file.  If not, see <https://www.gnu.org/licenses/>.