# based off of the Makefile for aerc:
# https://git.sr.ht/~rjarry/aerc/tree/master/item/Makefile

.POSIX:
.SUFFIXES:
.SUFFIXES: .1 .1.scd .5 .5.scd

VERSION?=`git describe --tags --dirty 2>/dev/null || echo 0.0.0`
VPATH=doc
PREFIX?=/usr/local
BINDIR?=$(PREFIX)/bin
SHAREDIR?=$(PREFIX)/share
SYSCONFDIR?=/etc
MANDIR?=$(PREFIX)/share/man
GO?=go
GOFLAGS?=
LDFLAGS+=-X main.Version=$(VERSION) -s -w
RM?=rm -f
GOTEST=go test -count=1 -race

GOSRC!=find * -name '*.go'
GOSRC+=go.mod go.sum

DOCS := \
	superd.1 \
	superd.service.5 \
	superctl.1

all: superd superctl $(DOCS)

superctl: $(GOSRC)
	$(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o superctl ./cmd/superctl

superd: $(GOSRC)
	$(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o superd ./cmd/superd

.PHONY: fmt
fmt:
	gofmt -w .

test:
	@if [ `gofmt -l . | wc -l` -ne 0 ]; then \
		gofmt -d .; \
		echo "ERROR: source files need reformatting with gofmt"; \
		exit 1; \
	fi
	@staticcheck ./...

	@$(GOTEST) ./...
.1.scd.1:
	scdoc < $< > $@

.5.scd.5:
	scdoc < $< > $@

doc: $(DOCS)

clean:
	$(RM) $(DOCS) superd superctl

installbins: superd superctl
	install -Dm755 superd -t $(DESTDIR)$(BINDIR)/
	install -Dm755 superctl -t $(DESTDIR)$(BINDIR)/

installmisc: $(DOCS)
	mkdir -m755 -p \
		$(DESTDIR)$(SYSCONFDIR)/superd/services \
		$(DESTDIR)$(SHAREDIR)/superd/services
	install -Dm644 superd.1 -t $(DESTDIR)$(MANDIR)/man1/
	install -Dm644 superd.service.5 -t $(DESTDIR)$(MANDIR)/man5/
	install -Dm644 superctl.1 -t $(DESTDIR)$(MANDIR)/man1/
	install -Dm644 completions/zsh/superctl \
		$(DESTDIR)$(SHAREDIR)/zsh/site-functions/_superctl
	install -Dm644 completions/bash/superctl \
		$(DESTDIR)$(SHAREDIR)/bash-completion/completions/superctl

install: installbins installmisc

.PHONY: checkinstall
checkinstall:
	$(DESTDIR)$(BINDIR)/superd -v
	$(DESTDIR)$(BINDIR)/superctl -v
	test -e $(DESTDIR)$(MANDIR)/man1/superd.1
	test -e $(DESTDIR)$(MANDIR)/man5/superd.service.5
	test -e $(DESTDIR)$(MANDIR)/man1/superctl.1
	test -e $(DESTDIR)$(SHAREDIR)/zsh/site-functions/_superctl
	test -e $(DESTDIR)$(SHAREDIR)/bash-completion/completions/superctl
	test -d $(DESTDIR)$(SYSCONFDIR)/superd/services
	test -d $(DESTDIR)$(SHAREDIR)/superd/services

RMDIR_IF_EMPTY:=sh -c '! [ -d $$0 ] || ls -1qA $$0 | grep -q . || rmdir $$0'

uninstall:
	$(RM) $(DESTDIR)$(BINDIR)/superd
	$(RM) $(DESTDIR)$(BINDIR)/superctl
	$(RM) $(DESTDIR)$(MANDIR)/man1/superd.1
	$(RM) $(DESTDIR)$(MANDIR)/man5/superd.service.5
	$(RM) $(DESTDIR)$(MANDIR)/man1/superctl.1
	$(RM) $(DESTDIR)$(SHAREDIR)/zsh/site-functions/_superctl
	$(RM) $(DESTDIR)$(SHAREDIR)/bash-completion/completions/superctl
	${RMDIR_IF_EMPTY} $(DESTDIR)$(BINDIR)
	$(RMDIR_IF_EMPTY) $(DESTDIR)$(MANDIR)/man1
	$(RMDIR_IF_EMPTY) $(DESTDIR)$(MANDIR)/man5
	$(RMDIR_IF_EMPTY) $(DESTDIR)$(SYSCONFDIR)/superd
	$(RMDIR_IF_EMPTY) $(DESTDIR)$(SHAREDIR)/superd
	$(RMDIR_IF_EMPTY) $(DESTDIR)$(SHAREDIR)/zsh/site_functions
	$(RMDIR_IF_EMPTY) $(DESTDIR)$(SHAREDIR)/bash-completion/completions

.PHONY: all doc clean install uninstall test
