1# 2# The include file <bsd.man.mk> handles installing manual pages and 3# their links. 4# 5# 6# +++ variables +++ 7# 8# DESTDIR Change the tree where the man pages gets installed. [not set] 9# 10# MANDIR Base path for manual installation. [${SHAREDIR}/man/man] 11# 12# MANOWN Manual owner. [${SHAREOWN}] 13# 14# MANGRP Manual group. [${SHAREGRP}] 15# 16# MANMODE Manual mode. [${NOBINMODE}] 17# 18# MANSUBDIR Subdirectory under the manual page section, i.e. "/i386" 19# or "/tahoe" for machine specific manual pages. 20# 21# MAN The manual pages to be installed. For sections see 22# variable ${SECTIONS} 23# 24# MCOMPRESS_CMD Program to compress man pages. Output is to 25# stdout. [${COMPRESS_CMD}] 26# 27# MLINKS List of manual page links (using a suffix). The 28# linked-to file must come first, the linked file 29# second, and there may be multiple pairs. The files 30# are hard-linked. 31# 32# NO_MLINKS If you do not want install manual page links. [not set] 33# 34# MANFILTER command to pipe the raw man page through before compressing 35# or installing. Can be used to do sed substitution. 36# 37# MANBUILDCAT create preformatted manual pages in addition to normal 38# pages. [not set] 39# 40# MANDOC_CMD command and flags to create preformatted pages 41# 42# MANGROUPS A list of groups, each of which should be a variable containing 43# a list of manual pages in that group. By default one group is 44# defined called "MAN". 45# 46# For each group, group-specific options may be set: 47# <group>OWN, <group>GRP, <group>MODE and <group>PACKAGE. 48# 49# +++ targets +++ 50# 51# maninstall: 52# Install the manual pages and their links. 53# 54 55.if !target(__<bsd.init.mk>__) 56.error bsd.man.mk cannot be included directly. 57.endif 58 59MANGROUPS?= MAN 60 61# Backwards compatibility. 62MINSTALL?= ${MANINSTALL} 63 64CATDIR= ${MANDIR:H:S/$/\/cat/} 65CATEXT= .cat 66MANDOC_CMD?= mandoc -Tascii 67 68MCOMPRESS_CMD?= ${COMPRESS_CMD} 69MCOMPRESS_EXT?= ${COMPRESS_EXT} 70 71SECTIONS= 1 2 3 4 5 6 7 8 9 72.SUFFIXES: ${SECTIONS:S/^/./g} 73 74# Backwards compatibility. 75.if !defined(MAN) 76.for __sect in ${SECTIONS} 77MANGROUPS+= MAN${__sect} 78.endfor 79.endif 80 81# Following the conventions of MANGROUPS, manpage links should be defined 82# as ${group}LINKS, which means the default groups' links would be called 83# MANLINKS. However it's actually called MLINKS, so for compatibility, 84# use ${MLINKS} as the default group's links if it's set. 85.if defined(MLINKS) 86MANLINKS= ${MLINKS} 87.endif 88 89maninstall: realmaninstall manlinksinstall .PHONY 90# Make sure all manpages are installed before we try to link any. 91.ORDER: realmaninstall manlinksinstall 92realmaninstall: .PHONY 93manlinksinstall: .PHONY 94 95all-man: 96 97.for __group in ${MANGROUPS} 98 99realmaninstall: realmaninstall-${__group} 100manlinksinstall: manlinksinstall-${__group} 101 102${__group}OWN?= ${MANOWN} 103${__group}GRP?= ${MANGRP} 104${__group}MODE?= ${MANMODE} 105 106# Tag processing is only done for NO_ROOT installs. 107.if defined(NO_ROOT) 108 109.if !defined(${__group}TAGS) || ! ${${__group}TAGS:Mpackage=*} 110.if ${MK_MANSPLITPKG} == "no" 111${__group}TAGS+= package=${${__group}PACKAGE:U${PACKAGE:Uutilities}} 112.else 113${__group}TAGS+= package=${${__group}PACKAGE:U${PACKAGE:Uutilities}}-man 114.endif 115.endif 116 117${__group}TAG_ARGS= -T ${${__group}TAGS:[*]:S/ /,/g} 118.endif # defined(NO_ROOT) 119 120${__group}INSTALL?= ${INSTALL} ${${__group}TAG_ARGS} \ 121 -o ${${__group}OWN} -g ${${__group}GRP} -m ${${__group}MODE} 122 123.if ${MK_MANCOMPRESS} == "no" 124 125# Make special arrangements to filter to a temporary file at build time 126# for MK_MANCOMPRESS == no. 127.if defined(MANFILTER) 128FILTEXTENSION= .filt 129.else 130FILTEXTENSION= 131.endif 132 133ZEXT= 134 135.if defined(MANFILTER) 136.if defined(${__group}) && !empty(${__group}) 137CLEANFILES+= ${${__group}:T:S/$/${FILTEXTENSION}/g} 138CLEANFILES+= ${${__group}:T:S/$/${CATEXT}${FILTEXTENSION}/g} 139.for __page in ${${__group}} 140.for __target in ${__page:T:S/$/${FILTEXTENSION}/g} 141all-man: ${__target} 142${__target}: ${__page} 143 ${MANFILTER} < ${.ALLSRC} > ${.TARGET} 144.endfor 145.if defined(MANBUILDCAT) && !empty(MANBUILDCAT) 146.for __target in ${__page:T:S/$/${CATEXT}${FILTEXTENSION}/g} 147all-man: ${__target} 148${__target}: ${__page} 149 ${MANFILTER} < ${.ALLSRC} | ${MANDOC_CMD} > ${.TARGET} 150.endfor 151.endif 152.endfor 153.endif # !empty(${__group}) 154.else # !defined(MANFILTER) 155.if defined(${__group}) && !empty(${__group}) 156CLEANFILES+= ${${__group}:T:S/$/${CATEXT}/g} 157.if defined(MANBUILDCAT) && !empty(MANBUILDCAT) 158.for __page in ${${__group}} 159.for __target in ${__page:T:S/$/${CATEXT}/g} 160all-man: ${__target} 161${__target}: ${__page} 162 ${MANDOC_CMD} ${.ALLSRC} > ${.TARGET} 163.endfor 164.endfor 165.else 166all-man: ${${__group}} 167.endif 168.endif 169.endif # defined(MANFILTER) 170 171.else # ${MK_MANCOMPRESS} == "yes" 172 173ZEXT= ${MCOMPRESS_EXT} 174 175.if defined(${__group}) && !empty(${__group}) 176CLEANFILES+= ${${__group}:T:S/$/${MCOMPRESS_EXT}/g} 177CLEANFILES+= ${${__group}:T:S/$/${CATEXT}${MCOMPRESS_EXT}/g} 178.for __page in ${${__group}} 179.for __target in ${__page:T:S/$/${MCOMPRESS_EXT}/} 180all-man: ${__target} 181${__target}: ${__page} 182.if defined(MANFILTER) 183 ${MANFILTER} < ${.ALLSRC} | ${MCOMPRESS_CMD} > ${.TARGET} 184.else 185 ${MCOMPRESS_CMD} ${.ALLSRC} > ${.TARGET} 186.endif 187.endfor 188.if defined(MANBUILDCAT) && !empty(MANBUILDCAT) 189.for __target in ${__page:T:S/$/${CATEXT}${MCOMPRESS_EXT}/} 190all-man: ${__target} 191${__target}: ${__page} 192.if defined(MANFILTER) 193 ${MANFILTER} < ${.ALLSRC} | ${MANDOC_CMD} | ${MCOMPRESS_CMD} > ${.TARGET} 194.else 195 ${MANDOC_CMD} ${.ALLSRC} | ${MCOMPRESS_CMD} > ${.TARGET} 196.endif 197.endfor 198.endif 199.endfor 200.endif 201 202.endif # ${MK_MANCOMPRESS} == "no" 203 204_MANLINKS= 205.if !defined(NO_MLINKS) && defined(${__group}LINKS) && !empty(${__group}LINKS) 206.for _oname _osect _dname _dsect in ${${__group}LINKS:C/\.([^.]*)$/.\1 \1/} 207_MANLINKS+= ${MANDIR}${_osect}${MANSUBDIR}/${_oname} \ 208 ${MANDIR}${_dsect}${MANSUBDIR}/${_dname} 209.if defined(MANBUILDCAT) && !empty(MANBUILDCAT) 210_MANLINKS+= ${CATDIR}${_osect}${MANSUBDIR}/${_oname} \ 211 ${CATDIR}${_dsect}${MANSUBDIR}/${_dname} 212.endif 213.endfor 214.endif 215 216.if defined(${__group}) && !empty(${__group}) 217.if ${MK_STAGING_MAN} == "yes" 218STAGE_TARGETS+= stage_files.${__group} 219_mansets.${__group}:= ${${__group}:E:O:u:M*[1-9]:@s@man$s@} 220STAGE_SETS+= ${_mansets.${__group}} 221.for _page in ${${__group}} 222stage_files.${__group}.man${_page:T:E}: ${_page} 223.if target(${_page}${MCOMPRESS_EXT}) 224stage_files.${__group}.man${_page:T:E}: ${_page}${MCOMPRESS_EXT} 225.endif 226STAGE_DIR.${__group}.man${_page:T:E}?= ${STAGE_OBJTOP}${MANDIR}${_page:T:E}${MANSUBDIR} 227.endfor 228.if !defined(NO_MLINKS) && !empty(${__group}LINKS) 229STAGE_SETS+= mlinks.${__group} 230STAGE_TARGETS+= stage_links.${__group} 231STAGE_LINKS.mlinks.${__group}:= ${${__group}LINKS:M*.[1-9]:@f@${f:S,^,${MANDIR}${f:E}${MANSUBDIR}/,}@} 232stage_links.mlinks.${__group}: ${_mansets.${__group}:@s@stage_files.${__group}.$s@} 233.endif 234.endif 235.endif 236 237realmaninstall-${__group}: 238.if defined(${__group}) && !empty(${__group}) 239realmaninstall-${__group}: ${${__group}} 240.if ${MK_MANCOMPRESS} == "no" 241.if defined(MANFILTER) 242.for __page in ${${__group}} 243 ${${__group}INSTALL} ${__page:T:S/$/${FILTEXTENSION}/g} \ 244 ${DESTDIR}${MANDIR}${__page:E}${MANSUBDIR}/${__page} 245.if defined(MANBUILDCAT) && !empty(MANBUILDCAT) 246 ${${__group}INSTALL} ${__page:T:S/$/${CATEXT}${FILTEXTENSION}/g} \ 247 ${DESTDIR}${CATDIR}${__page:E}${MANSUBDIR}/${__page} 248.endif 249.endfor 250.else # !defined(MANFILTER) 251 @set ${.ALLSRC:C/\.([^.]*)$/.\1 \1/}; \ 252 while : ; do \ 253 case $$# in \ 254 0) break;; \ 255 1) echo "warn: missing extension: $$1"; break;; \ 256 esac; \ 257 page=$$1; shift; sect=$$1; shift; \ 258 d=${DESTDIR}${MANDIR}$${sect}${MANSUBDIR}; \ 259 ${ECHO} ${${__group}INSTALL} $${page} $${d}; \ 260 ${${__group}INSTALL} $${page} $${d}; \ 261 done 262.if defined(MANBUILDCAT) && !empty(MANBUILDCAT) 263.for __page in ${${__group}} 264 ${${__group}INSTALL} ${__page:T:S/$/${CATEXT}/} \ 265 ${DESTDIR}${CATDIR}${__page:E}${MANSUBDIR}/${__page:T} 266.endfor 267.endif 268.endif # defined(MANFILTER) 269.else # ${MK_MANCOMPRESS} == "yes" 270.for __page in ${${__group}} 271 ${${__group}INSTALL} ${__page:T:S/$/${MCOMPRESS_EXT}/g} \ 272 ${DESTDIR}${MANDIR}${__page:E}${MANSUBDIR}/ 273.if defined(MANBUILDCAT) && !empty(MANBUILDCAT) 274 ${${__group}INSTALL} ${__page:T:S/$/${CATEXT}${MCOMPRESS_EXT}/g} \ 275 ${DESTDIR}${CATDIR}${__page:E}${MANSUBDIR}/${__page:T:S/$/${MCOMPRESS_EXT}/} 276.endif 277.endfor 278.endif # ${MK_MANCOMPRESS} == "no" 279.endif 280 281manlinksinstall-${__group}: 282.for l t in ${_MANLINKS} 283# On MacOS, assume case folding FS, and don't install links from foo.x to FOO.x. 284.if ${.MAKE.OS} != "Darwin" || ${l:tu} != ${t:tu} 285 ${INSTALL_MANLINK} ${${__group}TAG_ARGS} ${DESTDIR}${l}${ZEXT} ${DESTDIR}${t}${ZEXT} 286.endif 287.endfor 288 289manlint: 290.if defined(${__group}) && !empty(${__group}) 291.for __page in ${${__group}} 292manlint: ${__page}lint 293${__page}lint: ${__page} 294.if defined(MANFILTER) 295 ${MANFILTER} < ${.ALLSRC} | ${MANDOC_CMD} -Tlint 296.else 297 ${MANDOC_CMD} -Tlint ${.ALLSRC} 298.endif 299.endfor 300.endif 301 302.endfor # __group in ${MANGROUPS} 303