.POSIX:

CC = gcc
AR = ar
ARFLAGS = rcs
CFLAGS = -std=c99 -Wall -Wextra -Werror -Wpedantic -Wconversion -Wuninitialized -Wunused -Wshadow -Wstrict-prototypes -Wpointer-arith -Wformat=2 -fanalyzer -Wstrict-aliasing=3 -Wlogical-op -Wduplicated-cond
LDFLAGS =
LDLIBS =
PREFIX = /usr/local
DESTDIR =
MODULE_DIR = source_code/MODULE_marigold_dynamic_array
INTERNAL_DIR = $(MODULE_DIR)/internal
TEST_DIR = $(MODULE_DIR)/tests
BUILD_DIR = build_output
OBJ_DIR = intermediate_code

.PHONY: all clean install test example lib

all: example test lib

clean:
	rm -f $(OBJ_DIR)/*.o $(BUILD_DIR)/libmarigold_dynamic_array.a $(BUILD_DIR)/example $(BUILD_DIR)/test

lib: $(BUILD_DIR)/libmarigold_dynamic_array.a

example: $(BUILD_DIR)/example

test: $(BUILD_DIR)/test

$(BUILD_DIR)/libmarigold_dynamic_array.a: $(OBJ_DIR)/marigold_dynamic_array.o $(OBJ_DIR)/internal_marigold_dynamic_array.o
	$(AR) $(ARFLAGS) $@ $(OBJ_DIR)/marigold_dynamic_array.o $(OBJ_DIR)/internal_marigold_dynamic_array.o

$(BUILD_DIR)/example: $(OBJ_DIR)/main.o $(OBJ_DIR)/marigold_dynamic_array.o $(OBJ_DIR)/internal_marigold_dynamic_array.o
	$(CC) $(LDFLAGS) -o $@ $(OBJ_DIR)/main.o $(OBJ_DIR)/marigold_dynamic_array.o $(OBJ_DIR)/internal_marigold_dynamic_array.o

$(BUILD_DIR)/test: $(OBJ_DIR)/test_main.o $(OBJ_DIR)/marigold_dynamic_array.o $(OBJ_DIR)/internal_marigold_dynamic_array.o $(OBJ_DIR)/test_marigold_dynamic_array.o
	$(CC) $(LDFLAGS) -o $@ $(OBJ_DIR)/test_main.o $(OBJ_DIR)/marigold_dynamic_array.o $(OBJ_DIR)/internal_marigold_dynamic_array.o $(OBJ_DIR)/test_marigold_dynamic_array.o

$(OBJ_DIR)/main.o: source_code/main.c $(MODULE_DIR)/marigold_dynamic_array.h
	$(CC) $(CFLAGS) -c source_code/main.c -o $@

$(OBJ_DIR)/marigold_dynamic_array.o: $(MODULE_DIR)/marigold_dynamic_array.c $(MODULE_DIR)/marigold_dynamic_array.h $(INTERNAL_DIR)/internal_marigold_dynamic_array.h
	$(CC) $(CFLAGS) -c $(MODULE_DIR)/marigold_dynamic_array.c -o $@

$(OBJ_DIR)/internal_marigold_dynamic_array.o: $(INTERNAL_DIR)/internal_marigold_dynamic_array.c $(INTERNAL_DIR)/internal_marigold_dynamic_array.h
	$(CC) $(CFLAGS) -c $(INTERNAL_DIR)/internal_marigold_dynamic_array.c -o $@

$(OBJ_DIR)/test_main.o: source_code/test_main.c $(MODULE_DIR)/marigold_dynamic_array.h $(TEST_DIR)/test_marigold_dynamic_array.h
	$(CC) $(CFLAGS) -c source_code/test_main.c -o $@

$(OBJ_DIR)/test_marigold_dynamic_array.o: $(TEST_DIR)/test_marigold_dynamic_array.c $(TEST_DIR)/test_marigold_dynamic_array.h $(MODULE_DIR)/marigold_dynamic_array.h
	$(CC) $(CFLAGS) -c $(TEST_DIR)/test_marigold_dynamic_array.c -o $@
