# Semana 6: programas en varios archivos. Se usa dentro del entorno del curso.
#
#   make           compila los ejemplos de los apuntes (receipt/ y tally/)
#   make lab       compila el laboratorio, cada parte con su propio Makefile
#   make test      corre las pruebas de los ejemplos y de los apuntes
#   make test-lab  prueba su laboratorio; falla hasta que lo terminen
#   make clean     borra lo generado
#
# Los programas de errors/ tienen errores a propósito, y stale/ tiene un Makefile mal hecho
# a propósito. No se compilan con make: se usan con los comandos de los apuntes.

EXAMPLES = receipt tally
LAB_PARTS = lab/fraction lab/stack lab/image
GENERATED = $(EXAMPLES) stale $(LAB_PARTS)

.PHONY: all lab test test-lab clean

all:
	@for dir in $(EXAMPLES); do $(MAKE) --no-print-directory -C $$dir || exit 1; done

# La parte 1 no trae Makefile: lo escriben ustedes en lab/split.
lab:
	@for dir in $(LAB_PARTS); do $(MAKE) --no-print-directory -C $$dir || exit 1; done
	@if [ -f lab/split/Makefile ]; then $(MAKE) --no-print-directory -C lab/split; fi

test: all
	python3 -m unittest discover -p 'test_*.py'

test-lab:
	LAB_DIR=lab python3 -m unittest -v test_lab

clean:
	@for dir in $(GENERATED); do $(MAKE) --no-print-directory -C $$dir clean; done
	@if [ -f lab/split/Makefile ]; then $(MAKE) --no-print-directory -C lab/split clean; fi
	rm -rf build __pycache__
