# Makefile.in to test if installed TeX is working
# Copyright © 2014-2016 Ken Moffat <ken at linuxfromscratch.org>
# licensed under the GNU GPL v2 License:
# https://gnu.org/licenses/old-licenses/gpl-2.0.html
#

.PHONY : clean really-clean

.PRECIOUS : ABOUT.pdf triskel.pdf multilingual-examples.bib sussex.bib trad-examples.bib

# if running all, prefer to run the simpler variants first,
# so test latex before asy and biblatex which use it,
# lua before xindy,
# xelatex before bidipoem.
# match_parents sits on the end as an afterthought!
# NB these targets are no longer in any order
all:	biblatex-biber biblatex-bibtex biblatex-unibiber bibtexidx bibxelatex bidipoem\
	blended-circles cylinder lualatexbib dvisvgm jalua ligatures\
	lualatex mosfet oldjap paren pdflatex periodicsvg\
	periodictab triangles xelatex xindy xindynonlua
	touch all

biblatex-biber:
	pdflatex biblatex-biber
	biber biblatex-biber
	pdflatex biblatex-biber
	pdftotext biblatex-biber.pdf biblatex-biber.txt
	grep References biblatex-biber.txt

biblatex-bibtex:
	pdflatex biblatex-bibtex
	bibtex biblatex-bibtex
	pdflatex biblatex-bibtex

# biblatex-unibiber produces a warning 'Please rerun LaTeX.' on first run after biber
# All the biber tests look for 'References' in the output because at one time the
# references were not being generated, caused by a mismatch between the versions of
# biber and biblatex.
biblatex-unibiber:
	pdflatex biblatex-unibiber
	biber biblatex-unibiber
	pdflatex biblatex-unibiber
	pdflatex biblatex-unibiber
	pdftotext biblatex-unibiber.pdf biblatex-unibiber.txt
	grep References biblatex-unibiber.txt

# bibtexidx - bibtex warns that latex should be run twice, intersperse makeidx
bibtexidx:
	pdflatex bibtexidx
	bibtex bibtexidx
	pdflatex bibtexidx
	makeindex bibtexidx
	pdflatex bibtexidx

# lualatexbib - the lualatex variant
lualatexbib:
	lualatex lualatexbib
	bibtex lualatexbib
	lualatex lualatexbib
	makeindex lualatexbib
	lualatex lualatexbib

# bibxelatex produces a warning 'Pleasse rerun LaTeX.' on first run afte biber
bibxelatex:
	xelatex bibxelatex
	biber bibxelatex
	xelatex bibxelatex
	xelatex bibxelatex
	pdftotext bibxelatex.pdf bibxelatex.txt
	grep References bibxelatex.txt

# bidipoem requires xelatex to be run twice
# see section 3.4 of bidi.pdf
bidipoem:
	xelatex bidipoem
	xelatex bidipoem

# coloured blended-circles
blended-circles:
	pdflatex blended-circles.tex

# 3-dimensional short cylinder using asymptote
cylinder:
	pdflatex cylinder.tex
	asy cylinder-*.asy
	pdflatex cylinder.tex

# a minimal test of dvisvgm I found online
dvisvgm:
	latex dvisvgm.tex
	dvisvgm --clipjoin --bbox=papersize --page=1-  dvisvgm.dvi

# jalua - vertical japanese typesetting using lualatex
jalua:
	lualatex jalua.tex

# using luahbtex backend with Linux Libertine O OTF font
ligatures:
	lualatex ligatures.tex

lualatex:
	lualatex lualatex.tex

# circuit diagram of a mosfet amplifier
mosfet:
	pdflatex mosfet.tex

# Japanese vertical typesetting using old uplatex.
# Note: ptex2pdf -l -u japtex no longer works, it fails trying to use
# \kanjiencoding.
# uplatex japtex creates a dvi file that references tfm fonts.
# dvipdfmx japtex creates the PDF, using HaranoAjiMincho-Regular.otf for the
# main text (the default japanese font) and HaranoAjiGothic-Medium.otf for
# the headings, but with type1 cm (pfb) fonts for latin, e.g. page number.
oldjap:
	uplatex oldjap
	dvipdfmx oldjap

# Ruby is exercised by the test_parens script : if that is run on itself,
# it reports unbalanced parentheses and ends with cc 1 so no need to
# find a "bad" document.  Check that, then confirm it works on a
# good document, and create a PDF to report success.
# If ruby is not present, error 127.
paren:
	match_parens /opt/texlive/2025/bin/x86_64-linux/match_parens ; test $$? -eq 1
	match_parens paren.tex
	pdflatex paren.tex

pdflatex:
	pdflatex pdflatex.tex

# svg variant of periodic table
periodicsvg:
	latex periodicsvg.tex
	dvisvgm --font-format=woff periodicsvg.dvi

# period table using pdflatex
periodictab:
	pdflatex periodictab.tex

# 2-dimensional triangles using asymptote
triangles:
	pdflatex triangles.tex
	asy triangles-*.asy
	pdflatex triangles.tex

xelatex:
	xelatex xelatex

# tex invocations after xindy need shell escape to work
xindy:
	lualatex xindy.tex
	makeglossaries xindy
	lualatex -shell-escape xindy.tex
	test $$(pdfinfo xindy.pdf | grep '^Pages:' | awk '{ print $$2 }') = "4"

# basic xindy without lualatex or OTF/TTF fonts
# and invoke xindy directly
xindynonlua:
	pdflatex xindynonlua.tex
	texindy -d script -d level=3 -M lang/english/utf8-lang xindynonlua.idx 2>&1 | tee xindynonlua.texindy
	pdflatex --shell-escape xindynonlua.tex
	test $$(pdfinfo xindynonlua.pdf | grep '^Pages:' | awk '{ print $$2 }') = "3"

# Tests which are not run automatically by 'make all'.

# Remote bibliographies, for use by biber.  These should ONLY be tested in a non-CPAN
# install, where a distro's perl modules use the distro's certificates (CPAN installs
# provide Mozilla::CA using whatever Mozilla's certificates were when that was last
# updated).  These are primarily to test if BLFS changes to certificate handling break
# this.

# remote1 is described as latin1 when downloaded
remote1:
	pdflatex remote1
	biber --input-encoding latin1 remote1
	pdflatex remote1

# remote2 is downloaded as UTF-8
remote2:
	pdflatex remote2
	biber remote2
	pdflatex remote2

# Cleaning up.

# while on a failed experiment, I created a something.tmp/ directory
clean:
	-rm -f *.{aux,bbl,bcf,blg,dvi,gl?,idx,ilg,ind,log,out,pre,svg,tuc,txt,xdy,xml} \
               {xindy{,nonlua},triangles,cylinder}-*.* biblatex-bibtex-blx.bib all \
	        bibxelatex.bib
	-rm -rf *.tmp

really-clean: clean
	-rm -f bibxelatex.tex biblatex-biber.tex biblatex-bibtex.tex bidipoem.tex \
	    jalua.tex lualatex.tex xelatex.tex xindy.tex biblatex-unibiber.pdf \
	    biblatex-biber.pdf biblatex-bibtex.pdf bibtexidx.pdf bibxelatex.pdf \
	    bidipoem.pdf blended-circles.pdf cylinder*.pdf jalua.pdf latex.pdf \
	    ligatures.pdf lualatex.pdf lualatexbib.pdf mosfet.pdf oldjap.pdf \
	    paren.pdf pdflatex.pdf \
	    periodictab.pdf remote*.pdf triangles*.pdf xelatex.pdf  xindy.pdf \
	    xindynonlua.pdf xindynonlua.texindy Makefile *.dvi

