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