# Make Unix man pages from Netpbm HTML user manual # GNU make version 3.81 or newer recommended. # Tested with GNU make version 3.80. # CAVEAT: USERGUIDE must be a valid directory: even for "make clean"! # MAKEFILE_DIR is the directory with this file: manpage.mk. # Should be buildtools. # Use $(realpath) and $(lastword) if available. # (both appear in GNU make v. 3.81) ifeq ($(realpath $(CURDIR)/.),$(CURDIR)) MAKEFILE_DIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST)))) else MAKEFILE_DIR := $(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))) endif # Program 'makeman' should be in the same directory. MAKEMAN ?= $(MAKEFILE_DIR)makeman # Install location of manpages. # Subdirectories man{1,3,5} must exist. MANDIR ?= /usr/share/man/ # Directory with the HTML input files. It must be explicitly set and # must be a valid directory. 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 # In the past, the following default value was used. It works if you've done # a Subversion checkout for source code and userguide in the same directory, # and you are working in a subdirectory of netpbm, say ./buildtools . # USERGUIDE = ../../userguide # The files that don't get converted to manual pages. # Override at the command line if necessary. # error.html: appears when problem occurs when fetching HTML files with wget. # directory.html: list of Netpbm programs. # libnetpbm_dir.html: directory to pages describing libnetpbm functions # hpcdtoppm: Not distributed via Sourceforge for copyright restrictions. # ppmsvgalib: Not used in systems with X Window System. # vidtoppm: Does not compile due to missing header files. EXCEPTIONS = \ directory.html \ error.html \ hpcdtoppm.html \ liberror.html \ libnetpbm_dir.html \ ppmsvgalib.html \ vidtoppm.html # File lists # We do not provide a list of troff manpages to be generated. # Instead the list is generated afresh from HTML file names. Reasons: # 1. Any list would have to be updated every time an HTML file is added. # 2. The suffix (man section) depends on content (a "META" tag) of the # HTML file. (The makeman script is clever.) # 3. In one instance the file stem name changes: index.html => netpbm.1 # HTML files in USERGUIDE HTML_ALL := $(sort $(notdir $(wildcard $(USERGUIDE)/*.html))) HTMLMANUALS := $(filter-out $(EXCEPTIONS),$(HTML_ALL)) HTML_REJECT := $(filter $(EXCEPTIONS),$(HTML_ALL)) # Subsets of HTMLMANUALS, by target man section HTML3 := $(shell cd $(USERGUIDE) && \ fgrep -l -i '' \ $(HTMLMANUALS)) HTML5 := $(shell cd $(USERGUIDE) && \ fgrep -l -i '' \ $(HTMLMANUALS)) HTML1 := $(filter-out $(HTML3) $(HTML5),$(HTMLMANUALS)) # Troff man pages, by section MAN1 := $(patsubst index.1,netpbm.1,$(HTML1:.html=.1)) MAN3 := $(HTML3:.html=.3) MAN5 := $(HTML5:.html=.5) MANPAGES := $(MAN1) $(MAN3) $(MAN5) # XML 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) # Note that this may give different results from "ls ." .PHONY : reportman reportman: @echo $(MANPAGES) # Static rules for converting HTML to troff man -- reports bad lines # to standard error. %.1 %.3 %.5: $(USERGUIDE)/%.html @echo Converting $< to $@ @python $(MAKEMAN) -d $(USERGUIDE) $(> /dev/null # This will install the generated man pages. # Note that lists MAN1 MAN3 MAN5 depend upon the names of HTML files # in the USERGUIDE directory, even after man page generation. # If the current directory has "pbm.1" but USERGUIDE does not have # "pbm.html", the document will not be installed. # If the USERGUIDE directory is empty, no documents will be installed. .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 # This will uninstall the man pages. # Only pages with corresponding files in USERGUIDE are deleted. .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 # Legacy uninstall target. #oldclean: # # Clean up old locations on Fedora Core 2 # rm -f $(MANDIR)/man1/extendedopacity.1.gz # rm -f $(MANDIR)/man3/directory.3.gz # rm -f $(MANDIR)/man3/libnetpbm_dir.3.gz # # remove pointer man pages (that say, "The man page isn't here") # # which might have been installed previously # for f in $(MAN1); do rm -f $(MANDIR)/man1/$$f; done # for f in $(MAN3); do rm -f $(MANDIR)/man3/$$f; done # for f in $(MAN5); do rm -f $(MANDIR)/man5/$$f; done .PHONY: clean clean: @rm -f *.[135] $(XML)