Makefile (1555B)
1 CARGO ?= cargo 2 PREFIX ?= /usr/local 3 BINDIR ?= $(PREFIX)/bin 4 MANDIR ?= $(PREFIX)/share/man 5 DESTDIR ?= 6 7 BIN := dam 8 MANPAGE := dam.1 9 10 TARGET := $(shell git rev-parse --show-toplevel)/target/release/$(BIN) 11 12 .DEFAULT_GOAL := help 13 14 .PHONY: build 15 build: ## Build a release binary 16 $(CARGO) build --release 17 18 .PHONY: debug 19 debug: ## Build a debug binary 20 $(CARGO) build 21 22 .PHONY: run 23 run: ## Run dam (pass args with ARGS=...) 24 $(CARGO) run -- $(ARGS) 25 26 .PHONY: test 27 test: ## Run the test suite 28 $(CARGO) test 29 30 .PHONY: check 31 check: ## Type-check without building artifacts 32 $(CARGO) check 33 34 .PHONY: man-gen 35 man-gen: ## Regenerate dam.1 from dam's CLI (clap_mangen) 36 $(CARGO) run --quiet --example mangen 37 38 .PHONY: man 39 man: ## Open a preview of dam.1 40 man ./$(MANPAGE) 41 42 .PHONY: lint 43 lint: ## Run linters (fmt, clippy, man) 44 $(CARGO) fmt 45 $(CARGO) clippy --all-targets -- -D warnings 46 mandoc -T lint $(MANPAGE) 47 48 .PHONY: install 49 install: build ## Install the binary and man page under PREFIX 50 install -d $(DESTDIR)$(BINDIR) $(DESTDIR)$(MANDIR)/man1 51 install -m 0755 $(TARGET) $(DESTDIR)$(BINDIR)/$(BIN) 52 install -m 0644 $(MANPAGE) $(DESTDIR)$(MANDIR)/man1/$(MANPAGE) 53 54 .PHONY: uninstall 55 uninstall: ## Remove the installed binary and man page 56 rm -f $(DESTDIR)$(BINDIR)/$(BIN) 57 rm -f $(DESTDIR)$(MANDIR)/man1/$(MANPAGE) 58 59 .PHONY: clean 60 clean: ## Remove build artifacts 61 $(CARGO) clean 62 63 .PHONY: help 64 help: ## List available targets 65 @grep -hE '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) \ 66 | awk 'BEGIN {FS = ":.*?## "} {printf " \033[36m%-12s\033[0m %s\n", $$1, $$2}'