.PHONY: build install clean test release man install-man VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev") PREFIX ?= /usr/local MANPREFIX ?= $(PREFIX)/share/man build: go build -o passage . build-release: go build -trimpath -ldflags "-s -w -X main.version=$(VERSION)" -o passage . install: build @mkdir -p $(DESTDIR)$(PREFIX)/bin cp passage $(DESTDIR)$(PREFIX)/bin/passage @echo "Installed passage to $(DESTDIR)$(PREFIX)/bin/passage" install-user: build @mkdir -p ~/.local/bin cp passage ~/.local/bin/passage @echo "Installed passage to ~/.local/bin/passage" man: passage.1 passage.1: passage.1.md @if command -v pandoc >/dev/null 2>&1; then \ pandoc passage.1.md -s -t man -o passage.1; \ elif command -v go-md2man >/dev/null 2>&1; then \ go-md2man -in passage.1.md -out passage.1; \ else \ echo "Error: pandoc or go-md2man required to build manpage"; \ echo "Install pandoc: sudo apt-get install pandoc (Debian/Ubuntu)"; \ echo "Or install go-md2man: go install github.com/cpuguy83/go-md2man/v2@latest"; \ exit 1; \ fi install-man: man @mkdir -p $(DESTDIR)$(MANPREFIX)/man1 cp passage.1 $(DESTDIR)$(MANPREFIX)/man1/passage.1 @if command -v mandb >/dev/null 2>&1; then \ mandb $(DESTDIR)$(MANPREFIX) >/dev/null 2>&1 || true; \ fi @echo "Installed manpage to $(DESTDIR)$(MANPREFIX)/man1/passage.1" install-user-man: man @mkdir -p ~/.local/share/man/man1 cp passage.1 ~/.local/share/man/man1/passage.1 @if command -v mandb >/dev/null 2>&1; then \ mandb ~/.local/share/man >/dev/null 2>&1 || true; \ fi @echo "Installed manpage to ~/.local/share/man/man1/passage.1" clean: rm -f passage passage.1 test: go test ./... test-race: go test -race ./... release: build-release @echo "Built release version: $(VERSION)"