# Makefile for EZ-Draw
#
# 21/03/2014 - Edouard.Thiel@lif.univ-mrs.fr

# Variables for Unix/X11 systems (linux, Mac OS, etc)
SHELL  = /bin/bash
CC     = gcc
CFLAGS = -Wall -W -ansi -pedantic -O2 -g
LIBS   = -lX11 -lXext -L/usr/X11R6/lib
RM     = rm -f

# Add your executables at the end of EXECS, EXECS_M, or EXECS_IM:
#   EXECS     with ez-draw.o
#   EXECS_M   with ez-draw.o and -lm
#   EXECS_IM  with ez-draw.o and ez-image.o and -lm
#
EXECS = demo-01 demo-02 demo-03 demo-04 demo-05 demo-06 demo-07 demo-08 \
        demo-09 demo-11 jeu-sudoku jeu-nim jeu-vie jeu-taquin

EXECS_M = demo-10 jeu-laby jeu-ezen jeu-heziom jeu-tangram

EXECS_IM = demo-12 demo-13 demo-14 demo-15 demo-16 demo-17 \
           jeu-bubblet jeu-doodle

EXECS_ALL = $(EXECS) $(EXECS_M) $(EXECS_IM)

.c.o :
	$(CC) -c $(CFLAGS) $*.c

help ::
	@echo "Options for make : help all ln clean distclean"

all :: $(EXECS_ALL)


# This double dependency is GNU-make syntax; it is equivalent to
#     demo0 : demo0.o ez-draw.o
#     demo1 : demo1.o ez-draw.o
#     ...
#     $(EXECS) :
#	      $(CC) -o $@ $^ $(LIBS)

$(EXECS) : % : %.o ez-draw.o
	$(CC) -o $@ $^ $(LIBS)

$(EXECS_M) : % : %.o ez-draw.o
	$(CC) -o $@ $^ $(LIBS) -lm

$(EXECS_IM) : % : %.o ez-draw.o ez-image.o
	$(CC) -o $@ $^ $(LIBS) -lm

clean ::
	$(RM) *.o core

distclean :: clean
	$(RM) *% *~ .*.swp $(EXECS_ALL)

# This target creates a link $HOME/ez-draw to your home directory
ln ::
	@P=`pwd` ; N="$${HOME}/ez-draw" ;\
	if [ -h "$$N" ]; then mv -f "$$N" "$$N.old" ; fi ;\
	echo "ln -s \"$$P\" \"$$N\"" ; ln -s "$$P" "$$N" 



#------------------------------- P R I V A T E --------------------------------

SAP = Edouard.Thiel@saphir2.lidil.univ-mrs.fr

# Tarball creation
tar :: distclean
	@N=`pwd` ; N=`basename "$$N"` ;\
	cd .. ; P=`pwd` ;\
	tar cvfz $$N.tgz $$N --exclude='svg*'  --exclude='rsync*' ;\
	echo "DONE: tar cvfz $$P/$$N.tgz $$N" ;\
	ls -l $$P/$$N.tgz

# Backup on SAP
sap :: distclean
	@N=`pwd` ; N=`basename "$$N"` ;\
	D=`date "+%Y-%m-%d- %H" | awk '{ printf "%s", $$1 ; printf "%c", $$2+97 }'` ;\
	cd .. ; P=`pwd` ; F="$${N}_$${D}.tgz" ;\
	tar cvfz $$F $$N --exclude='svg*' --exclude='rsync*' ;\
	echo "DONE: tar cvfz $$F $$N" ;\
        echo "Copying $$F to $(SAP) ..." ;\
        scp "$$F" "$(SAP):PROG/EZ-DRAW" ;\

# Update web page - final version
web :: tar
	@P=`pwd` ; N=`basename "$$P"` ;	t="$${HOME}/public_html" ;\
	if [ -f "$$t/index.html" ]; then \
	  echo "Updating \"$$t ...\"" ;\
	  cp -f "../$$N.tgz" "$$t" ;\
	  ( cd "$$t" ;\
	    if [ -d "$$N" ]; then rm -rf "$$N" ; fi ;\
	    tar xvfz "$$N.tgz" ;\
	    if [ -h "ez-draw" ]; then rm -f "ez-draw" ; fi ;\
	    ln -s "$$N" "ez-draw" ;\
	    ./GenWeb.sh --gen "ez-draw/index.html" --gen "$$N/index-en.html" ;\
	  ) ;\
          echo "Updating web ..." ;\
          scp -r "$${t}/ez-draw" "$${t}/$$N.tgz" "$(SAP):public_html/" ;\
	fi ;\
	echo "done"

# Update web page - development version
pre :: tar
	@P=`pwd` ; N=`basename "$$P"` ;	t="$${HOME}/public_html" ;\
	if [ -f "$$t/index.html" ]; then \
	  echo "Updating \"$$t ...\"" ;\
	  cp -f "../$$N.tgz" "$$t" ;\
	  ( cd "$$t" ;\
	    if [ -d "$$N" ]; then rm -rf "$$N" ; fi ;\
	    tar xvfz "$$N.tgz" ;\
	    ./GenWeb.sh --gen "$$N/index.html" --gen "$$N/index-en.html" ;\
	  ) ;\
          echo "Updating web ..." ;\
          scp -r "$${t}/$$N" "$${t}/$$N.tgz" "$(SAP):public_html/" ;\
	fi ;\
	echo "done"

# Check ez-image.c using valgrind
test-vg-image ::
	@for i in ../images_test/* ; do \
	  valgrind --tool=memcheck --leak-check=yes --show-reachable=yes \
	           --num-callers=20 --track-fds=yes ./demo-13 "$$i" ;\
	  echo ; echo "Press [Enter] ..." ; read ;\
	done

# Check sources encoding
mime :: distclean
	file --mime-encoding *

# Check tabs absence
tabs ::
	@grep -P '\t' *.c *.h README || echo "No tab detected"

# Create documentation: type make docclean doc

LANGUAGES = fr en

doc ::
	@for lang in $(LANGUAGES) ; do \
	    (cd doc && make LANGUAGE=$$lang html dist) ;\
	done

docclean ::
	@for lang in $(LANGUAGES) ; do \
	    (cd doc && make LANGUAGE=$$lang clean) ;\
	done


