| 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 |