#*****************************************************************************\
#*                                                                           **
#* PBX4Linux                                                                 **
#*                                                                           **
#*---------------------------------------------------------------------------**
#* Copyright: Andreas Eversberg                                              **
#*                                                                           **
#* Makefile                                                                  **
#*                                                                           **
#*****************************************************************************/ 

WITH-PBX = 42 # MUST BE SET for now
#WITH-H323 = 42 # comment this out, if no h323 should be compiled
#WITH-OPAL = 42 # NOT SUPPORTED YET
WITH-CRYPTO = 42 # comment this out, if no libcrypto should be used
# note: check your location and the names of libraries.

# select location to install
INSTALL_BIN = /usr/local/pbx/bin
INSTALL_DATA = /usr/local/pbx

# give locations for the libraries (comment out H323_LIB and PWLIB_LIB, if they are installed on the system)
LINUX_INCLUDE = -I/usr/src/linux/include
H323_INCLUDE = -I/usr/local/include/openh323
#H323_LIB = -L/usr/local/lib
#PWLIB_INCLUDE = -I/usr/local/include/ptlib/unix
#PWLIB_LIB = -L/usr/local/lib

# give location of the mISDN libraries
#MISDNUSER_INCLUDE = -I../mISDNuser/include
#MISDNUSER_LIB = -L../mISDNuser/lib -L../mISDNuser/i4lnet
MISDNUSER_INCLUDE = -I/usr/include/mISDNuser/
MISDNUSER_LIB = -L../mISDNuser/lib -L../mISDNuser/i4lnet
LIBS += -lisdnnet -lmISDN -lpthread

# give location of the curses or ncurses library
CURSES = -lncurses

CC = g++
LD = $(CC)
WIZZARD = ./wizzard
PBX = ./pbx
PBXADMIN = ./pbxadmin
PBXWATCH = ./pbxwatch
GEN = ./gentones
GENW = ./genwave
GENRC = ./genrc
GENEXT = ./genextension
CFLAGS = -Wall -g -DINSTALL_DATA=\"$(INSTALL_DATA)\" -O0	#"
CFLAGS += $(LINUX_INCLUDE) $(MISDNUSER_INCLUDE)
ifdef WITH-PBX
CFLAGS += -DPBX
endif
ifdef WITH-CRYPTO
CFLAGS += -DCRYPTO
endif
CFLAGS_OPAL = $(CFLAGS)
CFLAGS_H323 = $(CFLAGS)
LIBDIR += $(MISDNUSER_LIB)
ifdef WITH-OPAL
OPAL = opal.o opal_mgr.o opal_pbxep.o opal_pbxcon.o opal_pbxms.o
CFLAGS += -DOPAL
CFLAGS_OPAL += $(OPAL_INCLUDE) -DOPAL
LIBDIR += $(OPAL_LIB)
endif
ifdef WITH-H323
H323 = h323.o h323_ep.o h323_con.o h323_chan.o
LIBS += -lh323_linux_x86_r -lpt_linux_x86_r -ldl
CFLAGS += -DH323
CFLAGS_H323 += $(H323_INCLUDE) $(PWLIB_INCLUDE) -DH323INCLUDE -DH323 -D_REENTRANT -DPBYTE_ORDER=PLITTLE_ENDIAN -DP_PTHREADS -DP_HAS_SEMAPHORES -DPHAS_TEMPLATES -DP_LINUX -DPTRACING
LIBDIR += $(H323_LIB) $(PWLIB_LIB)
endif
ifdef WITH-CRYPTO
LIBDIR += -L/usr/local/ssl/lib
CFLAGS += -I/usr/local/ssl/include
#LIBS += -lcrypto
#LIBS += /usr/local/ssl/lib/libcrypto.a
LIBS += /usr/lib/libcrypto.a
endif

OBJECTS=$(H323) $(OPAL) rule.o vector.o main.o options.o interface.o \
	h323conf.o extension.o cause.o alawulaw.o tones.o message.o \
	route.o port.o mISDN.o dss1.o vbox.o endpoint.o endpointapp.o \
	apppbx.o crypt.o action.o action_vbox.o action_efi.o mail.o \
	call.o admin_server.o


%.o: %.c Makefile
	$(CC) -c $(CFLAGS_H323) $< -o $@
%.o: %.cpp Makefile
	$(CC) -c $(CFLAGS_H323) $< -o $@


#all:
#	@echo Note that this version is a beta release. It is only for testing purpose.
#	@echo Please report any bug. To compile use \"make beta\".
#	@exit

all: $(PBXADMIN) $(PBX) $(GEN) $(GENW) $(GENRC) $(GENEXT)
#	@sh -c 'grep -n strcpy *.c* ; if test $$''? = 0 ; then echo "dont use strcpy, use makro instead." ; exit -1 ; fi'
#	@sh -c 'grep -n strncpy *.c* ; if test $$''? = 0 ; then echo "dont use strncpy, use makro instead." ; exit -1 ; fi'
#	@sh -c 'grep -n strcat *.c* ; if test $$''? = 0 ; then echo "dont use strcat, use makro instead." ; exit -1 ; fi'
#	@sh -c 'grep -n strncat *.c* ; if test $$''? = 0 ; then echo "dont use strncat, use makro instead." ; exit -1 ; fi'
#	@sh -c 'grep -n sprintf *.c* ; if test $$''? = 0 ; then echo "dont use sprintf, use makro instead." ; exit -1 ; fi'
#	@sh -c 'grep -n snprintf *.c* ; if test $$''? = 0 ; then echo "dont use snprintf, use makro instead." ; exit -1 ; fi'
	@echo "All PBX binaries done"
	@sync
	@exit


