xref: /openbsd/regress/usr.bin/mandoc/Makefile.inc (revision d415bd75)
1# $OpenBSD: Makefile.inc,v 1.29 2020/07/30 21:32:19 schwarze Exp $
2
3.include "Makefile.sub"
4
5# --- programs ---
6
7DIFF	 = diff -au
8MAN	?= man
9MANDOC	?= mandoc
10MOPTS	?= -mandoc
11
12# --- lists of targets ---
13
14SKIP_ASCII ?=
15SKIP_TMAN ?=
16SKIP_MARKDOWN ?=
17
18_ASCIIFILES =
19_ASCIIDIFFS =
20_MANFILES =
21_MANDIFFS =
22.for t in ${REGRESS_TARGETS}
23.  if empty(SKIP_ASCII:MALL) && empty(SKIP_ASCII:M${t})
24_ASCIIFILES += ${t}.mandoc_ascii
25_ASCIIDIFFS += ${t}.diff_ascii
26.    if empty(SKIP_TMAN:MALL) && empty(SKIP_TMAN:M${t})
27_MANFILES += ${t}.in_man ${t}.mandoc_man
28_MANDIFFS += ${t}.diff_man
29.    endif
30.  endif
31.  if empty(SKIP_MARKDOWN:MALL) && empty(SKIP_MARKDOWN:M${t})
32_MARKDOWNFILES += ${t}.mandoc_markdown
33_MARKDOWNDIFFS += ${t}.diff_markdown
34.  endif
35.endfor
36
37_TAGFILES = ${TAG_TARGETS:C/$/.mandoc_tag/}
38_TAGDIFFS = ${TAG_TARGETS:C/$/.diff_tag/}
39
40_UTF8FILES = ${UTF8_TARGETS:C/$/.mandoc_utf8/}
41_UTF8DIFFS = ${UTF8_TARGETS:C/$/.diff_utf8/}
42
43_HTMLFILES = ${HTML_TARGETS:C/$/.mandoc_html/}
44_HTMLDIFFS = ${HTML_TARGETS:C/$/.diff_html/}
45
46_LINTFILES = ${LINT_TARGETS:C/$/.mandoc_lint/}
47_LINTDIFFS = ${LINT_TARGETS:C/$/.diff_lint/}
48
49_HTMLVALS = ${REGRESS_TARGETS:C/$/.validate_html/}
50
51# --- convenience targets ---
52
53# Note that bsd.regress.mk automatically adds REGRESS_TARGETS to all.
54all: clean
55
56ascii: ascii-clean ${_ASCIIDIFFS} ${_TAGDIFFS}
57
58utf8: utf8-clean ${_UTF8DIFFS}
59
60html: html-clean ${_HTMLDIFFS}
61
62markdown: markdown-clean ${_MARKDOWNDIFFS}
63
64tman: tman-clean ${_MANDIFFS}
65
66lint: lint-clean ${_LINTDIFFS}
67
68htmlval: ${_HTMLVALS}
69
70# --- suffix rules ---
71
72.SUFFIXES:	.diff_ascii .diff_html .diff_lint \
73		.diff_man .diff_markdown .diff_tag .diff_utf8 \
74		.in .in_man \
75		.mandoc_ascii .mandoc_html .mandoc_lint \
76		.mandoc_man .mandoc_markdown .mandoc_tag .mandoc_utf8 \
77		.out_ascii .out_lint .out_utf8
78
79.in.mandoc_ascii:
80	${MANDOC} ${MOPTS} -Ios=OpenBSD -Tascii ${.IMPSRC} > ${.TARGET}
81
82.mandoc_ascii.diff_ascii:
83	${DIFF} ${.CURDIR}/${.IMPSRC:S/mandoc_ascii$/out_ascii/} ${.IMPSRC}
84
85.in.mandoc_tag:
86	${MAN} -l ${MOPTS} -Ios=OpenBSD -Tascii \
87	    -O outfilename=${.TARGET:S/tag$/ascii/},tagfilename=${.TARGET} \
88	    ${.IMPSRC}
89
90.mandoc_tag.diff_tag:
91	${DIFF} ${.CURDIR}/${.IMPSRC:S/mandoc_tag$/out_tag/} ${.IMPSRC}
92	${DIFF} ${.CURDIR}/${.IMPSRC:S/mandoc_tag$/out_ascii/} \
93	    ${.IMPSRC:S/mandoc_tag$/mandoc_ascii/}
94
95.in.mandoc_utf8:
96	${MANDOC} ${MOPTS} -Ios=OpenBSD -Tutf8 ${.IMPSRC} > ${.TARGET}
97
98.mandoc_utf8.diff_utf8:
99	${DIFF} ${.CURDIR}/${.IMPSRC:S/mandoc_utf8$/out_utf8/} ${.IMPSRC}
100
101.in.mandoc_html:
102	${MANDOC} ${MOPTS} -Thtml ${.IMPSRC} | \
103		sed -n '/BEGINTEST/,/ENDTEST/p' | sed '1d;$$d' > ${.TARGET}
104
105.mandoc_html.diff_html:
106	${DIFF} ${.CURDIR}/${.IMPSRC:S/mandoc_html$/out_html/} ${.IMPSRC}
107
108.in.mandoc_markdown:
109	${MANDOC} ${MOPTS} -Ios=OpenBSD -Tmarkdown ${.IMPSRC} > ${.TARGET}
110
111.mandoc_markdown.diff_markdown:
112	${DIFF} ${.CURDIR}/${.IMPSRC:S/mandoc_markdown$/out_markdown/} \
113		${.IMPSRC}
114
115.in.in_man:
116	${MANDOC} ${MOPTS} -Ios=OpenBSD -Tman ${.IMPSRC} > ${.TARGET}
117
118.in_man.mandoc_man:
119	${MANDOC} -man -Tascii -Omdoc ${.IMPSRC} > ${.TARGET}
120
121.in.mandoc_lint:
122	-${MANDOC} ${MOPTS} -Ios=OpenBSD -Tlint -Wall ${.IMPSRC} 2>&1 | \
123		sed -E 's/^mandoc: \/[^:]+\//mandoc: /' > ${.TARGET}
124
125.mandoc_lint.diff_lint:
126	${DIFF} ${.CURDIR}/${.IMPSRC:S/mandoc_lint$/out_lint/} ${.IMPSRC}
127
128# --- single-file targets ---
129
130.for t in ${REGRESS_TARGETS}
131.  if empty(SKIP_ASCII:MALL) && empty(SKIP_ASCII:M${t})
132.    if empty(SKIP_TMAN:MALL) && empty(SKIP_TMAN:M${t})
133${t}.diff_man: ${t}.mandoc_man
134	${DIFF} ${.CURDIR}/${t}.out_ascii ${.ALLSRC}
135.    else
136${t}.diff_man:
137.    endif
138.    if empty(TAG_TARGETS:M${t})
139${t}: ${t}.diff_ascii ${t}.diff_man
140.    else
141${t}: ${t}.diff_tag ${t}.diff_man
142.    endif
143.  else
144${t}:
145.  endif
146${t}.validate_html: ${t}.in
147	-${MANDOC} ${MOPTS} -Thtml ${.ALLSRC} | validate
148.endfor
149
150.for t in ${TAG_TARGETS}
151${t}: ${t}.diff_tag
152.endfor
153
154.for t in ${UTF8_TARGETS}
155${t}: ${t}.diff_utf8
156.endfor
157
158.for t in ${HTML_TARGETS}
159${t}: ${t}.diff_html
160.endfor
161
162.for t in ${REGRESS_TARGETS}
163.  if empty(SKIP_MARKDOWN:MALL) && empty(SKIP_MARKDOWN:M${t})
164${t}: ${t}.diff_markdown
165.  endif
166.endfor
167
168.for t in ${LINT_TARGETS}
169${t}: ${t}.diff_lint
170.endfor
171
172# --- phony targets ---
173
174clean: ${_CLEAN_TARGETS}
175
176ascii-clean:
177.if !empty(_ASCIIFILES)
178	rm -f ${_ASCIIFILES} ${_TAGFILES}
179.endif
180
181utf8-clean:
182.if !empty(_UTF8FILES)
183	rm -f ${_UTF8FILES}
184.endif
185
186html-clean:
187.if !empty(_HTMLFILES)
188	rm -f ${_HTMLFILES}
189.endif
190
191markdown-clean:
192.if !empty(_MARKDOWNFILES)
193	rm -f ${_MARKDOWNFILES}
194.endif
195
196tman-clean:
197.if !empty(_MANFILES)
198	rm -f ${_MANFILES}
199.endif
200
201lint-clean:
202.if !empty(_LINTFILES)
203	rm -f ${_LINTFILES}
204.endif
205
206.PHONY: ${_ASCIIDIFFS} ${_TAGDIFFS} ${_UTF8DIFFS} ${_HTMLDIFFS} \
207	${_MARKDOWNDIFFS} ${_MANDIFFS} ${_LINTDIFFS} ${_HTMLVALS}
208
209
210# ----------------------------------------------------------------------
211# development targets, may affect version-controlled files
212# ----------------------------------------------------------------------
213
214# --- the groff program ---
215
216GROFF	 = /usr/local/bin/groff ${GOPTS} -mtty-char ${MOPTS} -Wall -P-c
217
218# --- the list of targets ---
219
220SKIP_GROFF_ASCII += ${SKIP_GROFF}
221SKIP_GROFF_UTF8  += ${SKIP_GROFF}
222
223_OUTFILES =
224_HTMLOUTFILES =
225_MARKDOWNOUTFILES =
226_LINTOUTFILES =
227.for t in ${REGRESS_TARGETS}
228.  if empty(SKIP_GROFF_ASCII:M${t}) && \
229      empty(SKIP_ASCII:M${t}) && empty(SKIP_ASCII:MALL)
230_OUTFILES += ${t}.out_ascii
231.  endif
232.endfor
233
234.for t in ${UTF8_TARGETS}
235.  if empty(SKIP_GROFF_UTF8:M${t})
236_OUTFILES += ${t}.out_utf8
237.  endif
238.endfor
239
240.for t in ${HTML_TARGETS}
241_HTMLOUTFILES += ${t}.out_html
242.endfor
243
244.for t in ${REGRESS_TARGETS}
245.  if empty(SKIP_MARKDOWN:MALL) && empty(SKIP_MARKDOWN:M${t})
246_MARKDOWNOUTFILES += ${t}.out_markdown
247.  endif
248.endfor
249
250.for t in ${LINT_TARGETS}
251_LINTOUTFILES += ${t}.out_lint
252.endfor
253
254# --- the convenience targets ---
255
256groff: obj-check ${_OUTFILES}
257
258html-out: obj-check ${_HTMLOUTFILES}
259
260markdown-out: obj-check ${_MARKDOWNOUTFILES}
261
262lint-out: obj-check ${_LINTOUTFILES}
263
264# --- single-file targets ---
265
266.for t in ${REGRESS_TARGETS}
267.  if empty(SKIP_ASCII:M${t}) && empty(SKIP_ASCII:MALL)
268.    if empty(SKIP_GROFF_ASCII:M${t})
269${t}.out_ascii: ${t}.in
270	${GROFF} -Tascii ${.ALLSRC} > ${.TARGET}
271.    else
272.PHONY: ${t}.out_ascii
273${t}.out_ascii:
274	@echo "TODO: groff disabled for: ${.TARGET}"
275.    endif
276.  endif
277.endfor
278
279.for t in ${UTF8_TARGETS}
280.  if empty(SKIP_GROFF_UTF8:M${t})
281${t}.out_utf8: ${t}.in
282	${GROFF} -Tutf8 ${.ALLSRC} > ${.TARGET}
283.  else
284.PHONY: ${t}.out_utf8
285${t}.out_utf8:
286	@echo "TODO: groff disabled for: ${.TARGET}"
287.  endif
288.endfor
289
290.for t in ${HTML_TARGETS}
291${t}.out_html: ${t}.in
292	${MANDOC} ${MOPTS} -Thtml ${.ALLSRC} | \
293		sed -n '/BEGINTEST/,/ENDTEST/p' | sed '1d;$$d' > ${.TARGET}
294.endfor
295
296.for t in ${REGRESS_TARGETS}
297.  if empty(SKIP_MARKDOWN:MALL) && empty(SKIP_MARKDOWN:M${t})
298${t}.out_markdown: ${t}.in
299	${MANDOC} ${MOPTS} -Ios=OpenBSD -Tmarkdown ${.ALLSRC} > ${.TARGET}
300.  endif
301.endfor
302
303.for t in ${LINT_TARGETS}
304${t}.out_lint: ${t}.in
305	-${MANDOC} ${MOPTS} -Ios=OpenBSD -Tlint -Wall ${.ALLSRC} \
306		> ${.TARGET} 2>&1
307.endfor
308
309# --- phony targets ---
310
311groff-clean: obj-check
312.if !empty(_OUTFILES)
313	rm -f ${_OUTFILES}
314.endif
315
316html-out-clean: obj-check
317.if !empty(_HTMLOUTFILES)
318	rm -f ${_HTMLOUTFILES}
319.endif
320
321markdown-out-clean: obj-check
322.if !empty(_MARKDOWNOUTFILES)
323	rm -f ${_MARKDOWNOUTFILES}
324.endif
325
326lint-out-clean: obj-check
327.if !empty(_LINTOUTFILES)
328	rm -f ${_LINTOUTFILES}
329.endif
330
331obj-clean:
332	rm -rf ${.CURDIR}/obj/*
333	rm -f ${.CURDIR}/obj
334	cd ${.CURDIR} && ${MAKE} clean
335
336obj-check:
337	@test ! -e ${.CURDIR}/obj || \
338		(echo '*** obj exists, run make obj-clean first'; false)
339