#####################
# PSIP - A lightweight GTK GUI for pjsip
# (C) James Budiono 2011, 2015
# License: GNU GPL Version 3 or later, please see attached gpl-3.0.txt 
# or http://www.gnu.org/copyleft/gpl.html
# 
# The build recipe for psip.
#####################

GTK_CFLAGS=$(shell pkg-config --cflags gtk+-2.0 gmodule-2.0 gthread-2.0)
GTK_LDFLAGS=$(shell pkg-config --libs gtk+-2.0 gmodule-2.0 gthread-2.0)
PJPROJECT_CFLAGS=$(shell pkg-config --cflags libpjproject)
PJPROJECT_LDFLAGS=$(shell pkg-config --libs libpjproject)
OSXCART_CFLAGS=$(shell pkg-config --cflags osxcart)
OSXCART_LDFLAGS=$(shell pkg-config --libs osxcart)

CFLAGS  := -g -O0 -Wall -Werror \
           -Wno-error=deprecated-declarations -Werror=implicit-function-declaration \
           -Werror=implicit-int $(GTK_CFLAGS) $(PJPROJECT_CFLAGS) $(OSXCART_CFLAGS) $(CFLAGS)
LDFLAGS := -Wl,--export-dynamic $(LDFLAGS)
LDLIBS  := $(GTK_LDFLAGS) $(PJPROJECT_LDFLAGS) $(OSXCART_LDFLAGS) -lz

all: psip psip-no-recorder

psip.o: psip.c psip.h psip_icon.h Makefile

cJSON.o: cJSON.c cJSON.h Makefile

config.o: config.c psip.h Makefile

backend.o: backend.c psip.h Makefile

# convert app icon to include
psip_icon.h: psip48.png
	gdk-pixbuf-csource --raw --name=psip_icon psip48.png > psip_icon.h

psip: psip.o config.o cJSON.o backend.o 

clean:
	-rm -f *.o psip psip-no-recorder psip.glade.h psip_icon.h

rebuild_psip.o:
	-rm -f psip.o

release: CFLAGS  := $(CFLAGS) -DRELEASE -Os
release: LDFLAGS := $(LDFLAGS) -Wl,--sort-common,-s
release: rebuild_psip.o psip.glade.h all

# convert glade files into release include
psip.glade.h: psip.glade psip_im.glade
	#
	# gzip the main ui file before including - it's huge (140k+).
	#
	echo "unsigned char MAIN_GUI_GLADE[] = { " > psip.glade.h
	#./xml2c.sh psip.glade >> psip.glade.h
	#gzip -c psip.glade | xxd -i >> psip.glade.h  ## xxd doesn't exist in wary
	xmllint --noblanks psip.glade | gzip -9 | hexdump -v -e '" " 16/1 "  0x%02x, " "\n"' | sed -e '$ s/0x  ,//g' >> psip.glade.h
	echo "};" >> psip.glade.h
	echo "#define MAIN_GUI_GLADE_ORIGINAL_SIZE ( $(shell xmllint --noblanks psip.glade | wc -c) + 16 )" >> psip.glade.h
	#
	# use standard xml2c conversion for im_window - it's small (less than 10k).
	#
	echo "gchar *IM_GUI_GLADE = " >> psip.glade.h
	#./xml2c.sh psip_im.glade >> psip.glade.h
	xmllint --noblanks psip_im.glade | ./xml2c.sh >> psip.glade.h
	echo ";" >> psip.glade.h


# the "no-recorder" version
psip-no-recorder: psip-no-recorder.o config.o cJSON.o backend.o 

psip-no-recorder.o: psip.c psip.h psip_icon.h Makefile
	$(CC) $(CFLAGS) -DDISABLE_RECORDER -c -o psip-no-recorder.o psip.c

# release package
package: clean
	-rm -rf /tmp/psip-fossil
	-mkdir -p /tmp/psip-fossil
	-cp * /tmp/psip-fossil
	-fossil info > /tmp/psip-fossil/fossil-version
	-echo Version $(shell date +%F) > /tmp/psip-fossil/VERSION
	-rm -f /tmp/psip-fossil/startcom*
	-rm -f /tmp/psip-fossil/screenshot.png
	-tar -C /tmp -cjvf ../psip-$(shell date +%F).tar.bz2 psip-fossil
	-rm -rf /tmp/psip-fossil

.PHONY: all clean release rebuild_psip.o tarball
