# This project depends on the following libralies,
# openssl-devel, ncurses-devel, gdbm-devel,
# sqlite-devel.
# You may need to install then.

#Option for development
CFLAGS = -g -Wall -DDEBUG ${DEFS} ${CDEF} -DNT_CLOUD
#Option for release
#CFLAGS = -Wall ${DEFS} ${CDEF} -DNT_CLOUD

CDEF = -D_REENTRANT -D_XOPEN_SOURCE_EXTENDED -D_XOPEN_SOURCE=700 -D_ISOC99_SOURCE

OBJS = ${OBJ_DIR}/main.o ${OBJ_DIR}/utils/nt_std_t.o \
    ${OBJ_DIR}/env.o \
    ${OBJ_DIR}/print_help.o \
    ${OBJ_DIR}/cloud/nt_cloud.o \
    ${OBJ_DIR}/utils/base64.o \
    ${OBJ_DIR}/utils/crypt.o \
    ${OBJ_DIR}/utils/file.o \
    ${OBJ_DIR}/utils/db.o \
    ${OBJ_DIR}/utils/text.o \
    ${OBJ_DIR}/utils/zip.o \
    ${OBJ_DIR}/utils/nt_conv_char.o \
    ${OBJ_DIR}/utils/nt_mutex.o \
    ${OBJ_DIR}/utils/nt_pthread.o \
    ${OBJ_DIR}/utils/nt_timer.o \
    ${OBJ_DIR}/net/nt_socket.o \
    ${OBJ_DIR}/net/nt_ssl_socket.o \
    ${OBJ_DIR}/net/nt_http.o \
    ${OBJ_DIR}/net/nt_http_response_header.o \
    ${OBJ_DIR}/net/nt_http_utils.o \
    ${OBJ_DIR}/net/nt_cookie.o \
    ${OBJ_DIR}/html/html_string.o \
    ${OBJ_DIR}/_2ch/_2ch.o \
    ${OBJ_DIR}/_2ch/model_2ch.o \
    ${OBJ_DIR}/_2ch/model_func.o \
    ${OBJ_DIR}/_2ch/model_property.o \
    ${OBJ_DIR}/_2ch/search_2ch.o \
    ${OBJ_DIR}/_2ch/parse_2ch.o \
    ${OBJ_DIR}/_2ch/parse_string.o \
    ${OBJ_DIR}/_2ch/maru_2ch.o \
    ${OBJ_DIR}/usr/favorite_t.o \
    ${OBJ_DIR}/usr/usr_db_t.o \
    ${OBJ_DIR}/ui/disp_board_menu.o \
    ${OBJ_DIR}/ui/disp_threadlist.o \
    ${OBJ_DIR}/ui/disp_reslist.o \
    ${OBJ_DIR}/ui/disp_search_thread.o \
    ${OBJ_DIR}/ui/disp_favorite.o \
    ${OBJ_DIR}/ui/disp_win.o \
    ${OBJ_DIR}/ui/disp_editor.o \
    ${OBJ_DIR}/ui/disp_html_result.o \
    ${OBJ_DIR}/ui/disp_string.o

INC_FILES = ${INC_DIR}/config.h \
	${INC_DIR}/env.h \
	${INC_DIR}/error.h \
	${INC_DIR}/nt_string.h \
	${INC_DIR}/cloud/nt_cloud.h \
	${INC_DIR}/_2ch/_2ch.h \
	${INC_DIR}/_2ch/model_2ch.h \
	${INC_DIR}/_2ch/maru_2ch.h \
	${INC_DIR}/_2ch/parse_2ch.h \
	${INC_DIR}/_2ch/search_2ch.h \
	${INC_DIR}/usr/favorite_t.h \
	${INC_DIR}/ui/disp.h \
	${INC_DIR}/ui/disp_win.h \
	${INC_DIR}/ui/disp_string.h \
	${INC_DIR}/net/nt_socket.h \
	${INC_DIR}/net/nt_http.h \
	${INC_DIR}/net/nt_cookie.h \
	${INC_DIR}/html/html_string.h \
	${INC_DIR}/utils/base64.h \
	${INC_DIR}/utils/crypt.h \
	${INC_DIR}/utils/file.h \
	${INC_DIR}/utils/zip.h \
	${INC_DIR}/utils/db.h \
	${INC_DIR}/utils/text.h \
	${INC_DIR}/usr/usr_db_t.h \
	${INC_DIR}/utils/nt_conv_char.h \
	${INC_DIR}/utils/nt_mutex.h \
	${INC_DIR}/utils/nt_pthread.h \
	${INC_DIR}/utils/nt_timer.h \
	${INC_DIR}/utils/nt_std_t.h

SHELL = /bin/sh
TARGET = ntch

.SUFFIXES: 
.SUFFIXES: .c .o

prefix = /usr/local
datadir = ${datarootdir}
datarootdir = ${prefix}/share
srcdir = .


