# This file was generated by a Python script
CC = gcc
CFLAGS = -std=c11 -Wall -Wextra
CFLAGS += -Wno-missing-braces -DCMC_TEST_COLOR
CVFLAGS = --coverage -O0 -g3
INCLUDE = ./tests/include -I src

# Runs the script to update tests, run all tests and code coverage
all: script coverage

tests: script build
	./tests/main.exe

# Like build but with coverage
coverage: ./tests/build/obj/cmc/bitset.o ./tests/build/obj/cmc/deque.o ./tests/build/obj/cmc/hashbidimap.o ./tests/build/obj/cmc/hashmap.o ./tests/build/obj/cmc/hashmultimap.o ./tests/build/obj/cmc/hashmultiset.o ./tests/build/obj/cmc/hashset.o ./tests/build/obj/cmc/heap.o ./tests/build/obj/cmc/intervalheap.o ./tests/build/obj/cmc/linkedlist.o ./tests/build/obj/cmc/list.o ./tests/build/obj/cmc/queue.o ./tests/build/obj/cmc/sortedlist.o ./tests/build/obj/cmc/stack.o ./tests/build/obj/cmc/treemap.o ./tests/build/obj/cmc/treeset.o ./tests/build/obj/main.o
	$(CC) $^ -o ./tests/main.exe $(CFLAGS) $(CVFLAGS)
	./tests/main.exe
	gcov ./tests/build/obj/main.o ./tests/build/obj/cmc/bitset.o ./tests/build/obj/cmc/deque.o ./tests/build/obj/cmc/hashbidimap.o ./tests/build/obj/cmc/hashmap.o ./tests/build/obj/cmc/hashmultimap.o ./tests/build/obj/cmc/hashmultiset.o ./tests/build/obj/cmc/hashset.o ./tests/build/obj/cmc/heap.o ./tests/build/obj/cmc/intervalheap.o ./tests/build/obj/cmc/linkedlist.o ./tests/build/obj/cmc/list.o ./tests/build/obj/cmc/queue.o ./tests/build/obj/cmc/sortedlist.o ./tests/build/obj/cmc/stack.o ./tests/build/obj/cmc/treemap.o ./tests/build/obj/cmc/treeset.o

# Run without coverage
run: build
	./tests/main.exe

script:
	python autogen.py

clean:
	find ./tests/build -type f -delete
	rm *.gcov

# No coverage build
build: ./tests/build/obj/cmc/bitset.o ./tests/build/obj/cmc/deque.o ./tests/build/obj/cmc/hashbidimap.o ./tests/build/obj/cmc/hashmap.o ./tests/build/obj/cmc/hashmultimap.o ./tests/build/obj/cmc/hashmultiset.o ./tests/build/obj/cmc/hashset.o ./tests/build/obj/cmc/heap.o ./tests/build/obj/cmc/intervalheap.o ./tests/build/obj/cmc/linkedlist.o ./tests/build/obj/cmc/list.o ./tests/build/obj/cmc/queue.o ./tests/build/obj/cmc/sortedlist.o ./tests/build/obj/cmc/stack.o ./tests/build/obj/cmc/treemap.o ./tests/build/obj/cmc/treeset.o ./tests/build/obj/main.o
	$(CC) $^ -o ./tests/main.exe $(CFLAGS)

./tests/build/obj/main.o: ./tests/main.c
	$(CC) -c $^ -o $@ -I $(INCLUDE) $(CFLAGS)

fmt_all: fmt_src fmt_tests

fmt_src: FORCE
	find ./src/ -iname *.h | xargs clang-format --style=file --verbose -i

fmt_tests: FORCE
	find ./tests/ -iname *.c -o -iname *.h | xargs clang-format --style=file --verbose -i

.PHONY FORCE:


./tests/build/obj/cmc/bitset.o: ./tests/src/cmc/bitset.c ./tests/include/cmc/bitset.h
	$(CC) -c $< -o $@ -I $(INCLUDE) $(CFLAGS) $(CVFLAGS)

