bsd.man.mk revision 1.91 1 # $NetBSD: bsd.man.mk,v 1.91 2004/01/29 01:48:45 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
8 realinstall: ${MANINSTALL}
9
10 ##### Default values
11 .if ${USETOOLS} == "yes"
12 TMACDEPDIR?= ${TOOLDIR}/share/groff/tmac
13 .else
14 TMACDEPDIR?= ${DESTDIR}/usr/share/tmac
15 .endif
16
17 HTMLDIR?= ${DESTDIR}/usr/share/man
18 CATDEPS?= ${TMACDEPDIR}/andoc.tmac \
19 ${TMACDEPDIR}/doc.tmac \
20 ${TMACDEPDIR}/mdoc/doc-common \
21 ${TMACDEPDIR}/mdoc/doc-ditroff \
22 ${TMACDEPDIR}/mdoc/doc-nroff \
23 ${TMACDEPDIR}/mdoc/doc-syms
24 HTMLDEPS?= ${TMACDEPDIR}/doc2html.tmac
25 MANTARGET?= cat
26
27 MAN?=
28 MLINKS?=
29 _MNUMBERS= 1 2 3 4 5 6 7 8 9
30 .SUFFIXES: ${_MNUMBERS:@N@.$N@}
31
32 .if ${MKMANZ} == "no"
33 MANCOMPRESS?=
34 MANSUFFIX?=
35 .else
36 MANCOMPRESS?= gzip -cf
37 MANSUFFIX?= .gz
38 .endif
39
40 # make MANCOMPRESS a filter, so it can be inserted on an as-needed basis
41 .if !empty(MANCOMPRESS)
42 MANCOMPRESS:= | ${MANCOMPRESS}
43 .endif
44
45 __installpage: .USE
46 @cmp -s ${.ALLSRC} ${.TARGET} > /dev/null 2>&1 || \
47 (${_MKSHMSG_INSTALL} ${.TARGET}; \
48 ${_MKSHECHO} "${INSTALL_FILE} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \
49 ${SYSPKGDOCTAG} ${.ALLSRC} ${.TARGET}" && \
50 ${INSTALL_FILE} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \
51 ${SYSPKGDOCTAG} ${.ALLSRC} ${.TARGET})
52
53 ##### Build and install rules (source form pages)
54
55 .if ${MKMAN} != "no"
56 maninstall: manlinks
57 manpages:: # ensure target exists
58 MANPAGES= ${MAN:C/.$/&${MANSUFFIX}/}
59
60 realall: ${MANPAGES}
61 .if !empty(MANSUFFIX)
62 .NOPATH: ${MANPAGES}
63 .SUFFIXES: ${_MNUMBERS:@N@.$N${MANSUFFIX}@}
64
65 ${_MNUMBERS:@N@.$N.$N${MANSUFFIX}@}: # build rule
66 cat ${.IMPSRC} ${MANCOMPRESS} > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}
67 .endif # !empty(MANSUFFIX)
68
69 .for F in ${MANPAGES:S/${MANSUFFIX}$//:O:u}
70 _F:= ${DESTDIR}${MANDIR}/man${F:T:E}${MANSUBDIR}/${F}${MANSUFFIX}
71
72 .if ${MKUPDATE} == "no"
73 ${_F}! ${F}${MANSUFFIX} __installpage # install rule
74 .if !defined(BUILD) && !make(all) && !make(${F})
75 ${_F}! .MADE # no build at install
76 .endif
77 .else
78 ${_F}: ${F}${MANSUFFIX} __installpage # install rule
79 .if !defined(BUILD) && !make(all) && !make(${F})
80 ${_F}: .MADE # no build at install
81 .endif
82 .endif
83
84 manpages:: ${_F}
85 .PRECIOUS: ${_F} # keep if install fails
86 .endfor
87
88 manlinks: .PHONY manpages # symlink install
89 .if !empty(MLINKS)
90 @set ${MLINKS}; \
91 while test $$# -ge 2; do \
92 name=$$1; shift; \
93 dir=${DESTDIR}${MANDIR}/man$${name##*.}; \
94 l=$${dir}${MANSUBDIR}/$${name}${MANSUFFIX}; \
95 name=$$1; shift; \
96 dir=${DESTDIR}${MANDIR}/man$${name##*.}; \
97 t=$${dir}${MANSUBDIR}/$${name}${MANSUFFIX}; \
98 if test $$l -nt $$t -o ! -f $$t; then \
99 ${_MKSHMSG_INSTALL} $$t; \
100 ${_MKSHECHO} ${INSTALL_LINK} ${SYSPKGDOCTAG} $$l $$t; \
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: .PHONY 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 ${_MKSHMSG_INSTALL} $$t; \
161 ${_MKSHECHO} ${INSTALL_LINK} ${SYSPKGDOCTAG} $$l $$t; \
162 ${INSTALL_LINK} ${SYSPKGDOCTAG} $$l $$t; \
163 fi; \
164 done
165 .endif
166 .endif # (${MKCATPAGES} != "no") && (${MKMAN} != "no")
167
168 ##### Build and install rules (HTML pages)
169
170 .if ${MKHTML} != "no" # {
171 installhtml: .PHONY htmlpages
172 htmlpages:: # ensure target exists
173 HTMLPAGES= ${MAN:C/\.([1-9])$/.html\1/}
174
175 html: .PHONY ${HTMLPAGES}
176 .NOPATH: ${HTMLPAGES}
177 .SUFFIXES: ${_MNUMBERS:@N@.html$N@}
178
179 ${_MNUMBERS:@N@.$N.html$N@}: ${HTMLDEPS} # build rule
180 ${_MKTARGET_FORMAT}
181 ${TOOL_ROFF_HTML} ${.IMPSRC} > ${.TARGET}.tmp && \
182 mv ${.TARGET}.tmp ${.TARGET}
183
184 .for F in ${HTMLPAGES:O:u}
185 # construct installed path
186 _F:= ${HTMLDIR}/${F:T:E}${MANSUBDIR}/${F:R:S-/index$-/x&-}.html
187
188 .if ${MKUPDATE} == "no"
189 ${_F}! ${F} __installpage # install rule
190 .if !defined(BUILD) && !make(all) && !make(${F})
191 ${_F}! .MADE # no build at install
192 .endif
193 .else
194 ${_F}: ${F} __installpage # install rule
195 .if !defined(BUILD) && !make(all) && !make(${F})
196 ${_F}: .MADE # no build at install
197 .endif
198 .endif
199
200 htmlpages:: ${_F}
201 .PRECIOUS: ${_F} # keep if install fails
202 .endfor
203
204 cleandir: cleanhtml
205 cleanhtml: .PHONY
206 rm -f ${HTMLPAGES}
207 .endif # }
208
209 ##### Clean rules
210 .undef _F
211
212 cleandir: cleanman
213 cleanman: .PHONY
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