CFLAGS= -g -Wall
#CFLAGS= -g -Wall -pg
LIBS = -lm
#LIBS = -lm -lccmalloc -ldl
#LIBS = -lm -lefence	 -- requires too much memory
#LIBS = -lm -ldebauch

AR = ar
ARFLAGS = cr
RM = rm -rf
MV = mv

YACC = bison
YFLAGS = -dtv

LEX = flex

GPERF = gperf

all:	magpie 

LIB=libdpkginfo.a

OBJS := parser.o scanner.o tags.o tokens.o support.o mod_core.o \
	mod_html.o mod_debian.o mod_xml.o mod_docbook.o mod_debiandoc.o \
	mod_texinfo.o \
	mod_sections.o mod_priorities.o mod_tasks.o mod_installed.o \
	mod_names.o mod_maintainers.o mod_sources.o mod_md5sums.o \
	mod_sizes.o mod_isizes.o mod_conffiles.o mod_keywords.o \
#	mod_setuids.o

$(LIB):	$(LIB)($(OBJS))

.y.a:
	$(YACC) $(YFLAGS) $<
	@$(MV) ${<:.y=.tab.c} ${<:.y=.c}
	@$(CC) -c $(CFLAGS)  ${<:.y=.c}
	@$(AR) $(ARFLAGS) $@ $%
	@$(RM) $% ${<:.y=.c}

.l.a:
	$(LEX) $<
	@$(MV) lex.yy.c ${<:.l=.c}
	@$(CC) -c $(CFLAGS) ${<:.l=.c}
	@$(AR) $(ARFLAGS) $@ $%
	@$(RM) $% ${<:.l=.c}

.g.a:
	$(GPERF) -tCD tags.g > tags.c
	@$(CC) -c $(CFLAGS) ${<:.g=.c}
	@$(AR) $(ARFLAGS) $@ $%
	# @$(RM) $% ${<:.g=.c}

$(LIB)(parser.o):	parser.y
$(LIB)(scanner.o):	scanner.l parser.h

$(LIB)(tags.o):		tags.g
	$(GPERF) -tCD -N in_word_set_${<:.g=} $< > ${<:.g=.c}
	@$(CC) -c $(CFLAGS) ${<:.g=.c}
	@$(AR) $(ARFLAGS) $@ $%
	# @$(RM) $% ${<:.g=.c}

$(LIB)(tokens.o):		tokens.g
	$(GPERF) -tCD -N in_word_set_${<:.g=} $< > ${<:.g=.c}
	@$(CC) -c $(CFLAGS) ${<:.g=.c}
	@$(AR) $(ARFLAGS) $@ $%
	# @$(RM) $% ${<:.g=.c}

magpie:	magpie.c $(LIB)
	cc -o magpie $(CFLAGS) magpie.c $(LIB) $(LIBS)

parser.h:	parser.y
	bison -d parser.y
	mv parser.tab.h parser.h
	rm parser.tab.c

cxref:
	cxref -I/usr/include/linux \
		-D__gnuc_va_list=__ptr_t \
		-Dtime_t=__kernel_time_t \
		-Dsuseconds_t=__kernel_suseconds_t \
		-Dwchar_t=int \
		-Dsize_t=int \
		-Dva_list=__gnuc_va_list \
		-DDIR="struct __dirstream" \
		-xref -html32 *.c
	install -d doc
	mv cxref* *html doc
	
install:
	install -d $(DESTDIR)/usr/sbin
	install magpie $(DESTDIR)/usr/sbin

	install -d $(DESTDIR)/usr/share/man/man8
	install magpie.8 $(DESTDIR)/usr/share/man/man8

clean:
	rm *.o *.a parser.c scanner.c tags.c tokens.c parser.output
	rm cxref.* *c.html
