# This file is part of CWEB, version x3.0.

# 
# Read the README file, then edit this file to reflect local conditions
#

# The C compiler should be ANSI compatible

CC = gcc

# We let CWEAVE report syntax errors by setting +d.
# The flag +m makes the TeX output slightly more compact.
# We use the +e flag since our printer is two-sided.

CWFLAGS = +mde
CTFLAGS =

# We keep debugging info around to enable the `+d' option of cweave
CFLAGS = -ansi -DDEBUG -DSTAT -g

# RM and CP are used below in case rm and cp are aliased

RM= /bin/rm
CP= /bin/cp
RENAME= /bin/mv


# Set CCHANGES to common-foo.ch if you need changes to common.w in another
# file than common.ch

CCHANGES=

# Set TCHANGES to ctangle-foo.ch if you need changes to ctangle.w in another
# file than ctangle.ch

TCHANGES=

# Set WCHANGES to cweave-foo.ch if you need changes to cweave.w in another
# file than cweave.ch

WCHANGES=

##########  You shouldn't have to change anything after this point #######

CWEAVE = ./cweave $(CWFLAGS)
CTANGLE = ./ctangle $(CTFLAGS)

.SUFFIXES: .tex .dvi .w

.w.tex:
	$(CWEAVE) $*

.tex.dvi:
	tex $*.tex

.w.c:
	$(CTANGLE) $*

.w.dvi:
	make $*.tex
	make $*.dvi

.w.o:
	make $*.c
	make $*.o

all: cweb doc listings
cweb: ctangle cweave
manual doc: manual.dvi
listings: common.dvi ctangle.dvi cweave.dvi

cautiously:
	make common.c ctangle.c cweave.c
	$(RENAME) ctangle SAVEctangle # save version in case things mess up
	make ctangle
	$(RENAME) common.c SAVEcommon.c
	./ctangle common $(CCHANGES)
	diff common.c SAVEcommon.c
	$(RENAME) SAVEcommon.c common.c # restore date
	$(RENAME) ctangle.c SAVEctangle.c
	./ctangle ctangle $(TCHANGES)
	diff ctangle.c SAVEctangle.c
	$(RENAME) SAVEctangle.c ctangle.c # restore date
	$(RENAME) cweave.c SAVEcweave.c
	./ctangle cweave $(WCHANGES)
	diff cweave.c SAVEcweave.c
	$(RENAME) SAVEcweave.c cweave.c # restore date
	$(RM) SAVEctangle # succeeded, use new binary from now on

SAVEctangle.c:
	$(CP) ctangle.c SAVEctangle.c

SAVEcommon.c:
	$(CP) common.c SAVEcommon.c

common.c: common.w $(CCHANGES) common.inc
	$(CTANGLE) common $(CCHANGES)
common.h: common.w $(CCHANGES)
	$(CTANGLE) common $(CCHANGES)

common.tex:  common.w common.inc
	$(CWEAVE) common $(CCHANGES)

ctangle: ctangle.o common.o
	$(CC) $(CFLAGS) -o ctangle ctangle.o common.o 

ctangle.c: ctangle.w $(TCHANGES) common.inc common.h
	$(CTANGLE) ctangle $(TCHANGES)

ctangle.tex:  ctangle.w $(TCHANGES) common.inc intro.inc
	$(CWEAVE) ctangle $(TCHANGES)

cweave: cweave.o common.o
	$(CC) $(CFLAGS) -o cweave cweave.o common.o

cweave.c: cweave.w $(WCHANGES) common.inc common.h parser.w rules.w
	$(CTANGLE) cweave $(WCHANGES)

cweave.tex:  cweave.w $(WCHANGES) parser.w rules.w common.inc intro.inc
	$(CWEAVE) cweave $(WCHANGES)

manual.dvi: compare.tex

.PHONY:	clean

clean:	
	$(RM) *~ *.o *.log *.toc *.dvi
	$(RM) ctangle cweave common.tex ctangle.tex cweave.c cweave.tex