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