xref: /netbsd-src/share/mk/bsd.man.mk (revision 274254cdae52594c1aa480a736aef78313d15c9c)
1#	$NetBSD: bsd.man.mk,v 1.99 2009/03/31 21:00:34 perry 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.PHONY:		htmlinstall htmlpages htmllinks
9realinstall:	${MANINSTALL}
10
11##### Default values
12.if ${USETOOLS} == "yes"
13TMACDEPDIR?=	${TOOLDIR}/share/groff/tmac
14.else
15TMACDEPDIR?=	/usr/share/tmac
16.endif
17
18HTMLDIR?=	${DESTDIR}${MANDIR}
19CATDEPS?=	${TMACDEPDIR}/andoc.tmac \
20		${TMACDEPDIR}/doc.tmac \
21		${TMACDEPDIR}/mdoc/doc-common \
22		${TMACDEPDIR}/mdoc/doc-ditroff \
23		${TMACDEPDIR}/mdoc/doc-nroff \
24		${TMACDEPDIR}/mdoc/doc-syms
25HTMLDEPS?=	${TMACDEPDIR}/doc2html.tmac
26MANTARGET?=	cat
27
28MAN?=
29MLINKS?=
30_MNUMBERS=	1 2 3 4 5 6 7 8 9
31.SUFFIXES:	${_MNUMBERS:@N@.$N@}
32
33.if ${MKMANZ} == "no"
34MANCOMPRESS?=
35MANSUFFIX?=
36.else
37MANCOMPRESS?=	gzip -ncf
38MANSUFFIX?=	.gz
39.endif
40
41# make MANCOMPRESS a filter, so it can be inserted on an as-needed basis
42.if !empty(MANCOMPRESS)
43MANCOMPRESS:=	| ${MANCOMPRESS}
44.endif
45
46__installpage: .USE
47	@cmp -s ${.ALLSRC} ${.TARGET} > /dev/null 2>&1 || \
48	    (${_MKSHMSG_INSTALL} ${.TARGET}; \
49	     ${_MKSHECHO} "${INSTALL_FILE} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \
50		${.ALLSRC} ${.TARGET}" && \
51	     ${INSTALL_FILE} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \
52		${.ALLSRC} ${.TARGET})
53
54# XXX consider including bsd.links.mk and using __linkinstall instead
55__linkinstallpage: .USE
56	${_MKSHMSG_INSTALL} ${.TARGET}; \
57	${_MKSHECHO} "${INSTALL_LINK} ${.ALLSRC} ${.TARGET}" && \
58	${INSTALL_LINK} ${.ALLSRC} ${.TARGET}
59
60##### Build and install rules (source form pages)
61
62.if ${MKMAN} != "no"
63maninstall:	manpages manlinks
64manpages::	# ensure target exists
65MANPAGES=	${MAN:C/.$/&${MANSUFFIX}/}
66
67realall:	${MANPAGES}
68.if !empty(MANSUFFIX)
69.NOPATH:	${MANPAGES}
70.SUFFIXES:	${_MNUMBERS:@N@.$N${MANSUFFIX}@}
71
72${_MNUMBERS:@N@.$N.$N${MANSUFFIX}@}:			# build rule
73	${_MKTARGET_FORMAT}
74	cat ${.IMPSRC} ${MANCOMPRESS} > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}
75.endif # !empty(MANSUFFIX)
76
77.for F in ${MANPAGES:S/${MANSUFFIX}$//:O:u}
78_F:=		${DESTDIR}${MANDIR}/man${F:T:E}${MANSUBDIR}/${F}${MANSUFFIX}
79
80.if ${MKUPDATE} == "no"
81${_F}!		${F}${MANSUFFIX} __installpage		# install rule
82.if !defined(BUILD) && !make(all) && !make(${F})
83${_F}!		.MADE					# no build at install
84.endif
85.else
86${_F}:		${F}${MANSUFFIX} __installpage		# install rule
87.if !defined(BUILD) && !make(all) && !make(${F})
88${_F}:		.MADE					# no build at install
89.endif
90.endif
91
92manpages::	${_F}
93.PRECIOUS:	${_F}					# keep if install fails
94.endfor
95
96manlinks::						# link install
97
98.for _src _dst in ${MLINKS}
99_l:=${DESTDIR}${MANDIR}/man${_src:T:E}${MANSUBDIR}/${_src}${MANSUFFIX}
100_t:=${DESTDIR}${MANDIR}/man${_dst:T:E}${MANSUBDIR}/${_dst}${MANSUFFIX}
101
102# Handle case conflicts carefully, when _dst occurs
103# more than once after case flattening
104.if ${MKUPDATE} == "no" || ${MLINKS:tl:M${_dst:tl:Q}:[\#]} > 1
105${_t}!		${_l} __linkinstallpage
106.else
107${_t}:		${_l} __linkinstallpage
108.endif
109
110manlinks::	${_t}
111.PRECIOUS:	${_t}
112.endfor
113.endif # ${MKMAN} != "no"
114
115##### Build and install rules (plaintext pages)
116
117.if (${MKCATPAGES} != "no") && (${MKMAN} != "no")
118catinstall:	catpages catlinks
119catpages::	# ensure target exists
120CATPAGES=	${MAN:C/\.([1-9])$/.cat\1${MANSUFFIX}/}
121
122realall:	${CATPAGES}
123.NOPATH:	${CATPAGES}
124.SUFFIXES:	${_MNUMBERS:@N@.cat$N${MANSUFFIX}@}
125.MADE:	${CATDEPS}
126
127${_MNUMBERS:@N@.$N.cat$N${MANSUFFIX}@}: ${CATDEPS}	# build rule
128	${_MKTARGET_FORMAT}
129.if defined(USETBL)
130	${TOOL_TBL} ${.IMPSRC} | ${TOOL_ROFF_ASCII} -mandoc ${MANCOMPRESS} \
131	    > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}
132.else
133	${TOOL_ROFF_ASCII} -mandoc ${.IMPSRC} ${MANCOMPRESS} \
134	    > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}
135.endif
136
137.for F in ${CATPAGES:S/${MANSUFFIX}$//:O:u}
138_F:=		${DESTDIR}${MANDIR}/${F:T:E}${MANSUBDIR}/${F:R}.0${MANSUFFIX}
139
140.if ${MKUPDATE} == "no"
141${_F}!		${F}${MANSUFFIX} __installpage		# install rule
142.if !defined(BUILD) && !make(all) && !make(${F})
143${_F}!		.MADE					# no build at install
144.endif
145.else
146${_F}:		${F}${MANSUFFIX} __installpage		# install rule
147.if !defined(BUILD) && !make(all) && !make(${F})
148${_F}:		.MADE					# no build at install
149.endif
150.endif
151
152catpages::	${_F}
153.PRECIOUS:	${_F}					# keep if install fails
154.endfor
155
156catlinks::						# link install
157
158.for _src _dst in ${MLINKS}
159_l:=${DESTDIR}${MANDIR}/cat${_src:T:E}${MANSUBDIR}/${_src:R}.0${MANSUFFIX}
160_t:=${DESTDIR}${MANDIR}/cat${_dst:T:E}${MANSUBDIR}/${_dst:R}.0${MANSUFFIX}
161
162# Handle case conflicts carefully, when _dst occurs
163# more than once after case flattening
164.if ${MKUPDATE} == "no" || ${MLINKS:tl:M${_dst:tl:Q}:[\#]} > 1
165${_t}!		${_l} __linkinstallpage
166.else
167${_t}:		${_l} __linkinstallpage
168.endif
169
170catlinks::	${_t}
171.PRECIOUS:	${_t}
172.endfor
173.endif # (${MKCATPAGES} != "no") && (${MKMAN} != "no")
174
175##### Build and install rules (HTML pages)
176
177.if (${MKHTML} != "no") && (${MKMAN} != "no")		# {
178htmlinstall:	htmlpages htmllinks
179htmlpages::	# ensure target exists
180HTMLPAGES=	${MAN:C/\.([1-9])$/.html\1/}
181
182realall:	${HTMLPAGES}
183.NOPATH:	${HTMLPAGES}
184.SUFFIXES:	${_MNUMBERS:@N@.html$N@}
185.MADE:	${HTMLDEPS}
186
187${_MNUMBERS:@N@.$N.html$N@}: ${HTMLDEPS}			# build rule
188	${_MKTARGET_FORMAT}
189	${TOOL_ROFF_HTML} ${.IMPSRC} > ${.TARGET}.tmp && \
190	    mv ${.TARGET}.tmp ${.TARGET}
191
192.for F in ${HTMLPAGES:O:u}
193# construct installed path
194_F:=		${HTMLDIR}/${F:T:E}${MANSUBDIR}/${F:R:S-/index$-/x&-}.html
195
196.if ${MKUPDATE} == "no"
197${_F}!		${F} __installpage			# install rule
198.if !defined(BUILD) && !make(all) && !make(${F})
199${_F}!		.MADE					# no build at install
200.endif
201.else
202${_F}:		${F} __installpage			# install rule
203.if !defined(BUILD) && !make(all) && !make(${F})
204${_F}:		.MADE					# no build at install
205.endif
206.endif
207
208htmlpages::	${_F}
209.PRECIOUS:	${_F}					# keep if install fails
210.endfor
211
212htmllinks::						# link install
213
214.for _src _dst in ${MLINKS}
215_l:=${HTMLDIR}/html${_src:T:E}${MANSUBDIR}/${_src:R:S-/index$-/x&-}.html
216_t:=${HTMLDIR}/html${_dst:T:E}${MANSUBDIR}/${_dst:R:S-/index$-/x&-}.html
217
218# Handle case conflicts carefully, when _dst occurs
219# more than once after case flattening
220.if ${MKUPDATE} == "no" || ${MLINKS:tl:M${_dst:tl:Q}:[\#]} > 1
221${_t}!		${_l} __linkinstallpage
222.else
223${_t}:		${_l} __linkinstallpage
224.endif
225
226htmllinks::	${_t}
227.PRECIOUS:	${_t}
228.endfor
229
230.endif							# }
231
232##### Clean rules
233.undef _F
234
235cleandir: cleanman
236.if !empty(CLEANFILES)
237	rm -f ${CLEANFILES}
238.endif
239
240cleanman: .PHONY
241.if !empty(MAN) && (${MKMAN} != "no")
242.if (${MKCATPAGES} != "no")
243	rm -f ${CATPAGES}
244.endif
245.if !empty(MANSUFFIX)
246	rm -f ${MANPAGES} ${CATPAGES:S/${MANSUFFIX}$//}
247.endif
248.if ${MKHTML} != "no"
249	rm -f ${HTMLPAGES}
250.endif
251.endif
252# (XXX ${CATPAGES:S...} cleans up old .catN files where .catN.gz now used)
253
254##### Pull in related .mk logic
255.include <bsd.obj.mk>
256.include <bsd.files.mk>
257.include <bsd.sys.mk>
258
259${TARGETS} catinstall maninstall htmlinstall: # ensure existence
260