ifeq ($(realpath $(CURDIR)/.),$(CURDIR)) MAKEFILE_DIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST)))) else MAKEFILE_DIR := $(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))) endif
MAKEMAN ?= $(MAKEFILE_DIR)makeman
MANDIR ?= /usr/share/man/
ifeq ($(USERGUIDE),) $(error error: Variable USERGUIDE must be explicitly set) else ifeq ($(wildcard $(USERGUIDE)/*html),) $(error error: No HTML files found in $(USERGUIDE)) endif endif
EXCEPTIONS = \ directory.html \ error.html \ hpcdtoppm.html \ liberror.html \ libnetpbm_dir.html \ ppmsvgalib.html \ vidtoppm.html
HTML_ALL := $(sort $(notdir $(wildcard $(USERGUIDE)/*.html))) HTMLMANUALS := $(filter-out $(EXCEPTIONS),$(HTML_ALL)) HTML_REJECT := $(filter $(EXCEPTIONS),$(HTML_ALL))
HTML3 := $(shell cd $(USERGUIDE) && \ fgrep -l -i '<META NAME="manual_section" CONTENT="3">' \ $(HTMLMANUALS)) HTML5 := $(shell cd $(USERGUIDE) && \ fgrep -l -i '<META NAME="manual_section" CONTENT="5">' \ $(HTMLMANUALS)) HTML1 := $(filter-out $(HTML3) $(HTML5),$(HTMLMANUALS))
MAN1 := $(patsubst index.1,netpbm.1,$(HTML1:.html=.1)) MAN3 := $(HTML3:.html=.3) MAN5 := $(HTML5:.html=.5) MANPAGES := $(MAN1) $(MAN3) $(MAN5)
XML1 := $(MAN1:.1=.xml) XML3 := $(MAN3:.3=.xml) XML5 := $(MAN5:.5=.xml) XMLPAGES = $(XML1) $(XML3) $(XML5)
.PHONY : report report: htmlcount manpagecount
.PHONY : manpagecount manpagecount: @echo Number of actual / expected troff man pages in current directory: @echo Section 1: $(words $(wildcard $(MAN1))) / $(words $(MAN1)) @echo Section 3: $(words $(wildcard $(MAN3))) / $(words $(MAN3)) @echo Section 5: $(words $(wildcard $(MAN5))) / $(words $(MAN5)) @echo total: $(words $(wildcard $(MANPAGES))) / $(words $(MANPAGES)) @echo
.PHONY : htmlcount htmlcount: @echo HTML files in USERGUIDE directory: $(USERGUIDE) @echo Total HTML files: $(words $(HTML_ALL)) @echo Rejected HTML files: $(HTML_REJECT) : $(words $(HTML_REJECT)) @echo Valid HTML files: $(words $(HTMLMANUALS)) @echo
.PHONY : reportvalid reportvalid: @echo Source HTML files in USERGUIDE directory: $(USERGUIDE) @echo $(HTMLMANUALS)
.PHONY : reportman reportman: @echo $(MANPAGES)
%.1 %.3 %.5: $(USERGUIDE)/%.html @echo Converting $< to $@ @python $(MAKEMAN) -d $(USERGUIDE) $(<F)
netpbm.1: $(USERGUIDE)/index.html @echo Converting $< to $@ @python $(MAKEMAN) -d $(USERGUIDE) index.html @mv index.1 netpbm.1
.PHONY : manpages manpages: $(MANPAGES)
$(XML1): %.xml: %.1 doclifter -v $< mv $<.xml $@
$(XML3): %.xml: %.3 doclifter -v $< mv $<.xml $@
$(XML5): %.xml: %.5 doclifter -v $< mv $<.xml $@
.PHONY : xmlpages xmlpages: manpages $(XMLPAGES)
.PHONY : xmlvalidate xmlvalidate: xmlpages xmllint -xinclude --postvalid $< >> /dev/null
.PHONY : installman installman: report set -x for f in $(wildcard $(MAN1)); do if [ -f $$f ]; then gzip <$$f >$(MANDIR)/man1/$$f.gz; fi; done for f in $(wildcard $(MAN3)); do if [ -f $$f ]; then gzip <$$f >$(MANDIR)/man3/$$f.gz; fi; done for f in $(wildcard $(MAN5)); do if [ -f $$f ]; then gzip <$$f >$(MANDIR)/man5/$$f.gz; fi; done
.PHONY : uninstallman uninstallman: report for f in $(MAN1); do if [ -f $(MANDIR)/man1/$$f.gz ]; then rm -f $(MANDIR)/man1/$$f.gz; fi; done for f in $(MAN3); do if [ -f $(MANDIR)/man3/$$f.gz ]; then rm -f $(MANDIR)/man3/$$f.gz; fi; done for f in $(MAN5); do if [ -f $(MANDIR)/man5/$$f.gz ]; then rm -f $(MANDIR)/man5/$$f.gz; fi; done
.PHONY: clean clean: @rm -f *.[135] $(XML)