#===========================================================
# Server modules Makefile -- Customize the first section
#===========================================================
# Please select your platform by enabling the appropriate line below
#.............................................for GNU LibC 5
#PLATFORM = LINUX
#.............................................for GNU LibC 6
PLATFORM = LINUX_LC6
#............................for FreeBSD < 5.0 / FreeBSD 6.1
#PLATFORM = FREEBSD
#.........................................for FreeBSD >= 5.0
#PLATFORM = FREEBSD5

# Uncomment this to enable MySQL back-end
SQL = -DWITH_MYSQL

# Uncomment this to use the GSM/modem emulation library
#EMU = emu

# Uncomment this for debugging (now use sms_serv -d)
#DEBUG = -DINCL_DEBUG_CODE

# Uncomment this to enable debugging in the parser
#FLDEBUG = -d

# Extra compilation flags
CFLAGS += -O2

# The following 2 are given as example and are not normally needed
# with typical builds of gcc (those paths are already built-in).
# Additional Include path
#IEXTRA = -I /usr/local/include
# Additional Library path
#LEXTRA = -L /usr/local/lib

# Compilation chain tools
CC = gcc
LEX = flex -I
YACC = bison

# Installation paths
PREFIX = /usr/local
BINDIR = $(PREFIX)/bin
MANDIR = $(PREFIX)/man

#===========================================================
# You shouldn't need to change anything beyond this point
#===========================================================
YDEBUG = YYDEBUG=1
DEFINES = -D$(PLATFORM) -D$(YDEBUG) $(DEBUG) $(SQL) $(IEXTRA)

PROGS = sms_serv sms2mailgw
S_OBJS = sms_serv.o stuff.o serv_stuff.o gsmdevices.o mbchecker.o \
	accessctrl.o dbaccess.o pdu.o dd.o smtp.o server.tab.o lex.yy.o
G_OBJS = sms2mailgw.o stuff.o smtp.o gw_stuff.o
MANPAGES = $(wildcard *.[0-9])
HTMLMAN = $(addsuffix .html, $(MANPAGES))

ifeq ($(findstring FREEBSD, $(PLATFORM)), FREEBSD)
  EXTRA = local_getopt
  XTRA_OBJS = ../libs/getopt.o ../libs/getopt1.o
else
  EXTRA = 
  XTRA_OBJS = 
endif

ifeq ($(SQL),-DWITH_MYSQL)
  S_LIBS = -lm -lfl -lmodem$(EMU) -lmysqlclient
else
  S_LIBS = -lm -lfl -lmodem$(EMU)
endif
G_LIBS = -lm

#=============================================================
.PHONY: local_getopt

all: $(EXTRA) $(PROGS)

doc: $(HTMLMAN)

sms_serv: $(XTRA_OBJS) $(S_OBJS)
	$(CC) -o sms_serv $(S_OBJS) $(XTRA_OBJS) $(LEXTRA) $(S_LIBS)

sms2mailgw: $(XTRA_OBJS) $(G_OBJS)
	$(CC) -o sms2mailgw $(G_OBJS) $(XTRA_OBJS) $(LEXTRA) $(G_LIBS)

local_getopt:
	@(cd ../libs; make)

lex.yy.o server.tab.o: sms_serv.h

server.tab.o: server.tab.c server.tab.h
	$(CC) $(CFLAGS) $(DEFINES) -c server.tab.c

lex.yy.o: lex.yy.c server.tab.h
	$(CC) $(CFLAGS) $(DEFINES) -c lex.yy.c

server.tab.c server.tab.h: server.y
	$(YACC) -d server.y

lex.yy.c: server.l
	$(LEX) $(FLDEBUG) server.l

sms_serv.o: sms_serv.c sms_serv.h
	$(CC) $(CFLAGS) $(DEFINES) -c sms_serv.c

sms2mailgw.o: sms2mailgw.c sms_serv.h
	$(CC) $(CFLAGS) $(DEFINES) -c sms2mailgw.c

