# Makefile
# This file holds the make rules for the Telephony Engine modules

# override DESTDIR at install time to prefix the install directory
DESTDIR :=

# override DEBUG at compile time to enable full debug or remove it all
DEBUG :=

CC  := gcc -Wall
CXX := g++ -Wall
MOC := /usr/bin/moc-qt4
QT4_INC := -DQT_SHARED -I/usr/include/QtUiTools -I/usr/include/QtCore -I/usr/include/QtDBus -I/usr/include/QtXml -I/usr/include/QtGui  
QT4_LIB := -lQtUiTools -lQtGui -lQtDBus -lQtXml -lQtCore  
QT4_INC_NET := -I/usr/include/QtNetwork
QT4_LIB_NET := -lQtNetwork
QT4_STATIC_MODULES :=
HAVE_PGSQL := yes
PGSQL_INC := -I/usr/include/postgresql
PGSQL_LIB := -lpq
HAVE_MYSQL := no
MYSQL_INC := 
MYSQL_LIB := 
HAVE_SPANDSP := no
SPANDSP_INC := 
SPANDSP_LIB := -lspandsp
HAVE_OPENSSL := yes
OPENSSL_INC :=  
OPENSSL_LIB := -lssl -lcrypto  
HAVE_ZLIB := yes
ZLIB_INC := -I/usr/include
ZLIB_LIB := -lz
SED := sed
DEFS :=
INCLUDES := -I.. -I..
CFLAGS :=  -O2 -fno-exceptions -fPIC -DHAVE_GCC_FORMAT_CHECK 
CPPFLAGS :=  -O2 -fno-check-new  -fno-exceptions -fPIC -DHAVE_GCC_FORMAT_CHECK 
LDFLAGS:= 
YATELIBS:= -L.. -lyate 
MODFLAGS:= -export-dynamic -shared -Wl,--unresolved-symbols=ignore-in-shared-libs
MODRELAX:= -export-dynamic -shared
MODSTRIP:= -Wl,--retain-symbols-file,/dev/null
INCFILES := ../yateclass.h ../yatengine.h ../yatephone.h ../yateversn.h

JUSTSIG := server/ysigchan.yate server/analog.yate \
	server/ciscosm.yate server/sigtransport.yate \
	server/isupmangler.yate

SUBDIRS :=
MKDEPS  := ../config.status
PROGS := cdrbuild.yate cdrfile.yate regexroute.yate \
	tonegen.yate tonedetect.yate wavefile.yate \
	extmodule.yate conference.yate moh.yate pbx.yate \
	dumbchan.yate callfork.yate mux.yate \
	yrtpchan.yate ystunchan.yate \
	ysipchan.yate \
	yiaxchan.yate \
	yjinglechan.yate jabber/jabberserver.yate jabber/jbfeatures.yate \
	ysockschan.yate filetransfer.yate \
	server/pbxassist.yate server/dbpbx.yate server/lateroute.yate \
	server/park.yate server/queues.yate server/queuesnotify.yate \
	server/regfile.yate server/accfile.yate server/register.yate \
	server/callcounters.yate server/cpuload.yate server/ccongestion.yate \
	server/dbwave.yate \
	server/yradius.yate \
	server/ysnmpagent.yate \
	server/monitoring.yate \
	server/sipfeatures.yate \
	sip/sip_cnam_lnp.yate \
	server/heartbeat.yate server/clustering.yate \
	server/mgcpgw.yate server/mgcpca.yate \
	server/mrcpspeech.yate \
	server/presence.yate server/subscription.yate \
	server/users.yate \
	$(JUSTSIG) \
	server/analogdetect.yate \
	client/jabberclient.yate \
	callgen.yate analyzer.yate rmanager.yate msgsniff.yate

LIBS :=
DIRS := client server jabber qt4 sip
PROGS := $(PROGS) server/overlapdial.yate

ifneq ($(HAVE_PGSQL),no)
PROGS := $(PROGS) server/pgsqldb.yate
endif

ifneq ($(HAVE_MYSQL),no)
PROGS := $(PROGS) server/mysqldb.yate
endif

ifneq (yes,no)
PROGS := $(PROGS) enumroute.yate
endif

ifneq (yes,no)
PROGS := $(PROGS) client/osschan.yate
endif

ifneq (yes,no)
PROGS := $(PROGS) client/alsachan.yate
endif

ifneq (no,no)
PROGS := $(PROGS) client/coreaudio.yate
endif

