OBJS = default_debug.o \
       default_error_handling.o \
       hashmap.o \
       std_hash_functions.o \
       advanced_input_handling.o \
       stack.o \
       calculator.o
CC = gcc
LD = gcc
STD_CC_FLAGS = -c -Wall
ADDITIONAL_CC_FLAGS = -DDEBUG_ON
CC_FLAGS = $(STD_CC_FLAGS) $(ADDITIONAL_CC_FLAGS)
STD_LD_FLAGS = -o
ADDITIONAL_LD_FLAGS =
LD_FLAGS = $(STD_LD_FLAGS) $(ADDITIONAL_LD_FLAGS)
EXECUTABLE = calculator

calculator : $(OBJS)
	$(LD) $(LD_FLAGS) $(EXECUTABLE) $(OBJS)

calculator.o : calculator.c \
               calculator.h \
               default_debug.h
	$(CC) $(CC_FLAGS) calculator.c

hashmap.o : hashmap.c \
            hashmap.h \
            hashmap_private.h \
            default_debug.h
	$(CC) $(CC_FLAGS) hashmap.c

stack.o : stack.c \
          stack.h \
          stack_private.h \
          default_debug.h
	$(CC) $(CC_FLAGS) stack.c

std_hash_functions.o : std_hash_functions.c \
                       std_hash_functions.h \
                       default_debug.h
	$(CC) $(CC_FLAGS) std_hash_functions.c

default_error_handling.o : default_error_handling.c \
                           default_error_handling.h \
                           default_debug.h
	$(CC) $(CC_FLAGS) default_error_handling.c

default_debug.o : default_debug.c \
                  default_debug.h
	$(CC) $(CC_FLAGS) default_debug.c

advanced_input_handling.o : advanced_input_handling.c \
                            advanced_input_handling.h \
                            advanced_input_handling_private.h \
                            default_debug.h
	$(CC) $(CC_FLAGS) advanced_input_handling.c

all : calculator

clean : 
	rm $(OBJS) $(EXECUTABLE)
