#
# Makefile for bwmon
#
# Bob Eager   May 2016
#
# Macro definitions
#
CC?=		clang
#
PRODUCT=	bwmon
#
SRC=		bwmon.c graph.c mklegend.c
HDR=		bwmon.h
XSRC=		conf.l conf.y
OBJ=		bwmon.o graph.o conf.tab.o conf.l.o

CONF=		bwmon.conf.sample
MAN=		$(PRODUCT).1 $(PRODUCT).conf.5
DOC=		$(MAN) README
LEGEND=		legend.png
MISC=		$(PRODUCT).css $(PRODUCT).sh $(CONF) distname
MKLEGEND=	mklegend
OLD=		old/*
PORTFILES=	portfiles
PORTEDITS=	's,/usr/local,%%PREFIX%%,g'
#
DISTNAME!=	./distname $(PRODUCT)
ARCH=		$(DISTNAME)-arch.zip
#
# Compiler flags
#
CFLAGS+=	-Wall -g -O2 -I/usr/local/include
LDFLAGS=	-L/usr/local/lib -lpcap -lgd -lpng -lm
#
all:		$(PRODUCT) $(LEGEND)
#
$(PRODUCT):	$(OBJ)
		$(CC) $(CFLAGS) $(OBJ) -o $(PRODUCT) $(LDFLAGS) 
		@strip $(PRODUCT)
#
depend:
		mkdep $(CFLAGS) $(SRC)
#
conf.tab.c:	conf.y bwmon.h
		byacc -b conf -pbmconf_ -d conf.y
#
conf.l.c:	conf.l conf.tab.c
		flex -Pbmconf_ -s -i -t -I conf.l > conf.l.c
#
conf.l.o:	conf.l.c
		$(CC) $(CFLAGS) -Wno-unused -c -o conf.l.o conf.l.c	
#
$(LEGEND):	mklegend
		./$(MKLEGEND) $(LEGEND)
#
$(MKLEGEND):	mklegend.c
#
distfile:
		@mkdir -p $(DISTNAME)
		@cp -a $(SRC) $(XSRC) $(HDR) $(DISTNAME)
		@cp -a $(MAN) Makefile $(DISTNAME)
		@cp -a $(MISC) $(DISTNAME)
		@rm -f $(DISTNAME).zip
		zip -9 -r $(DISTNAME).zip $(DISTNAME)
		@rm -rf $(DISTNAME)
#
# create .in files for the port's files directory
#
portfiles::
		@rm -rf $(PORTFILES)
		@mkdir -p $(PORTFILES)
		@sed -e $(PORTEDITS) $(PRODUCT).1 > $(PORTFILES)/$(PRODUCT).1.in
		@sed -e $(PORTEDITS) $(PRODUCT).conf.5 > $(PORTFILES)/$(PRODUCT).conf.5.in
		@sed -e $(PORTEDITS) $(PRODUCT).sh > $(PORTFILES)/$(PRODUCT).in
#
clean:
		@rm -f *.o conf.tab.c conf.tab.h conf.l.c core \
		$(MKLEGEND)
#
clean-all:
		@rm -f *.o $(PRODUCT) conf.tab.c conf.tab.h conf.l.c core \
		$(PRODUCT) $(LEGEND) $(MKLEGEND)
		@rm -rf $(PORTFILES)
#
arch:		$(PRODUCT) $(LEGEND) $(DOC) $(MISC) \
		$(SRC) $(XSRC) $(HDR) $(MISC) $(DOC) Makefile $(OLD)
		@rm -f $(ARCH)
		zip -9 -r $(ARCH) $?
#
# End of makefile for bwmon
#
