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