# ---------------------------------------------------------------------------- #
## \file Makefile
## \author Sebastien Beaugrand
## \sa http://beaugrand.chez.com/
## \copyright CeCILL 2.1 Free Software license
# ---------------------------------------------------------------------------- #
# convert-im6 cache resources exhausted :
#   sudo vi /etc/ImageMagick-6/policy.xml +60
#   name="memory" value="1024MiB"
#   name="area" value="512MiB"
# Photocopy filter :
#   http://www.imagemagick.org/Usage/photos/#color-in
#   make F=photocopy
# Blur filter :
#   make F=blur
# Suppression file :
#   make check-notes | sort -k2 >gramps-pr-checkNotes.supp
# ---------------------------------------------------------------------------- #
PROJECT = arbreGenealogique
PROROOT = ..
PHOTOS = /data/arbreGenealogiquePhotos
PHOTO_W1 = 1771# 15cm
PHOTO_H1 = 2480# 21cm
PHOTO_W2 = 555
PHOTO_H2 = 697
PHOTO_W7 = 415
PHOTO_H7 = 581
PHOTO_WM1 = $(shell echo "$(PHOTO_W2) - 1" | bc)
PHOTO_HM1 = $(shell echo "$(PHOTO_H2) - 1" | bc)
ifeq ($(F),photocopy)
 EXEMPLE1 = -colorspace gray \( +clone -blur 0x2 \) +swap\
            -compose divide -composite -linear-stretch 5%x0%
 EXEMPLE2 = -colorspace gray \( +clone -blur 0x1 \) +swap\
            -compose divide -composite -linear-stretch 2%x0%
 EXEMPLE7 = -colorspace gray \( +clone -blur 0x1 \) +swap\
            -compose divide -composite -linear-stretch 2%x0%
else ifeq ($(F),blur)
 EXEMPLE1 = -resize $(PHOTO_W2)x$(PHOTO_H2)\! -blur 0x30\
            -resize $(PHOTO_W1)x$(PHOTO_H1)\!
 EXEMPLE2 = -blur 0x30
 EXEMPLE7 = -blur 0x30
else ifneq ($(F),)
 $(error Unknown filter $(F))
endif
BRIGHTNESS = -brightness-contrast 10

.SUFFIXES:

.PHONY: all
all: $(PROJECT).pdf

build:
	@mkdir $@

$(PROJECT).pdf: $(PROJECT).tex\
 build\
 build/I0000.png\
 build/I0001.png\
 build/I0002.png\
 build/I0003.png\
 build/I0004.png\
 build/I0005.png\
 build/I0006.png\
 build/I0007.png\
 build/I0008.png\
 build/I0009.png\
 build/I0010.png\
 build/I0011.png\
 build/I0012.png\
 build/I0013.png\
 build/I0015.png\
 build/I0016.png\
 build/I0017.png\
 build/I0018.png\
 build/I0019.png\
 build/I0032.png\
 build/I0033.png\
 build/I0034.png\
 build/I0035.png\
 build/I0054.png\
 build/I0105.png\
 build/I0393.png\
 build/I0888.png\
 build/I0889.png\
 build/I0891.png\
 build/I1155.png\
 build/I1570.png\
 build/I1571.png\
 build/I1585.png\
 export-pr-H2-9.tex\
 export-pr-F2-9.tex\
 enfants-pr-H1.tex\
 enfants-pr-F1.tex\

	@pdflatex --halt-on-error $<
	@$(RM) $(PROJECT).aux $(PROJECT).log

.PHONY: 10x15
10x15:\
 build/I0010I0013.png\
 build/I0016I1571.png\
 build/I0018I0105.png\
 build/I0006I0393.png\
 build/I0032I0035.png\
 build/I0000I0009.png\

export-pr-H%.tex: export-pr-%.csv gramps2tex.php randomColor.php
	php gramps2tex.php $< 1 8 576 50 >$@

export-pr-F%.tex: export-pr-%.csv gramps2tex.php randomColor.php
	php gramps2tex.php $< 2 8 576 50 >$@

build/ellipse1.png:
	@convert -size $(PHOTO_W1)x$(PHOTO_H1) xc:white -fill black\
	 -draw "ellipse "\
	"$(shell echo "$(PHOTO_W1) / 2 + 1" | bc),"\
	"$(shell echo "$(PHOTO_H1) / 2 + 1" | bc) "\
	"$(shell echo "$(PHOTO_W1) / 2" | bc),"\
	"$(shell echo "$(PHOTO_H1) / 2" | bc) 0,360" $@

