# Semana 8: tipos sealed y pattern matching.
#   make          compila todo a build/
#   make test     corre las demostraciones y las pruebas JUnit
#   make errores  compila cada ejemplo de broken/ y muestra qué dice javac
#   make clean    borra build/
JAVAC  = javac
JFLAGS = -Xlint:all -Werror
SRC    = $(wildcard *.java)
DEMOS  = ShapeDemo ExprDemo ExprMethods
SHAPES = Shape.java Circle.java Square.java Triangle.java

all: build/.stamp

build/.stamp: $(SRC)
	mkdir -p build
	$(JAVAC) $(JFLAGS) -cp $(JUNIT_JAR) -d build $(SRC)
	touch $@

test: all
	@for d in $(DEMOS); do echo "== $$d"; java -cp build $$d || exit 1; done
	java -jar $(JUNIT_JAR) execute --class-path build --scan-class-path \
	  --disable-banner --disable-ansi-colors --details=tree

# Los ejemplos de broken/ muestran errores de compilación a propósito (salvo
# ChainNoWarning, que compila y calla); por eso no están en SRC.
errores:
	@mkdir -p build/broken
	@for f in broken/*.java; do \
	  echo "== $$f"; \
	  if $(JAVAC) $(JFLAGS) -d build/broken $(SHAPES) $$f; then echo "(compila sin errores)"; fi; \
	done

clean:
	rm -rf build

.PHONY: all test errores clean
