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