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