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