# This file, makefile.bcc, is part of CWEBBIN (Version 3.4 [p13].
# It is distributed WITHOUT ANY WARRANTY, express or implied.
#
# Modified for the Borland Turbo C/C++ 3.1 compiler under MS/DOS by
# Andreas Scherer (scherer@genesis.informatik.rwth-aachen.de), July 1994
# Last updated by Andreas Scherer, September 19, 1995

# Copyright (C) 1987,1990,1993 Silvio Levy and Donald E. Knuth
#
# The following copyright notice extends to this PC Makefile only,
# not to any part of the original CWEB distribution.
#
# Copyright (C) 1994 Andreas Scherer

# Permission is granted to make and distribute verbatim copies of this
# document provided that the copyright notice and this permission notice
# are preserved on all copies.

# Permission is granted to copy and distribute modified versions of this
# document under the conditions for verbatim copying, provided that the
# entire resulting derived work is distributed under the terms of a
# permission notice identical to this one.

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

# directory for TeX inputs (cwebmac.tex and (X|d|i)cwebmac.tex go here)
MACROSDIR = ./texinputs/

# directory for CWEB inputs in @i files
CWEBINPUTS = ./cwebinputs/

# extension for manual pages ("l" distinguishes local from system stuff)
MANEXT = l
#MANEXT = 1

# directory for manual pages (cweb.1 goes here)
MANDIR = 

# destination directory for executables; must end in /
DESTDIR = ./bin/

# directory for GNU EMACS Lips code (cweb.el goes here)
EMACSDIR = 

# directory for the language header file "cweb.h"
CATINCLUDE = ./bin/catalogs/

# Set DESTPREF to null if you want to call the executables "tangle" and "weave"
# (probably NOT a good idea; we recommend leaving DESTPREF = c)
DESTPREF = c

# Set CCHANGES to comm-foo.ch if you need changes to common.w
CCHANGES = comm-p13.ch

# Set HCHANGES to comm-foo.hch if you need changes to common.h
HCHANGES = comm-p13.hch

# Set HPATCH to comm-foo.h if you apply changes to common.h
# default should be common.h
HPATCH = comm-p13.h

# Set TCHANGES to ctang-foo.ch if you need changes to ctangle.w
TCHANGES = ctang-p13.ch

# Set WCHANGES to cweav-foo.ch if you need changes to cweave.w
WCHANGES = cweav-p13.ch

# Set MCHANGES to wmerge-foo.ch if you need changes to wmerge.w
MCHANGES = wmerg-p13.ch

# Set EXTENSION to either `c' if you want to treat CWEB as a system
# of ordinary ANSI-C programs, or to `cc', `cxx', `cpp' or similar
# if you want to treat CWEB as a system of C++ programs.  Your
# compiler should be able to distinguish between the two forms
# according to the source file extension.  Even with ANSI-C programs
# it is strongly recommended to use C++ compilers, because of the
# much stricter checking of type conversions and module interfaces.
# For highest portability, all of the extra features of C++ are
# avoided in the CWEB system, thus using something like C--.
EXTENSION = cxx

# Compile with symbols.  That way you'll be able to use the debugger if
# you run into trouble.  You can always use tdstrip later, to remove the
# symbols.
DEBUG = -v

# Redundant Load Suppression (-Z) is turned off, because it seems to
# break the code.  Likewise for Copy Propagation (-Op).  (These
# optimizations don't seem to cause any problems in common.w, but
# better safe than sorry--compile everything with them turned off.)
OPT = -O2-p -Z- -mc -Ff=5000 -d -w-pro $(DEBUG)

# These lists of arguments are specific for BCC.
# Change, add or delete things here to suit your personal conditions.
# Simulate these when setting up `projects'.
CFLAGS = -I$(CATINCLUDE) $(OPT) \
	-DCWEBINPUTS="$(CWEBINPUTS)" -D_DEV_NULL="NUL" -DSEPARATORS=";\\:"
LINKFLAGS = $(CFLAGS)

# The `f' flag is turned off to save paper
# The `lX' flag includes Xcwebmac.tex
# The `s' flag displays some statistics
WFLAGS = -f +lX +s
TFLAGS = +s

# What C compiler are you using?
CC = bcc
LINK = bcc
MAKE = make

# RM and CP are used below in case rm and cp are aliased
RM = del
RMDIR = deltree
CP = copy
INSTALL = copy

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

CWEAVE = ./cweave
CTANGLE = ./ctangle
WMERGE = ./wmerge

# The following files come from the original CWEB distribution and
# are left completely unmodified.

SOURCES = common.w common.h ctangle.w cweave.w prod.w examples/wmerge.w

