builddir := tmp
LINTDIR := $(builddir)/lint
HTMLDIR := $(builddir)/html
+SRCDIR := $(builddir)/src
DESTDIR :=
prefix := /usr/local
INSTALL := install
INSTALL_DATA := $(INSTALL) -m 644
INSTALL_DIR := $(INSTALL) -m 755 -d
+MKDIR := mkdir -p
RM := rm
RMDIR := rmdir --ignore-fail-on-non-empty
GROFF := groff
+MAN := man
MANDOC := mandoc
MAN2HTML := man2html
_man8pages := $(filter %$(man8ext),$(_manpages))
LINT_groff :=$(patsubst $(MANDIR)/%,$(LINTDIR)/%.lint.groff.touch,$(LINTPAGES))
LINT_mandoc:=$(patsubst $(MANDIR)/%,$(LINTDIR)/%.lint.mandoc.touch,$(LINTPAGES))
+SRCPAGEDIRS:=$(patsubst $(MANDIR)/%,$(SRCDIR)/%.d,$(LINTPAGES))
+UNITS_c := $(sort $(patsubst $(MANDIR)/%,$(SRCDIR)/%,$(shell \
+ find $(MANDIR)/man?/ -type f \
+ | grep '$(manext)$$' \
+ | xargs grep -l '^\.TH ' \
+ | while read m; do \
+ <$$m \
+ sed -n "s,^\... SRC BEGIN (\(.*.c\))$$,$$m.d/\1,p"; \
+ done)))
MANDIRS := $(sort $(shell find $(MANDIR)/man? -type d))
HTMLDIRS := $(patsubst $(MANDIR)/%,$(HTMLDIR)/%/.,$(MANDIRS))
LINTDIRS := $(patsubst $(MANDIR)/%,$(LINTDIR)/%/.,$(MANDIRS))
+SRCDIRS := $(patsubst $(MANDIR)/%,$(SRCDIR)/%/.,$(MANDIRS))
_htmldirs := $(patsubst $(HTMLDIR)/%,$(DESTDIR)$(htmldir_)/%,$(HTMLDIRS))
_mandirs := $(patsubst $(MANDIR)/%,$(DESTDIR)$(mandir)/%/.,$(MANDIRS))
_man0dir := $(filter %man0/.,$(_mandirs))
@:
+########################################################################
+# src
+
+$(SRCPAGEDIRS): $(SRCDIR)/%.d: $(MANDIR)/% | $$(@D)/.
+ $(info MKDIR $@)
+ $(MKDIR) $@
+ touch $@
+
+$(UNITS_c): $$(@D)
+ $(info SED $@)
+ <$(patsubst $(SRCDIR)/%.d,$(MANDIR)/%,$<) \
+ sed -n \
+ -e '/^\.TH/,/^\.SH/{/^\.SH/!p}' \
+ -e '/^\.SH EXAMPLES/p' \
+ -e "/^\... SRC BEGIN ($(@F))$$/,/^\... SRC END$$/p" \
+ | $(MAN) -P cat -l - \
+ | sed '/^[^ ]/d' \
+ | sed 's/^ //' \
+ >$@ \
+ || exit $$?
+
+$(SRCDIRS): %/.: | $$(dir %). $(SRCDIR)/.
+
+.PHONY: build-src src
+build-src src: $(UNITS_c) | builddirs-src
+ @:
+
+.PHONY: builddirs-src
+builddirs-src: $(SRCDIRS)
+ @:
+
+
########################################################################
# lint