]> gitweb.michael.orlitzky.com - mjotex.git/blobdiff - GNUmakefile
Add the \sagelisting macro and associated machinery.
[mjotex.git] / GNUmakefile
index 78800b05d34d78a0c6230b5ca89c8c28e9091dc1..fba3b3799ec64f9199ca8204aa5f444a759591db 100644 (file)
@@ -26,6 +26,11 @@ 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
 # variable should contain all (Bib)TeX source files for the document.
@@ -130,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
@@ -149,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
@@ -162,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