
default: all

SURFALGGEO = /usr/bin/surf-alggeo


DITHERCANDIDATES = clebsch cyclide

SURFSCRIPTS = $(wildcard *.pic)

COLORSURFSCRIPTS = $(SURFSCRIPTS)
DITHERSURFSCRIPTS = $(filter $(addsuffix .pic,$(DITHERCANDIDATES)),$(SURFSCRIPTS))


PGMPICTURES = $(patsubst %.pic,%.pgm,$(DITHERSURFSCRIPTS))
PBMPICTURES = $(patsubst %.pic,%.pbm,$(DITHERSURFSCRIPTS))
BMPPICTURES = $(patsubst %.pic,%.bmp,$(DITHERSURFSCRIPTS))
TIFFPICTURES = $(patsubst %.pic,%.tiff,$(DITHERSURFSCRIPTS))
GPDFPICTURES = $(patsubst %.pic,%-grey.pdf,$(DITHERSURFSCRIPTS))
GEPSPICTURES = $(patsubst %.pic,%-grey.eps,$(DITHERSURFSCRIPTS))

RASPICTURES = $(patsubst %.pic,%.ras,$(COLORSURFSCRIPTS))
PPMPICTURES = $(patsubst %.pic,%.ppm,$(COLORSURFSCRIPTS))
JPEGPICTURES = $(patsubst %.pic,%.jpeg,$(COLORSURFSCRIPTS))
PDFPICTURES = $(patsubst %.pic,%.pdf,$(COLORSURFSCRIPTS))
EPSPICTURES = $(patsubst %.pic,%.eps,$(COLORSURFSCRIPTS))


DITHERCLEANFILES = $(PGMPICTURES) $(PBMPICTURES) $(BMPPICTURES) $(TIFFPICTURES) $(GPDFPICTURES) $(GEPSPICTURES)

COLORCLEANFILES = $(RASPICTURES) $(PPMPICTURES) $(JPEGPICTURES) $(PDFPICTURES) $(EPSPICTURES)

all: build

compose-dither: pgm pbm bmp tiff gpdf geps

compose-color: ras ppm jpeg pdf eps

build: compose-dither compose-color


pgm: $(PGMPICTURES)

pbm: $(PBMPICTURES)

bmp: $(BMPPICTURES)

tiff: $(TIFFPICTURES)

gpdf: $(GPDFPICTURES)

geps: $(GEPSPICTURES)

ras: $(RASPICTURES)

ppm: $(PPMPICTURES)

jpeg: $(JPEGPICTURES)

pdf: $(PDFPICTURES)

eps: $(EPSPICTURES)


