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