all:

# ECJ = javac
# JAVA = java

# ecj, ou Eclipse Compiler for Java, é o compilador preferencial (pelo
# menos desde que o GNU Compiler for Java passou a usá-lo), pois o
# resultado funciona até com o GNU Interpreter for Java.  Compilar com
# o javac funciona, mas pelo menos o da versão 1.8 do IcedTea gera
# classes que o gij não consegue interpretar.  Se você for rodar tudo
# com IcedTea ou similar, basta usar as definições acima.
ECJ = ecj
JAVA = gij

JAVAC = $(ECJ) -source 1.5 -nowarn -sourcepath src
# JAVAC = gcj -C -w -I src

GCJ = gcj
GCJFLAGS = -O2 -fnem-tente-por-enquanto


CORE-SOURCES = $(shell cat list/core-sources)
MORE-SOURCES = $(shell cat list/more-sources)
SRC-RESOURCES = $(shell cat list/src-resources)
RES-RESOURCES = $(shell sed 's, ,\\ ,g' list/res-resources)
RCL-RESOURCES = $(shell cat list/rcl-resources)
LICENSES = $(shell cat list/licenses)

.PHONY: all-gui
all: irpf-livre-cl.jar # all-gui
all-gui: list/extra-classes irpf-livre.jar

.PHONY: clean
clean:
	-test ! -f list/classes || (cd src && xargs rm -f) < list/classes
	-find src -name \*.class -print | xargs rm -f list/classes
	-rm -f *.T list/*.T Log.txt TryLock.txt
	-rm -rf jar

.PHONY: distclean
distclean: clean
	-rm -f irpf-livre.jar irpf-livre-cl.jar list/extra-classes

src/org/fsfla/irpf/Main.class: src/org/fsfla/irpf/Main.java
	$(JAVAC) src/org/fsfla/irpf/Main.java

irpf-livre-cl.jar: src/org/fsfla/irpf/Main.class \
		$(RCL-RESOURCES) $(LICENSES) \
		 list/rcl-resources list/licenses LEIAME AUTORES COPIANDO
	rm -rf jar
	mkdir jar
	{ find src -name \*.class -print; echo src/META-INF/MANIFEST.MF; \
	  cat list/licenses; } | sed 's,^src/,,' | \
	  (cd src && cpio -o) | (cd jar && cpio -i --make-dir)
	sed 's,^res/,,' list/rcl-resources | \
	  (cd res && cpio -o) | (cd jar && cpio -i --make-dir)
	cp -p LEIAME AUTORES COPIANDO list/licenses jar
	(cd jar && zip -9qmr - .) > $@.T
	rmdir jar
	mv $@.T $@

list/classes: $(CORE-SOURCES) $(MORE-SOURCES) \
	      list/core-sources list/more-sources
	-find src -name \*.class -print | \
	  if test -f list/classes; then fgrep -v -f list/classes; \
	  else cat; fi | \
	  xargs rm -f list/classes
	$(JAVAC) @list/core-sources @list/more-sources
	-rm -f $@.T
	find src -name \*.class -print > $@.T
	-rm -f $@
	mv $@.T $@

irpf-livre.jar: $(SRC-RESOURCES) $(LICENSES) $(RES-RESOURCES) \
	      list/extra-classes list/classes list/src-resources \
	      list/licenses list/res-resources LEIAME AUTORES COPIANDO
	-rm -rf jar
	mkdir jar
	sed 's,^src/,,' list/classes list/src-resources list/licenses | \
	  (cd src && cpio -o) | (cd jar && cpio -i --make-dir)
	sed 's,^res/,,' list/res-resources | \
	  (cd res && cpio -o) | (cd jar && cpio -i --make-dir)
	cp -p LEIAME AUTORES COPIANDO list/licenses jar
	(cd jar && zip -9qmr - .) > $@.T
	rmdir jar
	mv $@.T $@

# Isso devia funcionar, mas deixei o GCJ rodando por horas numa
# máquina com um tanto bem razoável de RAM, ela fazendo swap que nem
# louca, e quase nada de progresso na compilação.  Depois que o uso de
# swap passou de 4GB, desisti.  Se quiser experimentar, troque
# GCJFLAGS por algo que o gcj não rejeite ;-)
%: %.jar
	$(GCJ) $(GCJFLAGS) $< -o $@

# Verifica se não estamos trazendo classes indesejadas.
list/excluded-sources: list/core-sources list/more-sources
	-find src -name \*.java | \
	  fgrep -v -f list/core-sources | \
	  fgrep -v -f list/more-sources > $@.T
	test ! -s $@.T
	mv $@.T $@

list/extra-classes: list/excluded-sources list/classes
	-sed 's,\.class,\.java,' list/classes | \
	  fgrep -f list/excluded-sources > $@.T
	test ! -s $@.T
	mv $@.T $@

# Nem sei se precisa mais dessa macro.  Se precisar, vai seguramente
# precisar atualizar a versão do libgcj, se estiver usando GIJ.  O
# único uso desta macro, em jasper-rebuild, nem faz sentido,
# considerando que nossa interface gráfica nunca funcionou.

JAVACP = # :/usr/share/java/libgcj-4.1.2.jar

# Use isto depois de fazer um upgrade do jasperreports.
jasper-rebuild: list/classes
	rm -f res/*.jasper
	$(JAVA) -cp src:res$(JAVACP) org.fsfla.irpf.JRCompile res/*.jrxml
