# makefile for MMIX programs of chapter 1

# all documents are given to TeX
TEX = tex
FMT = '&plain'

# MMIX and MMIXAL
MMIX = mmix
MMIXOPT = -P -L3
MMIXAL = mmixal
MMIXALOPT = -b 132

# name of tar file
DISTNAME := TAOCP1

# ######################

# the programs either with no input data or with an input file
wo_input := 1-3-2--21.mms 1-3-2--29.mms 1-3-3I.mms 1-3-3J.mms
w_input := 1-3-3A.mms 1-3-3B.mms
othfiles := mmix.tex Makefile
mmsfiles := $(wo_input) $(w_input)

# generate the names of the input files
txtfiles := $(patsubst %.mms,%_input.txt,$(w_input))

# generate the names of the output files
outfiles :=  $(patsubst %.mms,%_run.txt,$(wo_input))\
             $(patsubst %.mms,%_run_it.txt,$(w_input))

# generate the names of MMIXAL's files
mmofiles := $(patsubst %.mms,%.mmo,$(mmsfiles))
lstfiles := $(patsubst %.mmo,%_lst.txt,$(mmofiles)) 

# input files for TeX
aoafiles := $(patsubst %.mms,%_aoa.tex,$(mmsfiles))
dvifiles := $(patsubst %.mms,%.dvi,$(mmsfiles))
logfiles := $(patsubst %.dvi,%.log,$(dvifiles))


.PHONY : all doc
all : $(outfiles) $(dvifiles)

doc : $(dvifiles)

%.mmo : %.mms
	$(MMIXAL) $(MMIXALOPT) -l $*_lst.txt -o $*.mmo $*.mms
.PRECIOUS : %.mmo

%_run.txt : %.mms %.mmo
	-$(MMIX) $(MMIXOPT) $*.mmo > $*_run.txt

%_run_it.txt : %.mms %.mmo
	-$(MMIX) $(MMIXOPT) $*.mmo $*_input.txt > $*_run_it.txt

%.dvi : %.mms %_aoa.tex mmix.tex
	$(TEX) $(FMT) $*.mms

.PHONY : dist
dist :
	tar -czvf $(DISTNAME).tar.gz $(mmsfiles) $(aoafiles) $(txtfiles) $(othfiles)

.PHONY : mostlyclean clean
mostlyclean :
	-rm -f $(outfiles) $(lstfiles) $(logfiles)
clean : mostlyclean
	-rm -f $(mmofiles) $(dvifiles)