# **********************************************************************
# *
# * PostGIS - Spatial Types for PostgreSQL
# * http://postgis.net
# *
# * Copyright (C) 2022-2023 Sandro Santilli <strk@kbt.io>
# * Copyright 2008 Kevin Neufeld
# *
# * This is free software; you can redistribute and/or modify it under
# * the terms of the GNU General Public Licence. See the COPYING file.
# *
# **********************************************************************

PACKAGE_TARNAME = postgis

top_builddir = ../../..
top_srcdir = ../../..
srcdir = .

prefix = /usr/local
datarootdir = ${prefix}/share
docdir = /var/www/postgis_stuff
htmldir = /var/www/postgis_docs/manual-3.7

INSTALL=/usr/bin/install -c
INSTALL_DATA=${INSTALL} -m 644

SHELL = /bin/bash
PERL = /usr/bin/perl



STATIC_IMAGES_SRC = $(wildcard $(srcdir)/static/*.png $(srcdir)/static/*.gif)
STATIC_IMAGES = $(subst $(srcdir)/static/,,$(STATIC_IMAGES_SRC))

ALL_IMAGES = $(STATIC_IMAGES)

PDF_IMAGES_BUILD_DIR ?= pdf-images
PDF_IMAGES = $(ALL_IMAGES:%=$(PDF_IMAGES_BUILD_DIR)/%)
VISUAL_EXAMPLES_DIR = visual-examples
VISUAL_EXAMPLES_MANIFEST = $(VISUAL_EXAMPLES_DIR)/manifest.json
VISUAL_EXAMPLES_XML_MANIFEST = $(VISUAL_EXAMPLES_DIR)/manifest.xml

all: visual-examples-check

# generate the images
images: visual-examples-check $(ALL_IMAGES)

pdf-images: $(PDF_IMAGES) visual-examples-pdf

visual-examples-check:
	@test -s $(VISUAL_EXAMPLES_MANIFEST) || { \
		echo "Visual examples are missing. Run 'make -C regress visual-examples' first." >&2; \
		exit 1; \
	}
	@test -s $(VISUAL_EXAMPLES_XML_MANIFEST) || { \
		echo "Visual example XML manifest is missing. Run 'make -C regress visual-examples' first." >&2; \
		exit 1; \
	}

visual-examples-pdf: visual-examples-check
	@mkdir -p $(PDF_IMAGES_BUILD_DIR)/$(VISUAL_EXAMPLES_DIR)
	@converter=$${POSTGIS_DOC_CONVERTER:-}; rasterizer=convert; \
	if test -z "$$converter"; then \
		if command -v rsvg-convert >/dev/null 2>&1; then rasterizer=rsvg; \
		elif command -v gm >/dev/null 2>&1; then converter="gm convert"; \
		elif command -v magick >/dev/null 2>&1; then converter="magick"; \
		elif command -v convert >/dev/null 2>&1; then converter="convert"; \
		else echo "Could not find a converter for visual-example PDF fallbacks." >&2; exit 1; fi; \
	fi; \
	for source in $(VISUAL_EXAMPLES_DIR)/*.svg; do \
		name=$$(basename "$$source" .svg); \
		target="$(PDF_IMAGES_BUILD_DIR)/$(VISUAL_EXAMPLES_DIR)/$$name.png"; \
		temporary="$$target.tmp.png"; \
		diagnostics="$$target.tmp.log"; \
		embedded_tmpdir=; \
		rm -f "$$temporary" "$$diagnostics"; \
		if test "$$rasterizer" = rsvg; then \
			rsvg-convert -w 1200 -b white -o "$$temporary" "$$source" 2>"$$diagnostics" || \
				{ cat "$$diagnostics" >&2; exit 1; }; \
		else \
			converter_source="$$source"; \
			if grep -Eq "(xlink:)?href=['\"]data:image/[^;]+;base64," "$$source"; then \
				embedded_tmpdir=$$(mktemp -d "$${TMPDIR:-/tmp}/postgis-visual-svg.XXXXXX"); \
				converter_source="$$embedded_tmpdir/$$name.svg"; \
				$(PERL) $(srcdir)/prepare-svg-for-converter.pl "$$source" "$$converter_source" "$$embedded_tmpdir" || exit 1; \
			fi; \
			$$converter -density 240 "$$converter_source" -background white -flatten \
				-resize 1200x1200\> "$$temporary" 2>"$$diagnostics" || \
				{ cat "$$diagnostics" >&2; test -z "$$embedded_tmpdir" || rm -rf "$$embedded_tmpdir"; exit 1; }; \
			test -z "$$embedded_tmpdir" || rm -rf "$$embedded_tmpdir"; \
		fi; \
		test ! -s "$$diagnostics" || { cat "$$diagnostics" >&2; exit 1; }; \
		test -s "$$temporary" || { echo "Failed to rasterize $$source" >&2; exit 1; }; \
		mv "$$temporary" "$$target"; \
		rm -f "$$diagnostics"; \
	done

images-install: visual-examples-check $(ALL_IMAGES)
	mkdir -p $(DESTDIR)$(htmldir)/images
	$(INSTALL_DATA) $(ALL_IMAGES) $(DESTDIR)$(htmldir)/images/
	mkdir -p $(DESTDIR)$(htmldir)/images/$(VISUAL_EXAMPLES_DIR)
	$(INSTALL_DATA) $(VISUAL_EXAMPLES_DIR)/*.svg $(VISUAL_EXAMPLES_MANIFEST) $(VISUAL_EXAMPLES_XML_MANIFEST) \
		$(DESTDIR)$(htmldir)/images/$(VISUAL_EXAMPLES_DIR)/

images-uninstall:
	rm -f $(ALL_IMAGES:%=$(DESTDIR)$(htmldir)/images/%)
	rm -rf $(DESTDIR)$(htmldir)/images/$(VISUAL_EXAMPLES_DIR)

# Command to symlink each of the static images
$(STATIC_IMAGES):
	ln -fs $(srcdir)/static/$@ $@

$(PDF_IMAGES_BUILD_DIR)/%: %
	@mkdir -p $(dir $@)
	@converter=$${POSTGIS_DOC_CONVERTER:-}; \
	if test -z "$$converter"; then \
		if command -v gm >/dev/null 2>&1; then \
			converter="gm convert"; \
		elif command -v magick >/dev/null 2>&1; then \
			converter="magick convert"; \
		elif command -v convert >/dev/null 2>&1; then \
			converter="convert"; \
		else \
			echo "Could not find GraphicsMagick or ImageMagick executables (gm, magick, convert)." >&2; \
			exit 1; \
		fi; \
	fi; \
	$$converter "$<" -background white -flatten "$@"

# Clean target
clean:
	@true

distclean: clean
	rm -f Makefile

images-clean:
	rm -f $(ALL_IMAGES)
	rm -rf $(PDF_IMAGES_BUILD_DIR)
	rm -rf $(VISUAL_EXAMPLES_DIR)
