1# $NetBSD: bsd.man.mk,v 1.114 2013/10/25 22:16:29 apb 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.PHONY: htmlinstall htmlpages htmllinks 9.PHONY: lintmanpages 10realinstall: ${MANINSTALL} 11 12##### Default values 13.if ${USETOOLS} == "yes" 14TMACDEPDIR?= ${TOOLDIR}/share/groff/tmac 15.else 16TMACDEPDIR?= /usr/share/tmac 17.endif 18 19HTMLDIR?= ${DESTDIR}${MANDIR} 20.if ${MKMANDOC} == yes && !defined(NOMANDOC) 21CATDEPS?= 22.else 23CATDEPS?= ${TMACDEPDIR}/andoc.tmac \ 24 ${TMACDEPDIR}/doc.tmac \ 25 ${TMACDEPDIR}/mdoc/doc-common \ 26 ${TMACDEPDIR}/mdoc/doc-ditroff \ 27 ${TMACDEPDIR}/mdoc/doc-nroff \ 28 ${TMACDEPDIR}/mdoc/doc-syms 29.endif 30MANTARGET?= cat 31 32MAN?= 33MLINKS?= 34_MSECTIONS= 1 2 3 4 5 6 7 8 9 35_MSECTIONS+= 3lua 9lua 36_MSECTIONREGEX= ${_MSECTIONS:ts|} # e.g. 1|2|3|... 37.SUFFIXES: ${_MSECTIONS:@N@.$N@} 38 39.if ${MKMANZ} == "no" 40MANCOMPRESS?= 41MANSUFFIX?= 42.else 43MANCOMPRESS?= ${TOOL_GZIP} -ncf 44MANSUFFIX?= .gz 45.endif 46 47# make MANCOMPRESS a filter, so it can be inserted on an as-needed basis 48.if !empty(MANCOMPRESS) 49MANCOMPRESS:= | ${MANCOMPRESS} 50.endif 51 52__installpage: .USE 53 @cmp -s ${.ALLSRC} ${.TARGET} > /dev/null 2>&1 || \ 54 (${_MKSHMSG_INSTALL} ${.TARGET}; \ 55 ${_MKSHECHO} "${INSTALL_FILE} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \ 56 ${.ALLSRC} ${.TARGET}" && \ 57 ${INSTALL_FILE} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \ 58 ${.ALLSRC} ${.TARGET}) 59 60# XXX consider including bsd.links.mk and using __linkinstall instead 61__linkinstallpage: .USE 62 ${_MKSHMSG_INSTALL} ${.TARGET}; \ 63 ${_MKSHECHO} "${INSTALL_LINK} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \ 64 ${.ALLSRC} ${.TARGET}" && \ 65 ${INSTALL_LINK} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \ 66 ${.ALLSRC} ${.TARGET} 67 68##### Build and install rules (source form pages) 69 70.if ${MKMAN} != "no" 71maninstall: manpages manlinks 72manpages:: # ensure target exists 73MANPAGES= ${MAN:C/.$/&${MANSUFFIX}/} 74 75realall: ${MANPAGES} 76.if !empty(MANSUFFIX) 77.NOPATH: ${MANPAGES} 78.SUFFIXES: ${_MSECTIONS:@N@.$N${MANSUFFIX}@} 79 80${_MSECTIONS:@N@.$N.$N${MANSUFFIX}@}: # build rule 81 ${_MKTARGET_FORMAT} 82 cat ${.IMPSRC} ${MANCOMPRESS} > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET} 83.endif # !empty(MANSUFFIX) 84 85.for F in ${MANPAGES:S/${MANSUFFIX}$//:O:u} 86_F:= ${DESTDIR}${MANDIR}/man${F:T:E}${MANSUBDIR}/${F}${MANSUFFIX} 87 88.if ${MKUPDATE} == "no" 89${_F}! ${F}${MANSUFFIX} __installpage # install rule 90.if !defined(BUILD) && !make(all) && !make(${F}) 91${_F}! .MADE # no build at install 92.endif 93.else 94${_F}: ${F}${MANSUFFIX} __installpage # install rule 95.if !defined(BUILD) && !make(all) && !make(${F}) 96${_F}: .MADE # no build at install 97.endif 98.endif 99 100manpages:: ${_F} 101.PRECIOUS: ${_F} # keep if install fails 102.endfor 103 104manlinks:: # link install 105 106.for _src _dst in ${MLINKS} 107_l:=${DESTDIR}${MANDIR}/man${_src:T:E}${MANSUBDIR}/${_src}${MANSUFFIX} 108_t:=${DESTDIR}${MANDIR}/man${_dst:T:E}${MANSUBDIR}/${_dst}${MANSUFFIX} 109 110# Handle case conflicts carefully, when _dst occurs 111# more than once after case flattening 112.if ${MKUPDATE} == "no" || ${MLINKS:tl:M${_dst:tl:Q}:[\#]} > 1 113${_t}! ${_l} __linkinstallpage 114.else 115${_t}: ${_l} __linkinstallpage 116.endif 117 118manlinks:: ${_t} 119.PRECIOUS: ${_t} 120.endfor 121.endif # ${MKMAN} != "no" 122 123##### Build and install rules (plaintext pages) 124 125.if (${MKCATPAGES} != "no") && (${MKMAN} != "no") 126catinstall: catpages catlinks 127catpages:: # ensure target exists 128CATPAGES= ${MAN:C/\.(${_MSECTIONREGEX})\$/.cat\1${MANSUFFIX}/} 129 130realall: ${CATPAGES} 131.NOPATH: ${CATPAGES} 132.SUFFIXES: ${_MSECTIONS:@N@.cat$N${MANSUFFIX}@} 133.MADE: ${CATDEPS} 134 135${_MSECTIONS:@N@.$N.cat$N${MANSUFFIX}@}: ${CATDEPS} # build rule 136 ${_MKTARGET_FORMAT} 137.if ${MKMANDOC} == yes && !defined(NOMANDOC) 138 if test ""${NOMANDOC.${.IMPSRC:T}:tl:Q} != "yes"; then \ 139 ${TOOL_MANDOC_ASCII} ${.IMPSRC} ${MANCOMPRESS} \ 140 > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}; \ 141 else \ 142 ${TOOL_ROFF_ASCII} -mandoc ${.IMPSRC} ${MANCOMPRESS} \ 143 > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}; \ 144 fi 145.elif defined(USETBL) 146 ${TOOL_TBL} ${.IMPSRC} | ${TOOL_ROFF_ASCII} -mandoc ${MANCOMPRESS} \ 147 > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET} 148.else 149 ${TOOL_ROFF_ASCII} -mandoc ${.IMPSRC} ${MANCOMPRESS} \ 150 > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET} 151.endif 152 153.for F in ${CATPAGES:S/${MANSUFFIX}$//:O:u} 154_F:= ${DESTDIR}${MANDIR}/${F:T:E}${MANSUBDIR}/${F:R}.0${MANSUFFIX} 155 156.if ${MKUPDATE} == "no" 157${_F}! ${F}${MANSUFFIX} __installpage # install rule 158.if !defined(BUILD) && !make(all) && !make(${F}) 159${_F}! .MADE # no build at install 160.endif 161.else 162${_F}: ${F}${MANSUFFIX} __installpage # install rule 163.if !defined(BUILD) && !make(all) && !make(${F}) 164${_F}: .MADE # no build at install 165.endif 166.endif 167 168catpages:: ${_F} 169.PRECIOUS: ${_F} # keep if install fails 170.endfor 171 172catlinks:: # link install 173 174.for _src _dst in ${MLINKS} 175_l:=${DESTDIR}${MANDIR}/cat${_src:T:E}${MANSUBDIR}/${_src:R}.0${MANSUFFIX} 176_t:=${DESTDIR}${MANDIR}/cat${_dst:T:E}${MANSUBDIR}/${_dst:R}.0${MANSUFFIX} 177 178# Handle case conflicts carefully, when _dst occurs 179# more than once after case flattening 180.if ${MKUPDATE} == "no" || ${MLINKS:tl:M${_dst:tl:Q}:[\#]} > 1 181${_t}! ${_l} __linkinstallpage 182.else 183${_t}: ${_l} __linkinstallpage 184.endif 185 186catlinks:: ${_t} 187.PRECIOUS: ${_t} 188.endfor 189.endif # (${MKCATPAGES} != "no") && (${MKMAN} != "no") 190 191##### Build and install rules (HTML pages) 192 193.if (${MKHTML} != "no") && (${MKMAN} != "no") # { 194htmlinstall: htmlpages htmllinks 195htmlpages:: # ensure target exists 196HTMLPAGES= ${MAN:C/\.(${_MSECTIONREGEX})\$/.html\1/} 197 198HTMLLINKS= ${MANSUBDIR:?../:}../html%S/%N.html 199HTMLSTYLE= ${MANSUBDIR:?../:}../style.css 200 201realall: ${HTMLPAGES} 202.NOPATH: ${HTMLPAGES} 203.SUFFIXES: ${_MSECTIONS:@N@.html$N@} 204 205${_MSECTIONS:@N@.$N.html$N@}: # build rule 206 ${_MKTARGET_FORMAT} 207.if ${MKMANDOC} == yes && !defined(NOMANDOC) 208 if test ""${NOMANDOC.${.IMPSRC:T}:tl:Q} != "yes"; then \ 209 ${TOOL_MANDOC_HTML} -Oman=${HTMLLINKS} -Ostyle=${HTMLSTYLE} \ 210 ${.IMPSRC} > ${.TARGET}.tmp && \ 211 mv ${.TARGET}.tmp ${.TARGET}; \ 212 else \ 213 ${TOOL_ROFF_HTML} ${.IMPSRC} ${MANCOMPRESS} \ 214 > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}; \ 215 fi 216.elif defined(USETBL) 217 ${TOOL_TBL} ${.IMPSRC} | ${TOOL_ROFF_HTML} ${MANCOMPRESS} \ 218 > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET} 219.else 220 ${TOOL_ROFF_HTML} ${.IMPSRC} ${MANCOMPRESS} \ 221 > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET} 222.endif 223 224.for F in ${HTMLPAGES:O:u} 225# construct installed path 226_F:= ${HTMLDIR}/${F:T:E}${MANSUBDIR}/${F:R:S-/index$-/x&-}.html 227 228.if ${MKUPDATE} == "no" 229${_F}! ${F} __installpage # install rule 230.if !defined(BUILD) && !make(all) && !make(${F}) 231${_F}! .MADE # no build at install 232.endif 233.else 234${_F}: ${F} __installpage # install rule 235.if !defined(BUILD) && !make(all) && !make(${F}) 236${_F}: .MADE # no build at install 237.endif 238.endif 239 240htmlpages:: ${_F} 241.PRECIOUS: ${_F} # keep if install fails 242.endfor 243 244htmllinks:: # link install 245 246.for _src _dst in ${MLINKS} 247_l:=${HTMLDIR}/html${_src:T:E}${MANSUBDIR}/${_src:R:S-/index$-/x&-}.html 248_t:=${HTMLDIR}/html${_dst:T:E}${MANSUBDIR}/${_dst:R:S-/index$-/x&-}.html 249 250# Handle case conflicts carefully, when _dst occurs 251# more than once after case flattening 252.if ${MKUPDATE} == "no" || ${MLINKS:tl:M${_dst:tl:Q}:[\#]} > 1 253${_t}! ${_l} __linkinstallpage 254.else 255${_t}: ${_l} __linkinstallpage 256.endif 257 258htmllinks:: ${_t} 259.PRECIOUS: ${_t} 260.endfor 261 262.endif # } 263 264##### Clean rules 265.undef _F 266 267.if !empty(MAN) && (${MKMAN} != "no") 268.if (${MKCATPAGES} != "no") 269CLEANDIRFILES+= ${CATPAGES} 270.endif 271.if !empty(MANSUFFIX) 272CLEANDIRFILES+= ${MANPAGES} ${CATPAGES:S/${MANSUFFIX}$//} 273.endif 274.if ${MKHTML} != "no" 275CLEANDIRFILES+= ${HTMLPAGES} 276.endif 277.endif 278# (XXX ${CATPAGES:S...} cleans up old .catN files where .catN.gz now used) 279 280.if !empty(MANPAGES) 281lintmanpages: ${MANPAGES} 282 ${TOOL_MANDOC_LINT} -Tlint -fstrict -Wall,stop ${.ALLSRC} 283.endif 284 285##### Pull in related .mk logic 286.include <bsd.obj.mk> 287.include <bsd.files.mk> 288.include <bsd.sys.mk> 289.include <bsd.clean.mk> 290 291${TARGETS} catinstall maninstall htmlinstall: # ensure existence 292