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