CSS   = $(wildcard *.css) $(shell find fonts -type f)
PAGES = index.html pubkey.txt
MEDIA = \
  $(wildcard media/*.png) $(wildcard media/*.svg) $(wildcard media/*.webp) \
  $(wildcard media/flags/*) $(wildcard media/buttons/*) \
  8831.png 8831-quox.png
SCRIPTS = $(patsubst %.ts,%.js,$(wildcard *.ts))
MISC  = $(shell find .well-known -type f)
ALL   = $(CSS) $(PAGES) $(MEDIA) $(SCRIPTS) $(MISC)

BUILDDIR ?= _build
TMPDIR   ?= _tmp

HOST ?= yummy.cricket
REMOTE_USER ?= www-data
IDFILE ?= ~/.ssh/xyz
REMOTE_DIR ?= yummy/test

all: build

build: $(patsubst %,$(BUILDDIR)/%,$(ALL))

upload: build
	@rsync --recursive --partial --progress --copy-links \
	       --compress --human-readable --hard-links --size-only \
	       --delete --delete-after \
	       --rsh='ssh -l $(REMOTE_USER) -i $(IDFILE)' \
	       $(BUILDDIR)/ $(HOST):$(REMOTE_DIR)/

$(BUILDDIR)/%: %
	@echo $*
	@mkdir -p $(dir $@)
	@cp $< $@

$(BUILDDIR)/%.gif: %_bg.gif
	@echo $(notdir $@)
	@mkdir -p $(dir $(BUILDDIR)/$* $(TMPDIR)/$*)
	@gifsicle -U $*_bg.gif -o $(TMPDIR)/$*_bg_u.gif
	@convert -transparent '#ff9bc7' $(TMPDIR)/$*_bg_u.gif $(TMPDIR)/$*_t.gif
	@gifsicle --disposal=previous $(TMPDIR)/$*_t.gif -o $(BUILDDIR)/$*.gif

$(BUILDDIR)/%_small.png: %.svg
	@echo $(notdir $@)
	@mkdir -p $(dir $@)
	@inkscape -e $@ -h 16 $< >/dev/null

$(BUILDDIR)/%_large.png: %.svg
	@echo $(notdir $@)
	@mkdir -p $(dir $@)
	@inkscape -e $@ -h 30 $< >/dev/null

$(BUILDDIR)/%_dim.png: %.png
	@echo $(notdir $@)
	@convert -channel A -evaluate Multiply 0.75 $< $@

$(BUILDDIR)/%.GIF: %.ICO
	@echo $*.GIF
	@mkdir -p $(dir $@)
	@convert '$<[0]' $@

$(BUILDDIR)/%.js: %.ts
	tsc --strict --noUncheckedIndexedAccess --noEmitOnError \
	    --lib dom,es2021 --target es2015 \
	    --outDir $(dir $@) $^


clean:
	$(RM) -r $(TMPDIR) $(BUILDDIR)

.PHONY: clean all build upload