CC = gcc
DEFS = -DHAVE_CONFIG_H
LIBS = -lrt -lz -lssl -lsqlite3 -lpthread -lncursesw -lm -lgdbm_compat -ldl -lcrypto 
INCLUDES = -I/usr/include/gdbm -I${INC_DIR}
OBJ_DIR = ./obj
GEN_DIR = ./gen
SRC_DIR = ${srcdir}/src
INC_DIR = ${SRC_DIR}/inc
INSTALL_DIR = ${prefix}/bin
INSTALL_PROG = /usr/bin/install -c
all : ${TARGET}

run : 
	./${TARGET} -r -o ~/.ntch

# If you do not specify the -g (debug) option, 
# Valgrind will not work correctly.
memtest :
	valgrind --leak-check=yes --track-origins=yes -v ./${TARGET}

${TARGET} : ${OBJS}
	${CC} ${CFLAGS} -o $@ ${OBJS} ${LIBS}

clean:
	rm -f ${INC_DIR}/config.h
	@ ${SHELL} prepare_proj.sh -d
	rm -rf ${TARGET} 

install: ${TARGET}
	${INSTALL_PROG} -m 755 -t ${INSTALL_DIR} ${TARGET}

$(OBJ_DIR)/print_help.o : help.txt help_gen
	./help_gen help.txt > ${GEN_DIR}/print_help.c
	${CC} ${CFLAGS} -c -o $@ ${GEN_DIR}/print_help.c 

${INC_DIR}/config.h : config.h
	cp -f $< $@

help_gen : help_gen.c
	${CC} -o $@ $<

$(OBJ_DIR)/main.o : ${SRC_DIR}/main.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/env.o : ${SRC_DIR}/env.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/cloud/nt_cloud.o : ${SRC_DIR}/cloud/nt_cloud.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/utils/nt_std_t.o : ${SRC_DIR}/utils/nt_std_t.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/usr/usr_db_t.o : ${SRC_DIR}/usr/usr_db_t.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/utils/nt_conv_char.o : ${SRC_DIR}/utils/nt_conv_char.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/net/nt_socket.o : ${SRC_DIR}/net/nt_socket.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/net/nt_ssl_socket.o : ${SRC_DIR}/net/nt_ssl_socket.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/net/nt_http.o : ${SRC_DIR}/net/nt_http.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/net/nt_http_response_header.o : ${SRC_DIR}/net/nt_http_response_header.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/net/nt_http_utils.o : ${SRC_DIR}/net/nt_http_utils.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/net/nt_cookie.o : ${SRC_DIR}/net/nt_cookie.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/html/html_string.o : ${SRC_DIR}/html/html_string.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/usr/favorite_t.o : ${SRC_DIR}/usr/favorite_t.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/utils/base64.o : ${SRC_DIR}/utils/base64.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/utils/file.o : ${SRC_DIR}/utils/file.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/utils/zip.o : ${SRC_DIR}/utils/zip.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/utils/db.o : ${SRC_DIR}/utils/db.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/utils/text.o : ${SRC_DIR}/utils/text.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/utils/crypt.o : ${SRC_DIR}/utils/crypt.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/utils/nt_mutex.o : ${SRC_DIR}/utils/nt_mutex.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/utils/nt_pthread.o : ${SRC_DIR}/utils/nt_pthread.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/utils/nt_timer.o : ${SRC_DIR}/utils/nt_timer.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/_2ch/_2ch.o : ${SRC_DIR}/_2ch/_2ch.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/_2ch/model_2ch.o : ${SRC_DIR}/_2ch/model_2ch.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/_2ch/model_func.o : ${SRC_DIR}/_2ch/model_func.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/_2ch/model_property.o : ${SRC_DIR}/_2ch/model_property.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/_2ch/parse_2ch.o : ${SRC_DIR}/_2ch/parse_2ch.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/_2ch/search_2ch.o : ${SRC_DIR}/_2ch/search_2ch.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/_2ch/parse_string.o : ${SRC_DIR}/_2ch/parse_string.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/_2ch/maru_2ch.o : ${SRC_DIR}/_2ch/maru_2ch.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/ui/disp_board_menu.o : ${SRC_DIR}/ui/disp_board_menu.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/ui/disp_threadlist.o : ${SRC_DIR}/ui/disp_threadlist.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/ui/disp_reslist.o : ${SRC_DIR}/ui/disp_reslist.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/ui/disp_favorite.o : ${SRC_DIR}/ui/disp_favorite.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/ui/disp_search_thread.o : ${SRC_DIR}/ui/disp_search_thread.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/ui/disp_string.o : ${SRC_DIR}/ui/disp_string.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/ui/disp_win.o : ${SRC_DIR}/ui/disp_win.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/ui/disp_editor.o : ${SRC_DIR}/ui/disp_editor.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

$(OBJ_DIR)/ui/disp_html_result.o : ${SRC_DIR}/ui/disp_html_result.c ${INC_FILES}
	@ ${SHELL} prepare_proj.sh
	${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $< 

