# Semana 5: herencia y los métodos de Object (toString, equals, hashCode).
#   make         compila todo a build/
#   make test    corre las demostraciones, el ejemplo que no compila y las pruebas JUnit
#   make errores muestra el error de compilación de errores/protegido/ (protected entre paquetes)
#   make clean   borra build/
JAVAC  = javac
JFLAGS = -Xlint:all -Werror
SRC    = $(wildcard *.java)
DEMOS  = AccountDemo ConstructorOrder FractionDemo EqualsOverloadDemo PointDemo HashDemo
PROTEGIDO = $(sort $(shell find errores/protegido -name '*.java'))

all: build/.stamp

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

test: all errores
	@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

# errores/protegido/ no debe compilar, y debe fallar por el acceso protected.
errores: all
	@echo "== errores/protegido (no debe compilar)"
	@if $(JAVAC) $(JFLAGS) -d build/errores $(PROTEGIDO) 2> build/errores.txt; then exit 1; fi
	@cat build/errores.txt
	@grep -q 'has protected access' build/errores.txt

clean:
	rm -rf build

.PHONY: all test errores clean
