1# $NetBSD: bsd.man.mk,v 1.96 2006/09/11 22:24:09 dbj 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 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 ${.ALLSRC} ${.TARGET}" && \ 50 ${INSTALL_FILE} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \ 51 ${.ALLSRC} ${.TARGET}) 52 53# XXX consider including bsd.links.mk and using __linkinstall instead 54__linkinstallpage: .USE 55 ${_MKSHMSG_INSTALL} ${.TARGET}; \ 56 ${_MKSHECHO} "${INSTALL_LINK} ${.ALLSRC} ${.TARGET}" && \ 57 ${INSTALL_LINK} ${.ALLSRC} ${.TARGET} 58 59##### Build and install rules (source form pages) 60 61.if ${MKMAN} != "no" 62maninstall: manpages manlinks 63manpages:: # ensure target exists 64MANPAGES= ${MAN:C/.$/&${MANSUFFIX}/} 65 66realall: ${MANPAGES} 67.if !empty(MANSUFFIX) 68.NOPATH: ${MANPAGES} 69.SUFFIXES: ${_MNUMBERS:@N@.$N${MANSUFFIX}@} 70 71${_MNUMBERS:@N@.$N.$N${MANSUFFIX}@}: # build rule 72 cat ${.IMPSRC} ${MANCOMPRESS} > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET} 73.endif # !empty(MANSUFFIX) 74 75.for F in ${MANPAGES:S/${MANSUFFIX}$//:O:u} 76_F:= ${DESTDIR}${MANDIR}/man${F:T:E}${MANSUBDIR}/${F}${MANSUFFIX} 77 78.if ${MKUPDATE} == "no" 79${_F}! ${F}${MANSUFFIX} __installpage # install rule 80.if !defined(BUILD) && !make(all) && !make(${F}) 81${_F}! .MADE # no build at install 82.endif 83.else 84${_F}: ${F}${MANSUFFIX} __installpage # install rule 85.if !defined(BUILD) && !make(all) && !make(${F}) 86${_F}: .MADE # no build at install 87.endif 88.endif 89 90manpages:: ${_F} 91.PRECIOUS: ${_F} # keep if install fails 92.endfor 93 94manlinks:: # link install 95 96.for _src _dst in ${MLINKS} 97_l:=${DESTDIR}${MANDIR}/man${_src:T:E}${MANSUBDIR}/${_src}${MANSUFFIX} 98_t:=${DESTDIR}${MANDIR}/man${_dst:T:E}${MANSUBDIR}/${_dst}${MANSUFFIX} 99 100# Handle case conflicts carefully, when _dst occurs 101# more than once after case flattening 102.if ${MKUPDATE} == "no" || ${MLINKS:tl:M${_dst:tl:Q}:[\#]} > 1 103${_t}! ${_l} __linkinstallpage 104.else 105${_t}: ${_l} __linkinstallpage 106.endif 107 108manlinks:: ${_t} 109.PRECIOUS: ${_t} 110.endfor 111.endif # ${MKMAN} != "no" 112 113##### Build and install rules (plaintext pages) 114 115.if (${MKCATPAGES} != "no") && (${MKMAN} != "no") 116catinstall: catpages catlinks 117catpages:: # ensure target exists 118CATPAGES= ${MAN:C/\.([1-9])$/.cat\1${MANSUFFIX}/} 119 120realall: ${CATPAGES} 121.NOPATH: ${CATPAGES} 122.SUFFIXES: ${_MNUMBERS:@N@.cat$N${MANSUFFIX}@} 123.MADE: ${CATDEPS} 124.MADE: ${HTMLDEPS} 125 126${_MNUMBERS:@N@.$N.cat$N${MANSUFFIX}@}: ${CATDEPS} # build rule 127 ${_MKTARGET_FORMAT} 128.if defined(USETBL) 129 ${TOOL_TBL} ${.IMPSRC} | ${TOOL_ROFF_ASCII} -mandoc ${MANCOMPRESS} \ 130 > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET} 131.else 132 ${TOOL_ROFF_ASCII} -mandoc ${.IMPSRC} ${MANCOMPRESS} \ 133 > ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET} 134.endif 135 136.for F in ${CATPAGES:S/${MANSUFFIX}$//:O:u} 137_F:= ${DESTDIR}${MANDIR}/${F:T:E}${MANSUBDIR}/${F:R}.0${MANSUFFIX} 138 139.if ${MKUPDATE} == "no" 140${_F}! ${F}${MANSUFFIX} __installpage # install rule 141.if !defined(BUILD) && !make(all) && !make(${F}) 142${_F}! .MADE # no build at install 143.endif 144.else 145${_F}: ${F}${MANSUFFIX} __installpage # install rule 146.if !defined(BUILD) && !make(all) && !make(${F}) 147${_F}: .MADE # no build at install 148.endif 149.endif 150 151catpages:: ${_F} 152.PRECIOUS: ${_F} # keep if install fails 153.endfor 154 155catlinks:: # link install 156 157.for _src _dst in ${MLINKS} 158_l:=${DESTDIR}${MANDIR}/cat${_src:T:E}${MANSUBDIR}/${_src:R}.0${MANSUFFIX} 159_t:=${DESTDIR}${MANDIR}/cat${_dst:T:E}${MANSUBDIR}/${_dst:R}.0${MANSUFFIX} 160 161# Handle case conflicts carefully, when _dst occurs 162# more than once after case flattening 163.if ${MKUPDATE} == "no" || ${MLINKS:tl:M${_dst:tl:Q}:[\#]} > 1 164${_t}! ${_l} __linkinstallpage 165.else 166${_t}: ${_l} __linkinstallpage 167.endif 168 169catlinks:: ${_t} 170.PRECIOUS: ${_t} 171.endfor 172.endif # (${MKCATPAGES} != "no") && (${MKMAN} != "no") 173 174##### Build and install rules (HTML pages) 175 176.if ${MKHTML} != "no" # { 177installhtml: .PHONY htmlpages 178htmlpages:: # ensure target exists 179HTMLPAGES= ${MAN:C/\.([1-9])$/.html\1/} 180 181html: .PHONY ${HTMLPAGES} 182.NOPATH: ${HTMLPAGES} 183.SUFFIXES: ${_MNUMBERS:@N@.html$N@} 184 185${_MNUMBERS:@N@.$N.html$N@}: ${HTMLDEPS} # build rule 186 ${_MKTARGET_FORMAT} 187 ${TOOL_ROFF_HTML} ${.IMPSRC} > ${.TARGET}.tmp && \ 188 mv ${.TARGET}.tmp ${.TARGET} 189 190.for F in ${HTMLPAGES:O:u} 191# construct installed path 192_F:= ${HTMLDIR}/${F:T:E}${MANSUBDIR}/${F:R:S-/index$-/x&-}.html 193 194.if ${MKUPDATE} == "no" 195${_F}! ${F} __installpage # install rule 196.if !defined(BUILD) && !make(all) && !make(${F}) 197${_F}! .MADE # no build at install 198.endif 199.else 200${_F}: ${F} __installpage # install rule 201.if !defined(BUILD) && !make(all) && !make(${F}) 202${_F}: .MADE # no build at install 203.endif 204.endif 205 206htmlpages:: ${_F} 207.PRECIOUS: ${_F} # keep if install fails 208.endfor 209 210cleanhtml: .PHONY 211 rm -f ${HTMLPAGES} 212.endif # } 213 214##### Clean rules 215.undef _F 216 217cleandir: cleanman 218.if !empty(CLEANFILES) 219 rm -f ${CLEANFILES} 220.endif 221 222cleanman: .PHONY 223.if !empty(MAN) && (${MKMAN} != "no") 224.if (${MKCATPAGES} != "no") 225 rm -f ${CATPAGES} 226.endif 227.if !empty(MANSUFFIX) 228 rm -f ${MANPAGES} ${CATPAGES:S/${MANSUFFIX}$//} 229.endif 230.endif 231# (XXX ${CATPAGES:S...} cleans up old .catN files where .catN.gz now used) 232 233##### Pull in related .mk logic 234.include <bsd.obj.mk> 235.include <bsd.files.mk> 236.include <bsd.sys.mk> 237 238${TARGETS} catinstall maninstall: # ensure existence 239