# I am so sorry. But this is a GNU make file. I'm not sure how I could
# accomplish the same things in a BSD make file.

build: gem web

publish: clean build
	rsync -rvc --delete gem/ vivienne@quasivoid.net:/var/gemini/quasivoid.net/
	rsync -rvc --delete web/ vivienne@quasivoid.net:/var/www/htdocs/quasivoid.net/

clean:
	rm -rf gem/* web/*

serve:
	xdg-open http://0.0.0.0:8000/
	python -m http.server -d web

watch:
	find . -type f | entr make build

#
# CAPSULE POST-PROCESS
#

.PHONY: gem
gem: $(patsubst src/%, gem/%, $(shell find src -type f)) gem/sausage.tar.gz

gem/%: src/%
	@mkdir -p $(dir $@)
	cp $< $@

# compress colorspace and dither images
gem/%.gif: src/%.gif Makefile
	@mkdir -p $(dir $@)
	magick $< -resize 512x512^ -colorspace Gray -ordered-dither o4x4 $@

# how is this sausage made? tarball of sources
gem/sausage.tar.gz: $(shell find . \
		-path ./gem -prune \
		-o -path ./web -prune \
		-o -type f -print)
	tar -czvf $@ $^

#
# WEB MIRROR
#

# main web mirror target. this has to be done in two passes (via
# recursion) such that shell expansions evaluate only after the
# capsule preprocessing has happened
ifndef gemini-first
web: gem
	$(MAKE) $@ gemini-first=y
else
web: $(patsubst gem/%.gmi, web/%.html, $(shell find gem -type f -name "*.gmi")) \
	$(patsubst gem/%, web/%, $(shell find gem -type f -not -name "*.gmi")) \
	$(patsubst assets/%, web/%, $(shell find assets -type f))
endif

# html always comes from gmi
web/%.html: gem/%.gmi gem2html.pl genpage.pl
	@mkdir -p $(dir $@)
	./genpage.pl $< > $@

# all other files
web/%: gem/%
	@mkdir -p $(dir $@)
	cp $< $@

# web mirror specific assets
web/%: assets/%
	@mkdir -p $(dir $@)
	cp $< $@