ifneq (yes,no)
ifeq (no,no)
PROGS := $(PROGS) qt4/updater.yate qt4/customtable.yate qt4/customtext.yate \
	qt4/customtree.yate qt4/widgetlist.yate qt4/clientarchive.yate
endif
endif

ifneq (no,no)
PROGS := $(PROGS) server/zapcard.yate
endif

ifneq (no,no)
ifeq (no,yes)
PROGS := $(PROGS) server/wpcard.yate
endif
ifeq (no,yes)
ifeq (yes,yes)
PROGS := $(PROGS) server/tdmcard.yate
endif
endif
endif

ifneq (no,no)
PROGS := $(PROGS) server/lksctp.yate
endif

ifneq ($(HAVE_SPANDSP),no)
PROGS := $(PROGS) faxchan.yate
endif

ifneq (no,no)
PROGS := $(PROGS) h323chan.yate
endif

ifneq (yes,no)
PROGS := $(PROGS) gsmcodec.yate
endif

ifneq (no,no)
PROGS := $(PROGS) ilbccodec.yate
endif

ifneq (yes,no)
PROGS := $(PROGS) speexcodec.yate
endif

ifneq (no,no)
PROGS := $(PROGS) amrnbcodec.yate
endif

ifneq ($(HAVE_OPENSSL),no)
PROGS := $(PROGS) openssl.yate
endif

ifneq ($(HAVE_ZLIB),no)
PROGS := $(PROGS) zlibcompress.yate
endif

ifeq (no,yes)
COREDUMP_INC := -DHAVE_COREDUMPER 
COREDUMP_LIB := 
endif

LOCALFLAGS =
LOCALLIBS =
CCOMPILE = $(CC) $(DEFS) $(DEBUG) $(INCLUDES) $(CFLAGS)
COMPILE = $(CXX) $(DEFS) $(DEBUG) $(INCLUDES) $(CPPFLAGS)
LINK = $(CXX) $(LDFLAGS)
MODLINK = $(CXX) $(MODFLAGS) $(MODSTRIP) $(LDFLAGS)
MODCOMP = $(COMPILE) $(MODFLAGS) $(MODSTRIP) $(LDFLAGS)

prefix = /usr
exec_prefix = ${prefix}
moddir = ${exec_prefix}/lib/yate

# include optional local make rules
-include YateLocal.mak

.PHONY: all debug ddebug xdebug
all: subdirs do-all $(LIBS) $(PROGS)

debug:
	$(MAKE) all DEBUG=-g3 MODSTRIP=

ddebug:
	$(MAKE) all DEBUG='-g3 -DDEBUG' MODSTRIP=

xdebug:
	$(MAKE) all DEBUG='-g3 -DXDEBUG' MODSTRIP=

.PHONY: strip
strip: all do-strip
	strip --strip-debug --discard-locals $(PROGS)

