#--------------------------------------------------------------
# User adaption area:
#--------------------------------------------------------------

# Installation directories:

BIN_DIR      = /hom/dag/public/bin
DISTR_DIR    = /hom/dag/public/download
DOC_DIR      = /hom/dag/public/doc
LATEX_DIR    = /home/ifistore/ifi-texmf/texmf-local/tex/latex/local/web0
LIB_DIR      = /hom/dag/public/lib
MAN_DIR      = /hom/dag/public/man/man1

# Programs in this package:

TANGLE = ./tangle0 -v
WEAVE  = ./weave0 -v

# Utility programs:

AWK        = awk
BIBTEX     = biber
CC         = gcc
COMPRESS   = gzip --best
COPY       = cp
DISTILL    = ps2pdf -sPAPERSIZE=a4
DVISELECT  = dviselect
DVIPS      = dvips
EXECUTABLE = chmod a+rx
INSTALL    = cp -p
LATEX      = latex
MP         = TEX=latex MPTEXPRE=fig.pre mpost
PERL       = perl
READABLE   = chmod a+r
RM         = rm -f
TAR        = tar


#--------------------------------------------------------------
# End of user adpation area
# (You should never have to modify any lines below this.)
#--------------------------------------------------------------


# Definitions:

.SUFFIXES:	.dvi .eps .pdf .ps .tex

.dvi.eps:
	$(DVIPS) -E $< -o $@

.dvi.ps:
	$(DVIPS) $< -o $@

.ps.pdf:
	$(DISTILL) $<

.tex.dvi:
	$(LATEX) $<
	$(LATEX) $<

# Files:

SOURCES      = web0.w0 latexify.w0 tab.w0 \
			message.w0 alphasort.w0 latex.w0 \
			man-page.w0 biblio.w0 end.w0
LANGUAGES    = w0-l-c w0-l-java w0-l-latex w0-l-perl
TANGLE_PROGS = tangle0 w0pre w0code
WEAVE_PROGS  = weave0 w0pre w0-f-latex $(LANGUAGES)
PROGRAMS     = $(TANGLE_PROGS) $(WEAVE_PROGS)
MAN_PAGES    = tangle0.1.gz weave0.1.gz


# Default rule:

test:	$(PROGRAMS)

all:	web0.dvi web0.pdf webzero.cls webzero.sty \
		$(PROGRAMS) $(LANGUAGES) $(MAN_PAGES)


# Test programs:

test-bubble:	test-bubble.c bubble.c
	$(CC) test-bubble.c bubble.c -o test-bubble


# Auxiliary rules:

bubble.c:	bubble.w0 $(TANGLE_PROGS)
	$(TANGLE) -o $@ bubble.w0

bubble.tex:	bubble.w0 $(WEAVE_PROGS) w0-l-c
	$(WEAVE) -lc -e -o $@ bubble.w0

bubble.dvi:	bubble.tex webzero.cls webzero.sty

bubble-1.dvi:	bubble.dvi
	$(DVISELECT) -i bubble.dvi -o $@ 1

bubble-2.dvi:	bubble.dvi
	$(DVISELECT) -i bubble.dvi -o $@ 2

bubble-3.dvi:	bubble.dvi
	$(DVISELECT) -i bubble.dvi -o $@ 3

bubble-4.dvi:	bubble.dvi
	$(DVISELECT) -i bubble.dvi -o $@ 4

bubble.w0-1:	bubble.w0
	$(AWK) 'NR<48 {print}' bubble.w0 >$@

bubble.w0-2:	bubble.w0
	$(AWK) 'NR>48 {print}' bubble.w0 >$@

tangle0:	$(SOURCES)
	./tangle0.boot -x tangle0 $(SOURCES) >tangle0
	$(EXECUTABLE) tangle0

tangle0.1:	$(SOURCES) $(TANGLE_PROGS)
	$(TANGLE) -x 'man tangle0' -o $@ $(SOURCES)

tangle0.1.gz:	tangle0.1
	$(RM) tangle0.1.gz
	cat tangle0.1 | $(COMPRESS) >tangle0.1.gz
	$(READABLE) tangle0.1.gz

w0-l-c:		$(SOURCES) $(TANGLE_PROGS)
	$(TANGLE) -x w0-l-c -o $@ $(SOURCES)
	$(EXECUTABLE) w0-l-c

w0-l-java:		$(SOURCES) $(TANGLE_PROGS)
	$(TANGLE) -x w0-l-java -o $@ $(SOURCES)
	$(EXECUTABLE) w0-l-java

w0-l-latex:	$(SOURCES) $(TANGLE_PROGS)
	$(TANGLE) -x w0-l-latex -o $@ $(SOURCES)
	$(EXECUTABLE) w0-l-latex

w0-l-perl:	$(SOURCES) $(TANGLE_PROGS)
	$(TANGLE) -x w0-l-perl -o $@ $(SOURCES)
	$(EXECUTABLE) w0-l-perl

w0code:		$(SOURCES)
	./tangle0.boot -x w0code $(SOURCES) >$@
	$(EXECUTABLE) w0code

