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