1# $NetBSD: bsd.doc.mk,v 1.68 2015/08/04 08:36:14 dholland Exp $ 2# @(#)bsd.doc.mk 8.1 (Berkeley) 8/14/93 3 4.include <bsd.init.mk> 5 6# The makefile should set these: 7# SECTION one of usd, smm, or psd (lower-case) 8# ARTICLE name of this document 9# SRCS roff source files 10# DEPSRCS additional roff source files implicitly included 11# MACROS name(s) of roff macro packages, including the -m 12# ROFF_PIC set to "yes" to use pic(1) 13# ROFF_EQN set to "yes" to use eqn(1) 14# ROFF_TBL set to "yes" to use tbl(1) 15# ROFF_REFER set to "yes" to use refer(1) 16# EXTRAHTMLFILES additional files emitted as part of HTML build 17# 18# PAGES unknown (XXX) 19# EXTRA extra files to install (XXX) 20# 21# If there are multiple docs to be generated, set these: 22# SUBARTICLES= name1 name2 ... 23# SRCS.name1= roff source files 24# SRCS.name2= more roff source files 25# SRCS. : = : 26# DEPSRCS.name1= additional included roff source files 27# DEPSRCS.name2= more additional included roff source files 28# DEPSRCS. : = : 29# 30# I'm hoping that MACROS and ROFF_* can be uniform across all 31# subarticles. 32 33 34# Old bsd.doc.mk files tend to invoke tbl and other preprocessors 35# directly; they should be changed to set ROFF_* instead. 36# 37# Also they set e.g. DIR=usd/72.mydocument; this should be changed 38# to SECTION=usd and ARTICLE=mydocument. The article numbers are 39# no longer present in the file system and do not need to be known 40# at build time. 41# 42 43# 20130908 dholland: Make sure all makefiles have been converted to the 44# new scheme. 45.if !defined(SECTION) 46.error "bsd.doc.mk: SECTION must be defined" 47.endif 48.if target(paper.ps) 49.error "bsd.doc.mk: target(paper.ps) is true -- this is not allowed" 50.endif 51 52# 20130908 dholland: right now we cannot generate pdf from roff sources, 53# so build compressed postscript instead. XXX. (and: yech) 54TOOL_ROFF_PDF?=false "No roff pdf support" 55PRINTABLE=ps.gz 56#PRINTABLE=ps 57#PRINTABLE=pdf 58 59# If there aren't subarticles, we generate one doc that has the same 60# name as the top-level article. 61SUBARTICLES?=${ARTICLE} 62SRCS.${ARTICLE}?=${SRCS} 63DEPSRCS.${ARTICLE}?=${DEPSRCS} 64 65##### Build 66 67.for SA in ${SUBARTICLES} 68.if ${MKDOC} != "no" 69realall: ${SA}.txt 70realall: ${SA}.${PRINTABLE} 71.if ${MKHTML} != "no" && ${MKGROFFHTMLDOC} != "no" 72realall: ${SA}.html 73.endif 74.endif 75.endfor # SUBARTICLES 76 77.if defined(ROFF_PIC) && ${ROFF_PIC} != "no" 78ROFFFLAGS+=-p 79.endif 80.if defined(ROFF_EQN) && ${ROFF_EQN} != "no" 81ROFFFLAGS+=-e 82.endif 83.if defined(ROFF_TBL) && ${ROFF_TBL} != "no" 84ROFFFLAGS+=-t 85.endif 86.if defined(ROFF_REFER) && ${ROFF_REFER} != "no" 87ROFFFLAGS+=-R 88.endif 89ROFFFLAGS+=-I${.CURDIR} 90 91.for SA in ${SUBARTICLES} 92 93# 94# Find the sources. 95# 96# We can't use .IMPSRC in the rules because they aren't suffix rules 97# (they could be for some docs, but not others) and we can't use 98# .ALLSRC because that includes DEPSRCS. 99# 100# As far as I know, the only ways to get the path discovered via .PATH 101# are those two magic variables or the P modifier. 102# 103# For some reason the P modifier finds the path to a variable name, 104# not the path to a word in a variable. 105# 106 107.for S in ${SRCS.${SA}} 108SRCS2.${SA}+=${${S}:P} 109.endfor 110.for S in ${DEPSRCS.${SA}} 111DEPSRCS2.${SA}+=${${S}:P} 112.endfor 113 114# 115# Note: we use TOOL_ROFF_DOCASCII because TOOL_ROFF_ASCII invokes 116# the nroff wrapper instead of groff directly, and that doesn't 117# understand -I. 118# 119# We use TOOL_ROFF_DOCHTML because TOOL_ROFF_HTML uses -mdoc2html, 120# which is great if it works but doesn't work with at least some of 121# the non-mdoc docs. (e.g. the curses one) TOOL_ROFF_DOCHTML uses 122# groff -Thtml, which produces fairly blah output but works with these 123# docs. It might end up being necessary to choose one or the other on 124# a per-document basis... sigh. 125# 126 127${SA}.txt: ${SRCS2.${SA}} ${DEPSRCS2.${SA}} 128 ${_MKTARGET_FORMAT} 129 ${TOOL_ROFF_DOCASCII} ${ROFFFLAGS} ${MACROS} ${PAGES} ${SRCS2.${SA}} \ 130 > ${.TARGET} 131 132${SA}.ps: ${SRCS2.${SA}} ${DEPSRCS2.${SA}} 133 ${_MKTARGET_FORMAT} 134 ${TOOL_ROFF_PS} ${ROFFFLAGS} ${MACROS} ${PAGES} ${SRCS2.${SA}} \ 135 | ${TOOL_SED} -e '/^%%CreationDate:/d' \ 136 > ${.TARGET} 137 138${SA}.pdf: ${SRCS2.${SA}} ${DEPSRCS2.${SA}} 139 ${_MKTARGET_FORMAT} 140 ${TOOL_ROFF_PDF} ${ROFFFLAGS} ${MACROS} ${PAGES} ${SRCS2.${SA}} \ 141 > ${.TARGET} 142 143${SA}.html: ${SRCS2.${SA}} ${DEPSRCS2.${SA}} 144 ${_MKTARGET_FORMAT} 145 ${TOOL_ROFF_DOCHTML} ${ROFFFLAGS} ${MACROS} ${PAGES} ${SRCS2.${SA}} \ 146 -P -I -P ${SA} \ 147 > ${.TARGET} 148 149${SA}.ps.gz: ${SA}.ps 150 ${TOOL_GZIP} -9 -c -n ${.ALLSRC} > ${.TARGET} 151 152.endfor # SUBARTICLES 153 154##### Install 155 156DOCINST:= 157.for SA in ${SUBARTICLES} 158DOCINST+=${SA}.txt ${SA}.${PRINTABLE} 159.if ${MKHTML} != "no" && ${MKGROFFHTMLDOC} != "no" 160DOCINST+=${SA}.html 161.endif 162.endfor 163.if ${MKHTML} != "no" && ${MKGROFFHTMLDOC} != "no" 164DOCINST+=${EXTRAHTMLFILES} 165.endif 166 167.if ${MKDOC} != "no" 168docinstall: 169.for D in ${DOCINST} 170 ${_MKTARGET_INSTALL} 171 ${INSTALL_FILE} -o ${DOCOWN} -g ${DOCGRP} -m ${DOCMODE} ${D} \ 172 ${DESTDIR}${DOCDIR}/${SECTION}/${ARTICLE}/${D} 173.endfor 174.else 175docinstall: ; 176.endif 177 178.PHONY: docinstall 179realinstall: docinstall 180 181##### Clean 182 183cleandoc: 184.for SA in ${SUBARTICLES} 185 rm -f ${SA}.txt ${SA}.ps ${SA}.ps.gz ${SA}.html 186.endfor 187 rm -f ${EXTRAHTMLFILES} [eE]rrs mklog ${CLEANFILES} 188 189.PHONY: cleandoc 190clean: cleandoc 191 192##### Extra custom rules 193 194.if !target(print) 195print: ; 196.PHONY: print 197.for SA in ${SUBARTICLES} 198print: print.${SA} 199.PHONY: print.{SA} 200print.${SA}: ${SA}.ps 201 lpr -P${PRINTER} ${.ALLSRC} 202.endfor 203.endif 204 205spell: ; 206.PHONY: spell 207.for SA in ${SUBARTICLES} 208spell: spell.${SA} 209.PHONY: spell.{SA} 210spell.${SA}: ${SRCS2} ${DEPSRCS2} 211 spell ${SRCS2} | sort | comm -23 - spell.ok > paper.spell 212.endfor 213 214##### Pull in related .mk logic 215 216.include <bsd.obj.mk> 217.include <bsd.sys.mk> 218 219${TARGETS}: # ensure existence 220