# Warnings that we should get rid of (in some sort order of importance)

WFLAGS	=

WFLAGS	+=	-Wall -pedantic
WFLAGS	+=	-Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wimplicit -Wredundant-decls -Wnested-externs
WFLAGS	+=	 -W
#WFLAGS  +=	 -Wold-style-definition
#WFLAGS	+=	-Wwrite-strings 
#WFLAGS	+=	-Wsign-compare -Winline 
#WFLAGS	+=	-Wswitch 
#WFLAGS	+=	-Wreturn-type -Wparentheses -Wmissing-braces 
#WFLAGS	+=	-Wformat -Wformat-nonliteral -Wformat-security
#WFLAGS	+=	-Wsequence-point 
#WFLAGS	+=	-Wunused-function -Wunused-label -Wunused-variable -Wunused-value -Wuninitialized
#WFLAGS	+=	-Wundef 

# Warnings that are almost impossible to handle, but can give nice clues...
#WFLAGS	+=	-Wconversion
WFLAGS	+=	-Werror

#CFLAGS=-pipe -O3 -Wall -pedantic -Werror
CFLAGS=-O2 -pipe -g $(WFLAGS)
#CFLAGS=-Wall -W -O2 -Wall -pipe -g -pedantic -Werror $(WFLAGS)
#LDFLAGS=-pedantic -Wall
#LDFLAGS=-static
LDFLAGS=-Wl,-O1
CC=gcc

all: initng

%.o: %.c
	$(CC) $(CFLAGS) -c $<


kill:
	killall -9 initng; killall valgrind; killall ngdc; true


initng: main.o string_tools.o process_db.o service_db.o initng_execute.o\
remote_control.o initng_signal.o colorprint.o initng_handler.o initng_rl_parser.o\
initng_parser.o bash_executor.o initng_history.o open_read_close.o active_db.o
	$(CC) $(LDFLAGS) -o initng $^


init.a: main_a.o string_tools.o process_db.o service_db.o initng_execute.o\
remote_control.o initng_signal.o colorprint.o initng_handler.o initng_rl_parser.o\
initng_parser.o bash_executor_a.o initng_history.o open_read_close.o active_db.o
	ar -ro init.a $^

main_a.o: main.c main.h process_db.h colorprint.h initng_signal.h initng_handler.h active_db.h remote_control.h initng_history.h initng.h initng_handler.h
	$(CC) $(CFLAGS) -DBUSYBOX -c main.c -o main_a.o

bash_executor_a.o: bash_executor.c bash_executor.h initng.h
	$(CC) -DBUSYBOX -c bash_executor.c -o bash_executor_a.o


active_db.o: active_db.c active_db.h process_db.h service_db.h service_data_types.h initng.h
bash_executor.o: bash_executor.c bash_executor.h initng.h
colorprint.o: colorprint.c colorprint.h string_tools.h initng.h
initng_execute.o: initng_execute.c initng_execute.h process_db.h main.h string_tools.h bash_executor.h initng.h
initng_handler.o: initng_handler.c initng_handler.h active_db.h service_db.h service_data_types.h initng_execute.h initng_parser.h service_db.h service_data_types.h initng_history.h colorprint.h string_tools.h initng.h process_db.h main.h
initng_history.o: initng_history.c initng_history.h initng.h
initng_parser.o: initng_parser.c initng_parser.h service_db.h service_data_types.h string_tools.h initng.h
initng_rl_parser.o: initng_rl_parser.c initng_rl_parser.h service_db.h service_data_types.h initng.h
initng_signal.o: initng_signal.c initng_signal.h initng_handler.h initng.h
main.o: main.c main.h process_db.h colorprint.h initng_signal.h initng_handler.h active_db.h remote_control.h initng_history.h initng.h initng_handler.h
minit_parser.o: minit_parser.c minit_parser.h service_db.h service_data_types.h open_read_close.h initng.h
process_db.o: process_db.c process_db.h initng.h
service_db.o: service_db.c service_db.h service_data_types.h initng.h
open_read_close.o: open_read_close.c open_read_close.h initng.h
remote_control.o: remote_control.c remote_control.h active_db.h initng.h
string_tools.o: string_tools.c string_tools.h initng.h

clean:
	-rm *~
	-rm *.o
	-rm initng

memcheck: initng
	valgrind --tool=memcheck --leak-check=yes --show-reachable=yes ./initng

memcheck-v: initng
	valgrind --tool=memcheck --leak-check=yes --show-reachable=yes -v ./initng



