LISP=sbcl

PREFIX=~/.local

override SRCS=clash.asd format.lisp parse-date.lisp clash.lisp
override LOAD_CLASH=--eval "(ql:quickload '(:cl-ppcre :clingon :local-time :uiop :trivial-features :osicat))" \
			--eval '(require "asdf")' \
			--eval '(asdf:load-asd (merge-pathnames "../cl-xdg-trash/cl-xdg-trash.asd" (uiop:getcwd)))' \
			--eval '(asdf:load-asd (merge-pathnames "clash.asd" (uiop:getcwd)))' \
			--eval '(asdf:load-system :clash)'

all: clash clash.1

clash: $(SRCS)
	$(LISP) $(LOAD_CLASH) \
			--eval '(asdf:make :clash)' \
			--eval '(uiop:quit)'

clash.md: $(SRCS)
	$(LISP) $(LOAD_CLASH) \
			--eval '(clash:make-markdown-doc)' \
			--eval '(uiop:quit)' \
			-- clash.md

clash.1: clash.md
	go-md2man <clash.md >clash.1

install: clash clash.1
	install -D clash $(PREFIX)/bin/clash
	install -m0644 -D clash.1 $(PREFIX)/share/man/man1/clash.1

override DEPLOY_OUTPUT=bin/clash bin/libosicat.so bin/librt.so.1

deploy-build: $(DEPLOY_OUTPUT)

$(DEPLOY_OUTPUT): $(SRCS)
	$(LISP) --eval '(push :deploy-console *features*)' \
			$(LOAD_CLASH) \
			--eval '(ql:quickload :deploy)' \
			--eval "(asdf:operate 'deploy:deploy-op :clash)" \
			--eval '(uiop:quit)'

deploy-install: deploy-build clash.1
	install -Dt "$(PREFIX)/bin" bin/clash
	install -m 0644 -Dt "$(PREFIX)/lib/clash" bin/libosicat.so bin/librt.so.1
	install -m 0644 -Dt "$(PREFIX)/share/man/man1/" clash.1

clean:
	rm -f clash clash.md clash.1
	rm -rf bin/

.PHONY: all deploy-build deploy-install clean
