include main.mk

.PHONY: default
default: all

.PHONY: global-include
global-include:
	mkdir -p include/

.PHONY: global-include-clean
global-include-clean:
	rm -rf include/

.PHONY: global-lib
global-lib:
	mkdir -p lib/

.PHONY: global-lib-clean
global-lib-clean:
	rm -rf lib/

.PHONY: soap-include
soap-include: global-include
	cp soap/*.h include/
	cp soap/ns1.nsmap include/

.PHONY: soap-include-clean
soap-include-clean:
	rm -rf include/$(shell ls soap/*.h)
	rm -rf include/ns1.nsmap

#####                       #####
##### subcomponents targets #####
#####                       #####

#### libsngtc ####
.PHONY: libsngtc
libsngtc: global-include global-lib
	$(MAKE) -C server/libsngtc
	mkdir -p include/sng_tc
	cp server/libsngtc/*.h include/sng_tc/
	cp server/libsngtc/libsng-tc.so lib/

.PHONY: libsngtc-install
libsngtc-install: libsngtc
	$(MAKE) install -C server/libsngtc

.PHONY: libsngtc-clean
libsngtc-clean:
	$(MAKE) clean -C server/libsngtc
	rm -rf server/include/sng_tc/
	rm -f lib/libsng-tc.so

.PHONY: libsngtc-uninstall
libsngtc-uninstall:
	$(MAKE) uninstall -C server/libsngtc

#### libsngtc_node ####

.PHONY: libsngtc-node
libsngtc_node: global-include global-lib libsngtc
	$(MAKE) -C client/libsngtc_node
	cp client/libsngtc_node/*.h include/sng_tc/
	cp client/libsngtc_node/libsngtc_node.so lib/

.PHONY: libsngtc-node-install
libsngtc_node-install: libsngtc_node
	$(MAKE) install -C client/libsngtc_node

.PHONY: libsngtc-node-clean
libsngtc_node-clean:
	$(MAKE) clean -C client/libsngtc_node
	rm -rf include/sng_tc/$(shell ls server/libsngtc_node/*.h)
	rm -f lib/libsngtc_node.so

.PHONY: libsngtc-node-uninstall
libsngtc_node-uninstall:
	$(MAKE) uninstall -C client/libsngtc_node

#### sngtc_cfg ####

.PHONY: sngtc_cfg
sngtc_cfg: libsngtc
	$(MAKE) -C sngtc_cfg 

.PHONY: sngtc_cfg-install
sngtc_cfg-install: sngtc_cfg
	$(MAKE) install -C sngtc_cfg 

.PHONY: sngtc_cfg-clean
sngtc_cfg-clean:
	$(MAKE) clean -C sngtc_cfg 

.PHONY: sngtc_cfg-uninstall
sngtc_cfg-uninstall:
	$(MAKE) uninstall -C sngtc_cfg 

#### sngtc_server ####

.PHONY: sngtc_server
sngtc_server: libsngtc soap-include
	$(MAKE) -C server/sngtc_server 

.PHONY: sngtc_server-install
sngtc_server-install: sngtc_server
	$(MAKE) install -C server/sngtc_server 

.PHONY: sngtc_server-clean
sngtc_server-clean:
	$(MAKE) clean -C server/sngtc_server 

.PHONY: sngtc_server-uninstall
sngtc_server-uninstall:
	$(MAKE) uninstall -C server/sngtc_server 

#### sngtc_client ####
.PHONY: sngtc_client
sngtc_client: libsngtc_node
	$(MAKE) -C client/sngtc_client

.PHONY: sngtc_client-install
sngtc_client-install: sngtc_client
	$(MAKE) install -C client/sngtc_client

.PHONY: sngtc_client-clean
sngtc_client-clean:
	$(MAKE) clean -C client/sngtc_client

.PHONY: sngtc_client-uninstall
sngtc_client-uninstall:
	$(MAKE) uninstall -C client/sngtc_client

#### sngtc_tool ####
.PHONY: sngtc_tool
sngtc_tool: libsngtc
	$(MAKE) -C server/sngtc_tool

.PHONY: sngtc_tool-install
sngtc_tool-install: sngtc_tool
	$(MAKE) install -C server/sngtc_tool

.PHONY: sngtc_tool-clean
sngtc_tool-clean:
	$(MAKE) clean -C server/sngtc_tool

.PHONY: sngtc_tool-uninstall
sngtc_tool-uninstall:
	$(MAKE) uninstall -C server/sngtc_tool

#### Asterisk codec module ####

.PHONY: asterisk
asterisk: libsngtc_node
	$(MAKE) -C client/codec/asterisk 

.PHONY: asterisk-install
asterisk-install:
	@if [ -f client/codec/asterisk/codec_sangoma.so ] ; \
	then \
		$(MAKE) install -C client/codec/asterisk ; \
	fi

.PHONY: asterisk-clean
asterisk-clean:
	$(MAKE) clean -C client/codec/asterisk 

.PHONY: asterisk-uninstall
asterisk-uninstall:
	$(MAKE) uninstall -C client/codec/asterisk 

#### main target ####

# we do not build asterisk unless explicitly requested via 'make asterisk'
.PHONY: all
all: libsngtc libsngtc_node sngtc_client sngtc_cfg sngtc_server sngtc_tool
	@echo "Base libraries and binaries have been built."

.PHONY: clean
clean: libsngtc-clean libsngtc_node-clean sngtc_client-clean sngtc_cfg-clean \
	sngtc_server-clean sngtc_tool-clean asterisk-clean global-include-clean global-lib-clean
	@echo "Done clean"

.PHONY: freeswitch
freeswitch:
	@echo "FreeSWITCH codec (mod_sangoma_codec) is included in FreeSWITCH git repository: git://git.freeswitch.org/freeswitch.git"

.PHONY: install
install: libsngtc-install libsngtc_node-install sngtc_client-install sngtc_cfg-install \
	sngtc_server-install sngtc_tool-install asterisk-install
	@echo 
	@echo "============================================="
	@echo "Sangoma transcoding software is now installed"
	@echo "============================================="
	@echo 

.PHONY: uninstall
uninstall: libsngtc-uninstall libsngtc_node-uninstall sngtc_client-uninstall sngtc_cfg-uninstall \
	sngtc_server-uninstall sngtc_tool-uninstall asterisk-uninstall
	@if [ -f client/codec/asterisk/codec_sangoma.so ] ; \
	then \
		$(MAKE) uninstall -C client/codec/asterisk ; \
	fi
	@echo 
	@echo "==============================================="
	@echo "Sangoma transcoding software is now uninstalled"
	@echo "==============================================="
	@echo 

	
.PHONY: help
help:
	@echo 
	@echo "====================================================================="
	@echo "default: all"
	@echo "all: Build all but Asterisk codec module"
	@echo "asterisk: Build Asterisk codec module"
	@echo "freeswitch: Print FreeSWITCH installation instructions"
	@echo "sngtc_client: Build standalone transcoding client tool"
	@echo "clean: Clean all the build (including Asterisk codec module)"
	@echo "install: Install all, including Asterisk codec module if it was built"
	@echo "uninstall: Uninstall everything that was installed"
	@echo "======================================================================"
	@echo 
