# @(#) Makefile 1.6 93/06/18 22:29:40

## BEGIN CONFIGURATION STUFF

# In the unlikely case that your compiler has no hooks for alternate
# compiler passes, use a "cc cflags -E file.c | unproto >file.i"
# pipeline, then "cc cflags -c file.i" to compile the resulting
# intermediate file.
# 
# Otherwise, the "/lib/cpp | unproto" pipeline can be packaged as an
# executable shell script (see the provided "cpp.sh" script) that should
# be installed as "/whatever/cpp". This script should then be specified
# to the C compiler as a non-default preprocessor.
#
PROG	= unproto
PIPE	=

# The overhead and problems of shell script interpretation can be
# eliminated by having the unprototyper program itself open the pipe to
# the preprocessor.  In that case, define the PIPE_THROUGH_CPP macro as
# the path name of the default C preprocessor (usually "/lib/cpp"),
# install the unprototyper as "/whatever/cpp" and specify that to the C
# compiler as a non-default preprocessor.
#
# PROG	= cpp
# PIPE	= -DPIPE_THROUGH_CPP=\"/lib/cpp\"

# Some compilers complain about some #directives. The following is only a
# partial solution, because the directives are still seen by /lib/cpp.
# Be careful with filtering out #pragma, because some pre-ANSI compilers
# (SunOS) rely on its use.
#
# SKIP	= -DIGNORE_DIRECTIVES=\"pragma\",\"foo\",\"bar\"
#
SKIP	=

# The bell character code depends on the character set. With ASCII, it is
# 7. Specify a string constant with exactly three octal digits. If you
# change this definition, you will have to update the example.out file.
#
# BELL	= -DBELL=\"007\"

# Some C compilers have problems with "void".  The nature of the problems
# depends on the age of the compiler.
#
# If your compiler does not understand "void" at all, compile with
# -DMAP_VOID. The unprototyper will replace "void *" by "char *", a
# (void) argument list by an empty one, and will replace all other
# instances of "void" by "int".
#
# If your compiler has problems with "void *" only, compile with
# -DMAP_VOID_STAR. The unprototyper will replace "void *" by "char *",
# and will replace a (void) argument list by an empty one. All other
# instances of "void" will be left alone.
#
# If neither of these are defined, (void) argument lists will be replaced
# by empty ones.
#
# MAP	= -DMAP_VOID_STAR

# Now that we have brought up the subject of antique C compilers, here's
# a couple of aliases that may be useful, too.
#
# ALIAS	= -Dstrchr=index

# If you need support for functions that implement ANSI-style variable
# length argument lists, edit the stdarg.h file provided with this
# package so that it contains the proper definitions for your machine.

## END CONFIGURATION STUFF

SHELL	= /bin/sh

CFILES	= unproto.c tok_io.c tok_class.c tok_pool.c vstring.c symbol.c error.c \
	hash.c strsave.c
HFILES	= error.h token.h vstring.h symbol.h
SCRIPTS	= cpp.sh acc.sh
SAMPLES	= stdarg.h stddef.h stdlib.h varargs.c example.c example.out
SOURCES	= README $(CFILES) $(HFILES) Makefile $(SCRIPTS) $(SAMPLES)
FILES	= $(SOURCES) unproto.1
OBJECTS	= tok_io.o tok_class.o tok_pool.o unproto.o vstring.o symbol.o error.o \
	hash.o strsave.o

CFLAGS	= -O
LDFLAGS =
CCFLAGS = $(CFLAGS) -w $(PIPE) $(SKIP) $(BELL) $(MAP) $(ALIAS) -DREOPEN

#CFLAGS	= -O $(PIPE) $(SKIP) $(BELL) $(MAP) $(ALIAS) -p -Dstatic=
#CFLAGS	= -g $(PIPE) $(SKIP) $(BELL) $(MAP) $(ALIAS) -DDEBUG

$(PROG): $(OBJECTS)
	$(CC) $(CCFLAGS) $(LDFLAGS) -o $@ $(OBJECTS) $(MALLOC)

.c.o:
	$(CC) $(CCFLAGS) -c $< -o $@

# For linting, enable all bells and whistles.

lint:
	lint -DPIPE_THROUGH_CPP=\"foo\" -DIGNORE_DIRECTIVES=\"foo\",\"bar\" \
	$(BELL) -DMAP_VOID $(ALIAS) $(CFILES)

# Testing requires that the program is compiled with -DDEBUG.

test:	$(PROG) cpp example.c example.out
	./cpp example.c >example.tmp
	@echo the following diff command should produce no output
	diff -b example.out example.tmp
	rm -f example.tmp

shar:	$(FILES)
	@shar $(FILES)

archive:
	$(ARCHIVE) $(SOURCES)

clean realclean:
	rm -f *.o core cpp unproto mon.out varargs.o varargs example.tmp

error.o : error.c token.h error.h Makefile
hash.o : hash.c Makefile
strsave.o : strsave.c error.h Makefile
symbol.o : symbol.c error.h token.h symbol.h Makefile
tok_class.o : tok_class.c error.h vstring.h token.h symbol.h Makefile
tok_io.o : tok_io.c token.h vstring.h error.h Makefile
tok_pool.o : tok_pool.c token.h vstring.h error.h Makefile
unproto.o : unproto.c vstring.h stdarg.h token.h error.h symbol.h Makefile
varargs.o : varargs.c stdarg.h Makefile
vstring.o : vstring.c vstring.h Makefile
