### Configuration.

CC = gcc
AR = ar
RANLIB = ranlib

CFLAGS = -Wall -Werror -g
CFLAGS_TOLERANT = -Wall -g

PARSER_OBJS = rcsfile.tab.o lex.yy.o

LIBRCS_OBJS = delta.o file.o revision.o revnum.o

OBJS = $(PARSER_OBJS) $(LIBRCS_OBJS)




### Internals

INCLUDES = -I. -I.. -I../librev

COMPILE = $(CC) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
COMPILE_TOLERANT = $(CC) $(INCLUDES) $(CPPFLAGS) $(CFLAGS_TOLERANT)

DEP_FILES_1 = $(foreach obj,$(OBJS),.deps/$(obj))
DEP_FILES = $(DEP_FILES_1:%.o=%.P)




### Normal build rules

all:	librcs


librcs:	librcs.a

librcs.a:	$(PARSER_OBJS) $(LIBRCS_OBJS)


clean:
	rm -rf .deps core $(OBJS) librcs.a rcsfile.tab.* lex.yy.c




rcsfile.l: rcsfile.tab.h
rcsfile.tab.h: rcsfile.tab.c
rcsfile.tab.o: rcsfile.tab.c
rcsfile.tab.c: rcsfile.y
	bison -d rcsfile.y

lex.yy.o: lex.yy.c
	$(COMPILE_TOLERANT) -c $<
lex.yy.c: rcsfile.l
	flex rcsfile.l




### Internal build rules

DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)

-include $(DEP_FILES)

%.o: %.c
	@echo '$(COMPILE) -c $<'; \
		$(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
	@-cp .deps/$(*F).pp .deps/$(*F).P; \
		tr ' ' '\012' < .deps/$(*F).pp \
		| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
		>> .deps/$(*F).P; \
	rm .deps/$(*F).pp

%.a:
	rm -f $@
	$(AR) cru $@ $^
	$(RANLIB) $@
