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