buildclean:
	$(RM) $(COMPOSEDIR)/*
	test ! -d $(COMPOSEDIR) || $(RMDIR) $(COMPOSEDIR)

clean: buildclean
	$(if $(strip $(DITHERCLEANFILES)),$(RM) $(DITHERCLEANFILES),)
	$(if $(strip $(COLORCLEANFILES)),$(RM) $(COLORCLEANFILES),)

%.pgm : %.pic
	$(MKDIR_P) $(COMPOSEDIR)
	$(eval _pgm_prefix:=$(COMPOSEDIR)/pgm%)
	printf "dither_file_format=pgm;\n" > $(_pgm_prefix)$(<F)
	cat $< >> $(_pgm_prefix)$(<F)
	printf "\n\n//\ndither_file_format=pgm;\nfilename=\"%s\";\nsave_dithered_image;\n" \
			$(abspath $@) \
		>> $(_pgm_prefix)$(<F)
	$(SURFALGGEO) $(_pgm_prefix)$(<F)

%.pbm : %.pic
	$(MKDIR_P) $(COMPOSEDIR)
	$(eval _pbm_prefix:=$(COMPOSEDIR)/pbm%)
	printf "dither_file_format=pbm;\n" > $(_pbm_prefix)$(<F)
	cat $< >> $(_pbm_prefix)$(<F)
	printf "\n\n//\ndither_file_format=pbm;\nfilename=\"%s\";\nsave_dithered_image;\n" \
			$(abspath $@) \
		>> $(_pbm_prefix)$(<F)
	$(SURFALGGEO) $(_pbm_prefix)$(<F)

%.bmp : %.pic
	$(MKDIR_P) $(COMPOSEDIR)
	$(eval _bmp_prefix:=$(COMPOSEDIR)/bmp%)
	printf "dither_file_format=pbm;\n" > $(_bmp_prefix)$(<F)
	cat $< >> $(_bmp_prefix)$(<F)
	printf "\n\n//\ndither_file_format=X11_bitmap;\nfilename=\"%s\";\nsave_dithered_image;\n" \
			$(abspath $@) \
		>> $(_bmp_prefix)$(<F)
	$(SURFALGGEO) $(_bmp_prefix)$(<F)

%.tiff : %.pic
	$(MKDIR_P) $(COMPOSEDIR)
	$(eval _tiff_prefix:=$(COMPOSEDIR)/tiff%)
	printf "dither_file_format=pbm;\n" > $(_tiff_prefix)$(<F)
	cat $< >> $(_tiff_prefix)$(<F)
	printf "\n\n//\ndither_file_format=tiff;\nfilename=\"%s\";\nsave_dithered_image;\n" \
			$(abspath $@) \
		>> $(_tiff_prefix)$(<F)
	$(SURFALGGEO) $(_tiff_prefix)$(<F)

%-grey.pdf : %.pic
	$(MKDIR_P) $(COMPOSEDIR)
	$(eval _gpdf_prefix:=$(COMPOSEDIR)/gpdf%)
	printf "dither_file_format=pdf;\n" > $(_gpdf_prefix)$(<F)
	cat $< >> $(_gpdf_prefix)$(<F)
	printf "\n\n//\ndither_file_format=pdf;\nfilename=\"%s\";\nsave_dithered_image;\n" \
			$(abspath $@) \
		>> $(_gpdf_prefix)$(<F)
	$(SURFALGGEO) $(_gpdf_prefix)$(<F)

%-grey.eps : %.pic
	$(MKDIR_P) $(COMPOSEDIR)
	$(eval _geps_prefix:=$(COMPOSEDIR)/geps%)
	printf "dither_file_format=encapsulated;\n" > $(_geps_prefix)$(<F)
	cat $< >> $(_geps_prefix)$(<F)
	printf "\n\n//\ndither_file_format=encapsulated;\nfilename=\"%s\";\nsave_dithered_image;\n" \
			$(abspath $@) \
		>> $(_geps_prefix)$(<F)
	$(SURFALGGEO) $(_geps_prefix)$(<F)

%.ras : %.pic
	$(MKDIR_P) $(COMPOSEDIR)
	$(eval _ras_prefix:=$(COMPOSEDIR)/ras%)
	printf "color_file_colormap=Optimized;\ncolor_file_format=sun;\n" > $(_ras_prefix)$(<F)
	cat $< >> $(_ras_prefix)$(<F)
	printf "\n\n//\ncolor_file_colormap=Optimized;\ncolor_file_format=sun;\nfilename=\"%s\";\nsave_color_image;\n" \
			$(abspath $@) \
		>> $(_ras_prefix)$(<F)
	$(SURFALGGEO) $(_ras_prefix)$(<F)

%.ppm : %.pic
	$(MKDIR_P) $(COMPOSEDIR)
	$(eval _ppm_prefix:=$(COMPOSEDIR)/ppm%)
	printf "color_file_colormap=Optimized;\ncolor_file_format=ppm;\n" > $(_ppm_prefix)$(<F)
	cat $< >> $(_ppm_prefix)$(<F)
	printf "\n\n//\ncolor_file_colormap=Optimized;\ncolor_file_format=ppm;\nfilename=\"%s\";\nsave_color_image;\n" \
			$(abspath $@) \
		>> $(_ppm_prefix)$(<F)
	$(SURFALGGEO) $(_ppm_prefix)$(<F)

%.jpeg : %.pic
	$(MKDIR_P) $(COMPOSEDIR)
	$(eval _jpeg_prefix:=$(COMPOSEDIR)/jpeg%)
	printf "color_file_colormap=Optimized;\ncolor_file_format=jpg;\n" > $(_jpeg_prefix)$(<F)
	cat $< >> $(_jpeg_prefix)$(<F)
	printf "\n\n//\ncolor_file_colormap=Optimized;\ncolor_file_format=jpg;\nfilename=\"%s\";\nsave_color_image;\n" \
			$(abspath $@) \
		>> $(_jpeg_prefix)$(<F)
	$(SURFALGGEO) $(_jpeg_prefix)$(<F)

%.pdf : %.pic
	$(MKDIR_P) $(COMPOSEDIR)
	$(eval _pdf_prefix:=$(COMPOSEDIR)/pdf%)
	printf "color_file_colormap=TrueColor;\ncolor_file_format=pdf_color;\n" > $(_pdf_prefix)$(<F)
	cat $< >> $(_pdf_prefix)$(<F)
	printf "\n\n//\ncolor_file_colormap=TrueColor;\ncolor_file_format=pdf_color;\nfilename=\"%s\";\nsave_color_image;\n" \
			$(abspath $@) \
		>> $(_pdf_prefix)$(<F)
	$(SURFALGGEO) $(_pdf_prefix)$(<F)

%.eps : %.pic
	$(MKDIR_P) $(COMPOSEDIR)
	$(eval _eps_prefix:=$(COMPOSEDIR)/eps%)
	printf "color_file_colormap=Netscape;\ncolor_file_format=encapsulatedpostscript_color;\n" > $(_eps_prefix)$(<F)
	cat $< >> $(_eps_prefix)$(<F)
	printf "\n\n//\ncolor_file_colormap=Netscape;\ncolor_file_format=encapsulatedpostscript_color;\nfilename=\"%s\";\nsave_color_image;\n" \
			$(abspath $@) \
		>> $(_eps_prefix)$(<F)
	$(SURFALGGEO) $(_eps_prefix)$(<F)


COMPOSEDIR ?= $(TMPDIR)/mk/$(subst /,%,$(realpath $(firstword $(MAKEFILE_LIST))))%compose

TMPDIR ?= /tmp

MKDIR_P ?= /bin/mkdir -p
RMDIR ?= /bin/rmdir

#.NOTPARALLEL:
