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