# SPDX-FileCopyrightText: 2026 Eric Ireland
# SPDX-License-Identifier: GPL-3.0-or-later

PREFIX ?= /usr/local
SYSCONFDIR ?= /etc
DESTDIR ?=
PYTHON ?= python3
INSTALL ?= install
GZIP ?= gzip
GIT ?= git
SHA256SUM ?= sha256sum

SBINDIR := $(DESTDIR)$(PREFIX)/sbin
MANDIR := $(DESTDIR)$(PREFIX)/share/man/man8
BACKUPDIR := $(DESTDIR)/var/backups/vmailctl
CONFIG := $(DESTDIR)$(SYSCONFDIR)/vmailctl.conf
VERSION := $(shell sed -n 's/^VERSION = "\(.*\)"/\1/p' vmailctl)
RELEASE_TAG ?= v$(VERSION)
DISTDIR ?= dist
DIST_NAME := vmailctl-$(VERSION)
DIST_ARCHIVE := $(DISTDIR)/$(DIST_NAME).tar.gz
DIST_CHECKSUM := $(DIST_ARCHIVE).sha256

.PHONY: all check man-check dist install

all: check

check:
	PYTHONDONTWRITEBYTECODE=1 $(PYTHON) -m unittest discover -v \
		-s tests -p 'test_*.py'

man-check:
	groff -man -z -ww man/vmailctl.8

dist: check man-check
	@test -n "$(VERSION)" || { echo "Cannot determine VERSION" >&2; exit 1; }
	@$(GIT) rev-parse --verify --quiet \
		"refs/tags/$(RELEASE_TAG)^{commit}" >/dev/null || { \
		echo "Release tag $(RELEASE_TAG) does not exist" >&2; exit 1; \
	}
	@$(INSTALL) -d -m 0755 "$(DISTDIR)"
	@set -eu; \
		archive_tmp="$(DIST_ARCHIVE).tmp"; \
		checksum_tmp="$(DIST_CHECKSUM).tmp"; \
		trap 'rm -f -- "$$archive_tmp" "$$checksum_tmp"' EXIT; \
		LC_ALL=C $(GIT) archive --format=tar \
			--prefix="$(DIST_NAME)/" "$(RELEASE_TAG)" | \
			$(GZIP) -n -9 >"$$archive_tmp"; \
		mv -f -- "$$archive_tmp" "$(DIST_ARCHIVE)"; \
		(cd "$(DISTDIR)" && \
			$(SHA256SUM) "$(DIST_NAME).tar.gz") >"$$checksum_tmp"; \
		mv -f -- "$$checksum_tmp" "$(DIST_CHECKSUM)"; \
		trap - EXIT
	@echo "Created $(DIST_ARCHIVE)"
	@echo "Created $(DIST_CHECKSUM)"

install:
	$(INSTALL) -d -m 0755 $(SBINDIR)
	$(INSTALL) -m 0755 vmailctl $(SBINDIR)/vmailctl
	$(INSTALL) -d -m 0755 $(DESTDIR)$(SYSCONFDIR)
	@if test -e "$(CONFIG)"; then \
		echo "Preserving existing $(CONFIG)"; \
	else \
		$(INSTALL) -m 0644 vmailctl.conf.example "$(CONFIG)"; \
	fi
	$(INSTALL) -d -m 0700 $(BACKUPDIR)
	$(INSTALL) -d -m 0755 $(MANDIR)
	$(INSTALL) -m 0644 man/vmailctl.8 $(MANDIR)/vmailctl.8
	$(GZIP) -n -9 -f $(MANDIR)/vmailctl.8
	@if test -z "$(DESTDIR)" && command -v mandb >/dev/null 2>&1; then \
		mandb -q; \
	fi
