# Semana 4: arreglos, ArrayList y diseño con clases.
#   make         compila todo a build/ (build/music y build/library); con -g, para que los
#                mensajes de error y jdb nombren las variables locales
#   make test    corre las demostraciones y las pruebas JUnit (*Test.java)
#   make clean   borra build/
#
# Las fuentes se buscan en todas las subcarpetas: cada carpeta es un paquete
# (music/Playlist.java empieza con "package music;"). Las demostraciones se
# ejecutan por su nombre completo, con el paquete: music.PlaylistDemo.
JAVAC  = javac
JFLAGS = -Xlint:all -Werror -g
SRC    = $(sort $(shell find . -name '*.java' -not -path './build/*'))
DEMOS  = music.PlaylistDemo BoxingDemo library.LibraryDemo

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
	@echo "== music.ArraysDemo (termina con NullPointerException a propósito)"; ! java -cp build music.ArraysDemo
	@echo "== RemoveInLoop (termina con ConcurrentModificationException a propósito)"; ! java -cp build RemoveInLoop
	java -jar $(JUNIT_JAR) execute --class-path build --scan-class-path \
	  --disable-banner --disable-ansi-colors --details=tree

clean:
	rm -rf build

.PHONY: all test clean