build/ellipse2.png:
	@convert -size $(PHOTO_W2)x$(PHOTO_H2) xc:white -fill black\
	 -draw "ellipse "\
	"$(shell echo "$(PHOTO_W2) / 2 + 1" | bc),"\
	"$(shell echo "$(PHOTO_H2) / 2 + 1" | bc) "\
	"$(shell echo "$(PHOTO_W2) / 2" | bc),"\
	"$(shell echo "$(PHOTO_H2) / 2" | bc) 0,360" $@

build/ellipse7.png:
	@convert -size $(PHOTO_W7)x$(PHOTO_H7) xc:white -fill black\
	 -draw "ellipse "\
	"$(shell echo "$(PHOTO_W7) / 2 + 1" | bc),"\
	"$(shell echo "$(PHOTO_H7) / 2 + 1" | bc) "\
	"$(shell echo "$(PHOTO_W7) / 2" | bc),"\
	"$(shell echo "$(PHOTO_H7) / 2" | bc) 0,360" $@

define photo
	@echo $@
	@convert -units PixelsPerInch $< $4 -crop $(PHOTO_W$1)x$(PHOTO_H$1)+$2+$3\
	 -density 300 tmp.png
	@if [ -n "$5" ]; then\
	 $5 tmp.png tmp2.png && mv tmp2.png tmp.png; fi
	@if [ -n "$6" ]; then\
	 convert tmp.png $6 tmp2.png && mv tmp2.png tmp.png; fi
	@if [ -n "$(EXEMPLE$1)" ]; then\
	 convert tmp.png $(EXEMPLE$1) tmp2.png && mv tmp2.png tmp.png; fi
	@convert tmp.png build/ellipse$1.png -compose Screen -composite +repage \
	-font Liberation-Sans -pointsize 18 -draw "text \
	$(shell echo "$(PHOTO_W$1) - 45" | bc),\
	$(shell echo "$(PHOTO_H$1) - 5" | bc) '$7'" $@
	@rm tmp.png
endef

build/I0000.png: $(PHOTOS)/sebastien.png build/ellipse2.png
	$(call photo,2,40,60,-resize 50%,,-normalize $(BRIGHTNESS),2016)

build/I0001.png: $(PHOTOS)/emma2023.jpg build/ellipse1.png
	$(call photo,1,200,50,-resize 52%,,-normalize,2023)

build/I0002.png: $(PHOTOS)/eric2023.jpg build/ellipse1.png
	$(call photo,1,150,0,-resize 48%,,-normalize,2023)

build/I0003.png: $(PHOTOS)/erwann2023.jpg build/ellipse1.png
	$(call photo,1,350,200,-resize 60%,,-normalize,2023)

build/I0004.png: $(PHOTOS)/eline2023.jpg build/ellipse1.png
	$(call photo,1,350,200,-resize 60%,,-normalize,2023)

build/I0005.png: $(PHOTOS)/audrey.jpg build/ellipse2.png
	$(call photo,2,100,50,-resize 200%,,-normalize,2016)

build/I0006.png: $(PHOTOS)/bernardEtDanielle.png build/ellipse2.png
	$(call photo,2,70,160,-resize 75%,autotone -G,,1983)

build/I0007.png: $(PHOTOS)/danielle.png build/ellipse2.png
	$(call photo,2,130,160,-resize 75%,autotone -G,,1975)

build/I0008.png: $(PHOTOS)/patrice.png build/ellipse2.png
	$(call photo,2,140,120,-resize 95%,,-normalize,)

build/I0009.png: $(PHOTOS)/josiane.png build/ellipse2.png
	$(call photo,2,220,220,-resize 80%,autotone -G,$(BRIGHTNESS),)

build/I0010.png: $(PHOTOS)/leon.png build/ellipse2.png
	$(call photo,2,40,60,-resize 70%,,-normalize,1946)

build/I0011.png: $(PHOTOS)/jeanine.png build/ellipse2.png
	$(call photo,2,100,150,-resize 70%,,-normalize,1946)

build/I0012.png: $(PHOTOS)/rene.png build/ellipse2.png
	$(call photo,2,70,90,-resize 80%,autotone -G,$(BRIGHTNESS),1954)

build/I0013.png: $(PHOTOS)/denise.jpg build/ellipse2.png
	$(call photo,2,700,650,-resize 175%,,-normalize $(BRIGHTNESS),)

