.SUFFIXES:

RM = rm -f
TAR = tar
XZ = xz
GZIP = gzip

SBCL = sbcl
SBCLFLAGS =

DESTDIR =
prefix = /usr/local
SRCDIR = $(prefix)/share/common-lisp/source
BINDIR = $(prefix)/bin
VERSION != cat .version

.PHONY: all
all:
	$(SBCL) $(SBCLFLAGS) --non-interactive --eval "(require 'asdf)" --eval '(asdf:load-system :discocl)'

.PHONY: bin
bin: discocl

discocl:
	$(SBCL) $(SBCLFLAGS) --non-interactive --eval "(asdf:load-system :discocl/bin)"

.PHONY: install-bin
install-bin:
	mkdir -p "$(DESTDIR)$(BINDIR)"
	install -c -m755 discocl "$(DESTDIR)$(BINDIR)"/discocl

.PHONY: uninstall-bin
uninstall-bin:
	$(RM) "$(DESTDIR)$(BINDIR)"/discocl

.PHONY: install-lib
install-lib:
	mkdir -p "$(DESTDIR)$(SRCDIR)"/discocl
	install -m644 discocl.asd "$(DESTDIR)$(SRCDIR)"/discocl/
	mkdir -p "$(DESTDIR)$(SRCDIR)"/discocl/src/
	install -c -m644 src/*.lisp "$(DESTDIR)$(SRCDIR)"/discocl/src/
	mkdir -p "$(DESTDIR)$(SRCDIR)"/discocl/test/
	install -m644 test/*.lisp "$(DESTDIR)$(SRCDIR)"/discocl/test/

.PHONY: uninstall-lib
uninstall-lib:
	rm -f "$(DESTDIR)$(SRCDIR)"/discocl/src/* "$(DESTDIR)$(SRCDIR)"/discocl/*.asd

discocl.1:
	$(SBCL) $(SBCLFLAGS) --noinform --non-interactive \
		--eval '(asdf:load-system :discocl/bin)' \
		--eval '(discocl.cli:man)' > discocl.1

.PHONY: docs
docs: discocl.1
	cd doc/ && ${MAKE}

.PHONY: install-doc
install-doc: discocl.1
	mkdir -p "$(DESTDIR)$(prefix)/man/man1"
	install -m644 discocl.1 "$(DESTDIR)$(prefix)/man/man1/discocl.1"

.PHONY: uninstall-doc
uninstall-doc:
	$(RM) "$(DESTDIR)$(prefix)/man/man1/discocl.1"

discocl-$(VERSION).tar:
	mkdir -p discocl-$(VERSION)
	$(MAKE) install-bin DESTDIR=discocl-$(VERSION)
	$(MAKE) install-lib DESTDIR=discocl-$(VERSION)
	$(TAR) -cf $@ discocl-$(VERSION)

discocl-$(VERSION).tar.xz: discocl-$(VERSION).tar
	$(XZ) $<

discocl-$(VERSION).tar.gz: discocl-$(VERSION).tar
	$(GZIP) $<

.PHONY: dist-xz
dist-xz: discocl-$(VERSION).tar.xz

.PHONY: dist-gz
dist-gz: discocl-$(VERSION).tar.gz

.PHONY: dist
dist: dist-xz

.PHONY: check
check:
	$(SBCL) --eval '(asdf:test-system :discocl)' --quit

.PHONY: clean
clean:
	$(RM) discocl-$(VERSION).tar.?z
	$(RM) -r discocl-$(VERSION)
	discocl