w0-f-latex:	$(SOURCES) $(TANGLE_PROGS)
	$(TANGLE) -x w0-f-latex -o w0-f-latex $(SOURCES)
	$(EXECUTABLE) w0-f-latex

w0pre:		$(SOURCES) 
	./tangle0.boot -x w0pre $(SOURCES) >w0pre
	$(EXECUTABLE) w0pre

weave0:		$(SOURCES) $(TANGLE_PROGS)
	$(TANGLE) -x weave0 -o weave0 $(SOURCES)
	$(EXECUTABLE) weave0

weave0.1:	$(SOURCES) $(TANGLE_PROGS)
	$(TANGLE) -x 'man weave0' -o $@ $(SOURCES)

weave0.1.gz:	weave0.1
	$(RM) weave0.1.gz
	cat weave0.1 | $(COMPRESS) >weave0.1.gz
	$(READABLE) weave0.1.gz

web0.pdf:	web0.ps

web0.ps:	web0.dvi

web0.dvi:	web0.tex webzero.sty bubble.w0-1 bubble.w0-2 \
		bubble-1.ps bubble-2.ps bubble-3.ps \
		bubble-4.ps bubble.c web0.1 \
		Hello.tokens Hello.tex weave0-n-lines tangle0-n-lines
	$(LATEX) web0
	$(BIBTEX) web0
	$(LATEX) web0

tangle0-n-lines:	tangle0
	awk 'END {print NR}' tangle0 >tangle0-n-lines

weave0-n-lines:	weave0
	awk 'END {print NR}' weave0 >weave0-n-lines

Hello.tokens:	w0pre Hello.w0
	./w0pre Hello.w0 >Hello.tokens

Hello.tex:	$(WEAVE_PROGS) Hello.w0
	$(WEAVE) -o Hello.tex Hello.w0

Hello.java:	$(TANGLE_PROGS) Hello.w0
	$(TANGLE) -o Hello.java Hello.w0

web0.1:		web0.mp
	$(MP) web0.mp

web0.tex:	$(SOURCES) $(WEAVE_PROGS)
	$(WEAVE) -l perl -e -o $@ $(SOURCES)

webzero.cls:	$(SOURCES) $(TANGLE_PROGS)
	$(TANGLE) -x webzero.cls -o $@ $(SOURCES)

webzero.sty:	$(SOURCES) $(TANGLE_PROGS)
	$(TANGLE) -x webzero.sty -o $@ $(SOURCES)

# Actions:

install: 	install-code install-doc install-man

install-code:	$(PROGRAMS) $(LANGUAGES)
	mkdir -p $(LIB_DIR) $(BIN_DIR)
	$(INSTALL) w0pre w0code w0-f-latex w0-l-* $(LIB_DIR)
	$(RM) $(BIN_DIR)/tangle0 $(BIN_DIR)/weave0
	$(PERL) -p -e 's|(Lib_dir\s?=\s?")(.*)(";)|$$1$(LIB_DIR)$$3|' \
		tangle0 > $(BIN_DIR)/tangle0
	$(EXECUTABLE) $(BIN_DIR)/tangle0
	$(PERL) -p -e 's|(Lib_dir\s?=\s?")(.*)(";)|$$1$(LIB_DIR)$$3|' \
		weave0 > $(BIN_DIR)/weave0
	$(EXECUTABLE) $(BIN_DIR)/weave0

install-doc:	web0.pdf
	mkdir -p $(DOC_DIR)
	$(INSTALL) web0.pdf $(DOC_DIR)

install-latex:	webzero.cls webzero.sty
	mkdir -p $(LATEX_DIR)
	$(INSTALL) webzero.cls webzero.sty $(LATEX_DIR)

install-man:	install-tangle-man install-weave-man

install-tangle-man: tangle0.1.gz
	mkdir -p $(MAN_DIR)
	$(INSTALL) tangle0.1.gz $(MAN_DIR)

install-weave-man: weave0.1.gz
	mkdir -p $(MAN_DIR)
	$(INSTALL) weave0.1.gz $(MAN_DIR)


distr:	web0.pdf $(SOURCES) w0code $(WEAVE_PROGS)
	mkdir -p $(DISTR_DIR)
	$(TAR) cvfh web0.tar web0.pdf *.w0 \
		w0code $(WEAVE_PROGS) web0.mp *.pre littprog.cls littprog.bib \
		README INSTALL Makefile *.boot
	$(RM) web0.tar.gz
	$(COMPRESS) web0.tar
	$(INSTALL) web0.tar.gz $(DISTR_DIR)


clean:
	$(RM) *~ *.blg *.dvi *.ps *.log *.lof *.mpx *.class mpxerr.* test-bubble

veryclean:	clean
	$(RM) bubble.c bubble.tex $(PROGRAMS) $(LANGUAGES) 
	$(RM) webzero.cls webzero.sty Hello.tokens Hello.java Hello.tex
	$(RM) *.aux *.bbl *.eps *.ps *.pdf web0.tex *.toc 
	$(RM) *.[12] *.1.gz bubble.w0-* *.tar.gz
