xref: /minix3/share/mk/bsd.man.mk (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc#	$NetBSD: bsd.man.mk,v 1.117 2014/12/19 22:25:39 christos Exp $
2e1091647SArun Thomas#	@(#)bsd.man.mk	8.1 (Berkeley) 6/8/93
3e1091647SArun Thomas
4e1091647SArun Thomas.include <bsd.init.mk>
5e1091647SArun Thomas
6e1091647SArun Thomas##### Basic targets
739fea0a5SBen Gras.PHONY:		catinstall maninstall catpages manpages catlinks manlinks
839fea0a5SBen Gras.PHONY:		htmlinstall htmlpages htmllinks
9e1091647SArun Thomas.PHONY:		lintmanpages
10e1091647SArun Thomasrealinstall:	${MANINSTALL}
11e1091647SArun Thomas
12*0a6a1f1dSLionel Sambuc# If our install destination is case-preserving, but case-insensitive
13*0a6a1f1dSLionel Sambuc# then we do filesystem comparisons in lower case to make sure that
14*0a6a1f1dSLionel Sambuc# we always refresh the target when needed. In general we don't
15*0a6a1f1dSLionel Sambuc# want to do this, otherwise things like _exit.2 -> _Exit.2 get
16*0a6a1f1dSLionel Sambuc# installed on each build even when they don't need to. Note that
17*0a6a1f1dSLionel Sambuc# the CASE_INSENSITIVE_DEST macro is currently not defined anywhere,
18*0a6a1f1dSLionel Sambuc# and the expansion does not really work because of make(1).
19*0a6a1f1dSLionel Sambuc.if defined(CASE_INSENSITIVE_DEST)
20*0a6a1f1dSLionel Sambuc_FLATTEN?=tl:
21*0a6a1f1dSLionel Sambuc.endif
22*0a6a1f1dSLionel Sambuc
23e1091647SArun Thomas##### Default values
2439fea0a5SBen Gras.if ${USETOOLS} == "yes"
2539fea0a5SBen GrasTMACDEPDIR?=	${TOOLDIR}/share/groff/tmac
2639fea0a5SBen Gras.else
2739fea0a5SBen GrasTMACDEPDIR?=	/usr/share/tmac
2839fea0a5SBen Gras.endif
29e1091647SArun Thomas
3039fea0a5SBen GrasHTMLDIR?=	${DESTDIR}${MANDIR}
3184d9c625SLionel Sambuc.if ${MKMANDOC} == yes && !defined(NOMANDOC)
3284d9c625SLionel SambucCATDEPS?=
3384d9c625SLionel Sambuc.else
3439fea0a5SBen GrasCATDEPS?=	${TMACDEPDIR}/andoc.tmac \
3539fea0a5SBen Gras		${TMACDEPDIR}/doc.tmac \
3639fea0a5SBen Gras		${TMACDEPDIR}/mdoc/doc-common \
3739fea0a5SBen Gras		${TMACDEPDIR}/mdoc/doc-ditroff \
3839fea0a5SBen Gras		${TMACDEPDIR}/mdoc/doc-nroff \
3939fea0a5SBen Gras		${TMACDEPDIR}/mdoc/doc-syms
4084d9c625SLionel Sambuc.endif
4139fea0a5SBen GrasMANTARGET?=	cat
42e1091647SArun Thomas
4339fea0a5SBen GrasMAN?=
4439fea0a5SBen GrasMLINKS?=
4584d9c625SLionel Sambuc_MSECTIONS=	1 2 3 4 5 6 7 8 9
4684d9c625SLionel Sambuc_MSECTIONS+=	3lua 9lua
4784d9c625SLionel Sambuc_MSECTIONREGEX=	${_MSECTIONS:ts|} # e.g. 1|2|3|...
4884d9c625SLionel Sambuc.SUFFIXES:	${_MSECTIONS:@N@.$N@}
49e1091647SArun Thomas
5039fea0a5SBen Gras.if ${MKMANZ} == "no"
5139fea0a5SBen GrasMANCOMPRESS?=
5239fea0a5SBen GrasMANSUFFIX?=
5339fea0a5SBen Gras.else
54*0a6a1f1dSLionel SambucMANCOMPRESS?=	${TOOL_GZIP_N} -cf
5539fea0a5SBen GrasMANSUFFIX?=	.gz
5639fea0a5SBen Gras.endif
57e1091647SArun Thomas
58e1091647SArun Thomas# make MANCOMPRESS a filter, so it can be inserted on an as-needed basis
59e1091647SArun Thomas.if !empty(MANCOMPRESS)
60e1091647SArun ThomasMANCOMPRESS:=	| ${MANCOMPRESS}
61e1091647SArun Thomas.endif
62e1091647SArun Thomas
63e1091647SArun Thomas__installpage: .USE
64e1091647SArun Thomas	@cmp -s ${.ALLSRC} ${.TARGET} > /dev/null 2>&1 || \
65e1091647SArun Thomas	    (${_MKSHMSG_INSTALL} ${.TARGET}; \
66e1091647SArun Thomas	     ${_MKSHECHO} "${INSTALL_FILE} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \
67e1091647SArun Thomas		${.ALLSRC} ${.TARGET}" && \
68e1091647SArun Thomas	     ${INSTALL_FILE} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \
69e1091647SArun Thomas		${.ALLSRC} ${.TARGET})
70e1091647SArun Thomas
71e1091647SArun Thomas# XXX consider including bsd.links.mk and using __linkinstall instead
72e1091647SArun Thomas__linkinstallpage: .USE
73e1091647SArun Thomas	${_MKSHMSG_INSTALL} ${.TARGET}; \
74e1091647SArun Thomas	${_MKSHECHO} "${INSTALL_LINK} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \
75e1091647SArun Thomas	    ${.ALLSRC} ${.TARGET}" && \
76e1091647SArun Thomas	${INSTALL_LINK} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \
77e1091647SArun Thomas	    ${.ALLSRC} ${.TARGET}
78e1091647SArun Thomas
79e1091647SArun Thomas##### Build and install rules (source form pages)
80e1091647SArun Thomas
81e1091647SArun Thomas.if ${MKMAN} != "no"
82e1091647SArun Thomasmaninstall:	manpages manlinks
83e1091647SArun Thomasmanpages::	# ensure target exists
84e1091647SArun ThomasMANPAGES=	${MAN:C/.$/&${MANSUFFIX}/}
85e1091647SArun Thomas
86e1091647SArun Thomasrealall:	${MANPAGES}
87e1091647SArun Thomas.if !empty(MANSUFFIX)
88e1091647SArun Thomas.NOPATH:	${MANPAGES}
8984d9c625SLionel Sambuc.SUFFIXES:	${_MSECTIONS:@N@.$N${MANSUFFIX}@}
90e1091647SArun Thomas
9184d9c625SLionel Sambuc${_MSECTIONS:@N@.$N.$N${MANSUFFIX}@}:			# build rule
92e1091647SArun Thomas	${_MKTARGET_FORMAT}
93e1091647SArun Thomas	cat ${.IMPSRC} ${MANCOMPRESS} > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}
94e1091647SArun Thomas.endif # !empty(MANSUFFIX)
95e1091647SArun Thomas
96e1091647SArun Thomas.for F in ${MANPAGES:S/${MANSUFFIX}$//:O:u}
97e1091647SArun Thomas_F:=		${DESTDIR}${MANDIR}/man${F:T:E}${MANSUBDIR}/${F}${MANSUFFIX}
98e1091647SArun Thomas
99e1091647SArun Thomas.if ${MKUPDATE} == "no"
100e1091647SArun Thomas${_F}!		${F}${MANSUFFIX} __installpage		# install rule
101e1091647SArun Thomas.if !defined(BUILD) && !make(all) && !make(${F})
102e1091647SArun Thomas${_F}!		.MADE					# no build at install
103e1091647SArun Thomas.endif
104e1091647SArun Thomas.else
105e1091647SArun Thomas${_F}:		${F}${MANSUFFIX} __installpage		# install rule
106e1091647SArun Thomas.if !defined(BUILD) && !make(all) && !make(${F})
107e1091647SArun Thomas${_F}:		.MADE					# no build at install
108e1091647SArun Thomas.endif
109e1091647SArun Thomas.endif
110e1091647SArun Thomas
111e1091647SArun Thomasmanpages::	${_F}
112e1091647SArun Thomas.PRECIOUS:	${_F}					# keep if install fails
113e1091647SArun Thomas.endfor
114e1091647SArun Thomas
115e1091647SArun Thomasmanlinks::						# link install
116e1091647SArun Thomas
117e1091647SArun Thomas.for _src _dst in ${MLINKS}
118e1091647SArun Thomas_l:=${DESTDIR}${MANDIR}/man${_src:T:E}${MANSUBDIR}/${_src}${MANSUFFIX}
119e1091647SArun Thomas_t:=${DESTDIR}${MANDIR}/man${_dst:T:E}${MANSUBDIR}/${_dst}${MANSUFFIX}
120e1091647SArun Thomas
121e1091647SArun Thomas# Handle case conflicts carefully, when _dst occurs
122e1091647SArun Thomas# more than once after case flattening
123*0a6a1f1dSLionel Sambuc.if ${MKUPDATE} == "no" || ${MLINKS:${_FLATTEN}M${_dst:${_FLATTEN}Q}:[\#]} > 1
124e1091647SArun Thomas${_t}!		${_l} __linkinstallpage
125e1091647SArun Thomas.else
126e1091647SArun Thomas${_t}:		${_l} __linkinstallpage
127e1091647SArun Thomas.endif
128e1091647SArun Thomas
129e1091647SArun Thomasmanlinks::	${_t}
130e1091647SArun Thomas.PRECIOUS:	${_t}
131e1091647SArun Thomas.endfor
132e1091647SArun Thomas.endif # ${MKMAN} != "no"
133e1091647SArun Thomas
13439fea0a5SBen Gras##### Build and install rules (plaintext pages)
135e1091647SArun Thomas
13639fea0a5SBen Gras.if (${MKCATPAGES} != "no") && (${MKMAN} != "no")
13739fea0a5SBen Grascatinstall:	catpages catlinks
13839fea0a5SBen Grascatpages::	# ensure target exists
13984d9c625SLionel SambucCATPAGES=	${MAN:C/\.(${_MSECTIONREGEX})\$/.cat\1${MANSUFFIX}/}
140e1091647SArun Thomas
14139fea0a5SBen Grasrealall:	${CATPAGES}
14239fea0a5SBen Gras.NOPATH:	${CATPAGES}
14384d9c625SLionel Sambuc.SUFFIXES:	${_MSECTIONS:@N@.cat$N${MANSUFFIX}@}
14439fea0a5SBen Gras.MADE:	${CATDEPS}
145e1091647SArun Thomas
14684d9c625SLionel Sambuc${_MSECTIONS:@N@.$N.cat$N${MANSUFFIX}@}: ${CATDEPS}	# build rule
14739fea0a5SBen Gras	${_MKTARGET_FORMAT}
1489152e1c5SLionel Sambuc.if ${MKMANDOC} == yes && !defined(NOMANDOC)
14939fea0a5SBen Gras	if test ""${NOMANDOC.${.IMPSRC:T}:tl:Q} != "yes"; then \
15039fea0a5SBen Gras		${TOOL_MANDOC_ASCII} ${.IMPSRC} ${MANCOMPRESS} \
15139fea0a5SBen Gras		    > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}; \
15239fea0a5SBen Gras	else \
15339fea0a5SBen Gras		${TOOL_ROFF_ASCII} -mandoc ${.IMPSRC} ${MANCOMPRESS} \
15439fea0a5SBen Gras		    > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}; \
15539fea0a5SBen Gras	fi
1569152e1c5SLionel Sambuc.elif defined(USETBL)
1579152e1c5SLionel Sambuc	${TOOL_TBL} ${.IMPSRC} | ${TOOL_ROFF_ASCII} -mandoc ${MANCOMPRESS} \
1589152e1c5SLionel Sambuc	    > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}
15939fea0a5SBen Gras.else
16039fea0a5SBen Gras	${TOOL_ROFF_ASCII} -mandoc ${.IMPSRC} ${MANCOMPRESS} \
16139fea0a5SBen Gras	    > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}
16239fea0a5SBen Gras.endif
163e1091647SArun Thomas
16439fea0a5SBen Gras.for F in ${CATPAGES:S/${MANSUFFIX}$//:O:u}
16539fea0a5SBen Gras_F:=		${DESTDIR}${MANDIR}/${F:T:E}${MANSUBDIR}/${F:R}.0${MANSUFFIX}
166e1091647SArun Thomas
16739fea0a5SBen Gras.if ${MKUPDATE} == "no"
16839fea0a5SBen Gras${_F}!		${F}${MANSUFFIX} __installpage		# install rule
16939fea0a5SBen Gras.if !defined(BUILD) && !make(all) && !make(${F})
17039fea0a5SBen Gras${_F}!		.MADE					# no build at install
17139fea0a5SBen Gras.endif
17239fea0a5SBen Gras.else
17339fea0a5SBen Gras${_F}:		${F}${MANSUFFIX} __installpage		# install rule
17439fea0a5SBen Gras.if !defined(BUILD) && !make(all) && !make(${F})
17539fea0a5SBen Gras${_F}:		.MADE					# no build at install
17639fea0a5SBen Gras.endif
17739fea0a5SBen Gras.endif
178e1091647SArun Thomas
17939fea0a5SBen Grascatpages::	${_F}
18039fea0a5SBen Gras.PRECIOUS:	${_F}					# keep if install fails
18139fea0a5SBen Gras.endfor
182e1091647SArun Thomas
18339fea0a5SBen Grascatlinks::						# link install
184e1091647SArun Thomas
18539fea0a5SBen Gras.for _src _dst in ${MLINKS}
18639fea0a5SBen Gras_l:=${DESTDIR}${MANDIR}/cat${_src:T:E}${MANSUBDIR}/${_src:R}.0${MANSUFFIX}
18739fea0a5SBen Gras_t:=${DESTDIR}${MANDIR}/cat${_dst:T:E}${MANSUBDIR}/${_dst:R}.0${MANSUFFIX}
188e1091647SArun Thomas
18939fea0a5SBen Gras# Handle case conflicts carefully, when _dst occurs
19039fea0a5SBen Gras# more than once after case flattening
191*0a6a1f1dSLionel Sambuc.if ${MKUPDATE} == "no" || ${MLINKS:${_FLATTEN}M${_dst:${_FLATTEN}Q}:[\#]} > 1
19239fea0a5SBen Gras${_t}!		${_l} __linkinstallpage
19339fea0a5SBen Gras.else
19439fea0a5SBen Gras${_t}:		${_l} __linkinstallpage
19539fea0a5SBen Gras.endif
196e1091647SArun Thomas
19739fea0a5SBen Grascatlinks::	${_t}
19839fea0a5SBen Gras.PRECIOUS:	${_t}
19939fea0a5SBen Gras.endfor
20039fea0a5SBen Gras.endif # (${MKCATPAGES} != "no") && (${MKMAN} != "no")
201e1091647SArun Thomas
20239fea0a5SBen Gras##### Build and install rules (HTML pages)
203e1091647SArun Thomas
20439fea0a5SBen Gras.if (${MKHTML} != "no") && (${MKMAN} != "no")		# {
20539fea0a5SBen Grashtmlinstall:	htmlpages htmllinks
20639fea0a5SBen Grashtmlpages::	# ensure target exists
20784d9c625SLionel SambucHTMLPAGES=	${MAN:C/\.(${_MSECTIONREGEX})\$/.html\1/}
208e1091647SArun Thomas
2099152e1c5SLionel SambucHTMLLINKS=	${MANSUBDIR:?../:}../html%S/%N.html
2109152e1c5SLionel SambucHTMLSTYLE=	${MANSUBDIR:?../:}../style.css
2119152e1c5SLionel Sambuc
21239fea0a5SBen Grasrealall:	${HTMLPAGES}
21339fea0a5SBen Gras.NOPATH:	${HTMLPAGES}
21484d9c625SLionel Sambuc.SUFFIXES:	${_MSECTIONS:@N@.html$N@}
215e1091647SArun Thomas
21684d9c625SLionel Sambuc${_MSECTIONS:@N@.$N.html$N@}: 				# build rule
21739fea0a5SBen Gras	${_MKTARGET_FORMAT}
21884d9c625SLionel Sambuc.if ${MKMANDOC} == yes && !defined(NOMANDOC)
21984d9c625SLionel Sambuc	if test ""${NOMANDOC.${.IMPSRC:T}:tl:Q} != "yes"; then \
2209152e1c5SLionel Sambuc	    ${TOOL_MANDOC_HTML} -Oman=${HTMLLINKS} -Ostyle=${HTMLSTYLE} \
2219152e1c5SLionel Sambuc		${.IMPSRC} > ${.TARGET}.tmp && \
22284d9c625SLionel Sambuc		mv ${.TARGET}.tmp ${.TARGET}; \
22384d9c625SLionel Sambuc	else \
22484d9c625SLionel Sambuc		${TOOL_ROFF_HTML} ${.IMPSRC} ${MANCOMPRESS} \
22584d9c625SLionel Sambuc		    > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}; \
22684d9c625SLionel Sambuc	fi
22784d9c625SLionel Sambuc.elif defined(USETBL)
22884d9c625SLionel Sambuc	${TOOL_TBL} ${.IMPSRC} | ${TOOL_ROFF_HTML} ${MANCOMPRESS} \
22984d9c625SLionel Sambuc	    > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}
23084d9c625SLionel Sambuc.else
23184d9c625SLionel Sambuc	${TOOL_ROFF_HTML} ${.IMPSRC} ${MANCOMPRESS} \
23284d9c625SLionel Sambuc	    > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}
23384d9c625SLionel Sambuc.endif
234e1091647SArun Thomas
23539fea0a5SBen Gras.for F in ${HTMLPAGES:O:u}
23639fea0a5SBen Gras# construct installed path
23739fea0a5SBen Gras_F:=		${HTMLDIR}/${F:T:E}${MANSUBDIR}/${F:R:S-/index$-/x&-}.html
238e1091647SArun Thomas
23939fea0a5SBen Gras.if ${MKUPDATE} == "no"
24039fea0a5SBen Gras${_F}!		${F} __installpage			# install rule
24139fea0a5SBen Gras.if !defined(BUILD) && !make(all) && !make(${F})
24239fea0a5SBen Gras${_F}!		.MADE					# no build at install
24339fea0a5SBen Gras.endif
24439fea0a5SBen Gras.else
24539fea0a5SBen Gras${_F}:		${F} __installpage			# install rule
24639fea0a5SBen Gras.if !defined(BUILD) && !make(all) && !make(${F})
24739fea0a5SBen Gras${_F}:		.MADE					# no build at install
24839fea0a5SBen Gras.endif
24939fea0a5SBen Gras.endif
250e1091647SArun Thomas
25139fea0a5SBen Grashtmlpages::	${_F}
25239fea0a5SBen Gras.PRECIOUS:	${_F}					# keep if install fails
25339fea0a5SBen Gras.endfor
254e1091647SArun Thomas
25539fea0a5SBen Grashtmllinks::						# link install
256e1091647SArun Thomas
25739fea0a5SBen Gras.for _src _dst in ${MLINKS}
25839fea0a5SBen Gras_l:=${HTMLDIR}/html${_src:T:E}${MANSUBDIR}/${_src:R:S-/index$-/x&-}.html
25939fea0a5SBen Gras_t:=${HTMLDIR}/html${_dst:T:E}${MANSUBDIR}/${_dst:R:S-/index$-/x&-}.html
260e1091647SArun Thomas
26139fea0a5SBen Gras# Handle case conflicts carefully, when _dst occurs
26239fea0a5SBen Gras# more than once after case flattening
263*0a6a1f1dSLionel Sambuc.if ${MKUPDATE} == "no" || ${MLINKS:${_FLATTEN}M${_dst:${_FLATTEN}Q}:[\#]} > 1
26439fea0a5SBen Gras${_t}!		${_l} __linkinstallpage
26539fea0a5SBen Gras.else
26639fea0a5SBen Gras${_t}:		${_l} __linkinstallpage
26739fea0a5SBen Gras.endif
268e1091647SArun Thomas
26939fea0a5SBen Grashtmllinks::	${_t}
27039fea0a5SBen Gras.PRECIOUS:	${_t}
27139fea0a5SBen Gras.endfor
272e1091647SArun Thomas
27339fea0a5SBen Gras.endif							# }
274e1091647SArun Thomas
275e1091647SArun Thomas##### Clean rules
276e1091647SArun Thomas.undef _F
277e1091647SArun Thomas
278e1091647SArun Thomas.if !empty(MAN) && (${MKMAN} != "no")
279e1091647SArun Thomas.if (${MKCATPAGES} != "no")
2809152e1c5SLionel SambucCLEANDIRFILES+= ${CATPAGES}
281e1091647SArun Thomas.endif
282e1091647SArun Thomas.if !empty(MANSUFFIX)
2839152e1c5SLionel SambucCLEANDIRFILES+= ${MANPAGES} ${CATPAGES:S/${MANSUFFIX}$//}
284e1091647SArun Thomas.endif
285e1091647SArun Thomas.if ${MKHTML} != "no"
2869152e1c5SLionel SambucCLEANDIRFILES+= ${HTMLPAGES}
287e1091647SArun Thomas.endif
288e1091647SArun Thomas.endif
289e1091647SArun Thomas# (XXX ${CATPAGES:S...} cleans up old .catN files where .catN.gz now used)
290e1091647SArun Thomas
2919152e1c5SLionel Sambuc.if !empty(MANPAGES)
29239fea0a5SBen Graslintmanpages: ${MANPAGES}
2939152e1c5SLionel Sambuc	${TOOL_MANDOC_LINT} -Tlint -fstrict -Wall,stop ${.ALLSRC}
29439fea0a5SBen Gras.endif
295e1091647SArun Thomas
296e1091647SArun Thomas##### Pull in related .mk logic
297e1091647SArun Thomas.include <bsd.obj.mk>
298e1091647SArun Thomas.include <bsd.files.mk>
299e1091647SArun Thomas.include <bsd.sys.mk>
3009152e1c5SLionel Sambuc.include <bsd.clean.mk>
301e1091647SArun Thomas
302e1091647SArun Thomas${TARGETS} catinstall maninstall htmlinstall: # ensure existence
303