.PHONY: clean
clean: do-clean
	@-$(RM) $(PROGS) $(LIBS) *.o qt4/*.o qt4/*.moc core 2>/dev/null
	@-for i in $(PROGS) ; do \
	    $(RM) -rf $$i.dSYM 2>/dev/null; \
	done;

.PHONY: install
install: all do-install
	@mkdir -p "$(DESTDIR)$(moddir)/" && \
	for i in $(DIRS) ; do \
	    mkdir -p "$(DESTDIR)$(moddir)/$$i" ; \
	done; \
	for i in $(PROGS) ; do \
	    install -D "$$i" "$(DESTDIR)$(moddir)/$$i" ; \
	done;

.PHONY: uninstall
uninstall: do-uninstall
	@-for i in $(PROGS) ; do \
	    rm "$(DESTDIR)$(moddir)/$$i" ; \
	done; \
	for i in $(DIRS) $(SUBDIRS) ; do \
	    rmdir "$(DESTDIR)$(moddir)/$$i" ; \
	done;
	@-rmdir "$(DESTDIR)$(moddir)"

.PHONY: subdirs
subdirs:
	@mkdir -p $(DIRS)

qt4/%.o: ./qt4/%.cpp $(MKDEPS) $(INCFILES)
	$(MAKE) $(patsubst %.o,%.moc,$@)
	$(COMPILE) -c -o $@ $(QT4_INC) -I../clients/qt4 -I./qt4 $<

%.o: ./%.cpp $(MKDEPS) $(INCFILES)
	$(COMPILE) -c $<

do-all do-strip do-clean do-install do-uninstall:
	$(if $(SUBDIRS),\
	@target=`echo $@ | $(SED) -e 's/^do-//'`; \
	for i in $(SUBDIRS) ; do \
	    if test -f ./$$i/Makefile ; then \
		$(MAKE) -C ./$$i $${target} || exit 1;\
	    fi; \
	done \
	)

Makefile: ./Makefile.in $(MKDEPS)
	cd .. && ./config.status

lib%.so: %.o
	$(LINK) -shared -o $@ $^ $(YATELIBS)

server/%.yate: ./server/%.cpp $(MKDEPS) $(INCFILES)
	$(MODCOMP) -o $@ $(LOCALFLAGS) $< $(LOCALLIBS) $(YATELIBS)

client/%.yate: ./client/%.cpp $(MKDEPS) $(INCFILES)
	$(MODCOMP) -o $@ $(LOCALFLAGS) $< $(LOCALLIBS) $(YATELIBS)

qt4/%.yate: ./qt4/%.cpp ../libyateqt4.so $(MKDEPS) $(INCFILES)
	$(MAKE) $(patsubst %.yate,%.moc,$@)
	$(MODCOMP) -o $@ $(LOCALFLAGS) $(QT4_INC) -I../clients/qt4 -Iqt4 $< $(LOCALLIBS) ../libyateqt4.so $(QT4_LIB) $(YATELIBS)

qt4/%.moc: ./qt4/%.h $(MKDEPS) $(INCFILES)
	mkdir -p qt4 && $(MOC) $(DEFS) $(INCLUDES) $(QT4_INC) -I../clients/qt4 -I./qt4 -o $@ $<

%.yate: ./%.cpp $(MKDEPS) $(INCFILES)
	$(MODCOMP) -o $@ $(LOCALFLAGS) $< $(LOCALLIBS) $(YATELIBS)

# Take special care of the modules that depend on optional libs

$(JUSTSIG) server/wpcard.yate server/tdmcard.yate server/zapcard.yate: ../libyatesig.so
$(JUSTSIG): LOCALFLAGS = -I../libs/ysig
server/wpcard.yate server/tdmcard.yate: LOCALFLAGS = -I../libs/ysig 
server/zapcard.yate: LOCALFLAGS = -I../libs/ysig 
$(JUSTSIG) server/wpcard.yate server/tdmcard.yate server/zapcard.yate: LOCALLIBS = -lyatesig

server/analogdetect.yate: ../libs/ymodem/libyatemodem.a
server/analogdetect.yate: LOCALFLAGS = -I../libs/ymodem
server/analogdetect.yate: LOCALLIBS = -L../libs/ymodem -lyatemodem

h323chan.yate: LOCALFLAGS = -DPHAS_TEMPLATES -D_REENTRANT -DP_HAS_SEMAPHORES 
h323chan.yate: LOCALLIBS = 

server/pgsqldb.yate: LOCALFLAGS = $(PGSQL_INC)
server/pgsqldb.yate: LOCALLIBS = $(PGSQL_LIB)

server/mysqldb.yate: LOCALFLAGS = $(MYSQL_INC)
server/mysqldb.yate: LOCALLIBS = $(MYSQL_LIB)

enumroute.yate: LOCALLIBS = -lresolv

client/alsachan.yate: LOCALLIBS = -lasound

client/coreaudio.yate: LOCALLIBS = -framework CoreServices  -framework CoreAudio -framework AudioUnit -framework AudioToolBox

yiaxchan.yate: ../libs/yiax/libyateiax.a
yiaxchan.yate: LOCALFLAGS = -I../libs/yiax
yiaxchan.yate: LOCALLIBS = -L../libs/yiax -lyateiax

yjinglechan.yate jabber/jabberserver.yate jabber/jbfeatures.yate client/jabberclient.yate: ../libyatejabber.so
yjinglechan.yate jabber/jabberserver.yate jabber/jbfeatures.yate client/jabberclient.yate: LOCALFLAGS = -I../libs/yxml -I../libs/yjabber
yjinglechan.yate jabber/jabberserver.yate jabber/jbfeatures.yate client/jabberclient.yate: LOCALLIBS = -lyatejabber

server/dbpbx.yate server/pbxassist.yate: ../libs/ypbx/libyatepbx.a
server/dbpbx.yate server/pbxassist.yate: LOCALFLAGS = -I../libs/ypbx
server/dbpbx.yate server/pbxassist.yate: LOCALLIBS = -L../libs/ypbx -lyatepbx

server/mgcpca.yate: ../libyatemgcp.so ../libyatesig.so ../libs/ysdp/libyatesdp.a
server/mgcpca.yate: LOCALFLAGS = -I../libs/ymgcp -I../libs/ysig -I../libs/ysdp
server/mgcpca.yate: LOCALLIBS = -lyatemgcp -lyatesig -L../libs/ysdp -lyatesdp

server/mgcpgw.yate: ../libyatemgcp.so
server/mgcpgw.yate: LOCALFLAGS = -I../libs/ymgcp
server/mgcpgw.yate: LOCALLIBS = -lyatemgcp

server/lksctp.yate: LOCALFLAGS = 
server/lksctp.yate: LOCALLIBS = -lsctp

ilbccodec.yate: ../libs/ilbc/libilbc.a
ilbccodec.yate: LOCALFLAGS = 
ilbccodec.yate: LOCALLIBS = -L../libs/ilbc -lilbc

gsmcodec.yate: LOCALFLAGS = -I/usr/include
gsmcodec.yate: LOCALLIBS = -lgsm

speexcodec.yate: LOCALFLAGS = -I/usr/include/speex
speexcodec.yate: LOCALLIBS = -lspeex

amrnbcodec.yate: LOCALFLAGS = 
amrnbcodec.yate: LOCALLIBS = -lamrnb

faxchan.yate: LOCALFLAGS = $(SPANDSP_INC)
faxchan.yate: LOCALLIBS = $(SPANDSP_LIB)

ysipchan.yate: ../libs/ysip/libyatesip.a ../libs/ysdp/libyatesdp.a
ysipchan.yate: LOCALFLAGS = -I../libs/ysip -I../libs/ysdp
ysipchan.yate: LOCALLIBS = -L../libs/ysip -lyatesip -L../libs/ysdp -lyatesdp

yrtpchan.yate: ../libs/yrtp/libyatertp.a
yrtpchan.yate: LOCALFLAGS = -I../libs/yrtp
yrtpchan.yate: LOCALLIBS = -L../libs/yrtp -lyatertp

openssl.yate: LOCALFLAGS = $(OPENSSL_INC)
openssl.yate: LOCALLIBS = $(OPENSSL_LIB)

rmanager.yate: LOCALFLAGS = $(COREDUMP_INC)
rmanager.yate: LOCALLIBS = $(COREDUMP_LIB)

qt4/updater.yate: LOCALFLAGS = $(QT4_INC_NET)
qt4/updater.yate: LOCALLIBS = $(QT4_LIB_NET)

server/sipfeatures.yate: ../libs/yxml/libyatexml.a
server/sipfeatures.yate: LOCALFLAGS = -I../libs/yxml
server/sipfeatures.yate: LOCALLIBS = -L../libs/yxml -lyatexml

zlibcompress.yate: LOCALFLAGS = $(ZLIB_INC)
zlibcompress.yate: LOCALLIBS = $(ZLIB_LIB)

server/ysnmpagent.yate: ../libs/yasn/libyasn.a ../libs/ysnmp/libysnmp.a
server/ysnmpagent.yate: LOCALFLAGS = -I../libs/yasn -I../libs/ysnmp
server/ysnmpagent.yate: LOCALLIBS = -L../libs/yasn -lyasn -L../libs/ysnmp -lysnmp

../libyatesig.so ../libs/ysig/libyatesig.a:
	$(MAKE) -C ../libs/ysig

../libs/ilbc/libilbc.a:
	$(MAKE) -C ../libs/ilbc

../libs/ysip/libyatesip.a:
	$(MAKE) -C ../libs/ysip

../libs/yrtp/libyatertp.a:
	$(MAKE) -C ../libs/yrtp

../libs/ysdp/libyatesdp.a:
	$(MAKE) -C ../libs/ysdp

../libs/yiax/libyateiax.a:
	$(MAKE) -C ../libs/yiax

../libyatemgcp.so ../libs/ymgcp/libyatemgcp.a:
	$(MAKE) -C ../libs/ymgcp

../libs/ymodem/libyatemodem.a:
	$(MAKE) -C ../libs/ymodem

../libs/yxml/libyatexml.a:
	$(MAKE) -C ../libs/yxml

../libyatejabber.so ../libs/yjabber/libyatejabber.a:
	$(MAKE) -C ../libs/yjabber

../libs/ypbx/libyatepbx.a:
	$(MAKE) -C ../libs/ypbx

../libyateqt4.so:
	$(MAKE) -C ../clients/qt4

../libs/yasn/libyasn.a:
	$(MAKE) -C ../libs/yasn

../libs/ysnmp/libysnmp.a:
	$(MAKE) -C ../libs/ysnmp
