# Semana 12: DNS y HTTP. Se usa dentro del contenedor del curso.
#
#   make           compila dns_ask (estático, para correrlo dentro de los nodos) y revisa los
#                  programas de Python
#   make test      corre las pruebas (test_*.py), que levantan la red y siempre la destruyen.
#                  Las pruebas de la delegación usan lab/ y se saltan hasta que la completen
#   make up        levanta la red y arranca los servidores (red/red.clab.yml)
#   make down      destruye la red y su red de Docker
#   make clean     lo anterior, y borra lo generado

CC = gcc
CFLAGS = -Wall -Wextra -std=c17 -D_DEFAULT_SOURCE -O2 -g
LDFLAGS = -static
PY = dns_wire.py dns_auth.py dns_resolver.py mini_web.py mini_cache.py h2_frames.py

.PHONY: all test up down clean

all: bin/dns_ask
	@PYTHONDONTWRITEBYTECODE=1 python3 -c 'import ast, sys; [ast.parse(open(f, encoding="utf-8").read(), f) for f in sys.argv[1:]]' $(PY)

bin/dns_ask: dns_ask.c
	@mkdir -p bin
	$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)

test: all
	@status=0; PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -p 'test_*.py' -v || status=$$?; \
	  $(MAKE) --no-print-directory down; exit $$status

up: all
	cd red && containerlab deploy -t red.clab.yml --reconfigure
	sh red/start.sh

down:
	@cd red && containerlab destroy -t red.clab.yml --cleanup >/dev/null 2>&1 || true
	@docker network rm redes-w12-red >/dev/null 2>&1 || true

clean: down
	rm -rf bin __pycache__ red/clab-w12-red
