# This file, makefile.unix, is part of CWEB.
# It is distributed WITHOUT ANY WARRANTY, express or implied.

# Modified for the CC compiler under HP-UX on a HP Apollo 400 at Bayreuth
# University by Andreas Scherer (sorry, no e-mail; Abt-Wolf-Straße 17,
# 96215 Lichtenfels, Federal Republic of Germany), August 12, 1994.
# Other UNIX compilers like c89 or gcc can work with this file as well.

# Copyright (C) 1987,1990,1993 Silvio Levy and Donald E. Knuth
# 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 given a different name and 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, ccwebmac.tex, or gcwebmac.tex go here)
MACROSDIR= /usr/local/lib/tex/inputs

# directory for CWEB inputs in @i files
CWEBINPUTS=/usr/local/lib/cweb

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

# directory for manual pages (cweb.1 goes here)
MANDIR= /usr/man/man$(MANEXT)

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

# directory for GNU EMACS Lisp code (cweb.el goes here)
EMACSDIR= /usr/local/emacs/lisp

# 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=common.ch

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

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

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

# We keep debugging info around, for fun, but most users don't need it.
# These lists of arguments are specific for CC.  Change, add or delete
# things here to suit your personal conditions.
# The following set of options work for CC 8.00 on HP-UX 8.00.
# The script cpp.sh is a local workaround for HP-UX 8.00 to unprotorize
# the patched source code, i.e., to remove all ANSI-prototypes.
# If you encounter any problems with the prototypes, look for it at
#    ftp.th-darmstadt.de:/pub/programming/languages/c/unproto-1.2.tar.Z
# If your version of HP-UX 8.00 acknowledges the `-Aa' option, delete
# the reference to cpp.sh.
CFLAGS = -g -tp,/usr/local/bin/cpp.sh -I$(CATINCLUDE) \
	-DCWEBINPUTS=\"$(CWEBINPUTS)\"

# The following set of options work for CC 9.30 on HP-UX 9.01.
#CFLAGS = -g -Aa -I$(CATINCLUDE) -DCWEBINPUTS=\"$(CWEBINPUTS)\"

# The following set of options work for CC and GCC on SunOS 4 and SGI's
# IRIX 4.0.5.  They are standard for many other UNIX-C compilers.
#CFLAGS = -g -I$(CATINCLUDE) -DCWEBINPUTS=\"$(CWEBINPUTS)\"

# All linkers tested worked fine with this option.
LINKFLAGS = -g
#LINKFLAGS = -s # for smaller (stripped) executables on many UNIX systems

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

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

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

CWEAVE = ./cweave
CTANGLE = ./ctangle
WMERGE=./wmerge
SOURCES = cweave.w common.w ctangle.w
ALMOSTALL = common.w ctangle.w wmerge.w makefile readme \
	common.c common.h ctangle.c wmerge.c \
	cwebman.tex cwebmang.ch cweb.1 cweb.man cweb.el prod.w \
	$(CCHANGES) $(CHCHANGES) $(TCHANGES) $(WCHANGES) $(PCHANGES) \
	comm-vms.ch ctang-vms.ch cweav-vms.ch \
	comm-man.ch ctang-man.ch cweav-man.ch \
	makefile.amiga makefile.pc makefile.unix \
	$(MACROSDIR)cwebmac.tex $(MACROSDIR)ccwebmac.tex $(MACROSDIR)gcwebmac.tex \
	$(CATINCLUDE)cweb.h examples
ALL =  $(ALMOSTALL) cweave.w

.SUFFIXES: .dvi .tex .w

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

.tex.dvi:	
	tex $<

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

.c.o:
	$(CC) $(CFLAGS) -c $*.c

.w.c:
	$(CTANGLE) $* $*

.w.o:
	$(MAKE) $*.c
	$(MAKE) $*.o

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

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

# The objects of desire
progs: ctangle cweave wmerge

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

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

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

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

common.o: common.c $(CATINCLUDE)cweb.h

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

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

ctangle.o: ctangle.c $(CATINCLUDE)cweb.h common.h

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

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

cweave.o: cweave.c $(CATINCLUDE)cweb.h common.h

wmerge: wmerge.c
	$(CC) $(CFLAGS) -o wmerge wmerge.c $(LINKFLAGS)

wmerge.c: wmerge.w $(MCHANGES)
	$(CTANGLE) wmerge $(MCHANGES)

# Take a good lecture for bedtime reading
doc: $(SOURCES:.w=.dvi)

docs: cwebman.dvi cwebmang.dvi common.dvi ctangle.dvi cweave.dvi wmerge.dvi

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

usermanual: cwebmang.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

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

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

cweave.tex: cweave.w common.h $(WCHANGES)
	$(CWEAVE) $(WFLAGS) cweave $(WCHANGES)

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

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

# be sure to leave ctangle.c and common.c and common.h for bootstrapping
clean:
	$(RM) -f -r *~ *.o common.tex cweave.tex cweave.c ctangle.tex \
	*.log *.dvi *.toc *.idx *.scn core cweave.w.[12] cweave ctangle \
	cwebmang.tex wmerge.tex wmerge

# Install the new program versions where they can be found
install: all
	$(CP) cweave $(DESTDIR)$(DESTPREF)weave
	chmod 755 $(DESTDIR)$(DESTPREF)weave
	$(CP) ctangle $(DESTDIR)$(DESTPREF)tangle
	chmod 755 $(DESTDIR)$(DESTPREF)tangle
	$(CP) cweb.1 $(MANDIR)/cweb.$(MANEXT)
	chmod 644 $(MANDIR)/cweb.$(MANEXT)
	$(CP) cwebmac.tex $(MACROSDIR)
	chmod 644 $(MACROSDIR)/cwebmac.tex
	$(CP) cweb.el $(EMACSDIR)
	chmod 644 $(EMACSDIR)/cweb.el

bundle: $(ALL)
	sed -n '1,2200 p' cweave.w > cweave.w.1
	sed -n '2201,$$ p' cweave.w > cweave.w.2
	/usr/local/bin/shar -m100000 -c -v -f cweb $(ALMOSTALL) cweave.w.[12]

tags: $(ALL)
	etags -z $(ALL)

cweb.tar: $(ALL)
	tar cvhf cweb.tar $(ALL)

floppy: $(ALL)
	bar cvhf /dev/rfd0 $(ALL)
	bar tvf /dev/rfd0
	eject
