bsd.man.mk revision 1.76 1 # $NetBSD: bsd.man.mk,v 1.76 2002/02/07 00:52:23 ross 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}/tmac.andoc \
20 ${TMACDEPDIR}/tmac.doc \
21 ${TMACDEPDIR}/tmac.doc-ditroff \
22 ${TMACDEPDIR}/tmac.doc-common \
23 ${TMACDEPDIR}/tmac.doc-nroff \
24 ${TMACDEPDIR}/tmac.doc-syms
25 HTMLDEPS?= ${TMACDEPDIR}/tmac.doc2html
26 MANTARGET?= cat
27
28 GROFF_HTML?= ${GROFF} -Tlatin1 -mdoc2html -P-b -P-o -P-u
29 NROFF?= ${GROFF} -Tascii -mtty-char
30 TBL?= tbl
31
32 MAN?=
33 MLINKS?=
34 _MNUMBERS= 1 2 3 4 5 6 7 8 9
35 .SUFFIXES: ${_MNUMBERS:@N@.$N@}
36
37 MANCOMPRESS?= ${MANZ:Dgzip -cf}
38 MANSUFFIX?= ${MANZ:D.gz}
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 (echo "${INSTALL_FILE} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \
48 ${.ALLSRC} ${.TARGET}" && \
49 ${INSTALL_FILE} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \
50 ${.ALLSRC} ${.TARGET})
51
52 ##### Build and install rules (source form pages)
53
54 .if ${MKMAN} != "no"
55 maninstall: manlinks
56 manpages:: # ensure target exists
57 MANPAGES= ${MAN:C/.$/&${MANSUFFIX}/}
58
59 realall: ${MANPAGES}
60 .if !empty(MANSUFFIX)
61 .NOPATH: ${MANPAGES}
62 .SUFFIXES: ${_MNUMBERS:@N@.$N${MANSUFFIX}@}
63
64 ${_MNUMBERS:@N@.$N.$N${MANSUFFIX}@}: # build rule
65 cat ${.IMPSRC} ${MANCOMPRESS} > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}
66 .endif # !empty(MANSUFFIX)
67
68 .for F in ${MANPAGES:S/${MANSUFFIX}$//:O:u}
69 _F:= ${DESTDIR}${MANDIR}/man${F:T:E}${MANSUBDIR}/${F}${MANSUFFIX}
70
71 ${_F}: ${F}${MANSUFFIX} __installpage # install rule
72 manpages:: ${_F}
73 .PRECIOUS: ${_F} # keep if install fails
74 #.PHONY: ${UPDATE:D:U${_F}} # clobber unless UPDATE
75 .if !defined(BUILD) && !make(all) && !make(${F})
76 ${_F}: .MADE # no build at install
77 .endif
78 .endfor
79
80 manlinks: manpages # symlink install
81 .if !empty(MLINKS)
82 @set ${MLINKS}; \
83 while test $$# -ge 2; do \
84 name=$$1; shift; \
85 dir=${DESTDIR}${MANDIR}/man$${name##*.}; \
86 l=$${dir}${MANSUBDIR}/$${name}${MANSUFFIX}; \
87 name=$$1; shift; \
88 dir=${DESTDIR}${MANDIR}/man$${name##*.}; \
89 t=$${dir}${MANSUBDIR}/$${name}${MANSUFFIX}; \
90 if test $$l -nt $$t -o ! -f $$t; then \
91 echo $$t -\> $$l; \
92 ${INSTALL_LINK} $$l $$t; \
93 fi; \
94 done
95 .endif
96 .endif # ${MKMAN} != "no"
97
98 ##### Build and install rules (plaintext pages)
99
100 .if (${MKCATPAGES} != "no") && (${MKMAN} != "no")
101 catinstall: catlinks
102 catpages:: # ensure target exists
103 CATPAGES= ${MAN:C/\.([1-9])$/.cat\1${MANSUFFIX}/}
104
105 realall: ${CATPAGES}
106 .NOPATH: ${CATPAGES}
107 .SUFFIXES: ${_MNUMBERS:@N@.cat$N${MANSUFFIX}@}
108 .MADE: ${CATDEPS}
109 .MADE: ${HTMLDEPS}
110
111 ${_MNUMBERS:@N@.$N.cat$N${MANSUFFIX}@}: ${CATDEPS} # build rule
112 .if defined(USETBL)
113 ${TBL} ${.IMPSRC} | ${NROFF} -mandoc ${MANCOMPRESS} > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}
114 .else
115 ${NROFF} -mandoc ${.IMPSRC} ${MANCOMPRESS} > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}
116 .endif
117
118 .for F in ${CATPAGES:S/${MANSUFFIX}$//:O:u}
119 _F:= ${DESTDIR}${MANDIR}/${F:T:E}${MANSUBDIR}/${F:R}.0${MANSUFFIX}
120 ${_F}: ${F}${MANSUFFIX} __installpage # install rule
121 catpages:: ${_F}
122 .PRECIOUS: ${_F} # keep if install fails
123 #.PHONY: ${UPDATE:D:U${_F}} # noclobber install
124 .if !defined(BUILD) && !make(all) && !make(${F})
125 ${_F}: .MADE # no build at install
126 .endif
127 .endfor
128
129 catlinks: catpages # symlink install
130 .if !empty(MLINKS)
131 @set ${MLINKS}; \
132 while test $$# -ge 2; do \
133 name=$$1; shift; \
134 dir=${DESTDIR}${MANDIR}/cat$${name##*.}; \
135 l=$${dir}${MANSUBDIR}/$${name%.*}.0${MANSUFFIX}; \
136 name=$$1; shift; \
137 dir=${DESTDIR}${MANDIR}/cat$${name##*.}; \
138 t=$${dir}${MANSUBDIR}/$${name%.*}.0${MANSUFFIX}; \
139 if test $$l -nt $$t -o ! -f $$t; then \
140 echo $$t -\> $$l; \
141 ${INSTALL_LINK} $$l $$t; \
142 fi; \
143 done
144 .endif
145 .endif # (${MKCATPAGES} != "no") && (${MKMAN} != "no")
146
147 ##### Build and install rules (HTML pages)
148
149 .if !defined(NOHTML)
150 installhtml: htmlpages
151 htmlpages:: # ensure target exists
152 HTMLPAGES= ${MAN:C/\.([1-9])$/.html\1/}
153
154 html: ${HTMLPAGES}
155 .NOPATH: ${HTMLPAGES}
156 .SUFFIXES: ${_MNUMBERS:@N@.html$N@}
157
158 ${_MNUMBERS:@N@.$N.html$N@}: ${HTMLDEPS} # build rule
159 ${GROFF_HTML} ${.IMPSRC} > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}
160
161 .for F in ${HTMLPAGES:O:u}
162 _F:= ${HTMLDIR}/${F:T:E}/${F:R}.html # installed path
163 ${_F}: ${F} __installpage # install rule
164 htmlpages:: ${_F}
165 .PRECIOUS: ${_F} # keep if install fails
166 #.PHONY: ${UPDATE:D:U${_F}} # noclobber install
167 .if !defined(BUILD) && !make(all) && !make(${F})
168 ${_F}: .MADE # no build at install
169 .endif
170 .endfor
171
172 cleanhtml:
173 rm -f ${HTMLPAGES}
174 .endif # !defined(NOHTML)
175
176 ##### Clean rules
177 .undef _F
178
179 cleandir: cleanman
180 cleanman:
181 .if !empty(MAN) && (${MKMAN} != "no")
182 .if (${MKCATPAGES} != "no")
183 rm -f ${CATPAGES}
184 .endif
185 .if !empty(MANSUFFIX)
186 rm -f ${MANPAGES} ${CATPAGES:S/${MANSUFFIX}$//}
187 .endif
188 .endif
189 # (XXX ${CATPAGES:S...} cleans up old .catN files where .catN.gz now used)
190
191 ##### Pull in related .mk logic
192 .include <bsd.obj.mk>
193 .include <bsd.sys.mk>
194
195 ${TARGETS} catinstall maninstall: # ensure existence
196