bsd.man.mk revision 1.88 1 # $NetBSD: bsd.man.mk,v 1.88 2003/10/21 10:01:21 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 echo $$t -\> $$l; \
101 ${INSTALL_LINK} ${SYSPKGDOCTAG} $$l $$t; \
102 fi; \
103 done
104 .endif
105 .endif # ${MKMAN} != "no"
106
107 ##### Build and install rules (plaintext pages)
108
109 .if (${MKCATPAGES} != "no") && (${MKMAN} != "no")
110 catinstall: catlinks
111 catpages:: # ensure target exists
112 CATPAGES= ${MAN:C/\.([1-9])$/.cat\1${MANSUFFIX}/}
113
114 realall: ${CATPAGES}
115 .NOPATH: ${CATPAGES}
116 .SUFFIXES: ${_MNUMBERS:@N@.cat$N${MANSUFFIX}@}
117 .MADE: ${CATDEPS}
118 .MADE: ${HTMLDEPS}
119
120 ${_MNUMBERS:@N@.$N.cat$N${MANSUFFIX}@}: ${CATDEPS} # build rule
121 ${_MKTARGET_FORMAT}
122 .if defined(USETBL)
123 ${TOOL_TBL} ${.IMPSRC} | ${TOOL_ROFF_ASCII} -mandoc ${MANCOMPRESS} \
124 > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}
125 .else
126 ${TOOL_ROFF_ASCII} -mandoc ${.IMPSRC} ${MANCOMPRESS} \
127 > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}
128 .endif
129
130 .for F in ${CATPAGES:S/${MANSUFFIX}$//:O:u}
131 _F:= ${DESTDIR}${MANDIR}/${F:T:E}${MANSUBDIR}/${F:R}.0${MANSUFFIX}
132
133 .if ${MKUPDATE} == "no"
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 .else
139 ${_F}: ${F}${MANSUFFIX} __installpage # install rule
140 .if !defined(BUILD) && !make(all) && !make(${F})
141 ${_F}: .MADE # no build at install
142 .endif
143 .endif
144
145 catpages:: ${_F}
146 .PRECIOUS: ${_F} # keep if install fails
147 .endfor
148
149 catlinks: catpages # symlink install
150 .if !empty(MLINKS)
151 @set ${MLINKS}; \
152 while test $$# -ge 2; do \
153 name=$$1; shift; \
154 dir=${DESTDIR}${MANDIR}/cat$${name##*.}; \
155 l=$${dir}${MANSUBDIR}/$${name%.*}.0${MANSUFFIX}; \
156 name=$$1; shift; \
157 dir=${DESTDIR}${MANDIR}/cat$${name##*.}; \
158 t=$${dir}${MANSUBDIR}/$${name%.*}.0${MANSUFFIX}; \
159 if test $$l -nt $$t -o ! -f $$t; then \
160 echo $$t -\> $$l; \
161 ${INSTALL_LINK} ${SYSPKGDOCTAG} $$l $$t; \
162 fi; \
163 done
164 .endif
165 .endif # (${MKCATPAGES} != "no") && (${MKMAN} != "no")
166
167 ##### Build and install rules (HTML pages)
168
169 .if ${MKHTML} != "no" # {
170 installhtml: htmlpages
171 htmlpages:: # ensure target exists
172 HTMLPAGES= ${MAN:C/\.([1-9])$/.html\1/}
173
174 html: ${HTMLPAGES}
175 .NOPATH: ${HTMLPAGES}
176 .SUFFIXES: ${_MNUMBERS:@N@.html$N@}
177
178 ${_MNUMBERS:@N@.$N.html$N@}: ${HTMLDEPS} # build rule
179 ${_MKTARGET_FORMAT}
180 ${TOOL_ROFF_HTML} ${.IMPSRC} > ${.TARGET}.tmp && \
181 mv ${.TARGET}.tmp ${.TARGET}
182
183 .for F in ${HTMLPAGES:O:u}
184 # construct installed path
185 _F:= ${HTMLDIR}/${F:T:E}${MANSUBDIR}/${F:R:S-/index$-/x&-}.html
186
187 .if ${MKUPDATE} == "no"
188 ${_F}! ${F} __installpage # install rule
189 .if !defined(BUILD) && !make(all) && !make(${F})
190 ${_F}! .MADE # no build at install
191 .endif
192 .else
193 ${_F}: ${F} __installpage # install rule
194 .if !defined(BUILD) && !make(all) && !make(${F})
195 ${_F}: .MADE # no build at install
196 .endif
197 .endif
198
199 htmlpages:: ${_F}
200 .PRECIOUS: ${_F} # keep if install fails
201 .endfor
202
203 cleanhtml:
204 rm -f ${HTMLPAGES}
205 .endif # }
206
207 ##### Clean rules
208 .undef _F
209
210 cleandir: cleanman
211 cleanman:
212 .if !empty(MAN) && (${MKMAN} != "no")
213 .if (${MKCATPAGES} != "no")
214 rm -f ${CATPAGES}
215 .endif
216 .if !empty(MANSUFFIX)
217 rm -f ${MANPAGES} ${CATPAGES:S/${MANSUFFIX}$//}
218 .endif
219 .endif
220 # (XXX ${CATPAGES:S...} cleans up old .catN files where .catN.gz now used)
221
222 ##### Pull in related .mk logic
223 .include <bsd.obj.mk>
224 .include <bsd.files.mk>
225 .include <bsd.sys.mk>
226
227 ${TARGETS} catinstall maninstall: # ensure existence
228