BINARY = lilyterm
VER = 0.9.9

prefix ?= /usr
bindir = $(prefix)/bin
etcdir = /etc/xdg
datadir = $(prefix)/share
date = `date +%Y-%m-%d`
CC = gcc
CFLAGS = $$CFLAGS -Wall -Os
#CFLAGS = $$CFLAGS -Wall -Wextra -Os -std=c99 \
#	 -DG_DISABLE_DEPRECATED \
#	 -DG_DISABLE_SINGLE_INCLUDES -DGDK_DISABLE_DEPRECATED \
#	 -DGDK_DISABLE_SINGLE_INCLUDES -DGTK_DISABLE_DEPRECATED \
#	 -DGTK_DISABLE_SINGLE_INCLUDES -DGSEAL_ENABLE
LDFLAGS = -L$(prefix)/local/lib -lvte -lgtk-x11-2.0
OBJ_PKG_CMD = pkg-config --cflags gtk+-2.0 vte
BINARY_PKG_CMD = pkg-config --cflags --libs gtk+-2.0 vte
PO_LIST = zh_TW de es it tr zh_CN
OBJ = menu.o profile.o dialog.o pagename.o notebook.o font.o \
      property.o window.o misc.o console.o main.o

INCLUDES = -DPACKAGE=\"$(BINARY)\" \
	   -DPACKAGE_NAME=\"LilyTerm\" \
	   -DPACKAGE_BUGREPORT=\"tetrlet@gmail.com\" \
	   -DLOCALEDIR=\"$(datadir)/locale\" \
	   -DICONDIR=\"$(datadir)/pixmaps\" \
	   -DENABLE_TAB_REORDER \
	   -DENABLE_GDKCOLOR_TO_STRING \
	   -DENABLE_RGBA \
	   -DENABLE_SET_TOOLTIP_TEXT \
	   -DENABLE_DRAG_AND_DROP \
	   -DUSE_TIMEOUT_SECONDS \
	   -DUSE_GTK_MENU_ITEM_SET_LABEL \
	   -DENABLE_VTE_SELECT_ALL \
	   -DUSE_NEW_VTE_CURSOR_BLINKS_MODE \
	   -DUSE_NEW_VTE_MATCH_ADD_GREGEX \
	   -DENABLE_VTE_ERASE_TTY \
	   -DG_DISABLE_DEPRECATED \
	   -DG_DISABLE_SINGLE_INCLUDES \
	   -DGDK_DISABLE_DEPRECATED \
	   -DGDK_DISABLE_SINGLE_INCLUDES \
	   -DGTK_DISABLE_DEPRECATED \
	   -DGTK_DISABLE_SINGLE_INCLUDES

.PHONY: all
all: default
	strip --remove-section=.comment --remove-section=.note $(BINARY)

.PHONY: default
default: INCLUDES := $(INCLUDES) -DDEBUG -DVERSION=\"$(VER)\ \($(date)\)\"
default: compile

.PHONY: debug
debug: CFLAGS := $(CFLAGS) -g
debug: INCLUDES := $(INCLUDES) -DDEBUG -DVERSION=\"$(VER)\ Debug\ Version\ \($(date)\)\"
debug: BINARY := $(BINARY)_dbg
debug: compile

.PHONY: dev
dev: develop
.PHONY: develop
develop: CFLAGS := $(CFLAGS) -g
develop: INCLUDES := $(INCLUDES) -DDEBUG -DDEVELOP -DVERSION=\"$(VER)\ Develop\ Version\ \($(date)\)\"
develop: BINARY := $(BINARY)_dev
develop: compile

.PHONY: detail
detail: CFLAGS := $(CFLAGS) -g
detail: INCLUDES := $(INCLUDES) -DDEBUG -DDEVELOP -DDETAIL -DVERSION=\"$(VER)\ Develop\ Version\ \($(date)\)\"
detail: BINARY := $(BINARY)_dev
detail: compile

.PHONY: full
full: CFLAGS := $(CFLAGS) -g
full: INCLUDES := $(INCLUDES) -DDEBUG -DDEVELOP -DDETAIL -DFULL -DVERSION=\"$(VER)\ Develop\ Version\ \($(date)\)\"
full: BINARY := $(BINARY)_dev
full: compile

font.o: data.h lilyterm.h font.h font.c
	$(CC) $(CFLAGS) $(INCLUDES) -c font.c `$(OBJ_PKG_CMD)`

menu.o: data.h lilyterm.h menu.h menu.c
	$(CC) $(CFLAGS) $(INCLUDES) -c menu.c `$(OBJ_PKG_CMD)`

dialog.o: data.h lilyterm.h dialog.h dialog.c
	$(CC) $(CFLAGS) $(INCLUDES) -c dialog.c `$(OBJ_PKG_CMD)`

profile.o: data.h lilyterm.h profile.h profile.c
	$(CC) $(CFLAGS) $(INCLUDES) -c profile.c `$(OBJ_PKG_CMD)`

pagename.o: data.h lilyterm.h pagename.h pagename.c
	$(CC) $(CFLAGS) $(INCLUDES) -c pagename.c `$(OBJ_PKG_CMD)`

property.o: data.h lilyterm.h property.h property.c
	$(CC) $(CFLAGS) $(INCLUDES) -c property.c `$(OBJ_PKG_CMD)`

notebook.o: data.h lilyterm.h notebook.h notebook.c
	$(CC) $(CFLAGS) $(INCLUDES) -c notebook.c `$(OBJ_PKG_CMD)`

window.o: data.h lilyterm.h window.h window.c
	$(CC) $(CFLAGS) $(INCLUDES) -c window.c `$(OBJ_PKG_CMD)`

misc.o: data.h lilyterm.h misc.h misc.c
	$(CC) $(CFLAGS) $(INCLUDES) -c misc.c `$(OBJ_PKG_CMD)`

console.o: data.h lilyterm.h console.h console.c
	$(CC) $(CFLAGS) $(INCLUDES) -c console.c `$(OBJ_PKG_CMD)`

main.o: data.h lilyterm.h main.h main.c
	$(CC) $(CFLAGS) $(INCLUDES) -c main.c `$(OBJ_PKG_CMD)`

.PHONY: clean
clean:
	-@ for FileName in $(BINARY) $(BINARY)_dev $(BINARY)_dbg *.o ../po/*.mo; \
	do \
		if [ -f "$$FileName" ]; then \
			echo "deleting $$FileName..."; \
			rm "$$FileName"; \
		fi; \
	done

.PHONY: data
data: debug
	xgettext --from-code=UTF-8 -k_ -o ../po/lilyterm.pot *.c
	@ for FileName in $(PO_LIST); \
	do \
		echo "msgmerge $$FileName.po..."; \
		msgmerge --previous ../po/$$FileName.po ../po/lilyterm.pot -o ../po/$$FileName.po; \
		msgfmt --check --statistics ../po/$$FileName.po -o ../po/$$FileName.mo; \
	done
	./$(BINARY)_dbg -p > ../data/lilyterm.conf
	@ cd ../po; /usr/bin/intltool-update -m; cd -

.PHONY: compile
compile: $(OBJ)
	$(CC) $(LDFLAGS) $(CFLAGS) -o $(BINARY) $(OBJ) `$(BINARY_PKG_CMD)`
