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