#	Makefile for C checker
#	Has been used on SysV and BSD/SysV mixtures
#	I don't guarantee it will work on real BSD
#	Set the following macros :-
#		CHECK	if you want to change the program name
#		LIB	for the installation directory
#		CFLAGS	for cc flags
#		LDFLAGS for final cc flags
#		BLIBS	for any other libraries to scan
#		LFLAGS	for lex flags
#		YFLAGS	for yacc flags
#		LINTF	for lint flags

CHECK	= check
LIB	= bin
CFLAGS	= -O
LDFLAGS	=
BLIBS	=
LFLAGS	=
YFLAGS	= -vd
LINTF	=

OBJ	= main.o  lex.o  parse.o  symbol.o  tree.o  check.o  metric.o
SRC	= main.c  lex.l  parse.y  symbol.c  tree.c  check.c  metric.c

build	:	$(CHECK)

install	:	$(CHECK)
		cp $(CHECK) $(LIB)
		-touch install

$(CHECK):	$(OBJ)
		$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJ) $(BLIBS) -lm

$(OBJ)	:	y.xxx.h check.h

tree.o	:	tables.h

tables.h:	y.xxx.h tables.sh
		tables.sh

y.xxx.h	:	y.tab.h
		-cmp -s y.xxx.h y.tab.h || cp y.tab.h y.xxx.h

y.tab.h	:	parse.c

.y.c	:;	$(YACC) $(YFLAGS) $<
		mv y.tab.c $*.c
		parse.awk &

.y.o	:;	$(YACC) $(YFLAGS) $<
		mv y.tab.c $*.c
		parse.awk &
		$(CC) $(CFLAGS) -c $*.c

.l.o	:;	$(LEX) $(LFLAGS) $<
		mv lex.yy.c $*.c
		$(CC) $(CFLAGS) -c $*.c

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

list	:	$(SRC) Makefile
		pr -n -f -h "C Checker" $? | lp
		-touch list

lint	:	$(OBJ:.o=.c) tables.h
		lint $(LINTF) $(OBJ:.o=.c)

clean	:;	rm -f *.o y.* yacc* parse.c lex.c tables.h

clobber	:	clean
		rm -f $(CHECK) list install
