srcdir=.

PREFIX?=/usr/local
TARGET_OS=$(shell uname -s)
CFLAGS=-g -O3 -std=c99
LDFLAGS=-L$(LIB) -L/usr/local/lib -L/usr/lib
CPPFLAGS=-I/usr/local/include
DEFS=-DHAVE_CONFIG_H
COMPILE_FLAGS=${CFLAGS} ${CPPFLAGS} ${DEFS} -Wall -Wextra -Wno-missing-field-initializers -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -Wno-unused-function
EXTRA_LIBS=-levent_core-2.0 -levent_extra-2.0 -lz -lexecinfo -lreadline -lssl -lcrypto
LOCAL_LDFLAGS=-Wl,-rpath,$(PREFIX)/lib -Wl,--no-as-needed -rdynamic -ggdb -ltgl -levent_core-2.0 -levent_extra-2.0 $(EXTRA_LIBS) -lpthread -lutil
LINK_FLAGS=${LDFLAGS} ${LOCAL_LDFLAGS}

DEP=dep
AUTO=auto
EXE=bin
OBJ=objs
LIB=libs
DIR_LIST=${DEP} ${AUTO} ${EXE} ${OBJ} ${LIB} ${DEP}/auto ${OBJ}/auto ${OBJ}/crypto ${DEP}/crypto

EXE_LIST=${EXE}/telegram-cli ${EXE}/tg2irc

TG_OBJECTS=${OBJ}/main.o ${OBJ}/loop.o ${OBJ}/interface.o
TG2IRC_OBJECTS=${OBJ}/tg2irc.o

INCLUDE=-I. -I${srcdir} -I${srcdir}/tgl
CC?=gcc

INSTALL_BIN=bin
INSTALL_LIB=lib
INSTALL=install

.SUFFIXES:

.SUFFIXES: .c .h .o

all: ${EXE_LIST} ${LIB}/libtgl.so ${LIB}/libtgl.a ${DIR_LIST}
create_dirs_and_headers: ${DIR_LIST} ${AUTO}/auto-skip.h ${AUTO}/auto-fetch.h ${AUTO}/auto-store.h ${AUTO}/auto-autocomplete.h ${AUTO}/auto-types.h ${AUTO}/constants.h ${AUTO}/constants.h ${AUTO}/auto-skip.h ${AUTO}/auto-fetch.h ${AUTO}/auto-store.h ${AUTO}/auto-autocomplete.h ${AUTO}/auto-types.h ${AUTO}/auto-fetch-ds.h ${AUTO}/auto-free-ds.h ${AUTO}/auto-store-ds.h ${AUTO}/auto-print-ds.h
create_dirs: ${DIR_LIST}
dump-tl: ${EXE}/dump-tl-file

include ${srcdir}/Makefile.tl-parser
include ${srcdir}/Makefile.tgl

${DIR_LIST}:
	@test -d $@ || mkdir -p $@

OBJ_LIST=${TG_OBJECTS} ${TG2IRC_OBJECTS} ${TGL_OBJECTS} ${TGL_COMMON_OBJECTS} ${GENERATE_OBJECTS} ${TL_PARSER_OBJECTS} ${TGL_OBJECTS_AUTO}
DEPENDENCE=$(subst ${OBJ}/,${DEP}/,$(patsubst %.o,%.d,${OBJ_LIST}))
DEPENDENCE_LIST=${DEPENDENCE}

-include ${DEPENDENCE_LIST}

${TG_OBJECTS}: ${OBJ}/%.o: ${srcdir}/%.c | create_dirs_and_headers
	${CC} ${INCLUDE} ${COMPILE_FLAGS} -c -MP -MD -MF ${DEP}/$*.d -MQ ${OBJ}/$*.o -o $@ $<

${TG2IRC_OBJECTS}: ${OBJ}/%.o: ${srcdir}/%.c | create_dirs_and_headers
	${CC} ${INCLUDE} ${COMPILE_FLAGS} -c -MP -MD -MF ${DEP}/$*.d -MQ ${OBJ}/$*.o -o $@ $<

${EXE}/telegram-cli: ${TG_OBJECTS} | ${LIB}/libtgl.so
	${CC} $^ ${LINK_FLAGS} -o $@

${EXE}/tg2irc: ${TG2IRC_OBJECTS} | ${LIB}/libtgl.so
	${CC} $^ ${LINK_FLAGS} -o $@

clean:
	rm -rf ${DIR_LIST}

distclean:
	rm -rf ${DIR_LIST} config.h config.log config.status

install: all
	@mkdir -p $(PREFIX)/$(INSTALL_BIN)
	@mkdir -p $(PREFIX)/$(INSTALL_LIB)
	$(INSTALL) -s bin/telegram-cli $(PREFIX)/$(INSTALL_BIN)/telegram-cli
	$(INSTALL) -s bin/tg2irc $(PREFIX)/$(INSTALL_BIN)/tg2irc
	$(INSTALL) -s ${LIB}/libtgl.so $(PREFIX)/$(INSTALL_LIB)/libtgl.so
	$(INSTALL) -s ${LIB}/libtgl.a $(PREFIX)/$(INSTALL_LIB)/libtgl.a
	ranlib $(PREFIX)/$(INSTALL_LIB)/libtgl.a