build/I0015.png: $(PHOTOS)/jeanne.png build/ellipse2.png
	$(call photo,2,90,70,-resize 45%,,-normalize $(BRIGHTNESS),)

build/I0016.png: $(PHOTOS)/henri-eugenie.png build/ellipse2.png
	$(call photo,2,520,420,-resize 75%,,-normalize $(BRIGHTNESS),1914)

build/I0017.png: $(PHOTOS)/henri-eugenie.png build/ellipse2.png
	$(call photo,2,1250,600,-resize 75%,,-normalize $(BRIGHTNESS),1914)

build/I0018.png: $(PHOTOS)/germain-felicite.png build/ellipse2.png
	$(call photo,2,130,150,-resize 75%,,-normalize $(BRIGHTNESS),1909)

build/I0019.png: $(PHOTOS)/germain-felicite.png build/ellipse2.png
	$(call photo,2,1070,150,-resize 75%,,-normalize $(BRIGHTNESS),1909)

build/I0032.png: $(PHOTOS)/pierre.png build/ellipse2.png
	$(call photo,2,110,40,-resize 80%,,-normalize,)

build/I0033.png: $(PHOTOS)/emilienne.png build/ellipse2.png
	$(call photo,2,40,30,-resize 80%,,-normalize,)

build/I0034.png: $(PHOTOS)/georges-berthe.png build/ellipse2.png
	$(call photo,2,620,80,-resize 70%,,-normalize $(BRIGHTNESS),)

build/I0035.png: $(PHOTOS)/georges-berthe.png build/ellipse2.png
	$(call photo,2,140,200,-resize 70%,,-normalize $(BRIGHTNESS),)

build/I0054.png: $(PHOTOS)/louis-ernestine.png build/ellipse2.png
	$(call photo,2,1120,430,-resize 70%,,-normalize,)

build/I0105.png: $(PHOTOS)/louis-ernestine.png build/ellipse2.png
	$(call photo,2,1880,840,-resize 70%,,-normalize,)

build/I0393.png: $(PHOTOS)/marie.png build/ellipse2.png
	$(call photo,2,200,140,-resize 60%,,-normalize $(BRIGHTNESS),)

build/I0888.png: $(PHOTOS)/jean-marcel.png build/ellipse2.png
	$(call photo,2,120,150,-resize 50%,,-normalize,)

build/I0889.png: $(PHOTOS)/antoinette.png build/ellipse2.png
	$(call photo,2,75,90,,autowhite,-normalize $(BRIGHTNESS),)

build/I0891.png: $(PHOTOS)/lazarette.png build/ellipse2.png
	$(call photo,2,140,40,-resize 85%,,-normalize,)

build/I1155.png: $(PHOTOS)/antoinetteG.jpg build/ellipse7.png
	$(call photo,7,700,350,-resize 250%,autowhite,-normalize,)

build/I1570.png: $(PHOTOS)/andre-marie.png build/ellipse2.png
	$(call photo,2,1100,700,-resize 75%,,-normalize,1923)

build/I1571.png: $(PHOTOS)/andre-marie.png build/ellipse2.png
	$(call photo,2,1700,750,-resize 75%,,-normalize,1923)

build/I1585.png: $(PHOTOS)/celine.png build/ellipse2.png
	$(call photo,2,400,330,-resize 170%,,-contrast -contrast -contrast -contrast $(BRIGHTNESS),1923)

define photoExtent
	convert build/$1 -fill none -stroke black\
	 -draw "rectangle 0,0,$(PHOTO_WM1),$(PHOTO_HM1)"\
	 -gravity Center -extent 590x885 build/tmp$1
endef

define photoExtent2
	@echo $@
	@for file in $(notdir $^); do \
		$(call photoExtent,$$file); \
	done; \
	convert $(addprefix build/tmp,$(notdir $^)) +append\
	 -font Liberation-Sans -pointsize 18\
	 -draw "text 250,850 '$1'" -draw "text 850,850 '$2'" $@; \
	rm $(addprefix build/tmp,$(notdir $^))
endef

build/I0010I0011.png: build/I0010.png build/I0011.png
	$(call photoExtent2,Léon,Jeanine)

build/I0012I0013.png: build/I0012.png build/I0013.png
	$(call photoExtent2,René,Denise)

build/I0010I0013.png: build/I0010I0011.png build/I0012I0013.png
	@echo $@
	@convert $^ -append $@

build/I0016I0017.png: build/I0016.png build/I0017.png
	$(call photoExtent2,Henri Marcel,Eugénie Léontine)

