1### Makefile for Emacs refcards
2
3## Copyright (C) 1993-1994, 2001-2021 Free Software Foundation, Inc.
4
5## This file is part of GNU Emacs.
6#
7## GNU Emacs is free software: you can redistribute it and/or modify
8## it under the terms of the GNU General Public License as published by
9## the Free Software Foundation, either version 3 of the License, or
10## (at your option) any later version.
11
12## GNU Emacs is distributed in the hope that it will be useful,
13## but WITHOUT ANY WARRANTY; without even the implied warranty of
14## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15## GNU General Public License for more details.
16
17## You should have received a copy of the GNU General Public License
18## along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
19
20### Commentary:
21
22## See README for details.
23
24PDF_ENGLISH = \
25	calccard.pdf \
26	dired-ref.pdf \
27	gnus-booklet.pdf \
28	gnus-refcard.pdf \
29	orgcard.pdf \
30	refcard.pdf \
31	survival.pdf \
32	vipcard.pdf \
33	viperCard.pdf
34
35PDF_CZECH = \
36	cs-dired-ref.pdf \
37	cs-refcard.pdf \
38	cs-survival.pdf
39
40PDF_FRENCH = \
41	fr-dired-ref.pdf \
42	fr-refcard.pdf \
43	fr-survival.pdf
44
45PDF_GERMAN = de-refcard.pdf
46
47PDF_POLISH = pl-refcard.pdf
48
49PDF_PORTUGUESE = pt-br-refcard.pdf
50
51PDF_RUSSIAN = ru-refcard.pdf
52
53PDF_SLOVAKIAN = \
54	sk-dired-ref.pdf \
55	sk-refcard.pdf \
56	sk-survival.pdf
57
58PDF_TARGETS = $(PDF_ENGLISH) $(PDF_CZECH) $(PDF_FRENCH) $(PDF_GERMAN) \
59	$(PDF_POLISH) $(PDF_PORTUGUESE) $(PDF_RUSSIAN) $(PDF_SLOVAKIAN)
60
61PS_ENGLISH = $(PDF_ENGLISH:.pdf=.ps)
62PS_CZECH = $(PDF_CZECH:.pdf=.ps)
63PS_FRENCH = $(PDF_FRENCH:.pdf=.ps)
64PS_GERMAN = $(PDF_GERMAN:.pdf=.ps)
65PS_POLISH = $(PDF_POLISH:.pdf=.ps)
66PS_PORTUGUESE = $(PDF_PORTUGUESE:.pdf=.ps)
67PS_RUSSIAN = $(PDF_RUSSIAN:.pdf=.ps)
68PS_SLOVAKIAN = $(PDF_SLOVAKIAN:.pdf=.ps)
69
70PS_TARGETS = $(PDF_TARGETS:.pdf=.ps)
71
72
73## For emacsver.tex.
74ENVADD = TEXINPUTS=".:$(TEXINPUTS)"
75
76
77.PHONY: all pdf ps
78
79all: pdf
80pdf: $(PDF_TARGETS)
81ps: $(PS_TARGETS)
82
83
84.PHONY: english czech french german polish portuguese russian slovakian
85english: $(PDF_ENGLISH)
86czech: $(PDF_CZECH)
87french: $(PDF_FRENCH)
88german: $(PDF_GERMAN)
89polish: $(PDF_POLISH)
90portuguese: $(PDF_PORTUGUESE)
91russian: $(PDF_RUSSIAN)
92slovakian: $(PDF_SLOVAKIAN)
93
94.PHONY: english-ps czech-ps french-ps german-ps polish-ps portuguese-ps russian-ps slovakian-ps
95english-ps: $(PS_ENGLISH)
96czech-ps: $(PS_CZECH)
97french-ps: $(PS_FRENCH)
98german-ps: $(PS_GERMAN)
99polish-ps: $(PS_POLISH)
100portuguese-ps: $(PS_PORTUGUESE)
101russian-ps: $(PS_RUSSIAN)
102slovakian-ps: $(PS_SLOVAKIAN)
103
104
105## Default for file that do not use a different paper size.
106.SUFFIXES: .ps .dvi
107.dvi.ps:
108	dvips -t letter -o $@ $<
109
110
111make_cs=if pdfcsplain --version > /dev/null 2> /dev/null; then \
112	  $(ENVADD) pdfcsplain $$input; \
113	else \
114	  $(ENVADD) csplain "\pdfoutput=1\input $$input"; \
115	fi
116
117## For pdf output, the page layouts (a4/letter) are written directly
118## in the .tex files.
119
120## For PostScript output, note that some of the tex files (refcard,
121## de-refcard, fr-refcard, pt-br-refcard) have settings for letter or
122## a4 paper.  The Following are the default paper sizes (letter for English,
123## A4 for translations).
124## FIXME orgcard.ps does not fit on letter (see orgcard.tex).
125
126## A4, landscape: de-refcard, fr-refcard, pt-br-refcard orgcard
127## A4, portrait: cs-*, fr-dired-ref, sk-*, pl-refcard, ru-refcard
128## Letter, landscape: calccard, refcard
129## Letter, portrait (suffix rule): dired-ref, gnus-*, survival, vip*
130
131calccard_deps = calccard.tex emacsver.tex pdflayout.sty
132calccard.pdf: $(calccard_deps)
133	$(ENVADD) pdftex calccard.tex
134calccard.dvi: $(calccard_deps)
135	$(ENVADD) tex calccard.tex
136calccard.ps: calccard.dvi
137	dvips -t letter -t landscape -o $@ calccard.dvi
138
139cs_dired_ref_deps = cs-dired-ref.tex emacsver.tex pdflayout.sty
140cs-dired-ref.pdf: $(cs_dired_ref_deps)
141	input=cs-dired-ref.tex; $(make_cs)
142cs-dired-ref.dvi: $(cs_dired_ref_deps)
143	$(ENVADD) csplain cs-dired-ref.tex
144cs-dired-ref.ps: cs-dired-ref.dvi
145	dvips -t a4 -o $@ cs-dired-ref.dvi
146
147cs_refcard_deps = cs-refcard.tex emacsver.tex pdflayout.sty
148cs-refcard.pdf: $(cs_refcard_deps)
149	input=cs-refcard.tex; $(make_cs)
150cs-refcard.dvi: $(cs_refcard_deps)
151	$(ENVADD) csplain cs-refcard.tex
152cs-refcard.ps: cs-refcard.dvi
153	dvips -t a4 -o $@ cs-refcard.dvi
154
155cs_survival_deps = cs-survival.tex emacsver.tex pdflayout.sty
156cs-survival.pdf: $(cs_survival_deps)
157	input=cs-survival.tex; $(make_cs)
158cs-survival.dvi: $(cs_survival_deps)
159	$(ENVADD) csplain cs-survival.tex
160cs-survival.ps: cs-survival.dvi
161	dvips -t a4 -o $@ cs-survival.dvi
162
163de_refcard_deps = de-refcard.tex emacsver.tex pdflayout.sty
164de-refcard.pdf: $(de_refcard_deps)
165	$(ENVADD) pdftex de-refcard.tex
166de-refcard.dvi: $(de_refcard_deps)
167	$(ENVADD) tex de-refcard.tex
168de-refcard.ps: de-refcard.dvi
169	dvips -t a4 -t landscape -o $@ de-refcard.dvi
170
171dired_ref_deps = dired-ref.tex emacsver.tex pdflayout.sty
172dired-ref.pdf: $(dired_ref_deps)
173	$(ENVADD) pdftex dired-ref.tex
174dired-ref.dvi: $(dired_ref_deps)
175	$(ENVADD) tex dired-ref.tex
176
177fr_dired_ref_deps = fr-dired-ref.tex emacsver.tex pdflayout.sty
178fr-dired-ref.pdf: $(fr_dired_ref_deps)
179	$(ENVADD) pdftex fr-dired-ref.tex
180fr-dired-ref.dvi: $(fr_dired_ref_deps)
181	$(ENVADD) tex fr-dired-ref.tex
182fr-dired-ref.ps: fr-dired-ref.dvi
183	dvips -t a4 -o $@ fr-dired-ref.dvi
184
185fr_refcard_deps = fr-refcard.tex emacsver.tex pdflayout.sty
186fr-refcard.pdf: $(fr_refcard_deps)
187	$(ENVADD) pdftex fr-refcard.tex
188fr-refcard.dvi: $(fr_refcard_deps)
189	$(ENVADD) tex fr-refcard.tex
190fr-refcard.ps: fr-refcard.dvi
191	dvips -t a4 -t landscape -o $@ fr-refcard.dvi
192
193fr_survival_deps = fr-survival.tex emacsver.tex pdflayout.sty
194fr-survival.pdf: $(fr_survival_deps)
195	$(ENVADD) pdftex fr-survival.tex
196fr-survival.dvi: $(fr_survival_deps)
197	$(ENVADD) tex fr-survival.tex
198fr-survival.ps: fr-survival.dvi
199	dvips -t a4 -o $@ fr-survival.dvi
200
201## No dependency on emacsver.tex, pdflayout.sty; no need for ENVADD.
202gnus_booklet_deps = gnus-refcard.tex gnus-logo.pdf
203gnus-booklet.pdf: $(gnus_booklet_deps)
204	pdflatex -jobname=gnus-booklet '\def\booklettrue{}\def\letterpapertrue{}\input{gnus-refcard}'
205gnus-booklet.dvi: gnus-refcard.tex gnus-logo.eps
206	latex '\def\booklettrue{}\def\letterpapertrue{}\input{gnus-refcard}'
207	mv gnus-refcard.dvi $@
208
209###gnus-logo.pdf: gnus-logo.eps
210###	ps2pdf gnus-logo.eps
211
212## No dependency on emacsver.tex, pdflayout.sty; no need for ENVADD.
213gnus_refcard_deps = gnus-refcard.tex gnus-logo.pdf
214gnus-refcard.pdf: $(gnus_refcard_deps)
215	pdflatex gnus-refcard.tex
216gnus-refcard.dvi: $(gnus_refcard_deps)
217	latex gnus-refcard.tex
218
219orgcard_deps = orgcard.tex emacsver.tex pdflayout.sty
220orgcard.pdf: $(orgcard_deps)
221	$(ENVADD) pdftex orgcard.tex
222orgcard.dvi: $(orgcard_deps)
223	$(ENVADD) tex orgcard.tex
224orgcard.ps: orgcard.dvi
225	dvips -t a4 -t landscape -o $@ orgcard.dvi
226
227pl_refcard_deps = pl-refcard.tex emacsver.tex pdflayout.sty
228## Some versions of pdfmex seem to create dvi by default, hence output-format.
229pl-refcard.pdf: $(pl_refcard_deps)
230	if ! kpsewhich -format=fmt mex > /dev/null && \
231	  ! pdfmex --version > /dev/null 2> /dev/null; then \
232	  echo "No mex format found."; false; \
233	fi
234	$(ENVADD) pdftex -output-format=pdf pl-refcard.tex
235pl-refcard.dvi: $(pl_refcard_deps)
236	if ! kpsewhich -format=fmt mex > /dev/null; then \
237	  echo "No mex format found."; false; \
238	fi
239	$(ENVADD) tex pl-refcard.tex
240pl-refcard.ps: pl-refcard.dvi
241	dvips -t a4 -o $@ pl-refcard.dvi
242
243pt_br_refcard_deps = pt-br-refcard.tex emacsver.tex pdflayout.sty
244pt-br-refcard.pdf: $(pt_br_refcard_deps)
245	$(ENVADD) pdftex pt-br-refcard.tex
246pt-br-refcard.dvi: $(pt_br_refcard_deps)
247	$(ENVADD) tex pt-br-refcard.tex
248pt-br-refcard.ps: pt-br-refcard.dvi
249	dvips -t a4 -t landscape -o $@ pt-br-refcard.dvi
250
251refcard_deps = refcard.tex emacsver.tex pdflayout.sty
252refcard.pdf: $(refcard_deps)
253	$(ENVADD) pdftex refcard.tex
254refcard.dvi: $(refcard_deps)
255	$(ENVADD) tex refcard.tex
256refcard.ps: refcard.dvi
257	dvips -t letter -t landscape -o $@ refcard.dvi
258
259## No dependency on emacsver.tex, pdflayout.sty; no need for ENVADD.
260ru_refcard_deps = ru-refcard.tex
261ru-refcard.pdf: $(ru_refcard_deps)
262	pdflatex ru-refcard.tex
263ru-refcard.dvi: $(ru_refcard_deps)
264	latex ru-refcard.tex
265ru-refcard.ps: ru-refcard.dvi
266	dvips -t a4 -o $@ ru-refcard.dvi
267
268sk_dired_ref_deps = sk-dired-ref.tex emacsver.tex pdflayout.sty
269sk-dired-ref.pdf: $(sk_dired_ref_deps)
270	input=sk-dired-ref.tex; $(make_cs)
271sk-dired-ref.dvi: $(sk_dired_ref_deps)
272	$(ENVADD) csplain sk-dired-ref.tex
273sk-dired-ref.ps: sk-dired-ref.dvi
274	dvips -t a4 -o $@ sk-dired-ref.dvi
275
276sk_refcard_deps = sk-refcard.tex emacsver.tex pdflayout.sty
277sk-refcard.pdf: $(sk_refcard_deps)
278	input=sk-refcard.tex; $(make_cs)
279sk-refcard.dvi: $(sk_refcard_deps)
280	$(ENVADD) csplain sk-refcard.tex
281sk-refcard.ps: sk-refcard.dvi
282	dvips -t a4 -o $@ sk-refcard.dvi
283
284sk_survival_deps = sk-survival.tex emacsver.tex pdflayout.sty
285sk-survival.pdf: $(sk_survival_deps)
286	input=sk-survival.tex; $(make_cs)
287sk-survival.dvi: $(sk_survival_deps)
288	$(ENVADD) csplain sk-survival.tex
289sk-survival.ps: sk-survival.dvi
290	dvips -t a4 -o $@ sk-survival.dvi
291
292survival_deps = survival.tex emacsver.tex pdflayout.sty
293survival.pdf: $(survival_deps)
294	$(ENVADD) pdftex survival.tex
295survival.dvi: $(survival_deps)
296	$(ENVADD) tex survival.tex
297
298vipcard_deps = vipcard.tex emacsver.tex pdflayout.sty
299vipcard.pdf: $(vipcard_deps)
300	$(ENVADD) pdftex vipcard.tex
301vipcard.dvi: $(vipcard_deps)
302	$(ENVADD) tex vipcard.tex
303
304vipercard_deps = viperCard.tex emacsver.tex pdflayout.sty
305viperCard.pdf: $(vipercard_deps)
306	$(ENVADD) pdftex viperCard.tex
307viperCard.dvi: $(vipercard_deps)
308	$(ENVADD) tex viperCard.tex
309
310
311.PHONY: clean
312
313clean:
314	-rm -f ./*.dvi ./*.log ./*.aux
315
316distclean: clean
317
318## This should really by maintainer-clean, but the handling of the
319## refcards is funny.  So abuse extraclean for this.
320extraclean: clean
321	-rm -f $(PDF_TARGETS) $(PS_TARGETS)
322
323## For the Emacs website.
324dist:
325	rm -rf emacs-refcards
326	mkdir emacs-refcards
327	cp Makefile README *.tex gnus-logo.* pdflayout.sty emacs-refcards/
328	tar -cf emacs-refcards.tar emacs-refcards
329	rm -rf emacs-refcards
330
331### Makefile ends here
332