xref: /openbsd/regress/usr.bin/mandoc/db/run/Makefile (revision 9b7c3dbb)
1# $OpenBSD: Makefile,v 1.3 2016/08/30 22:20:03 schwarze Exp $
2#
3# Copyright (c) 2016 Ingo Schwarze <schwarze@openbsd.org>
4#
5# Permission to use, copy, modify, and distribute this software for any
6# purpose with or without fee is hereby granted, provided that the above
7# copyright notice and this permission notice appear in all copies.
8#
9# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
17DO_MO_TESTS =	onepage twopages threepages threemacros
18DO_MO_TESTS +=	sortpages sortpages_rev so so_rev sortnames
19DO_MO_TESTS +=	twosect twoarch threearch fn in va sh xr
20DO_MOE_TESTS =	empty
21DOE_M_TESTS =	padipage padfpage padmpage
22DOE_M_TESTS +=	padmacros padimacro padmmacro
23DOE_M_TESTS +=	padientry padfentry padmentry padfmagic
24DOE_MOE_TESTS =	badname0 badname badsect0 badsect badarch0 badarch
25DOE_MOE_TESTS += baddesc0 baddesc badfile0 badfile
26DE_M_TESTS =	nonexistent short badimagic badversion badmacrosp badendp
27DE_M_TESTS +=	badnpages badnmacros badmacrop badfmagic
28
29DO_TESTS =	${DO_MO_TESTS} ${DO_MOE_TESTS}
30DOE_TESTS =	${DOE_M_TESTS} ${DOE_MOE_TESTS}
31DE_TESTS =	${DE_M_TESTS}
32DOB_TESTS =	${DO_TESTS} ${DOE_TESTS}
33DEB_TESTS =	${DOE_TESTS} ${DE_TESTS}
34MOB_TESTS =	${DO_MO_TESTS} ${DO_MOE_TESTS} ${DOE_MOE_TESTS}
35MEB_TESTS =	${DO_MOE_TESTS} ${DOE_MOE_TESTS}
36ALL_TESTS =	${DO_TESTS} ${DOE_TESTS} ${DE_TESTS}
37
38REGRESS_TARGETS = ${ALL_TESTS} diff.derr diff.mout diff.merr
39
40CLEANFILES =	${ALL_TESTS:C/$/.db/}
41CLEANFILES +=	${ALL_TESTS:C/$/.dout/} ${ALL_TESTS:C/$/.derr/} all.derr
42CLEANFILES +=	${MOB_TESTS:C/$/.mout/} all.mout
43CLEANFILES +=	${MEB_TESTS:C/$/.merr/} all.merr
44
45# === MAIN REGRESSION TARGETS ==========================================
46
47.for NAME in ${DO_TESTS}
48${NAME}: ${NAME}.dout ${NAME}.derr
49	@test \! -s ${NAME}.derr
50	@diff -u ${.CURDIR}/../out/${NAME}.dout ${NAME}.dout
51.endfor
52
53.for NAME in ${DOE_TESTS}
54${NAME}: ${NAME}.dout ${NAME}.derr
55	@test -s ${NAME}.derr
56	@diff -u ${.CURDIR}/../out/${NAME}.dout ${NAME}.dout
57.endfor
58
59.for NAME in ${DE_TESTS}
60${NAME}: ${NAME}.dout ${NAME}.derr
61	@test -s ${NAME}.derr
62	@test \! -s ${NAME}.dout
63.endfor
64
65diff.derr: all.derr
66	@diff -u ${.CURDIR}/../out/all.derr all.derr
67
68diff.mout: all.mout
69	@diff -u ${.CURDIR}/../out/all.mout all.mout
70
71diff.merr: all.merr
72	@diff -u ${.CURDIR}/../out/all.merr all.merr
73
74.PHONY: ${REGRESS_TARGETS}
75
76cleandir: cleandir_local
77
78cleandir_local:
79	rm -rf man binedit dbm_dump makeinodes
80
81
82# === RUNNING DBM_DUMP =================================================
83
84.for NAME in ${DOB_TESTS}
85${NAME}.dout ${NAME}.derr: dbm_dump ${NAME}.db
86	@./dbm_dump ${NAME}.db > ${NAME}.dout 2> ${NAME}.derr
87.endfor
88
89.for NAME in ${DE_TESTS}
90${NAME}.dout ${NAME}.derr: dbm_dump ${NAME}.db
91	@if ./dbm_dump ${NAME}.db > ${NAME}.dout 2> ${NAME}.derr; \
92		then false; else true; fi
93.endfor
94
95all.derr: ${DEB_TESTS:C/$/.derr/}
96	@for f in ${DEB_TESTS}; \
97		do printf "\n>>> $$f\n"; cat $$f.derr; done > $@
98
99
100# === RUNNING MAKEWHATIS AND MAN =======================================
101
102empty.db empty.mout empty.merr:
103	@rm -rf man
104	@mkdir man
105	@makewhatis man
106	@if man -kM man something > empty.mout 2> empty.merr; \
107		then false; else test $$? -eq 5; fi
108	@mv man/mandoc.db empty.db
109	@rmdir man
110
111onepage.db onepage.mout: ${.CURDIR}/../man/empty.1
112	@rm -rf man
113	@mkdir -p man/man1
114	@cp ${.CURDIR}/../man/empty.1 man/man1/
115	@makewhatis man
116	@man -kM man title > onepage.mout
117	@mv man/mandoc.db onepage.db
118	@rm -rf man
119
120twopages.db twopages.mout: ${.CURDIR}/../man/empty.1
121	@rm -rf man
122	@mkdir -p man/man1
123	@cp ${.CURDIR}/../man/empty.1 man/man1/
124	@cp ${.CURDIR}/../man/empty.1 man/man1/second.1
125	@makewhatis man
126	@(echo "> second"; man -wM man second | sed 's#.*/man/##'; \
127	  echo "> empty"; man -wM man empty | sed 's#.*/man/##') \
128	  > twopages.mout
129	@mv man/mandoc.db twopages.db
130	@rm -rf man
131
132threepages.db threepages.mout: ${.CURDIR}/../man/empty.1
133	@rm -rf man
134	@mkdir -p man/man1
135	@cp ${.CURDIR}/../man/empty.1 man/man1/
136	@cp ${.CURDIR}/../man/empty.1 man/man1/second.1
137	@cp ${.CURDIR}/../man/empty.1 man/man1/third.1
138	@makewhatis man
139	@(echo "> second"; man -wM man second | sed 's#.*/man/##'; \
140	  echo "> third"; man -wM man third | sed 's#.*/man/##'; \
141	  echo "> empty"; man -wM man empty | sed 's#.*/man/##') \
142	  > threepages.mout
143	@mv man/mandoc.db threepages.db
144	@rm -rf man
145
146threemacros.db threemacros.mout: ${.CURDIR}/../man/empty.1
147	@rm -rf man
148	@mkdir -p man/man1
149	@cp ${.CURDIR}/../man/empty.1 man/man1/
150	@printf ".Sh SEE ALSO\n.Xr one 1\n.Xr two 2\n.Xr three 3" \
151		>> man/man1/empty.1
152	@makewhatis man
153	@(echo "> Xr=one"; man -kwM man Xr=one | sed 's#.*/man/##'; \
154	  echo "> Xr~^t"; man -kM man -O Xr Xr~^t;) > threemacros.mout
155	@mv man/mandoc.db threemacros.db
156	@rm -rf man
157
158sortpages.db sortpages.mout: makeinodes ${.CURDIR}/../man/empty.1
159	@rm -rf man
160	@./makeinodes
161	@cat ${.CURDIR}/../man/empty.1 >> man/man1/1
162	@cat ${.CURDIR}/../man/empty.1 >> man/man1/2
163	@mv man/man1/1 man/man1/one.1
164	@mv man/man1/2 man/man1/two.1
165	@makewhatis man
166	@man -kM man Nm=empty > sortpages.mout
167	@mv man/mandoc.db sortpages.db
168	@rm -rf man
169
170sortpages_rev.db sortpages_rev.mout: makeinodes ${.CURDIR}/../man/empty.1
171	@rm -rf man
172	@./makeinodes
173	@cat ${.CURDIR}/../man/empty.1 >> man/man1/1
174	@cat ${.CURDIR}/../man/empty.1 >> man/man1/2
175	@mv man/man1/2 man/man1/one.1
176	@mv man/man1/1 man/man1/two.1
177	@makewhatis man
178	@man -kM man Nm=empty > sortpages_rev.mout
179	@mv man/mandoc.db sortpages_rev.db
180	@rm -rf man
181
182so.db so.mout: makeinodes ${.CURDIR}/../man/empty.1
183	@rm -rf man
184	@./makeinodes
185	@cat ${.CURDIR}/../man/empty.1 >> man/man1/1
186	@echo ".so man1/one.1" >> man/man1/2
187	@mv man/man1/1 man/man1/one.1
188	@mv man/man1/2 man/man1/two.1
189	@makewhatis man
190	@man -wM man two | sed 's#.*/man/##' > so.mout
191	@mv man/mandoc.db so.db
192	@rm -rf man
193
194so_rev.db so_rev.mout: makeinodes ${.CURDIR}/../man/empty.1
195	@rm -rf man
196	@./makeinodes
197	@cat ${.CURDIR}/../man/empty.1 >> man/man1/2
198	@echo ".so man1/one.1" >> man/man1/1
199	@mv man/man1/2 man/man1/one.1
200	@mv man/man1/1 man/man1/two.1
201	@makewhatis man
202	@man -wM man two | sed 's#.*/man/##' > so_rev.mout
203	@mv man/mandoc.db so_rev.db
204	@rm -rf man
205
206sortnames.db sortnames.mout: ${.CURDIR}/../man/sortnames.1
207	@rm -rf man
208	@mkdir -p man/man1
209	@cp ${.CURDIR}/../man/sortnames.1 man/man1/
210	@ln man/man1/sortnames.1 man/man1/link.1
211	@makewhatis man
212	@man -kM man Nm=onlysyn > sortnames.mout
213	@mv man/mandoc.db sortnames.db
214	@rm -rf man
215
216twosect.db twosect.mout: ${.CURDIR}/../man/empty.1
217	@rm -rf man
218	@mkdir -p man/man1
219	@mkdir -p man/man8
220	@cp ${.CURDIR}/../man/empty.1 man/man1/
221	@ln man/man1/empty.1 man/man8/empty.8
222	@makewhatis man
223	@man -kM man -s 1 title > twosect.mout
224	@mv man/mandoc.db twosect.db
225	@rm -rf man
226
227twoarch.db twoarch.mout: ${.CURDIR}/../man/empty.1
228	@rm -rf man
229	@mkdir -p man/man1/i386
230	@mkdir -p man/man1/amd64
231	@cp ${.CURDIR}/../man/empty.1 man/man1/i386
232	@ln man/man1/i386/empty.1 man/man1/amd64/empty.1
233	@makewhatis man
234	@man -kM man -S i386 title > twoarch.mout
235	@mv man/mandoc.db twoarch.db
236	@rm -rf man
237
238threearch.db threearch.mout: ${.CURDIR}/../man/empty.1
239	@rm -rf man
240	@mkdir -p man/man1/amd64
241	@mkdir -p man/man1/i386
242	@mkdir -p man/man1/sgi
243	@cp ${.CURDIR}/../man/empty.1 man/man1/amd64/
244	@cp ${.CURDIR}/../man/empty.1 man/man1/i386/
245	@cp ${.CURDIR}/../man/empty.1 man/man1/sgi/
246	@makewhatis man
247	@(echo "> amd64"; man -wM man -S amd64 empty | sed 's#.*/man/##'; \
248	  echo "> i386"; man -wM man -S i386 empty | sed 's#.*/man/##'; \
249	  echo "> sgi"; man -wM man -S sgi empty | sed 's#.*/man/##') \
250	  > threearch.mout
251	@mv man/mandoc.db threearch.db
252	@rm -rf man
253
254fn.db fn.mout: ${.CURDIR}/../man/fn.3
255	@rm -rf man
256	@mkdir -p man/man3
257	@cp ${.CURDIR}/../man/fn.3 man/man3/
258	@makewhatis man
259	@(echo "> fn_type"; man -kwM man Ft=fn_type | sed 's#.*/man/##'; \
260	  echo "> fn_func"; man -kwM man Fn=fn_func | sed 's#.*/man/##'; \
261	  echo "> fn_arg";  man -kwM man Fa=fn_arg  | sed 's#.*/man/##'; \
262	  echo "> fo_type"; man -kwM man Ft=fo_type | sed 's#.*/man/##'; \
263	  echo "> fo_func"; man -kwM man Fn=fo_func 2>&1 | sed 's#.*/man/##'; \
264	  echo "> fo_arg";  man -kwM man Fa=fo_arg  | sed 's#.*/man/##') \
265	  > fn.mout
266	@mv man/mandoc.db fn.db
267	@rm -rf man
268
269in.db in.mout: ${.CURDIR}/../man/in.3
270	@rm -rf man
271	@mkdir -p man/man3
272	@cp ${.CURDIR}/../man/in.3 man/man3/
273	@makewhatis man
274	@(echo "> In"; man -kwM man In=in.h | sed 's#.*/man/##'; \
275	  echo "> Fd"; man -kwM man In=fd.h | sed 's#.*/man/##') \
276	  > in.mout
277	@mv man/mandoc.db in.db
278	@rm -rf man
279
280va.db va.mout: ${.CURDIR}/../man/va.3
281	@rm -rf man
282	@mkdir -p man/man3
283	@cp ${.CURDIR}/../man/va.3 man/man3/
284	@makewhatis man
285	@(echo "> b2"; man -kwM man Va='block vt_two' | sed 's#.*/man/##'; \
286	  echo "> t1"; man -kwM man Vt='vt_one' | sed 's#.*/man/##'; \
287	  echo "> a1"; man -kwM man Va='va_one'  | sed 's#.*/man/##'; \
288	  echo "> t2"; man -kwM man Vt='struct vt_two' | sed 's#.*/man/##'; \
289	  echo "> a2"; man -kwM man Va='int va_two'  | sed 's#.*/man/##') \
290	  > va.mout
291	@mv man/mandoc.db va.db
292	@rm -rf man
293
294sh.db sh.mout: ${.CURDIR}/../man/sh.1
295	@rm -rf man
296	@mkdir -p man/man1
297	@cp ${.CURDIR}/../man/sh.1 man/man1/
298	@makewhatis man
299	@(echo "> Sh"; man -kwM man Sh=sh_title | sed 's#.*/man/##'; \
300	  echo "> Ss"; man -kwM man Ss=ss_title | sed 's#.*/man/##') \
301	  > sh.mout
302	@mv man/mandoc.db sh.db
303	@rm -rf man
304
305xr.db xr.mout: ${.CURDIR}/../man/xr.1
306	@rm -rf man
307	@mkdir -p man/man1
308	@cp ${.CURDIR}/../man/xr.1 man/man1/
309	@makewhatis man
310	@(echo "> bare"; man -kwM man 'Xr~^bare$$' | sed 's#.*/man/##'; \
311	  echo "> page"; man -kwM man 'Xr=page(1)' | sed 's#.*/man/##') \
312	  > xr.mout
313	@mv man/mandoc.db xr.db
314	@rm -rf man
315
316badname0.mout badname0.merr: badname0.db
317	@rm -rf man
318	@mkdir man
319	@cp badname0.db man/mandoc.db
320	@if man -wM man empty > badname0.mout 2> badname0.merr; \
321		then false; else test $$? -eq 5; fi
322	@rm -rf man
323
324badname.mout badname.merr: badname.db
325	@rm -rf man
326	@mkdir man
327	@cp badname.db man/mandoc.db
328	@man -wM man empty > badname.mout 2> badname.merr
329	@rm -rf man
330
331badsect0.mout badsect0.merr: badsect0.db
332	@rm -rf man
333	@mkdir man
334	@cp badsect0.db man/mandoc.db
335	@if man -wM man -s 1 empty > badsect0.mout 2> badsect0.merr; \
336		then false; else test $$? -eq 5; fi
337	@rm -rf man
338
339badsect.mout badsect.merr: badsect.db
340	@rm -rf man
341	@mkdir man
342	@cp badsect.db man/mandoc.db
343	@man -wM man -s 1 empty > badsect.mout 2> badsect.merr
344	@rm -rf man
345
346badarch0.mout badarch0.merr: badarch0.db
347	@rm -rf man
348	@mkdir man
349	@cp badarch0.db man/mandoc.db
350	@man -wM man -S amd64 empty > badarch0.mout 2> badarch0.merr
351	@rm -rf man
352
353badarch.mout badarch.merr: badarch.db
354	@rm -rf man
355	@mkdir man
356	@cp badarch.db man/mandoc.db
357	@man -wM man -S i386 empty > badarch.mout 2> badarch.merr
358	@rm -rf man
359
360baddesc0.mout baddesc0.merr: baddesc0.db
361	@rm -rf man
362	@mkdir man
363	@cp baddesc0.db man/mandoc.db
364	@man -kM man empty > baddesc0.mout 2> baddesc0.merr
365	@rm -rf man
366
367baddesc.mout baddesc0.merr: baddesc.db
368	@rm -rf man
369	@mkdir man
370	@cp baddesc.db man/mandoc.db
371	@man -kM man empty > baddesc.mout 2> baddesc.merr
372	@rm -rf man
373
374badfile0.mout badfile0.merr: badfile0.db
375	@rm -rf man
376	@mkdir man
377	@cp badfile0.db man/mandoc.db
378	@man -wM man empty > badfile0.mout 2> badfile0.merr
379	@rm -rf man
380
381badfile.mout badfile.merr: badfile.db
382	@rm -rf man
383	@mkdir man
384	@cp badfile.db man/mandoc.db
385	@man -wM man empty > badfile.mout 2> badfile.merr
386	@rm -rf man
387
388all.mout: ${MOB_TESTS:C/$/.mout/}
389	@for f in ${MOB_TESTS}; \
390		do printf "\n>>> $$f\n"; cat $$f.mout || true; done > $@
391
392all.merr: ${MEB_TESTS:C/$/.merr/}
393	@for f in ${MEB_TESTS}; \
394		do printf "\n>>> $$f\n"; cat $$f.merr || true; done > $@
395
396
397# === RUNNING BINEDIT ==================================================
398
399padipage.db: binedit twopages.db
400	@./binedit c16rw1f < twopages.db > $@
401
402padfpage.db: binedit twopages.db
403	@./binedit c16rw1s20c20w0w0w0w0w0f < twopages.db > $@
404
405padmpage.db: binedit threepages.db
406	@./binedit c16rw2c20s20c20w0w0w0w0w0f < threepages.db > $@
407
408badname0.db: binedit onepage.db
409	@./binedit c20rw-1f < onepage.db > $@
410
411badname.db: binedit threepages.db
412	@./binedit c40rw-1f < threepages.db > $@
413
414badsect0.db: binedit onepage.db
415	@./binedit c24rw-1f < onepage.db > $@
416
417badsect.db: binedit threepages.db
418	@./binedit c44rw-1f < threepages.db > $@
419
420badarch0.db: binedit threearch.db
421	@./binedit c28rw-1f < threearch.db > $@
422
423badarch.db: binedit threearch.db
424	@./binedit c48rw-1f < threearch.db > $@
425
426baddesc0.db: binedit onepage.db
427	@./binedit c32rw-1f < onepage.db > $@
428
429baddesc.db: binedit threepages.db
430	@./binedit c52rw-1f < threepages.db > $@
431
432badfile0.db: binedit onepage.db
433	@./binedit c36rw-1f < onepage.db > $@
434
435badfile.db: binedit threepages.db
436	@./binedit c56rw-1f < threepages.db > $@
437
438padmacros.db: binedit onepage.db
439	@./binedit c16rw0f < onepage.db > $@
440
441padimacro.db: binedit empty.db
442	@./binedit c8rdwri4wac4s4c136rwi4ww0f < empty.db > $@
443
444padmmacro.db: binedit empty.db
445	@./binedit c8rdwri4wac8s4c132rwi4ww0f < empty.db > $@
446
447padientry.db: binedit threemacros.db
448	@./binedit c8rdwac4rdwarw2f < threemacros.db > $@
449
450padfentry.db: binedit threemacros.db
451	@./binedit c8rdwac4rdwarw2s8c16w0w0f < threemacros.db > $@
452
453padmentry.db: binedit threemacros.db
454	@./binedit c8rdwac4rdwarw2c8s8c8w0w0f < threemacros.db > $@
455
456padfmagic.db: binedit empty.db
457	@./binedit c12rdi4waw0f < empty.db > $@
458
459nonexistent.db:
460	@rm -rf nonexistent.db
461
462short.db:
463	@echo 'sho' > $@
464
465badimagic.db: binedit empty.db
466	@./binedit riwf < empty.db > $@
467
468badversion.db: binedit empty.db
469	@./binedit c4riwf < empty.db > $@
470
471badmacrosp.db: binedit empty.db
472	@./binedit c8rw1000f < empty.db > $@
473
474badendp.db: binedit empty.db
475	@./binedit c12riwf < empty.db > $@
476
477badnpages.db: binedit empty.db
478	@./binedit c16rw-1f < empty.db > $@
479
480badnmacros.db: binedit empty.db
481	@./binedit c8rdwariwf < empty.db > $@
482
483badmacrop.db: binedit empty.db
484	@./binedit c8rdwac4rw1000f < empty.db > $@
485
486badfmagic.db: binedit empty.db
487	@./binedit c12rdwariwf < empty.db > $@
488
489
490# === GETTING ACCESS TO THE UTILITIES ==================================
491
492binedit dbm_dump makeinodes:
493	@if [ -x ${.CURDIR}/../$@/obj/$@ ]; \
494		then ln -s ${.CURDIR}/../$@/obj/$@; \
495		elif [ -x ${.CURDIR}/../$@/$@ ]; \
496		then ln -s ${.CURDIR}/../$@/$@; \
497		else echo "Cannot find $@ binary; run 'make' in .." 1>&2; \
498		exit 1; fi
499
500.include <bsd.regress.mk>
501