1 1.121 kamil # $NetBSD: bsd.man.mk,v 1.121 2020/11/08 14:52:35 kamil 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.121 kamil .PHONY: maninstall manpages 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.117 christos # the CASE_INSENSITIVE_DEST macro is currently not defined anywhere, 18 1.117 christos # and the expansion does not really work because of make(1). 19 1.116 christos .if defined(CASE_INSENSITIVE_DEST) 20 1.117 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.66 tv 32 1.64 tv MAN?= 33 1.64 tv MLINKS?= 34 1.114 apb _MSECTIONS= 1 2 3 4 5 6 7 8 9 35 1.114 apb _MSECTIONS+= 3lua 9lua 36 1.114 apb _MSECTIONREGEX= ${_MSECTIONS:ts|} # e.g. 1|2|3|... 37 1.114 apb .SUFFIXES: ${_MSECTIONS:@N@.$N@} 38 1.64 tv 39 1.82 lukem .if ${MKMANZ} == "no" 40 1.82 lukem MANCOMPRESS?= 41 1.82 lukem MANSUFFIX?= 42 1.82 lukem .else 43 1.115 apb MANCOMPRESS?= ${TOOL_GZIP_N} -cf 44 1.82 lukem MANSUFFIX?= .gz 45 1.82 lukem .endif 46 1.64 tv 47 1.64 tv # make MANCOMPRESS a filter, so it can be inserted on an as-needed basis 48 1.64 tv .if !empty(MANCOMPRESS) 49 1.64 tv MANCOMPRESS:= | ${MANCOMPRESS} 50 1.20 cgd .endif 51 1.1 cgd 52 1.25 christos __installpage: .USE 53 1.60 simonb @cmp -s ${.ALLSRC} ${.TARGET} > /dev/null 2>&1 || \ 54 1.90 lukem (${_MKSHMSG_INSTALL} ${.TARGET}; \ 55 1.87 lukem ${_MKSHECHO} "${INSTALL_FILE} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \ 56 1.95 jwise ${.ALLSRC} ${.TARGET}" && \ 57 1.64 tv ${INSTALL_FILE} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \ 58 1.95 jwise ${.ALLSRC} ${.TARGET}) 59 1.25 christos 60 1.96 dbj # XXX consider including bsd.links.mk and using __linkinstall instead 61 1.96 dbj __linkinstallpage: .USE 62 1.96 dbj ${_MKSHMSG_INSTALL} ${.TARGET}; \ 63 1.100 apb ${_MKSHECHO} "${INSTALL_LINK} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \ 64 1.100 apb ${.ALLSRC} ${.TARGET}" && \ 65 1.100 apb ${INSTALL_LINK} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} \ 66 1.100 apb ${.ALLSRC} ${.TARGET} 67 1.96 dbj 68 1.64 tv ##### Build and install rules (source form pages) 69 1.25 christos 70 1.64 tv .if ${MKMAN} != "no" 71 1.96 dbj maninstall: manpages manlinks 72 1.64 tv manpages:: # ensure target exists 73 1.65 enami MANPAGES= ${MAN:C/.$/&${MANSUFFIX}/} 74 1.64 tv 75 1.72 tv realall: ${MANPAGES} 76 1.64 tv .if !empty(MANSUFFIX) 77 1.64 tv .NOPATH: ${MANPAGES} 78 1.114 apb .SUFFIXES: ${_MSECTIONS:@N@.$N${MANSUFFIX}@} 79 1.64 tv 80 1.114 apb ${_MSECTIONS:@N@.$N.$N${MANSUFFIX}@}: # build rule 81 1.97 lukem ${_MKTARGET_FORMAT} 82 1.120 christos cat ${.IMPSRC} ${MANCOMPRESS} > ${.TARGET}.tmp && ${MV} ${.TARGET}.tmp ${.TARGET} 83 1.64 tv .endif # !empty(MANSUFFIX) 84 1.64 tv 85 1.64 tv .for F in ${MANPAGES:S/${MANSUFFIX}$//:O:u} 86 1.64 tv _F:= ${DESTDIR}${MANDIR}/man${F:T:E}${MANSUBDIR}/${F}${MANSUFFIX} 87 1.64 tv 88 1.83 lukem .if ${MKUPDATE} == "no" 89 1.78 mycroft ${_F}! ${F}${MANSUFFIX} __installpage # install rule 90 1.78 mycroft .if !defined(BUILD) && !make(all) && !make(${F}) 91 1.78 mycroft ${_F}! .MADE # no build at install 92 1.78 mycroft .endif 93 1.78 mycroft .else 94 1.64 tv ${_F}: ${F}${MANSUFFIX} __installpage # install rule 95 1.64 tv .if !defined(BUILD) && !make(all) && !make(${F}) 96 1.64 tv ${_F}: .MADE # no build at install 97 1.53 mycroft .endif 98 1.78 mycroft .endif 99 1.78 mycroft 100 1.78 mycroft manpages:: ${_F} 101 1.78 mycroft .PRECIOUS: ${_F} # keep if install fails 102 1.64 tv .endfor 103 1.52 mycroft 104 1.96 dbj manlinks:: # link install 105 1.96 dbj 106 1.96 dbj .for _src _dst in ${MLINKS} 107 1.96 dbj _l:=${DESTDIR}${MANDIR}/man${_src:T:E}${MANSUBDIR}/${_src}${MANSUFFIX} 108 1.96 dbj _t:=${DESTDIR}${MANDIR}/man${_dst:T:E}${MANSUBDIR}/${_dst}${MANSUFFIX} 109 1.96 dbj 110 1.96 dbj # Handle case conflicts carefully, when _dst occurs 111 1.96 dbj # more than once after case flattening 112 1.117 christos .if ${MKUPDATE} == "no" || ${MLINKS:${_FLATTEN}M${_dst:${_FLATTEN}Q}:[\#]} > 1 113 1.96 dbj ${_t}! ${_l} __linkinstallpage 114 1.96 dbj .else 115 1.96 dbj ${_t}: ${_l} __linkinstallpage 116 1.19 brezak .endif 117 1.96 dbj 118 1.96 dbj manlinks:: ${_t} 119 1.96 dbj .PRECIOUS: ${_t} 120 1.96 dbj .endfor 121 1.64 tv .endif # ${MKMAN} != "no" 122 1.64 tv 123 1.64 tv ##### Build and install rules (HTML pages) 124 1.56 phil 125 1.97 lukem .if (${MKHTML} != "no") && (${MKMAN} != "no") # { 126 1.97 lukem htmlinstall: htmlpages htmllinks 127 1.64 tv htmlpages:: # ensure target exists 128 1.114 apb HTMLPAGES= ${MAN:C/\.(${_MSECTIONREGEX})\$/.html\1/} 129 1.64 tv 130 1.107 njoly HTMLLINKS= ${MANSUBDIR:?../:}../html%S/%N.html 131 1.107 njoly HTMLSTYLE= ${MANSUBDIR:?../:}../style.css 132 1.107 njoly 133 1.97 lukem realall: ${HTMLPAGES} 134 1.64 tv .NOPATH: ${HTMLPAGES} 135 1.114 apb .SUFFIXES: ${_MSECTIONS:@N@.html$N@} 136 1.64 tv 137 1.114 apb ${_MSECTIONS:@N@.$N.html$N@}: # build rule 138 1.88 lukem ${_MKTARGET_FORMAT} 139 1.111 christos .if ${MKMANDOC} == yes && !defined(NOMANDOC) 140 1.111 christos if test ""${NOMANDOC.${.IMPSRC:T}:tl:Q} != "yes"; then \ 141 1.119 jmcneill ${TOOL_MANDOC_HTML} -Oman=${HTMLLINKS},style=${HTMLSTYLE} \ 142 1.111 christos ${.IMPSRC} > ${.TARGET}.tmp && \ 143 1.120 christos ${MV} ${.TARGET}.tmp ${.TARGET}; \ 144 1.111 christos else \ 145 1.112 christos ${TOOL_ROFF_HTML} ${.IMPSRC} ${MANCOMPRESS} \ 146 1.120 christos > ${.TARGET}.tmp && ${MV} ${.TARGET}.tmp ${.TARGET}; \ 147 1.111 christos fi 148 1.111 christos .elif defined(USETBL) 149 1.112 christos ${TOOL_TBL} ${.IMPSRC} | ${TOOL_ROFF_HTML} ${MANCOMPRESS} \ 150 1.120 christos > ${.TARGET}.tmp && ${MV} ${.TARGET}.tmp ${.TARGET} 151 1.111 christos .else 152 1.112 christos ${TOOL_ROFF_HTML} ${.IMPSRC} ${MANCOMPRESS} \ 153 1.120 christos > ${.TARGET}.tmp && ${MV} ${.TARGET}.tmp ${.TARGET} 154 1.111 christos .endif 155 1.64 tv 156 1.64 tv .for F in ${HTMLPAGES:O:u} 157 1.77 ross # construct installed path 158 1.77 ross _F:= ${HTMLDIR}/${F:T:E}${MANSUBDIR}/${F:R:S-/index$-/x&-}.html 159 1.78 mycroft 160 1.83 lukem .if ${MKUPDATE} == "no" 161 1.78 mycroft ${_F}! ${F} __installpage # install rule 162 1.78 mycroft .if !defined(BUILD) && !make(all) && !make(${F}) 163 1.78 mycroft ${_F}! .MADE # no build at install 164 1.78 mycroft .endif 165 1.78 mycroft .else 166 1.64 tv ${_F}: ${F} __installpage # install rule 167 1.64 tv .if !defined(BUILD) && !make(all) && !make(${F}) 168 1.64 tv ${_F}: .MADE # no build at install 169 1.64 tv .endif 170 1.78 mycroft .endif 171 1.78 mycroft 172 1.78 mycroft htmlpages:: ${_F} 173 1.78 mycroft .PRECIOUS: ${_F} # keep if install fails 174 1.56 phil .endfor 175 1.56 phil 176 1.97 lukem htmllinks:: # link install 177 1.97 lukem 178 1.97 lukem .for _src _dst in ${MLINKS} 179 1.97 lukem _l:=${HTMLDIR}/html${_src:T:E}${MANSUBDIR}/${_src:R:S-/index$-/x&-}.html 180 1.97 lukem _t:=${HTMLDIR}/html${_dst:T:E}${MANSUBDIR}/${_dst:R:S-/index$-/x&-}.html 181 1.97 lukem 182 1.97 lukem # Handle case conflicts carefully, when _dst occurs 183 1.97 lukem # more than once after case flattening 184 1.117 christos .if ${MKUPDATE} == "no" || ${MLINKS:${_FLATTEN}M${_dst:${_FLATTEN}Q}:[\#]} > 1 185 1.97 lukem ${_t}! ${_l} __linkinstallpage 186 1.97 lukem .else 187 1.97 lukem ${_t}: ${_l} __linkinstallpage 188 1.97 lukem .endif 189 1.97 lukem 190 1.97 lukem htmllinks:: ${_t} 191 1.97 lukem .PRECIOUS: ${_t} 192 1.97 lukem .endfor 193 1.97 lukem 194 1.82 lukem .endif # } 195 1.31 mycroft 196 1.64 tv ##### Clean rules 197 1.64 tv .undef _F 198 1.8 mycroft 199 1.64 tv .if !empty(MAN) && (${MKMAN} != "no") 200 1.64 tv .if !empty(MANSUFFIX) 201 1.121 kamil CLEANDIRFILES+= ${MANPAGES} 202 1.64 tv .endif 203 1.97 lukem .if ${MKHTML} != "no" 204 1.109 apb CLEANDIRFILES+= ${HTMLPAGES} 205 1.97 lukem .endif 206 1.64 tv .endif 207 1.64 tv 208 1.103 joerg .if !empty(MANPAGES) 209 1.101 joerg lintmanpages: ${MANPAGES} 210 1.106 joerg ${TOOL_MANDOC_LINT} -Tlint -fstrict -Wall,stop ${.ALLSRC} 211 1.101 joerg .endif 212 1.101 joerg 213 1.118 dholland ##### describe 214 1.118 dholland describe: 215 1.118 dholland .for _M in ${MANPAGES} 216 1.118 dholland @echo $$(basename ${_M}) - \ 217 1.118 dholland $$(${TOOL_SED} < ${${_M}:P} -n -e '/^\.Nd /{;s/^....//;p;}') 218 1.118 dholland .endfor 219 1.118 dholland 220 1.118 dholland 221 1.64 tv ##### Pull in related .mk logic 222 1.64 tv .include <bsd.obj.mk> 223 1.84 lukem .include <bsd.files.mk> 224 1.67 thorpej .include <bsd.sys.mk> 225 1.109 apb .include <bsd.clean.mk> 226 1.34 mycroft 227 1.121 kamil ${TARGETS} maninstall htmlinstall: # ensure existence 228