CC=gcc
CFLAGS=-O2 -Wall
LEX=flex -i
YACC=bison -y

ifeq "$(DEBUG)" "y"
CFLAGS+=-D_DEBUG_PARSER -D_DEBUG_LEXER
endif

MAJOR=1
MINOR=00

PROGS = eftpd
TESTS = svrpi.l.test svrpi.p.test

all:		version.h $(PROGS)

tests:		version.h $(TESTS)

version.h:	
		echo "#define VERSION \"EFTPd v$(MAJOR).$(MINOR) - (`date`)\"" >version.h

svrpi.tab.o:	svrpi.tab.c

svrpi.tab.c:	svrpi.y

svrpi.c:	svrpi.flex svrpi.tab.c

eftpd:		svrpi.o svrpi.tab.o main.o auth.o svrglob.o dataxfer.o
		$(CC) $(CFLAGS) -o eftpd svrpi.o svrpi.tab.o main.o auth.o svrglob.o dataxfer.o -lfl -lcrypt

svrpi.l.test:	DEFS=-D_DEBUG_LEXER -D_DEBUG_PARSER -D_TEST_LEXER
svrpi.l.test:	svrpi.c svrpi.tab.c svrglob.o
		$(CC) -c $(DEFS) $(CFLAGS) -o svrpi.l.test.o svrpi.c
		$(CC) $(DEFS) $(CFLAGS) -o svrpi.l.test svrpi.l.test.o svrpi.tab.c svrglob.o -lfl

svrpi.p.test:	DEFS=-D_DEBUG_LEXER -D_DEBUG_PARSER -D_TEST_PARSER
svrpi.p.test:	svrpi.c svrpi.tab.c svrglob.o
		$(CC) -c $(DEFS) $(CFLAGS) -o svrpi.p.test.o svrpi.c
		$(CC) $(DEFS) $(CFLAGS) -o svrpi.p.test svrpi.p.test.o svrpi.tab.c svrglob.o -lfl

clean:
		rm -f *~ *.bak *.o core
		rm -f *.tab.[ch] *.output svrpi.c version.h
		rm -f $(PROGS) $(TESTS)


#####################################################
# Make rules
#

%.c:            %.flex
		$(LEX) $<
		mv -f lex.yy.c $@

%.tab.c:        %.y
		$(YACC) -d $<
		mv -f y.tab.c $@
		mv -f y.tab.h `basename $@ .c`.h
		if [ -r y.output ] ; then mv -f y.output `basename $@ .tab.c`.output ; fi