./tests/build/obj/cmc/deque.o: ./tests/src/cmc/deque.c ./tests/include/cmc/deque.h
	$(CC) -c $< -o $@ -I $(INCLUDE) $(CFLAGS) $(CVFLAGS)

./tests/build/obj/cmc/hashbidimap.o: ./tests/src/cmc/hashbidimap.c ./tests/include/cmc/hashbidimap.h
	$(CC) -c $< -o $@ -I $(INCLUDE) $(CFLAGS) $(CVFLAGS)

./tests/build/obj/cmc/hashmap.o: ./tests/src/cmc/hashmap.c ./tests/include/cmc/hashmap.h
	$(CC) -c $< -o $@ -I $(INCLUDE) $(CFLAGS) $(CVFLAGS)

./tests/build/obj/cmc/hashmultimap.o: ./tests/src/cmc/hashmultimap.c ./tests/include/cmc/hashmultimap.h
	$(CC) -c $< -o $@ -I $(INCLUDE) $(CFLAGS) $(CVFLAGS)

./tests/build/obj/cmc/hashmultiset.o: ./tests/src/cmc/hashmultiset.c ./tests/include/cmc/hashmultiset.h
	$(CC) -c $< -o $@ -I $(INCLUDE) $(CFLAGS) $(CVFLAGS)

./tests/build/obj/cmc/hashset.o: ./tests/src/cmc/hashset.c ./tests/include/cmc/hashset.h
	$(CC) -c $< -o $@ -I $(INCLUDE) $(CFLAGS) $(CVFLAGS)

./tests/build/obj/cmc/heap.o: ./tests/src/cmc/heap.c ./tests/include/cmc/heap.h
	$(CC) -c $< -o $@ -I $(INCLUDE) $(CFLAGS) $(CVFLAGS)

./tests/build/obj/cmc/intervalheap.o: ./tests/src/cmc/intervalheap.c ./tests/include/cmc/intervalheap.h
	$(CC) -c $< -o $@ -I $(INCLUDE) $(CFLAGS) $(CVFLAGS)

./tests/build/obj/cmc/linkedlist.o: ./tests/src/cmc/linkedlist.c ./tests/include/cmc/linkedlist.h
	$(CC) -c $< -o $@ -I $(INCLUDE) $(CFLAGS) $(CVFLAGS)

./tests/build/obj/cmc/list.o: ./tests/src/cmc/list.c ./tests/include/cmc/list.h
	$(CC) -c $< -o $@ -I $(INCLUDE) $(CFLAGS) $(CVFLAGS)

./tests/build/obj/cmc/queue.o: ./tests/src/cmc/queue.c ./tests/include/cmc/queue.h
	$(CC) -c $< -o $@ -I $(INCLUDE) $(CFLAGS) $(CVFLAGS)

./tests/build/obj/cmc/sortedlist.o: ./tests/src/cmc/sortedlist.c ./tests/include/cmc/sortedlist.h
	$(CC) -c $< -o $@ -I $(INCLUDE) $(CFLAGS) $(CVFLAGS)

./tests/build/obj/cmc/stack.o: ./tests/src/cmc/stack.c ./tests/include/cmc/stack.h
	$(CC) -c $< -o $@ -I $(INCLUDE) $(CFLAGS) $(CVFLAGS)

./tests/build/obj/cmc/treemap.o: ./tests/src/cmc/treemap.c ./tests/include/cmc/treemap.h
	$(CC) -c $< -o $@ -I $(INCLUDE) $(CFLAGS) $(CVFLAGS)

./tests/build/obj/cmc/treeset.o: ./tests/src/cmc/treeset.c ./tests/include/cmc/treeset.h
	$(CC) -c $< -o $@ -I $(INCLUDE) $(CFLAGS) $(CVFLAGS)