build/I1570I1571.png: build/I1570.png build/I1571.png
	$(call photoExtent2,André René,Marie Geneviève)

build/I0016I1571.png: build/I0016I0017.png build/I1570I1571.png
	@echo $@
	@convert $^ -append $@

build/I0018I0019.png: build/I0018.png build/I0019.png
	$(call photoExtent2,Germain Henri Lucien,Félicité Éléonore)

build/I0054I0105.png: build/I0054.png build/I0105.png
	$(call photoExtent2,Louis Honoré,Ernestine Célina)

build/I0018I0105.png: build/I0018I0019.png build/I0054I0105.png
	@echo $@
	@convert $^ -append $@

build/I0006I0007.png: build/I0006.png build/I0007.png
	$(call photoExtent2,Bernard,Danielle)

build/I0015I0393.png: build/I0015.png build/I0393.png
	$(call photoExtent2,Jeanne Léontine Adrienne,Marie Julia)

build/I0006I0393.png: build/I0006I0007.png build/I0015I0393.png
	@echo $@
	@convert $^ -append $@

build/I0032I0033.png: build/I0032.png build/I0033.png
	$(call photoExtent2,Pierre,Émilienne Louise)

build/I0034I0035.png: build/I0034.png build/I0035.png
	$(call photoExtent2,Georges Edmond,Berthe Adrienne Louise)

build/I0032I0035.png: build/I0032I0033.png build/I0034I0035.png
	@echo $@
	@convert $^ -append $@

build/I0000I0005.png: build/I0000.png build/I0005.png
	$(call photoExtent2,Sébastien,Audrey)

build/I0008I0009.png: build/I0008.png build/I0009.png
	$(call photoExtent2,Patrice,Josiane)

build/I0000I0009.png: build/I0000I0005.png build/I0008I0009.png
	@echo $@
	@convert $^ -append $@

build/I0891I1585.png: build/I0891.png build/I1585.png
	$(call photoExtent2,Lazarette,Céline)

.PHONY: a4
a4: a4.pdf

a4.pdf: $(PROJECT).pdf
	pdfposter -p4x4A4 $< $@

.PHONY: test-rgb
test-rgb: testRGB.pdf

testRGB.pdf: testRGB.tex
	@pdflatex --halt-on-error $<
	@$(RM) testRGB.aux testRGB.log

testRGB.tex: testRGB.php randomColor.php
	@php $< >$@

.PHONY: check-notes
check-notes:
	@./grampsCheckNotes.py\
	 `grep '^\[I0000' export-pr-2-9.csv | cut -d ',' -f 2` 9

.PHONY: check-supp
check-supp:
	@sort -k2 gramps-pr-checkNotes.supp | diff gramps-pr-checkNotes.supp -

.PHONY: todo
todo: GP1.pdf GP2.pdf GP3.pdf GP4.pdf

GP%.pdf: build/GP%.tex
	@pdflatex --halt-on-error $<
	@$(RM) `basename $@ .pdf`.aux `basename $@ .pdf`.log

build/GP%.tex: gramps-pr-checkNotes.supp header.tex
	@cat header.tex >$@
	@grep `basename $@ .tex` $< >>$@
	@printf '\\end{lstlisting}\n' >>$@
	@printf '\\end{document}\n' >>$@

portrait-%.pdf: %.pdf
	@pdf90 -q -o $@ $<

.PHONY: clean-gedcom
clean-gedcom: geneanet-pr-gedcom9.ged

geneanet-pr-gedcom9.ged: export-pr-gedcom9.ged\
 export-pr-2-9.csv grampsGedcomFamc.py
	@cp $< $@
	@./grampsGedcomFamc.py\
	 `grep '^\[I0000' export-pr-2-9.csv | cut -d ',' -f 2` 9 |\
	 xargs -I {} sed -i -e '/0 @{}@ FAM/,/^0/{/^0/!d}' -e '/@{}@/d' $@
	@diff $< $@ | grep -c '< 1 FAMC'
	@diff $< $@ | grep -c '< 0'

.PHONY: check-medias
check-medias:
	@db=`grep '^\[I0000' export-pr-2-9.csv | cut -d ',' -f 2` &&\
	 ./grampsCheckMedias.py $$db /data/$$db.gpkg.media

.PHONY: clean
clean:
	@$(RM) *~ $(PROJECT).aux $(PROJECT).log

include $(PROROOT)/makefiles/tar.mk