LISP=sbcl

BUILD_DIR=./build
DATA_DIR=./data
TEMPLATE_DIR=./html

SRC_DIRS=$(DATA_DIR) $(TEMPLATE_DIR) ./lisp ./assets

FILES=makefile readme.md
ARCHIVE=$(BUILD_DIR)/ethica.zip

GEN=lisp/bin/ethicagen

VERSIONS=la_spinoza en_elwes de_stern de_auerbach fr_saisset fr_appuhn
HTML = $(foreach v, $(VERSIONS), $(BUILD_DIR)/$(v).html)

.PHONY: all deploy clean

all: $(HTML) $(BUILD_DIR)/assets

$(BUILD_DIR):
	@echo ---
	@echo Create build directory.
	@echo
	mkdir -p $@
	@echo ---

$(BUILD_DIR)/assets: $(BUILD_DIR)
	@echo ---
	@echo Link assets.
	@echo
	ln -sfr assets -t $(BUILD_DIR)
	@echo ---

$(HTML) &: $(DATA_DIR)/* $(DATA_DIR)/meta.json $(TEMPLATE_DIR) $(GEN) $(BUILD_DIR)
	@echo ---
	@echo Generating HTML files.
	@echo
	$(GEN) --data-dir $(DATA_DIR)/\
		--build-dir $(BUILD_DIR)/\
		--template-dir $(TEMPLATE_DIR)/\
		-- $(VERSIONS)
	@echo ---

$(ARCHIVE): $(SRC_DIRS) $(FILES) $(BUILD_DIR)
	@echo ---
	@echo Generating source archive.
	@echo
	git archive main -o $@
	@echo ---

$(GEN): lisp/lou.spinoza.ethica.asd lisp/ethics.lisp
	@echo ---
	@echo Compiling LISP.
	@echo
	$(LISP) --load 'lisp/lou.spinoza.ethica.asd'\
		--eval '(ql:quickload :lou.spinoza.ethica)'\
		--eval '(asdf:make :lou.spinoza.ethica)'\
		--eval '(quit)'
	@echo ---

deploy: $(ARCHIVE) all
	@echo ---
	@echo Uploading files.
	@echo
	rsync -vrL --delete $(BUILD_DIR)/ repetitions:~/ethica
	@echo ---

clean:
	@echo ---
	@echo Cleaning directory.
	@echo
	rm -R $(BUILD_DIR)
	rm -R lisp/bin
	@echo ---
