# A space-separated list of bib files. These must all belong to paths
# contained in your $BIBINPUTS environment variable.
#
-# Leave commented if you don't use a bibliography file.
+# Leave commented if you don't use a bibliography database.
#
#BIBS = references.bib
MJOTEX = mjo-algorithm.tex mjo-arrow.tex mjo-common.tex mjo-cone.tex
MJOTEX += mjo-convex.tex mjo-font.tex mjo-linear_algebra.tex mjo-listing.tex
MJOTEX += mjo-misc.tex mjo-proof_by_cases.tex mjo-theorem.tex
-MJOTEX += mjo-theorem-star.tex mjo-topology.tex
+MJOTEX += mjo-theorem-star.tex mjo-topology.tex mjo.bst
# Use kpsewhich (from the kpathsea suite) to find the absolute paths
# of the bibtex/mjotex files listed in in $(BIBS)/$(MJOTEX). The SRCS
# The pipe below indicates an "order-only dependency" on the aux file.
# Without it, every compilation of $(PN).tex would produce a new
-# $(PN).aux, and thus $(PN).bbl would be rebuild. This in turn causes
+# $(PN).aux, and thus $(PN).bbl would be rebuilt. This in turn causes
# $(PN).pdf to appear out-of-date, which leads to a recompilation of
# $(PN).tex... and so on. The order-only dependency means we won't
# rebuild $(PN).bbl if $(PN).aux changes.
#
# If the $BIBS variable is undefined, we presume that there are no
# references and create an empty bbl file. Otherwise, we risk trying
-# to run biblatex on an aux file containing no citations.
+# to run biblatex on an aux file containing no citations. If you do
+# define $BIBS but don't cite anything, you'll run into a similar
+# problem. Don't do that.
#
$(PN).bbl: $(SRCS) | $(PN).aux
ifdef BIBS
echo -n '' > $@
endif
+# If the output PDF exists but the log file does not, then an attempt
+# to "build the log file" (i.e. build the PDF) would do nothing. Thus
+# whenever the log file does not exist, we do a fresh build.
+$(PN).log: $(SRCS)
+ $(MAKE) clean
+ $(MAKE)
+
+# Ensure that there are no overfull or underfull boxes in the output
+# document by parsing the log for said warnings.
+.PHONY: check-boxes
+check-boxes: $(PN).log
+ @! grep -i 'overfull\|underfull' $<
+
# Run chktex to find silly mistakes. There is some exit code weirdness
# (Savannah bug 45979), so we just look for empty output.
-.PHONY: check
-check:
+.PHONY: check-chktex
+check-chktex:
@[ -z "$(shell chktex --quiet mjotex.sty)" ]
-# Clean up leftover junk.
+# Ensure that there are no undefined references in the document by
+# parsing the log file for said warnings.
+.PHONY: check-undefined
+check-undefined: $(PN).log
+ @! grep -i 'undefined' $<
+
+# Run a suite of checks.
+.PHONY: check
+check: check-boxes check-chktex check-undefined
+
+# Clean up leftover junk. This only looks overcomplicated because
+# the *.{foo,bar} syntax supported by Bash is not POSIX, and Make
+# will execute these commands using /bin/sh (which should be POSIX).
+JUNK_EXTENSIONS = aux bbl bcf bib blg listing lof log nav out pdf
+JUNK_EXTENSIONS += snm spl toc xml
.PHONY: clean
clean:
- rm -f *.{aux,bbl,bcf,bib,blg,listing,lof,log}
- rm -f *.{nav,out,pdf,snm,spl,toc,xml}
+ for ext in $(JUNK_EXTENSIONS); do rm -f *.$$ext; done;
rm -rf dist/
# If this document will be published, the publisher isn't going to