ORIGINAL = $(SOURCES) comm-amiga.ch comm-bs.ch comm-man.ch comm-pc.ch \
	comm-vms.ch common.c ctang-bs.ch ctang-man.ch ctang-pc.ch \
	ctang-vms.ch ctangle.c cweav-bs.ch cweav-man.ch cweav-pc.ch \
	cweav-vms.ch cweb.1 cweb.el cwebmac.tex cwebman.tex Makefile \
	Makefile.bs README comm-os2.ch \
        examples/extex.w examples/kspell.el examples/Makefile \
	examples/oemacs.el examples/oemacs.w examples/README \
	examples/treeprint.w examples/wc.w examples/wc-dos.ch \
	examples/wmerg-pc.ch examples/wmerge.w~ examples/wordtest.w \
	examples/xlib_types.w examples/xview_types.w

# The following files make the body of this patched distribution
# of CWEB.

PATCH = $(CCHANGES) $(HCHANGES) $(HPATCH) $(TCHANGES) $(WCHANGES) \
	$(MCHANGES) common.$(EXTENSION) ctangle.$(EXTENSION) \
	wmerge.$(EXTENSION) cwebmana.ch README.p13 \
	Makefile.bcc Makefile.sas Makefile.unix

AREXX = arexx/*

BIN = bin/*

EXAMPLES = examples/cct.w examples/commonwords.w examples/extex.ch \
	examples/Makefile.sas examples/matrix.wxx examples/primes.ch \
	examples/primes.w examples/README.p11 examples/sample.w \
	examples/treeprint.ch examples/wc.ch examples/wordtest.ch

INCLUDE = cwebinputs/*

MACROS = texinputs/*

ALL = $(ORIGINAL) $(PATCH) $(AREXX) $(BIN) $(EXAMPLES) $(INCLUDE) $(MACROS)

.SUFFIXES: .dvi .tex .w

.w.tex:
	$(CWEAVE) $(WFLAGS) $* $*

.tex.dvi:       
	tex $<

.w.dvi:
	$(MAKE) $*.tex
	$(MAKE) $*.dvi

.$(EXTENSION).obj:
	$(CC) $(CFLAGS) -c $*.$(EXTENSION)

# When you say `make' without any arguments, `make' will jump to this item
default: ctangle.exe cweave.exe

# The complete set of files contains the two programs `ctangle' and
# `cweave' plus the program `wmerge', the manuals `cwebman' and `cwebmana'
# and the source documentations.
all: progs docs

# The objects of desire
progs: ctangle.exe cweave.exe wmerge.exe

cautiously: $(CTANGLE)
	$(CP) common.$(EXTENSION) SAVEcommon.$(EXTENSION)
	$(CTANGLE) $(TFLAGS) common $(CCHANGES) common.$(EXTENSION)
	diff common.$(EXTENSION) SAVEcommon.$(EXTENSION)
	$(RM) SAVEcommon.$(EXTENSION)
	$(CP) ctangle.$(EXTENSION) SAVEctangle.$(EXTENSION)
	$(CTANGLE) $(TFLAGS) ctangle $(TCHANGES) ctangle.$(EXTENSION)
	diff ctangle.$(EXTENSION) SAVEctangle.$(EXTENSION)
	$(RM) SAVEctangle.$(EXTENSION)

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

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

common.$(EXTENSION): common.w $(CCHANGES)
	$(CTANGLE) $(TFLAGS) common $(CCHANGES) common.$(EXTENSION)

common.obj: common.$(EXTENSION) $(CATINCLUDE)cweb.h

ctangle.exe: ctangle.obj common.obj
	$(LINK) $(LINKFLAGS) ctangle.obj common.obj

ctangle.$(EXTENSION): ctangle.w $(TCHANGES) $(HPATCH)
	$(CTANGLE) $(TFLAGS) ctangle $(TCHANGES) ctangle.$(EXTENSION)

ctangle.obj: ctangle.$(EXTENSION) $(CATINCLUDE)cweb.h $(HPATCH)

cweave.exe: cweave.obj common.obj
	$(LINK) $(LINKFLAGS) cweave.obj common.obj

cweave.$(EXTENSION): cweave.w $(WCHANGES) $(HPATCH)
	$(CTANGLE) $(TFLAGS) cweave $(WCHANGES) cweave.$(EXTENSION)

cweave.obj: cweave.$(EXTENSION) $(CATINCLUDE)cweb.h $(HPATCH)

wmerge.exe: wmerge.$(EXTENSION)
	$(CC) $(CFLAGS) wmerge.$(EXTENSION)

wmerge.$(EXTENSION): examples/wmerge.w $(MCHANGES)
	$(CTANGLE) $(TFLAGS) examples/wmerge $(MCHANGES) wmerge.$(EXTENSION)

# Take a good lecture for bedtime reading
docs: cwebman.dvi cwebmana.dvi common.dvi ctangle.dvi cweave.dvi wmerge.dvi

cwebman.dvi: cwebman.tex
cwebmana.dvi: cwebmana.tex
common.dvi: common.tex
ctangle.dvi: ctangle.tex
cweave.dvi: cweave.tex
wmerge.dvi: wmerge.tex

usermanual: cwebmana.dvi

fullmanual: usermanual $(SOURCES) comm-man.ch ctang-man.ch cweav-man.ch
	$(MAKE) cweave
	$(CWEAVE) common.w comm-man.ch
	$(MAKE) common.dvi
	$(CWEAVE) ctangle.w ctang-man.ch
	$(MAKE) ctangle.dvi
	$(CWEAVE) cweave.w cweav-man.ch
	$(MAKE) cweave.dvi

cwebmana.tex: cwebman.tex cwebmana.ch
	$(WMERGE) cwebman.tex cwebmana.ch cwebmana.tex

# for making the documentation we will have to include the change files
ctangle.tex: ctangle.w $(HPATCH) $(TCHANGES)
	$(CWEAVE) $(WFLAGS) ctangle $(TCHANGES)

cweave.tex: cweave.w $(HPATCH) $(WCHANGES)
	$(CWEAVE) $(WFLAGS) cweave $(WCHANGES)

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

wmerge.tex: examples/wmerge.w $(MCHANGES)
	$(CWEAVE) $(WFLAGS) examples/wmerge $(MCHANGES)

# be sure to leave ctangle.$(EXTENSION) and common.$(EXTENSION)
# and $(HPATCH) for bootstrapping
clean:
	$(RM) *.obj
	$(RM) *.bak
	$(RM) *.log
	$(RM) *.dvi
	$(RM) *.toc
	$(RM) *.idx
	$(RM) *.scn
	$(RM) common.tex 
	$(RM) cweave.tex 
	$(RM) cweave.$(EXTENSION) 
	$(RM) ctangle.tex 
	$(RM) ctangle.exe
	$(RM) cweave.exe
	$(RM) wmerge.exe
	$(RM) cwebmana.tex 
	$(RM) wmerge.tex 

# Install the new program versions where they can be found
install: progs
	$(INSTALL) cweave.exe $(DESTDIR)$(DESTPREF)weave.exe
	$(INSTALL) ctangle.exe $(DESTDIR)$(DESTPREF)tangle.exe
	$(INSTALL) wmerge.exe $(DESTDIR)wmerge.exe

# Make a shipable archive
cweb.lha:
	lha -x -r u $@ $(ALL)
cwebpatch.lha:
	lha -x -r u $@ $(PATCH)
	lha -x -r u $@ $(AREXX)
	lha -x -r u $@ $(BIN)
	lha -x -r u $@ $(EXAMPLES)
	lha -x -r u $@ $(INCLUDE)
	lha -x -r u $@ $(MACROS)
cweborig.lha:
	lha -x -r u $@ $(ORIGINAL)

cweb.tar.gz:
	tar cvf cweb.tar $(ALL)
	gzip cweb.tar

# Remove the patch completely
remove: clean
	$(RM) $(CCHANGES)
	$(RM) $(HCHANGES)
	$(RM) $(HPATCH)
	$(RM) $(TCHANGES)
	$(RM) $(WCHANGES)
	$(RM) $(MCHANGES)
	$(RM) common.$(EXTENSION)
	$(RM) ctangle.$(EXTENSION)
	$(RM) wmerge.$(EXTENSION)
	$(RM) cwebmana.ch
	$(RM) README.p13
	$(RM) Makefile.bcc
	$(RM) Makefile.sas
	$(RM) Makefile.unix
	$(RMDIR) arexx
	$(RMDIR) bin
	$(RM) examples/cct.w
	$(RM) examples/commonwords.w
	$(RM) examples/extex.ch
	$(RM) examples/Makefile.sas
	$(RM) examples/matrix.wxx
	$(RM) examples/primes.ch
	$(RM) examples/primes.w
	$(RM) examples/README.p11
	$(RM) examples/sample.w
	$(RM) examples/treeprint.ch
	$(RM) examples/wc.ch
	$(RM) examples/wordtest.ch
	$(RMDIR) cwebinputs
	$(RMDIR) texinputs

# End of Makefile.bcc