stuff.o: stuff.c sms_serv.h
	$(CC) $(CFLAGS) $(DEFINES) -c stuff.c
	
serv_stuff.o: serv_stuff.c sms_serv.h
	$(CC) $(CFLAGS) $(DEFINES) -c serv_stuff.c
	
gw_stuff.o: gw_stuff.c sms_serv.h smtp.h
	$(CC) $(CFLAGS) $(DEFINES) -c gw_stuff.c
	
mbchecker.o: mbchecker.c sms_serv.h gsmdev.h pdu.h smtp.h
	$(CC) $(CFLAGS) $(DEFINES) -c mbchecker.c
	
dbaccess.o: dbaccess.c sms_serv.h
	$(CC) $(CFLAGS) $(DEFINES) -c dbaccess.c
	
accessctrl.o: accessctrl.c sms_serv.h
	$(CC) $(CFLAGS) $(DEFINES) -c accessctrl.c
	
pdu.o: pdu.c sms_serv.h pdu.h
	$(CC) $(CFLAGS) $(DEFINES) -c pdu.c
	
smtp.o: smtp.c sms_serv.h smtp.h
	$(CC) $(CFLAGS) $(DEFINES) -c smtp.c
	
gsmdevices.o: gsmdevices.c sms_serv.h gsmdev.h
	$(CC) $(CFLAGS) $(DEFINES) -c gsmdevices.c
	
dd.o: dd.c pdu.h gsmdev.h
	$(CC) $(CFLAGS) $(DEFINES) -c dd.c

install: $(PROGS)
	install -g bin -o root -m 755 sms_serv $(BINDIR)
	strip $(BINDIR)/sms_serv
	install -g bin -o root -m 755 sms2mailgw $(BINDIR)
	strip $(BINDIR)/sms2mailgw
	install -g bin -o root -m 644 sms_serv.1 $(MANDIR)/man1
	install -g bin -o root -m 644 sms2mailgw.1 $(MANDIR)/man1
	install -g bin -o root -m 644 gsmdevices.5 $(MANDIR)/man5
	install -g bin -o root -m 644 gsmaccess.5 $(MANDIR)/man5
	install -g bin -o root -m 644 gsmcaps.5 $(MANDIR)/man5
	install -g bin -o root -m 644 gsmdbtab.5 $(MANDIR)/man5
	@echo "-----------------------------------------------------------"
	@echo "First Install:"
	@echo "  Please put in place (/etc) and edit the following files:"
	@echo "  - gsmdevices (required)"
	@echo "  - gsmcaps (required)"
	@echo "  - gsmaccess (optional)"
	@echo "  - gsmdbtab (optional)"
	@echo "Upgrade:"
	@echo "  Please check whether your /etc/gsmcaps needs upgrading..."
	@echo "  ...if so, copy it manually."
	@echo "-----------------------------------------------------------"

%.1.html: %.1
	rman -f HTML -r '%s.%s.html' $< > $@

%.5.html: %.5
	rman -f HTML -r '%s.%s.html' $< > $@

listing:
	enscript -GE Makefile sms_serv.c stuff.c serv_stuff.c \
	gsmdevices.c gsmdev.h mbchecker.c accessctrl.c pdu.c sms_serv.h \
	pdu.h server.y server.l sms2mailgw.c gw_stuff.c \
	TODO BUGS gsmdevices gsmaccess gsmcaps
	man -l ./sms_serv.1 -t | lpr
	man -l ./sms2mailgw.1 -t | lpr
	man -l ./gsmdevices.5 -t | lpr
	man -l ./gsmaccess.5 -t | lpr
	man -l ./gsmcaps.5 -t | lpr
	man -l ./gsmdbtab.5 -t | lpr

clean:
	rm -f core $(PROGS) *.o *~ server.tab.c server.tab.h lex.yy.c *.html

