xref: /netbsd-src/share/mk/bsd.man.mk (revision aaf4ece63a859a04e37cf3a7229b5fab0157cc06)
1#	$NetBSD: bsd.man.mk,v 1.94 2005/04/19 08:41:37 tron 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
8realinstall:	${MANINSTALL}
9
10##### Default values
11.if ${USETOOLS} == "yes"
12TMACDEPDIR?=	${TOOLDIR}/share/groff/tmac
13.else
14TMACDEPDIR?=	/usr/share/tmac
15.endif
16
17HTMLDIR?=	${DESTDIR}/usr/share/man
18CATDEPS?=	${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
24HTMLDEPS?=	${TMACDEPDIR}/doc2html.tmac
25MANTARGET?=	cat
26
27MAN?=
28MLINKS?=
29_MNUMBERS=	1 2 3 4 5 6 7 8 9
30.SUFFIXES:	${_MNUMBERS:@N@.$N@}
31
32.if ${MKMANZ} == "no"
33MANCOMPRESS?=
34MANSUFFIX?=
35.else
36MANCOMPRESS?=	gzip -cf
37MANSUFFIX?=	.gz
38.endif
39
40# make MANCOMPRESS a filter, so it can be inserted on an as-needed basis
41.if !empty(MANCOMPRESS)
42MANCOMPRESS:=	| ${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"
56maninstall:	manlinks
57manpages::	# ensure target exists
58MANPAGES=	${MAN:C/.$/&${MANSUFFIX}/}
59
60realall:	${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
84manpages::	${_F}
85.PRECIOUS:	${_F}					# keep if install fails
86.endfor
87
88manlinks: .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")
110catinstall:	catlinks
111catpages::	# ensure target exists
112CATPAGES=	${MAN:C/\.([1-9])$/.cat\1${MANSUFFIX}/}
113
114realall:	${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
145catpages::	${_F}
146.PRECIOUS:	${_F}					# keep if install fails
147.endfor
148
149catlinks: .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"					# {
171installhtml:	.PHONY htmlpages
172htmlpages::	# ensure target exists
173HTMLPAGES=	${MAN:C/\.([1-9])$/.html\1/}
174
175html:		.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
200htmlpages::	${_F}
201.PRECIOUS:	${_F}					# keep if install fails
202.endfor
203
204cleanhtml: .PHONY
205	rm -f ${HTMLPAGES}
206.endif							# }
207
208##### Clean rules
209.undef _F
210
211cleandir: cleanman
212.if !empty(CLEANFILES)
213	rm -f ${CLEANFILES}
214.endif
215
216cleanman: .PHONY
217.if !empty(MAN) && (${MKMAN} != "no")
218.if (${MKCATPAGES} != "no")
219	rm -f ${CATPAGES}
220.endif
221.if !empty(MANSUFFIX)
222	rm -f ${MANPAGES} ${CATPAGES:S/${MANSUFFIX}$//}
223.endif
224.endif
225# (XXX ${CATPAGES:S...} cleans up old .catN files where .catN.gz now used)
226
227##### Pull in related .mk logic
228.include <bsd.obj.mk>
229.include <bsd.files.mk>
230.include <bsd.sys.mk>
231
232${TARGETS} catinstall maninstall: # ensure existence
233