#$(WIZZARD): wizzard.c Makefile
#	$(CC) $(LIBDIR) $(CFLAGS) -lm wizzard.c \
#	-o $(WIZZARD) 

$(PBX):	$(OBJECTS)
	$(LD) $(LIBDIR) $(OBJECTS) $(LIBS) -o $(PBX)
	

$(PBXADMIN): admin_client.c Makefile
	$(CC) $(LIBDIR) $(CFLAGS) $(CURSES) -lm admin_client.c \
	-o $(PBXADMIN) 

$(PBXWATCH): watch.c Makefile
	$(CC) $(LIBDIR) $(CFLAGS) -lm watch.c \
	-o $(PBXWATCH) 

$(GEN):	gentones.c Makefile 
	$(CC) $(LIBDIR) $(CFLAGS) -lm gentones.c \
	-o $(GEN) 

$(GENW):genwave.c Makefile 
	$(CC) $(LIBDIR) $(CFLAGS) -lm genwave.c \
	-o $(GENW) 

$(GENRC): genrc.c Makefile
	$(CC) $(LIBDIR) $(CFLAGS) -lm genrc.c \
	-o $(GENRC) 

$(GENEXT): options.o extension.o genext.o
	$(CC) $(CFLAGS) options.o extension.o genext.o -o $(GENEXT) 

#install:
#	@echo Remember, this is a beta release. To overwrite your current installed
#	@echo version, use \"make beta_install\".
#	@exit

install:
	-killall -9 -w -q pbx # the following error must be ignored
	cp $(PBX) $(INSTALL_BIN)
	cp $(PBXADMIN) $(INSTALL_BIN)
#	cp $(PBXWATCH) $(INSTALL_BIN)
	cp $(GEN) $(INSTALL_BIN)
	cp $(GENW) $(INSTALL_BIN)
	cp $(GENRC) $(INSTALL_BIN)
	cp $(GENEXT) $(INSTALL_BIN)
	mkdir -p $(INSTALL_DATA)
	mkdir -p $(INSTALL_DATA)/extensions
	@if test -a $(INSTALL_DATA)/options.conf ; then \
		echo "NOTE: options.conf already exists, not changed." ; else \
		cp -v default/options.conf $(INSTALL_DATA) ; fi
	@if test -a $(INSTALL_DATA)/interface.conf ; then \
		echo "NOTE: interface.conf already exists, not changed." ; else \
		cp -v default/interface.conf $(INSTALL_DATA) ; fi
	@if test -a $(INSTALL_DATA)/routing.conf ; then \
		echo "NOTE: routing.conf already exists, not changed." ; else \
		cp -v default/routing.conf $(INSTALL_DATA) ; fi
	@if test -a $(INSTALL_DATA)/numbering_int.conf ; then \
		echo "NOTE: numbering_int.conf is obsolete, please use routing." ; fi
	@if test -a $(INSTALL_DATA)/numbering_ext.conf ; then \
		echo "NOTE: numbering_ext.conf is obsolete, please use routing." ; fi
	@if test -a $(INSTALL_DATA)/h323_gateway.conf ; then \
		echo "NOTE: h323_gateway.conf already exists, not changed." ; else \
		cp -v default/h323_gateway.conf $(INSTALL_DATA) ; fi
	@if test -a $(INSTALL_DATA)/directory.list ; then \
		echo "NOTE: directory.list already exists, not changed." ; else \
		cp -v default/directory.list $(INSTALL_DATA) ; fi
	cp -a tones_* $(INSTALL_DATA)
	cp -a vbox_english/ $(INSTALL_DATA)
	cp -a vbox_german/ $(INSTALL_DATA)
	cp -a tones_efi/ $(INSTALL_DATA)
	sync

clean:
	#touch *
	rm -f $(PBX) $(PBXADMIN) $(PBXWATCH) $(GEN) $(GENW) $(GENRC) $(GENEXT)
	rm -f *.o
	rm -f .*.c.sw* .*.cpp.sw* .*.h.sw*
	rm -f bla nohup.out
	rm -f debug*.log

tar:
	make clean
	cd .. &&  tar -cvzf pbx4linux_`date +%Y%m%d`.tar.gz pbx4linux

start: $(PBX)
	sync
	-killall -9 -w -q pbx # the following error must be ignored
	$(PBX) start

s: $(PBX)
	sync
	-killall -9 -w -q pbx # the following error must be ignored
	$(PBX) start

fork: $(PBX)
	sync
	-killall -9 -w -q pbx # the following error must be ignored
	$(PBX) fork

#depend: .depend.mk

depend .depend.mk:
	$(CC) -MM *.c *.cpp > .depend.mk

include .depend.mk

.PHONY: all depend install clean tar start s fork
