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