xref: /netbsd-src/share/mk/bsd.man.mk (revision 9fbd88883c38d0c0fbfcbe66d76fe6b0fab3f9de)
1#	$NetBSD: bsd.man.mk,v 1.73 2002/01/06 01:27:25 mrg Exp $
2#	@(#)bsd.man.mk	8.1 (Berkeley) 6/8/93
3
4.include <bsd.init.mk>
5
6##### Basic targets
7.PHONY:		catinstall maninstall catpages manpages catlinks manlinks \
8		cleanman html installhtml cleanhtml
9realinstall:	${MANINSTALL}
10
11##### Default values
12.if ${USETOOLS} == "yes"
13TMACDEPDIR?=	${TOOLDIR}/share/groff/tmac
14.else
15TMACDEPDIR?=	${DESTDIR}/usr/share/tmac
16.endif
17
18HTMLDIR?=	${DESTDIR}/usr/share/man
19CATDEPS?=	${TMACDEPDIR}/tmac.andoc \
20		${TMACDEPDIR}/tmac.doc \
21		${TMACDEPDIR}/tmac.doc-ditroff \
22		${TMACDEPDIR}/tmac.doc-common \
23		${TMACDEPDIR}/tmac.doc-nroff \
24		${TMACDEPDIR}/tmac.doc-syms
25MANTARGET?=	cat
26
27GROFF_HTML?=	${GROFF} -Tlatin1 -mdoc2html -P-b -P-o -P-u
28NROFF?=		${GROFF} -Tascii -mtty-char
29TBL?=		tbl
30
31MAN?=
32MLINKS?=
33_MNUMBERS=	1 2 3 4 5 6 7 8 9
34.SUFFIXES:	${_MNUMBERS:@N@.$N@}
35
36MANCOMPRESS?=	${MANZ:Dgzip -cf}
37MANSUFFIX?=	${MANZ:D.gz}
38
39# make MANCOMPRESS a filter, so it can be inserted on an as-needed basis
40.if !empty(MANCOMPRESS)
41MANCOMPRESS:=	| ${MANCOMPRESS}
42.endif
43
44__installpage: .USE
45	@cmp -s ${.ALLSRC} ${.TARGET} > /dev/null 2>&1 || \
46	    (echo "${INSTALL_FILE} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \
47		${.ALLSRC} ${.TARGET}" && \
48	     ${INSTALL_FILE} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \
49		${.ALLSRC} ${.TARGET})
50
51##### Build and install rules (source form pages)
52
53.if ${MKMAN} != "no"
54maninstall:	manlinks
55manpages::	# ensure target exists
56MANPAGES=	${MAN:C/.$/&${MANSUFFIX}/}
57
58realall:	${MANPAGES}
59.if !empty(MANSUFFIX)
60.NOPATH:	${MANPAGES}
61.SUFFIXES:	${_MNUMBERS:@N@.$N${MANSUFFIX}@}
62
63${_MNUMBERS:@N@.$N.$N${MANSUFFIX}@}:			# build rule
64	cat ${.IMPSRC} ${MANCOMPRESS} > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}
65.endif # !empty(MANSUFFIX)
66
67.for F in ${MANPAGES:S/${MANSUFFIX}$//:O:u}
68_F:=		${DESTDIR}${MANDIR}/man${F:T:E}${MANSUBDIR}/${F}${MANSUFFIX}
69
70${_F}:		${F}${MANSUFFIX} __installpage		# install rule
71manpages::	${_F}
72.PRECIOUS:	${_F}					# keep if install fails
73.PHONY:		${UPDATE:D:U${_F}}			# clobber unless UPDATE
74.if !defined(BUILD) && !make(all) && !make(${F})
75${_F}:		.MADE					# no build at install
76.endif
77.endfor
78
79manlinks: manpages					# symlink install
80.if !empty(MLINKS)
81	@set ${MLINKS}; \
82	while test $$# -ge 2; do \
83		name=$$1; shift; \
84		dir=${DESTDIR}${MANDIR}/man$${name##*.}; \
85		l=$${dir}${MANSUBDIR}/$${name}${MANSUFFIX}; \
86		name=$$1; shift; \
87		dir=${DESTDIR}${MANDIR}/man$${name##*.}; \
88		t=$${dir}${MANSUBDIR}/$${name}${MANSUFFIX}; \
89		if test $$l -nt $$t -o ! -f $$t; then \
90			echo $$t -\> $$l; \
91			${INSTALL_LINK} $$l $$t; \
92		fi; \
93	done
94.endif
95.endif # ${MKMAN} != "no"
96
97##### Build and install rules (plaintext pages)
98
99.if (${MKCATPAGES} != "no") && (${MKMAN} != "no")
100catinstall:	catlinks
101catpages::	# ensure target exists
102CATPAGES=	${MAN:C/\.([1-9])$/.cat\1${MANSUFFIX}/}
103
104realall:	${CATPAGES}
105.NOPATH:	${CATPAGES}
106.SUFFIXES:	${_MNUMBERS:@N@.cat$N${MANSUFFIX}@}
107
108${_MNUMBERS:@N@.$N.cat$N${MANSUFFIX}@}: ${CATDEPS}	# build rule
109.if defined(USETBL)
110	${TBL} ${.IMPSRC} | ${NROFF} -mandoc ${MANCOMPRESS} > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}
111.else
112	${NROFF} -mandoc ${.IMPSRC} ${MANCOMPRESS} > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}
113.endif
114
115.for F in ${CATPAGES:S/${MANSUFFIX}$//:O:u}
116_F:=		${DESTDIR}${MANDIR}/${F:T:E}${MANSUBDIR}/${F:R}.0${MANSUFFIX}
117${_F}:		${F}${MANSUFFIX} __installpage		# install rule
118catpages::	${_F}
119.PRECIOUS:	${_F}					# keep if install fails
120.PHONY:		${UPDATE:D:U${_F}}			# noclobber install
121.if !defined(BUILD) && !make(all) && !make(${F})
122${_F}:		.MADE					# no build at install
123.endif
124.endfor
125
126catlinks: catpages					# symlink install
127.if !empty(MLINKS)
128	@set ${MLINKS}; \
129	while test $$# -ge 2; do \
130		name=$$1; shift; \
131		dir=${DESTDIR}${MANDIR}/cat$${name##*.}; \
132		l=$${dir}${MANSUBDIR}/$${name%.*}.0${MANSUFFIX}; \
133		name=$$1; shift; \
134		dir=${DESTDIR}${MANDIR}/cat$${name##*.}; \
135		t=$${dir}${MANSUBDIR}/$${name%.*}.0${MANSUFFIX}; \
136		if test $$l -nt $$t -o ! -f $$t; then \
137			echo $$t -\> $$l; \
138			${INSTALL_LINK} $$l $$t; \
139		fi; \
140	done
141.endif
142.endif # (${MKCATPAGES} != "no") && (${MKMAN} != "no")
143
144##### Build and install rules (HTML pages)
145
146.if !defined(NOHTML)
147installhtml:	htmlpages
148htmlpages::	# ensure target exists
149HTMLPAGES=	${MAN:C/\.([1-9])$/.html\1/}
150
151html:		${HTMLPAGES}
152.NOPATH:	${HTMLPAGES}
153.SUFFIXES:	${_MNUMBERS:@N@.html$N@}
154
155${_MNUMBERS:@N@.$N.html$N@}: ${CATDEPS}			# build rule
156	${GROFF_HTML} ${.IMPSRC} > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}
157
158.for F in ${HTMLPAGES:O:u}
159_F:=		${HTMLDIR}/${F:T:E}/${F:R}.html		# installed path
160${_F}:		${F} __installpage			# install rule
161htmlpages::	${_F}
162.PRECIOUS:	${_F}					# keep if install fails
163.PHONY:		${UPDATE:D:U${_F}}			# noclobber install
164.if !defined(BUILD) && !make(all) && !make(${F})
165${_F}:		.MADE					# no build at install
166.endif
167.endfor
168
169cleanhtml:
170	rm -f ${HTMLPAGES}
171.endif # !defined(NOHTML)
172
173##### Clean rules
174.undef _F
175
176cleandir: cleanman
177cleanman:
178.if !empty(MAN) && (${MKMAN} != "no")
179.if (${MKCATPAGES} != "no")
180	rm -f ${CATPAGES}
181.endif
182.if !empty(MANSUFFIX)
183	rm -f ${MANPAGES} ${CATPAGES:S/${MANSUFFIX}$//}
184.endif
185.endif
186# (XXX ${CATPAGES:S...} cleans up old .catN files where .catN.gz now used)
187
188##### Pull in related .mk logic
189.include <bsd.obj.mk>
190.include <bsd.sys.mk>
191
192${TARGETS} catinstall maninstall: # ensure existence
193