########################################################################
# Autor: Gil Perez, Borja (bor.gil@predoc.uam.es)
# Fecha: 2018-01-26 (yyyy-mm-dd)
########################################################################
# The GNU compiler collection
CC = gcc
# -O para aplicar el optimizador de codigo, -g para poder depurar, -Wall: avisos extra
# -ansi equivale a la version -std=c89, -pedantic desactiva extensiones para generar mas 'warnings'
CFLAGS = -O -g -Wall -ansi -pedantic
# -lm enlaza la biblioteca matematica, -pthread: biblioteca de hilos
LIBS = -lm -pthread

# $ make
# $ make all
all: ej1 ej2
# $ make ej1
EJ1 = programming
ej1: $(EJ1)
# $ make ej2
EJ2 = test
ej2: $(EJ2)

# $@ es el item que aparece a la izquierda de ':'
# $< es el primer item en la lista de dependencias
# $^ son todos los archivos que se encuentran a la derecha de ':'
########################################################################
# EJ1
########################################################################
programming.o: programming.c const.h pointers.h
	$(CC) -c -o $@ $< $(CFLAGS)
pointers.o: pointers.c const.h pointers.h
	$(CC) -c -o $@ $< $(CFLAGS)
programming: programming.o pointers.o
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)
########################################################################
# EJ2
########################################################################
test.o: test.c const.h
	$(CC) -c -o $@ $< $(CFLAGS)
test: test.o
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

########################################################################
# Utilities
########################################################################
UTILS = info astyle valgrind doxygen clean
.PHONY: $(UTILS)
# $ make info
info:
	@echo "<Asignatura>, <Grado>"
	@echo "<Codigo de la entrega>"
	@echo "Autores:"
	@echo "	<Autor, Correo electronico>"
	@echo "	<Autor, Correo electronico>"
	@echo "Ejecutables:"
	@echo "	$(EJ1)"
	@echo "	$(EJ2)"
	@echo "	$(UTILS)"
	@echo
# $ make astyle
astyle:
	astyle *.h *.c
	@echo "Run make clean to remove *.orig files if any file was formated."
# $ make valgrind ARGS="./<executable> [<arguments>]"
valgrind:
	valgrind --leak-check=full ${ARGS}
# $ make doxygen
doxygen:
	@rm -fr Doxyfile html latex
	@doxygen -g
	@doxygen Doxyfile
# $ make clean
clean:
	@rm -fr Doxyfile html latex
	@rm -f *.o *~ core *.orig $(EJ1) $(EJ2)
