# Makefile du TP de la Seance 6 -- make : tout compiler ; make test : lancer les tests (chaque test est lance meme si le
# precedent echoue) ; make asan : versions avec
# AddressSanitizer ; make valgrind : tests sous valgrind ; make clean
CC = gcc
CFLAGS = -std=c17 -Wall -Wextra -O0 -g
ASAN = -fsanitize=address -fno-omit-frame-pointer
PROGS = etape1_adresses etape2_rpn etape3_catalogue test_generique

all: $(PROGS)

etape1_adresses: etape1_adresses.c
	$(CC) $(CFLAGS) $< -o $@
etape2_rpn: etape2_rpn.c
	$(CC) $(CFLAGS) $< -o $@
etape3_catalogue: etape3_catalogue.c
	$(CC) $(CFLAGS) $< -o $@
test_generique: test_generique.c generique.c generique.h
	$(CC) $(CFLAGS) test_generique.c generique.c -o $@

asan: etape2_rpn.c etape3_catalogue.c test_generique.c generique.c generique.h
	$(CC) $(CFLAGS) $(ASAN) etape2_rpn.c -o etape2_rpn_asan
	$(CC) $(CFLAGS) $(ASAN) etape3_catalogue.c -o etape3_catalogue_asan
	$(CC) $(CFLAGS) $(ASAN) test_generique.c generique.c -o test_generique_asan

test: all
	-./etape2_rpn | diff - tests/attendu_etape2.txt && echo "etape 2 : ok"
	-./etape3_catalogue | diff - tests/attendu_etape3.txt && echo "etape 3 : ok"
	-./test_generique

valgrind: test_generique
	valgrind -q --leak-check=full --error-exitcode=1 ./test_generique

clean:
	rm -f $(PROGS) *_asan

.PHONY: all asan test valgrind clean
