## You should have received a copy of the GNU General Public License
## along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+### Commentary:
-## Top-level targets.
+## See README for details.
-## PDF files that are included with Emacs.
-all: refcards_pdf dired-refcards_pdf misc-refcards_pdf
+PDF_ENGLISH = \
+ calccard.pdf \
+ dired-ref.pdf \
+ gnus-booklet.pdf \
+ gnus-refcard.pdf \
+ orgcard.pdf \
+ refcard.pdf \
+ survival.pdf \
+ vipcard.pdf \
+ viperCard.pdf
-all_pdf: all survival-cards_pdf viper-cards_pdf
-all_ps: refcards_ps dired-refcards_ps misc-refcards_ps survival-cards_ps \
- viper-cards_ps
+PDF_CZECH = \
+ cs-dired-ref.pdf \
+ cs-refcard.pdf \
+ cs-survival.pdf
-REFCARDS_PDF = refcard.pdf cs-refcard.pdf de-refcard.pdf fr-refcard.pdf \
- pl-refcard.pdf pt-br-refcard.pdf ru-refcard.pdf sk-refcard.pdf
-refcards_pdf: ${REFCARDS_PDF}
-refcards_ps: ${REFCARDS_PDF:.pdf=.ps}
+PDF_FRENCH = \
+ fr-dired-ref.pdf \
+ fr-refcard.pdf \
+ fr-survival.pdf \
-DIRED_REFCARDS_PDF = dired-ref.pdf cs-dired-ref.pdf fr-dired-ref.pdf \
- sk-dired-ref.pdf
-dired-refcards_pdf: ${DIRED_REFCARDS_PDF}
-dired-refcards_ps: ${DIRED_REFCARDS_PDF:.pdf=.ps}
+PDF_GERMAN = de-refcard.pdf
-MISC_REFCARDS_PDF = calccard.pdf gnus-booklet.pdf gnus-refcard.pdf orgcard.pdf
-misc-refcards_pdf: ${MISC_REFCARDS_PDF}
-misc-refcards_ps: ${MISC_REFCARDS_PDF:.pdf=.ps}
+PDF_POLISH = pl-refcard.pdf
+PDF_PORTUGUESE = pt-br-refcard.pdf
-## The following files are not included with Emacs.
-SURVIVAL_CARDS_PDF = survival.pdf cs-survival.pdf fr-survival.pdf sk-survival.pdf
-survival-cards_pdf: ${SURVIVAL_CARDS_PDF}
-survival-cards_ps: ${SURVIVAL_CARDS_PDF:.pdf=.ps}
+PDF_RUSSIAN = ru-refcard.pdf
-VIPER_CARDS_PDF = vipcard.pdf viperCard.pdf
-viper-cards_pdf: ${VIPER_CARDS_PDF}
-viper-cards_ps: ${VIPER_CARDS_PDF:.pdf=.ps}
+PDF_SLOVAKIAN = \
+ sk-dired-ref.pdf \
+ sk-refcard.pdf \
+ sk-survival.pdf
-ENVADD = TEXINPUTS=".:"
+PDF_TARGETS = $(PDF_ENGLISH) $(PDF_CZECH) $(PDF_FRENCH) $(PDF_GERMAN) \
+ $(PDF_POLISH) $(PDF_PORTUGUESE) $(PDF_RUSSIAN) $(PDF_SLOVAKIAN)
-## PDF files.
+PS_ENGLISH = \
+ calccard.ps \
+ dired-ref.ps \
+ gnus-booklet.ps \
+ gnus-refcard.ps \
+ orgcard.ps \
+ refcard.ps \
+ survival.ps \
+ vipcard.ps \
+ viperCard.ps
-## The page layouts (a4/letter) are written directly in the .tex files.
+PS_CZECH = \
+ cs-dired-ref.ps \
+ cs-refcard.ps \
+ cs-survival.ps
-cs-refcard.pdf cs-dired-ref.pdf cs-survival.pdf sk-refcard.pdf \
-sk-dired-ref.pdf sk-survival.pdf: %.pdf: %.tex emacsver.tex
- if pdfcsplain --version > /dev/null 2> /dev/null; then \
- ${ENVADD} pdfcsplain $<; \
- else \
- ${ENVADD} csplain "\pdfoutput=1\input $<"; \
- fi
+PS_FRENCH = \
+ fr-dired-ref.ps \
+ fr-refcard.ps \
+ fr-survival.ps \
-## Some versions of pdfmex seem to create dvi by default, hence output-format.
-pl-refcard.pdf: %.pdf: %.tex emacsver.tex
- if ! kpsewhich -format=fmt mex > /dev/null && \
- ! pdfmex --version > /dev/null 2> /dev/null; then \
- echo "No mex format found."; false; \
- fi
- ${ENVADD} pdftex -output-format=pdf $<
+PS_GERMAN = de-refcard.ps
-ru-refcard.pdf: %.pdf: %.tex
- pdflatex $<
+PS_POLISH = pl-refcard.ps
-#gnus-logo.pdf: %.pdf: %.eps
-# ps2pdf $<
+PS_PORTUGUESE = pt-br-refcard.ps
-gnus-refcard.pdf: %.pdf: %.tex gnus-logo.pdf
- pdflatex $<
+PS_RUSSIAN = ru-refcard.ps
-gnus-booklet.pdf: gnus-refcard.tex gnus-logo.pdf
- pdflatex -jobname=gnus-booklet '\def\booklettrue{}\def\letterpapertrue{}\input{gnus-refcard}'
+PS_SLOVAKIAN = \
+ sk-dired-ref.ps \
+ sk-refcard.ps \
+ sk-survival.ps
-## Everything not explicitly listed above.
-%.pdf: %.tex emacsver.tex
- ${ENVADD} pdftex $<
+PS_TARGETS = $(PS_ENGLISH) $(PS_CZECH) $(PS_FRENCH) $(PS_GERMAN) \
+ $(PS_POLISH) $(PS_PORTUGUESE) $(PS_RUSSIAN) $(PS_SLOVAKIAN)
-## dvi files.
+## For emacsver.tex.
+ENVADD = TEXINPUTS=".:$(TEXINPUTS)"
-cs-refcard.dvi cs-dired-ref.dvi cs-survival.dvi sk-refcard.dvi \
-sk-dired-ref.dvi sk-survival.dvi: %.dvi: %.tex emacsver.tex
- ${ENVADD} csplain $<
-pl-refcard.dvi: %.dvi: %.tex emacsver.tex
- if ! kpsewhich -format=fmt mex > /dev/null; then \
- echo "No mex format found."; false; \
- fi
- ${ENVADD} tex $<
+.PHONY: all pdf ps
-ru-refcard.dvi gnus-refcard.dvi: %.dvi: %.tex
- latex $<
+all: pdf
+pdf: $(PDF_TARGETS)
+ps: $(PS_TARGETS)
-gnus-booklet.dvi: gnus-refcard.tex
- latex '\def\booklettrue{}\def\letterpapertrue{}\input{gnus-refcard}'
- mv gnus-refcard.dvi $@
-## Everything not explicitly listed above.
-%.dvi: %.tex emacsver.tex
- ${ENVADD} tex $<
+.PHONY: english czech french german polish portuguese russian slovakian
+english: $(PDF_ENGLISH)
+czech: $(PDF_CZECH)
+french: $(PDF_FRENCH)
+german: $(PDF_GERMAN)
+polish: $(PDF_POLISH)
+portuguese: $(PDF_PORTUGUESE)
+russian: $(PDF_RUSSIAN)
+slovakian: $(PDF_SLOVAKIAN)
+.PHONY: english-ps czech-ps french-ps german-ps polish-ps portuguese-ps russian-ps slovakian-ps
+english-ps: $(PS_ENGLISH)
+czech-ps: $(PS_CZECH)
+french-ps: $(PS_FRENCH)
+german-ps: $(PS_GERMAN)
+polish-ps: $(PS_POLISH)
+portuguese-ps: $(PS_PORTUGUESE)
+russian-ps: $(PS_RUSSIAN)
+slovakian-ps: $(PS_SLOVAKIAN)
-## PostScript files.
-## Note that some of the tex files (refcard, de-refcard, fr-refcard,
-## pt-br-refcard) have settings for letter or a4 paper. Following are
-## the default paper sizes (letter for English, A4 for translations).
-## FIXME orgcard.ps does not fit on letter (see orgcard.tex).
+## Default for file that do not use a different paper size.
+.SUFFIXES: .ps .dvi
+.dvi.ps:
+ dvips -t letter -o $@ $<
+
+
+make_cs=if pdfcsplain --version > /dev/null 2> /dev/null; then \
+ $(ENVADD) pdfcsplain $$input; \
+ else \
+ $(ENVADD) csplain "\pdfoutput=1\input $$input"; \
+ fi
-## A4, landscape.
-de-refcard.ps fr-refcard.ps fr-survival.ps pt-br-refcard.ps orgcard.ps: %.ps: %.dvi
- dvips -t a4 -t landscape $< -o $@
+## For pdf output, the page layouts (a4/letter) are written directly
+## in the .tex files.
-## A4, portrait.
-cs-dired-ref.ps cs-refcard.ps cs-survival.ps fr-dired-ref.ps \
-pl-refcard.ps ru-refcard.ps \
-sk-dired-ref.ps sk-refcard.ps sk-survival.ps: %.ps: %.dvi
- dvips -t a4 $< -o $@
+## For PostScript output, note that some of the tex files (refcard,
+## de-refcard, fr-refcard, pt-br-refcard) have settings for letter or
+## a4 paper. The Following are the default paper sizes (letter for English,
+## A4 for translations).
+## FIXME orgcard.ps does not fit on letter (see orgcard.tex).
-## letter, landscape.
-calccard.ps refcard.ps: %.ps: %.dvi
- dvips -t letter -t landscape $< -o $@
+## A4, landscape: de-refcard, fr-refcard, pt-br-refcard orgcard
+## A4, portrait: cs-*, fr-dired-ref, sk-*, pl-refcard, ru-refcard
+## Letter, landscape: calccard, refcard
+## Letter, portrait (suffix rule): diref-ref, gnus-*, survival, vip*
+
+calccard_deps = calccard.tex emacsver.tex pdflayout.sty
+calccard.pdf: $(calccard_deps)
+ $(ENVADD) pdftex calccard.tex
+calccard.dvi: $(calccard_deps)
+ $(ENVADD) tex calccard.tex
+calccard.ps: calccard.dvi
+ dvips -t letter -t landscape -o $@ calccard.dvi
+
+cs_dired_ref_deps = cs-dired-ref.tex emacsver.tex pdflayout.sty
+cs-dired-ref.pdf: $(cs_dired_ref_deps)
+ input=cs-dired-ref.tex; $(make_cs)
+cs-dired-ref.dvi: $(cs_dired_ref_deps)
+ $(ENVADD) csplain cs-dired-ref.tex
+cs-dired-ref.ps: cs-dired-ref.dvi
+ dvips -t a4 -o $@ cs-dired-ref.dvi
+
+cs_refcard_deps = cs-refcard.tex emacsver.tex pdflayout.sty
+cs-refcard.pdf: $(cs_refcard_deps)
+ input=cs-refcard.tex; $(make_cs)
+cs-refcard.dvi: $(cs_refcard_deps)
+ $(ENVADD) csplain cs-refcard.tex
+cs-refcard.ps: cs-refcard.dvi
+ dvips -t a4 -o $@ cs-refcard.dvi
+
+cs_survival_deps = cs-survival.tex emacsver.tex pdflayout.sty
+cs-survival.pdf: $(cs_survival_deps)
+ input=cs-survival.tex; $(make_cs)
+cs-survival.dvi: $(cs_survival_deps)
+ $(ENVADD) csplain cs-survival.tex
+cs-survival.ps: cs-survival.dvi
+ dvips -t a4 -o $@ cs-survival.dvi
+
+de_refcard_deps = de-refcard.tex emacsver.tex pdflayout.sty
+de-refcard.pdf: $(de_refcard_deps)
+ $(ENVADD) pdftex de-refcard.tex
+de-refcard.dvi: $(de_refcard_deps)
+ $(ENVADD) tex de-refcard.tex
+de-refcard.ps: de-refcard.dvi
+ dvips -t a4 -t landscape -o $@ de-refcard.dvi
+
+dired_ref_deps = dired-ref.tex emacsver.tex pdflayout.sty
+dired-ref.pdf: $(dired_ref_deps)
+ $(ENVADD) pdftex dired-ref.tex
+dired-ref.dvi: $(dired_ref_deps)
+ $(ENVADD) tex dired-ref.tex
+
+fr_dired_ref_deps = fr-dired-ref.tex emacsver.tex pdflayout.sty
+fr-dired-ref.pdf: $(fr_dired_ref_deps)
+ $(ENVADD) pdftex fr-dired-ref.tex
+fr-dired-ref.dvi: $(fr_dired_ref_deps)
+ $(ENVADD) tex fr-dired-ref.tex
+fr-dired-ref.ps: fr-dired-ref.dvi
+ dvips -t a4 -o $@ fr-dired-ref.dvi
+
+fr_refcard_deps = fr-refcard.tex emacsver.tex pdflayout.sty
+fr-refcard.pdf: $(fr_refcard_deps)
+ $(ENVADD) pdftex fr-refcard.tex
+fr-refcard.dvi: $(fr_refcard_deps)
+ $(ENVADD) tex fr-refcard.tex
+fr-refcard.ps: fr-refcard.dvi
+ dvips -t a4 -t landscape -o $@ fr-refcard.dvi
+
+fr_survival_deps = fr-survival.tex emacsver.tex pdflayout.sty
+fr-survival.pdf: $(fr_survival_deps)
+ $(ENVADD) pdftex fr-survival.tex
+fr-survival.dvi: $(fr_survival_deps)
+ $(ENVADD) tex fr-survival.tex
+fr-survival.ps: fr-survival.dvi
+ dvips -t a4 -o $@ fr-survival.dvi
+
+## No dependency on emacsver.tex, pdflayout.sty; no need for ENVADD.
+gnus_booklet_deps = gnus-refcard.tex gnus-logo.pdf
+gnus-booklet.pdf: $(gnus_booklet_deps)
+ pdflatex -jobname=gnus-booklet '\def\booklettrue{}\def\letterpapertrue{}\input{gnus-refcard}'
+gnus-booklet.dvi: gnus-refcard.tex gnus-logo.eps
+ latex '\def\booklettrue{}\def\letterpapertrue{}\input{gnus-refcard}'
+ mv gnus-refcard.dvi $@
-## letter, portrait.
-dired-ref.ps gnus-booklet.ps gnus-refcard.ps survival.ps vipcard.ps \
-viperCard.ps: %.ps: %.dvi
- dvips -t letter $< -o $@
+###gnus-logo.pdf: gnus-logo.eps
+### ps2pdf gnus-logo.eps
+
+## No dependency on emacsver.tex, pdflayout.sty; no need for ENVADD.
+gnus_refcard_deps = gnus-refcard.tex gnus-logo.pdf
+gnus-refcard.pdf: $(gnus_refcard_deps)
+ pdflatex gnus-refcard.tex
+gnus-refcard.dvi: $(gnus_refcard_deps)
+ latex gnus-refcard.tex
+
+orgcard_deps = orgcard.tex emacsver.tex pdflayout.sty
+orgcard.pdf: $(orgcard_deps)
+ $(ENVADD) pdftex orgcard.tex
+orgcard.dvi: $(orgcard_deps)
+ $(ENVADD) tex orgcard.tex
+orgcard.ps: orgcard.dvi
+ dvips -t a4 -t landscape -o $@ orgcard.dvi
+
+pl_refcard_deps = pl-refcard.tex emacsver.tex pdflayout.sty
+## Some versions of pdfmex seem to create dvi by default, hence output-format.
+pl-refcard.pdf: $(pl_refcard_deps)
+ if ! kpsewhich -format=fmt mex > /dev/null && \
+ ! pdfmex --version > /dev/null 2> /dev/null; then \
+ echo "No mex format found."; false; \
+ fi
+ $(ENVADD) pdftex -output-format=pdf pl-refcard.tex
+pl-refcard.dvi: $(pl_refcard_deps)
+ if ! kpsewhich -format=fmt mex > /dev/null; then \
+ echo "No mex format found."; false; \
+ fi
+ $(ENVADD) tex pl-refcard.tex
+pl-refcard.ps: pl-refcard.dvi
+ dvips -t a4 -o $@ pl-refcard.dvi
+
+pt_br_refcard_deps = pt-br-refcard.tex emacsver.tex pdflayout.sty
+pt-br-refcard.pdf: $(pt_br_refcard_deps)
+ $(ENVADD) pdftex pt-br-refcard.tex
+pt-br-refcard.dvi: $(pt_br_refcard_deps)
+ $(ENVADD) tex pt-br-refcard.tex
+pt-br-refcard.ps: pt-br-refcard.dvi
+ dvips -t a4 -t landscape -o $@ pt-br-refcard.dvi
+
+refcard_deps = refcard.tex emacsver.tex pdflayout.sty
+refcard.pdf: $(refcard_deps)
+ $(ENVADD) pdftex refcard.tex
+refcard.dvi: $(refcard_deps)
+ $(ENVADD) tex refcard.tex
+refcard.ps: refcard.dvi
+ dvips -t letter -t landscape -o $@ refcard.dvi
+
+## No dependency on emacsver.tex, pdflayout.sty; no need for ENVADD.
+ru_refcard_deps = ru-refcard.tex
+ru-refcard.pdf: $(ru_refcard_deps)
+ pdflatex ru-refcard.tex
+ru-refcard.dvi: $(ru_refcard_deps)
+ latex ru-refcard.tex
+ru-refcard.ps: ru-refcard.dvi
+ dvips -t a4 -o $@ ru-refcard.dvi
+
+sk_dired_ref_deps = sk-dired-ref.tex emacsver.tex pdflayout.sty
+sk-dired-ref.pdf: $(sk_dired_ref_deps)
+ input=sk-dired-ref.tex; $(make_cs)
+sk-dired-ref.dvi: $(sk_dired_ref_deps)
+ $(ENVADD) csplain sk-dired-ref.tex
+sk-dired-ref.ps: sk-dired-ref.dvi
+ dvips -t a4 -o $@ sk-dired-ref.dvi
+
+sk_refcard_deps = sk-refcard.tex emacsver.tex pdflayout.sty
+sk-refcard.pdf: $(sk_refcard_deps)
+ input=sk-refcard.tex; $(make_cs)
+sk-refcard.dvi: $(sk_refcard_deps)
+ $(ENVADD) csplain sk-refcard.tex
+sk-refcard.ps: sk-refcard.dvi
+ dvips -t a4 -o $@ sk-refcard.dvi
+
+sk_survival_deps = sk-survival.tex emacsver.tex pdflayout.sty
+sk-survival.pdf: $(sk_survival_deps)
+ input=sk-survival.tex; $(make_cs)
+sk-survival.dvi: $(sk_survival_deps)
+ $(ENVADD) csplain sk-survival.tex
+sk-survival.ps: sk-survival.dvi
+ dvips -t a4 -o $@ sk-survival.dvi
+
+survival_deps = survival.tex emacsver.tex pdflayout.sty
+survival.pdf: $(survival_deps)
+ $(ENVADD) pdftex survival.tex
+survival.dvi: $(survival_deps)
+ $(ENVADD) tex survival.tex
+
+vipcard_deps = vipcard.tex emacsver.tex pdflayout.sty
+vipcard.pdf: $(vipcard_deps)
+ $(ENVADD) pdftex vipcard.tex
+vipcard.dvi: $(vipcard_deps)
+ $(ENVADD) tex vipcard.tex
+
+vipercard_deps = viperCard.tex emacsver.tex pdflayout.sty
+viperCard.pdf: $(vipercard_deps)
+ $(ENVADD) pdftex viperCard.tex
+viperCard.dvi: $(vipercard_deps)
+ $(ENVADD) tex viperCard.tex
.PHONY: clean
clean:
-rm -f *.dvi *.log *.aux
+distclean: clean
+
+## This should really by maintainer-clean, but the handling of the
+## refcards is funny. So abuse extraclean for this.
+extraclean: clean
+ -rm -f $(PDF_TARGETS) $(PS_TARGETS)
+
## For the Emacs website.
dist:
rm -rf emacs-refcards