]> gitweb.michael.orlitzky.com - mjotex.git/blobdiff - GNUmakefile
Add the \sagelisting macro and associated machinery.
[mjotex.git] / GNUmakefile
index f3352b6c0769a670832fff6c4a2089b2fc2d0876..fba3b3799ec64f9199ca8204aa5f444a759591db 100644 (file)
@@ -17,10 +17,19 @@ PN = examples
 
 # A space-separated list of the mjotex files that you use. The path to
 # mjotex must be contain in your $TEXINPUTS environment variable.
-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 mjo.bst
+#
+# MJOTEX  = mjotex.sty
+#
+MJOTEX  = mjo-algebra.tex mjo-algorithm.tex mjo-arrow.tex mjo-calculus.tex
+MJOTEX += mjo-common.tex mjo-complex.tex mjo-cone.tex mjo-convex.tex
+MJOTEX += mjo-font.tex mjo-linear_algebra.tex mjo-listing.tex mjo-misc.tex
+MJOTEX += mjo-proof_by_cases.tex mjo-theorem.tex mjo-theorem-star.tex
+MJOTEX += mjo-topology.tex mjo.bst
+
+# Compile a list of raw source code listings (*.listing) and their
+# associated output files (*.py) that will be tested by check-sage.
+SAGE_LISTING_SRCS = $(wildcard sage_listings/*.listing)
+SAGE_LISTING_DSTS = $(patsubst %.listing,%.py,$(SAGE_LISTING_SRCS))
 
 # Use kpsewhich (from the kpathsea suite) to find the absolute paths
 # of the bibtex/mjotex files listed in in $(BIBS)/$(MJOTEX). The SRCS
@@ -126,6 +135,11 @@ $(PN).log: $(SRCS)
        $(MAKE) clean
        $(MAKE)
 
+# How do we convert a raw listing into something testable by sage? We
+# append/prepend triple quotes to make the whole thing into a doctest.
+sage_listings/%.py: sage_listings/%.listing
+       echo '"""' > $@ && cat $< >> $@ && echo '"""' >> $@
+
 # Ensure that there are no overfull or underfull boxes in the output
 # document by parsing the log for said warnings.
 .PHONY: check-boxes
@@ -145,9 +159,21 @@ check-chktex:
 check-undefined: $(PN).log
        @! grep -i 'undefined' $<
 
+# Use sage to doctest any \sagelisting{}s in SAGE_LISTING_DSTS.
+# The actuall command is ifdef'd so that we can comment out
+# the definition of SAGE_LISTING_DSTS without breaking the
+# default definition of the "check" target.
+.PHONY: check-sage
+check-sage: $(SAGE_LISTING_DSTS)
+ifdef SAGE_LISTING_DSTS
+       PYTHONPATH="$(HOME)/src/sage.d" \
+          sage -t --timeout=0 --memlimit=0 \
+          $^
+endif
+
 # Run a suite of checks.
 .PHONY: check
-check: check-boxes check-chktex check-undefined
+check: check-boxes check-chktex check-undefined check-sage
 
 # Clean up leftover junk. This only looks overcomplicated because
 # the *.{foo,bar} syntax supported by Bash is not POSIX, and Make
@@ -158,6 +184,7 @@ JUNK_EXTENSIONS += snm spl toc xml
 clean:
        for ext in $(JUNK_EXTENSIONS); do rm -f *.$$ext; done;
        rm -rf dist/
+       rm -f $(SAGE_LISTING_DSTS)
 
 # If this document will be published, the publisher isn't going to
 # have your BibTeX database or your mjotex files. So, you need to