| prefix = /usr/local |
| mandir = $(prefix)/man |
| INSTALL = install |
| INSTALL_DATA = ${INSTALL} -m 644 |
| |
| # By default, the man pages are generated using a copy of go-md2man built from |
| # the vendored sources in this directory. This behavior can be overridden by |
| # setting the GO_MD2MAN variable to the name/path of an existing go-md2man |
| # binary. |
| GO_MD2MAN ?= .build/go-md2man |
| |
| ALL_PAGES := $(wildcard *.*.md) |
| |
| # Determine which manual sections we are generating pages for |
| # by isolating the last part of the filename before the extension |
| # and eliminating duplicates. |
| man_section = $(lastword $(subst ., ,$(1))) |
| sections := $(sort $(foreach page,$(ALL_PAGES:.md=),$(call man_section,$(page)))) |
| |
| # Dynamically generate pattern rules for each manual section |
| # so make knows how to build a target like man8/dockerd.8. |
| define MANPAGE_template |
| man$(1)/%.$(1): %.$(1).md $(if $(findstring file,$(origin GO_MD2MAN)),$(GO_MD2MAN)) | man$(1) |
| $(GO_MD2MAN) -in $$< -out $$@ |
| endef |
| $(foreach sec,$(sections),$(eval $(call MANPAGE_template,$(sec)))) |
| |
| # Default target: build all man pages. |
| all: $(foreach page,$(ALL_PAGES:.md=),man$(call man_section,$(page))/$(page)) |
| |
| # Target for creating the man{1..8} directories as needed. |
| .PRECIOUS: man% |
| man%: |
| -mkdir $@ |
| |
| .PHONY: install |
| install: all |
| @set -ex; \ |
| for sec in $(sections); do \ |
| $(INSTALL) -d $(DESTDIR)$(mandir)/man$$sec && \ |
| $(INSTALL_DATA) man$$sec/* $(DESTDIR)$(mandir)/man$$sec; \ |
| done |
| |
| .build/go-md2man: go.mod go.sum |
| GO111MODULE=auto go build -o $@ github.com/cpuguy83/go-md2man/v2 |
| |
| .PHONY: clean |
| clean: |
| rm -r man* .build |