PREFIX = DESTDIR = BINDIR = MANDIR = INSTALL = install # Default install prefix follows the host OS convention (override on the # command line: `make PREFIX=...`): # illumos, Solaris (uname -s = SunOS): /opt/party # Linux, *BSD, macOS, everywhere else: /usr/local # POSIX make has no ifeq or $(shell), so the OS dispatch lives in the # install/uninstall recipes themselves. BINDIR and MANDIR remain # independently overridable. Plain `=` rather than `?=` keeps illumos # /usr/bin/make happy (it predates POSIX-2008's conditional assignment). # # Beyond copying files, `make install` also wires the install bindir into # the system PATH so `party` and `man party` work from a fresh login shell # without -M or rc-file edits. The wiring is done by tools/post-install.sh # and is OS-aware: on illumos /opt/party is appended to /etc/default/login; # on Linux/BSD/macOS at /usr/local nothing needs doing; for non-standard # prefixes elsewhere the script prints the export lines to add manually. # `make uninstall` reverses the wiring symmetrically. Both steps are # skipped when DESTDIR is set (package staging context). all: @echo "party is a single shell script; nothing to build." @echo "Run 'make install' (PREFIX auto-detects from uname -s)." install: @prefix='$(PREFIX)'; \ [ -n "$$prefix" ] || case `uname -s` in \ SunOS) prefix=/opt/party ;; \ *) prefix=/usr/local ;; \ esac; \ bindir='$(BINDIR)'; [ -n "$$bindir" ] || bindir="$$prefix/bin"; \ mandir='$(MANDIR)'; [ -n "$$mandir" ] || mandir="$$prefix/share/man/man1"; \ echo "Installing to $$prefix (bin=$$bindir, man=$$mandir)"; \ $(INSTALL) -d "$(DESTDIR)$$bindir" "$(DESTDIR)$$mandir" && \ $(INSTALL) -m 0755 party "$(DESTDIR)$$bindir/party" && \ $(INSTALL) -m 0644 party.1 "$(DESTDIR)$$mandir/party.1" && \ { [ -n "$(DESTDIR)" ] || sh tools/post-install.sh install "$$prefix"; } uninstall: @prefix='$(PREFIX)'; \ [ -n "$$prefix" ] || case `uname -s` in \ SunOS) prefix=/opt/party ;; \ *) prefix=/usr/local ;; \ esac; \ bindir='$(BINDIR)'; [ -n "$$bindir" ] || bindir="$$prefix/bin"; \ mandir='$(MANDIR)'; [ -n "$$mandir" ] || mandir="$$prefix/share/man/man1"; \ rm -f "$(DESTDIR)$$bindir/party" "$(DESTDIR)$$mandir/party.1"; \ [ -n "$(DESTDIR)" ] || sh tools/post-install.sh uninstall "$$prefix" check: sh -n party @if command -v bats >/dev/null 2>&1; then \ bats tests; \ else \ echo "bats not installed; skipping tests."; \ fi # Static analysis. Deliberately a local-only target rather than a bats # test: shellcheck reads bytes, not the OS, so running it across the # remote test matrix would be redundant. SC3065/SC3067 flag `-k`, `-O`, # and `-L` as non-strict-POSIX, but every /bin/sh in our matrix (dash, # bash, mksh, ksh) honors them and rewriting through stat would be a # portability step backward. lint: @if command -v shellcheck >/dev/null 2>&1; then \ shellcheck -s sh -e SC3065,SC3067 party; \ else \ echo "shellcheck not installed; install it locally to lint."; \ exit 1; \ fi .PHONY: all install uninstall check lint