Home | History | Annotate | Line # | Download | only in vndcompress
Makefile revision 1.13.4.1
      1       1.3  riastrad PROG=	vndcompress
      2       1.6  riastrad SRCS=	main.c offtab.c utils.c vndcompress.c vnduncompress.c
      3       1.3  riastrad 
      4       1.3  riastrad LINKS=	${BINDIR}/vndcompress ${BINDIR}/vnduncompress
      5       1.3  riastrad MLINKS=	vndcompress.1 vnduncompress.1
      6       1.1   hubertf 
      7       1.3  riastrad DPADD+=	${LIBZ}
      8       1.1   hubertf LDADD+=	-lz
      9       1.1   hubertf 
     10       1.8  riastrad WARNS=	5
     11       1.8  riastrad 
     12       1.1   hubertf .include <bsd.prog.mk>
     13       1.3  riastrad 
     14       1.3  riastrad TESTFILES+=	oneblock
     15       1.3  riastrad XFAIL+=		oneblock.in-outx
     16       1.3  riastrad XFAIL+=		oneblock.cl2-cl2x
     17       1.3  riastrad oneblock.in:
     18       1.3  riastrad 	head -c 512 < /usr/share/dict/words > ${.TARGET}.tmp \
     19       1.3  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     20       1.3  riastrad 
     21       1.3  riastrad TESTFILES+=	tenblock
     22       1.3  riastrad XFAIL+=		tenblock.in-outx
     23       1.3  riastrad XFAIL+=		tenblock.cl2-cl2x
     24       1.3  riastrad tenblock.in:
     25       1.3  riastrad 	head -c 5120 < /usr/share/dict/words > ${.TARGET}.tmp \
     26       1.3  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     27       1.3  riastrad 
     28       1.3  riastrad TESTFILES+=	smallfile
     29       1.3  riastrad XFAIL+=		smallfile.in-outx
     30       1.3  riastrad XFAIL+=		smallfile.cl2-cl2x
     31       1.3  riastrad smallfile.in:
     32       1.3  riastrad 	head -c 12345 < /usr/share/dict/words > ${.TARGET}.tmp \
     33       1.3  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     34       1.3  riastrad 
     35       1.3  riastrad CHECKS+=	check-pipe
     36       1.3  riastrad CLEANFILES+=	smallfile.cl2pipe
     37       1.3  riastrad check-pipe: .PHONY smallfile.cl2 smallfile.cl2pipe
     38       1.3  riastrad 	cmp ${.ALLSRC}
     39       1.3  riastrad smallfile.cl2pipe: smallfile.in vndcompress
     40       1.3  riastrad 	head -c 54321 < /usr/share/dict/words \
     41       1.3  riastrad 	| ./vndcompress -l 12345 /dev/stdin ${.TARGET}.tmp \
     42       1.3  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     43       1.3  riastrad 
     44       1.3  riastrad TESTFILES+=	onechunk
     45       1.3  riastrad onechunk.in:
     46       1.3  riastrad 	head -c 65536 < /usr/share/dict/words > ${.TARGET}.tmp \
     47       1.3  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     48       1.3  riastrad 
     49       1.3  riastrad TESTFILES+=	tenchunk
     50       1.3  riastrad tenchunk.in:
     51       1.3  riastrad 	head -c 655360 < /usr/share/dict/words > ${.TARGET}.tmp \
     52       1.3  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     53       1.3  riastrad 
     54       1.3  riastrad TESTFILES+=	extrablock
     55       1.3  riastrad XFAIL+=		extrablock.in-outx
     56       1.3  riastrad XFAIL+=		extrablock.cl2-cl2x
     57       1.3  riastrad extrablock.in:
     58       1.3  riastrad 	head -c $$((65536 + 512)) < /usr/share/dict/words > ${.TARGET}.tmp \
     59       1.3  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     60       1.3  riastrad 
     61       1.3  riastrad TESTFILES+=	medfile
     62       1.3  riastrad XFAIL+=		medfile.in-outx
     63       1.3  riastrad XFAIL+=		medfile.cl2-cl2x
     64       1.3  riastrad medfile.in:
     65       1.3  riastrad 	head -c 123456 < /usr/share/dict/words > ${.TARGET}.tmp \
     66       1.3  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     67       1.3  riastrad 
     68       1.3  riastrad TESTFILES+=		onetinyblock
     69       1.3  riastrad BLOCKSIZE.onetinyblock=	512
     70       1.3  riastrad onetinyblock.in:
     71       1.3  riastrad 	head -c 512 < /usr/share/dict/words > ${.TARGET}.tmp \
     72       1.3  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     73       1.3  riastrad 
     74       1.3  riastrad TESTFILES+=		tentinyblock
     75       1.3  riastrad BLOCKSIZE.tentinyblock=	512
     76       1.3  riastrad tentinyblock.in:
     77       1.3  riastrad 	head -c 5120 < /usr/share/dict/words > ${.TARGET}.tmp \
     78       1.3  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     79       1.3  riastrad 
     80  1.13.4.1       snj # Make sure we can restart from a pipe.
     81       1.3  riastrad CHECKS+=	check-pipe-restart
     82       1.3  riastrad CLEANFILES+=	piperestart.in piperestart.in.tmp
     83       1.3  riastrad CLEANFILES+=	piperestart.cl2 piperestart.cl2.tmp
     84       1.3  riastrad CLEANFILES+=	piperestart.cl2restart piperestart.cl2restart.tmp
     85       1.3  riastrad CLEANFILES+=	piperestart.cl2part piperestart.cl2part.tmp
     86       1.3  riastrad check-pipe-restart: .PHONY piperestart.cl2 piperestart.cl2restart
     87       1.3  riastrad 	cmp ${.ALLSRC}
     88       1.3  riastrad piperestart.cl2restart: piperestart.cl2part vndcompress
     89       1.3  riastrad 	cp piperestart.cl2part ${.TARGET}.tmp \
     90       1.3  riastrad 	&& head -c 700000 < /usr/share/dict/words \
     91  1.13.4.1       snj 	| ./vndcompress -l 655360 -k 1 -r -R /dev/stdin ${.TARGET}.tmp \
     92       1.3  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     93       1.9  riastrad # The following rule uses ; and not && on purpose: vndcompress is
     94       1.9  riastrad # supposed to fail (and it is even OK to interrupt!) so we can restart
     95       1.9  riastrad # and fill in the rest.
     96       1.3  riastrad piperestart.cl2part: vndcompress
     97       1.3  riastrad 	head -c 600000 < /usr/share/dict/words \
     98       1.3  riastrad 	| ./vndcompress -l 655360 -k 1 /dev/stdin ${.TARGET}.tmp; \
     99       1.3  riastrad 	mv -f ${.TARGET}.tmp ${.TARGET}
    100       1.3  riastrad piperestart.in:
    101       1.3  riastrad 	head -c 655360 < /usr/share/dict/words > ${.TARGET}.tmp \
    102       1.3  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    103       1.3  riastrad 
    104  1.13.4.1       snj # Make sure we can restart from a pipe even if the original start was
    105  1.13.4.1       snj # corrupted, as long as we don't pass -R.
    106  1.13.4.1       snj CHECKS+=	check-pipe-badstart
    107  1.13.4.1       snj CLEANFILES+=	pipebadstart.in pipebadstart.in.tmp
    108  1.13.4.1       snj CLEANFILES+=	pipebadstart.cl2 pipebadstart.cl2.tmp
    109  1.13.4.1       snj CLEANFILES+=	pipebadstart.cl2restart pipebadstart.cl2restart.tmp
    110  1.13.4.1       snj CLEANFILES+=	pipebadstart.cl2part pipebadstart.cl2part.tmp
    111  1.13.4.1       snj check-pipe-badstart: .PHONY pipebadstart.cl2 pipebadstart.cl2restart
    112  1.13.4.1       snj 	cmp ${.ALLSRC}
    113  1.13.4.1       snj pipebadstart.cl2restart: pipebadstart.cl2part vndcompress
    114  1.13.4.1       snj 	cp pipebadstart.cl2part ${.TARGET}.tmp \
    115  1.13.4.1       snj 	&& head -c 700000 < /usr/share/dict/words \
    116  1.13.4.1       snj 	| ./vndcompress -l 655360 -k 1 -r /dev/stdin ${.TARGET}.tmp \
    117  1.13.4.1       snj 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    118  1.13.4.1       snj pipebadstart.cl2part:
    119  1.13.4.1       snj 	touch ${.TARGET}
    120  1.13.4.1       snj pipebadstart.in:
    121  1.13.4.1       snj 	head -c 655360 < /usr/share/dict/words > ${.TARGET}.tmp \
    122  1.13.4.1       snj 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    123  1.13.4.1       snj 
    124  1.13.4.1       snj # Make sure we can `restart' even if there's nothing there.
    125  1.13.4.1       snj CHECKS+=	check-pipe-falsestart
    126  1.13.4.1       snj CLEANFILES+=	pipefalsestart.in pipefalsestart.in.tmp
    127  1.13.4.1       snj CLEANFILES+=	pipefalsestart.cl2 pipefalsestart.cl2.tmp
    128  1.13.4.1       snj CLEANFILES+=	pipefalsestart.cl2restart pipefalsestart.cl2restart.tmp
    129  1.13.4.1       snj check-pipe-falsestart: .PHONY pipefalsestart.cl2 pipefalsestart.cl2restart
    130  1.13.4.1       snj 	cmp ${.ALLSRC}
    131  1.13.4.1       snj pipefalsestart.cl2restart: vndcompress
    132  1.13.4.1       snj 	rm -f ${.TARGET}.tmp \
    133  1.13.4.1       snj 	&& head -c 700000 < /usr/share/dict/words \
    134  1.13.4.1       snj 	| ./vndcompress -l 655360 -k 1 -r /dev/stdin ${.TARGET}.tmp \
    135  1.13.4.1       snj 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    136  1.13.4.1       snj pipefalsestart.in:
    137  1.13.4.1       snj 	head -c 655360 < /usr/share/dict/words > ${.TARGET}.tmp \
    138  1.13.4.1       snj 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    139  1.13.4.1       snj 
    140  1.13.4.1       snj # Make sure we can restart from a file, simulated with `-p'.
    141       1.3  riastrad CHECKS+=	check-part
    142  1.13.4.1       snj CLEANFILES+=	part.orig part.orig.tmp
    143  1.13.4.1       snj CLEANFILES+=	part.cl2part part.cl2part.tmp
    144  1.13.4.1       snj CLEANFILES+=	part.cl2 part.cl2.tmp
    145  1.13.4.1       snj CLEANFILES+=	part.out part.out.tmp
    146       1.3  riastrad check-part: .PHONY part.orig part.out
    147       1.3  riastrad 	cmp part.orig part.out
    148       1.3  riastrad part.cl2: part.orig part.cl2part vndcompress
    149       1.3  riastrad 	cp part.cl2part ${.TARGET}.tmp \
    150  1.13.4.1       snj 	&& ./vndcompress -b 512 -r -R part.orig ${.TARGET}.tmp \
    151       1.3  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    152       1.3  riastrad part.cl2part: part.orig vndcompress
    153      1.12  riastrad 	./vndcompress -b 512 -p 10 part.orig ${.TARGET}.tmp \
    154       1.3  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    155       1.3  riastrad part.orig:
    156       1.3  riastrad 	head -c 12345 < /usr/share/dict/words > ${.TARGET}.tmp \
    157       1.3  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    158       1.3  riastrad 
    159  1.13.4.1       snj # Make sure we can `restart' even if there's nothing there.
    160  1.13.4.1       snj CHECKS+=	check-falsestart
    161  1.13.4.1       snj CLEANFILES+=	falsestart.in falsestart.in.tmp
    162  1.13.4.1       snj CLEANFILES+=	falsestart.cl2 falsestart.cl2.tmp
    163  1.13.4.1       snj CLEANFILES+=	falsestart.cl2restart falsestart.cl2restart.tmp
    164  1.13.4.1       snj check-falsestart: .PHONY falsestart.cl2 falsestart.cl2restart
    165  1.13.4.1       snj 	cmp ${.ALLSRC}
    166  1.13.4.1       snj falsestart.cl2restart: vndcompress falsestart.in
    167  1.13.4.1       snj 	rm -f ${.TARGET}.tmp \
    168  1.13.4.1       snj 	&& ./vndcompress -r falsestart.in ${.TARGET}.tmp \
    169  1.13.4.1       snj 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    170  1.13.4.1       snj falsestart.in:
    171  1.13.4.1       snj 	head -c 655360 < /usr/share/dict/words > ${.TARGET}.tmp \
    172  1.13.4.1       snj 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    173  1.13.4.1       snj 
    174      1.10  riastrad TESTFILES+=	smallwindow
    175      1.10  riastrad smallwindow.in:
    176      1.10  riastrad 	head -c 655360 < /usr/share/dict/words > ${.TARGET}.tmp \
    177      1.10  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    178      1.10  riastrad smallwindow.cl2: smallwindow.in
    179      1.10  riastrad 	./vndcompress -w 1 ${.IMPSRC} ${.TARGET}.tmp \
    180      1.10  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    181      1.10  riastrad smallwindow.out: smallwindow.cl2
    182      1.10  riastrad 	./vndcompress -w 1 -d ${.IMPSRC} ${.TARGET}.tmp \
    183      1.10  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    184      1.10  riastrad 
    185      1.10  riastrad CHECKS+=	check-pipewindow
    186      1.10  riastrad check-pipewindow: smallwindow.cl2
    187      1.10  riastrad 	@echo '# expecting failure...'
    188      1.10  riastrad 	if cat smallwindow.cl2 | ./vndcompress -w 1 -d /dev/stdin /dev/null; \
    189      1.10  riastrad 	then \
    190      1.10  riastrad 	  echo 'unexpected pass!' && exit 1; \
    191      1.10  riastrad 	fi
    192      1.10  riastrad 
    193      1.11  riastrad # The following two tests try to ensure a limited window size means
    194      1.11  riastrad # limited memory allocation.  They don't work very well.  The virtual
    195      1.11  riastrad # address space rlimit (ulimit -v, RLIMIT_AS) must cover the stack size
    196      1.11  riastrad # that is allocated automatically for the process, which varies from
    197      1.11  riastrad # machine architecture to machine architecture (the kernel's MAXSSIZ
    198      1.11  riastrad # parameter), as well as any shared libraries that get loaded in and
    199      1.11  riastrad # other auxiliary crud the loader or libc might allocate.
    200      1.11  riastrad #
    201      1.11  riastrad # In principle, the overhead from that and the program image should be
    202      1.11  riastrad # constant, and the only substantial memory allocation performed by
    203      1.11  riastrad # vndcompress should be w*8 bytes or (n/b)*8, where w is the window
    204      1.11  riastrad # size if specified, n is the size of the input, and b is the block
    205      1.11  riastrad # size.
    206      1.11  riastrad #
    207      1.11  riastrad # We could perhaps do an exponential growth and then binary search on
    208      1.11  riastrad # the virtual address space limit to determine the overhead, but that's
    209      1.11  riastrad # more trouble than I care to do in a makefile right now.  Currently
    210      1.11  riastrad # this is calibrated for NetBSD/amd64 6, where 128 MB of virtual
    211      1.11  riastrad # address space is allocated for the stack.  (Note `ulimit -v' takes a
    212      1.11  riastrad # number of kilobytes, not a number of bytes.)  Since this is not
    213      1.11  riastrad # reliable, however, these are commented out.
    214      1.11  riastrad 
    215      1.11  riastrad #CHECKS+=	check-ulimit
    216      1.11  riastrad #check-ulimit:
    217      1.11  riastrad #	@echo '# expecting failure...'
    218      1.11  riastrad #	if head -c $$((64 * 1024 * 1024)) < /dev/zero \
    219      1.11  riastrad #	    | (ulimit -v $$((139 * 1024)) && \
    220      1.13  riastrad #	        ./vndcompress -w 0 -l 64m -b 512 /dev/stdin /dev/null); then \
    221      1.11  riastrad #	  echo 'unexpected pass!' && exit 1; \
    222      1.11  riastrad #	fi
    223      1.11  riastrad #
    224      1.11  riastrad #CHECKS+=	check-ulimit-window
    225      1.11  riastrad #check-ulimit-window:
    226      1.11  riastrad #	head -c $$((64 * 1024 * 1024)) < /dev/zero \
    227      1.11  riastrad #	| (ulimit -v $$((139 * 1024)) && \
    228      1.12  riastrad #	    ./vndcompress -w 8192 -l 64m -b 512 /dev/stdin /dev/null)
    229      1.10  riastrad 
    230       1.3  riastrad TESTSUFFIXES+=	in cl2 cl2x out outx
    231       1.3  riastrad 
    232       1.3  riastrad TESTFORMS+=	cl2 cl2x
    233       1.3  riastrad TESTFORMS+=	in out
    234       1.3  riastrad TESTFORMS+=	in outx
    235       1.3  riastrad 
    236       1.3  riastrad .for testfile in ${TESTFILES}
    237       1.3  riastrad .  for suffix in ${TESTSUFFIXES}
    238       1.3  riastrad CLEANFILES+=	${testfile}.${suffix}
    239       1.3  riastrad CLEANFILES+=	${testfile}.${suffix}.tmp
    240       1.3  riastrad .  endfor
    241       1.3  riastrad .  for left right in ${TESTFORMS}
    242       1.3  riastrad CHECKS.${testfile}+=	check-${testfile}.${left}-${right}
    243       1.3  riastrad check-${testfile}.${left}-${right}: .PHONY \
    244       1.3  riastrad   ${testfile}.${left} ${testfile}.${right}
    245       1.3  riastrad .    if empty(XFAIL:M${testfile}.${left}-${right})
    246       1.3  riastrad 	cmp ${testfile}.${left} ${testfile}.${right}
    247       1.3  riastrad .    else
    248       1.3  riastrad 	@echo '# expecting failure...' \
    249       1.3  riastrad 	&& echo 'cmp ${testfile}.${left} ${testfile}.${right}' \
    250       1.3  riastrad 	&& if cmp ${testfile}.${left} ${testfile}.${right}; then \
    251       1.3  riastrad 	  echo 'unexpected pass!' \
    252       1.3  riastrad 	  && exit 1; \
    253       1.3  riastrad 	fi
    254       1.3  riastrad .    endif
    255       1.3  riastrad .  endfor
    256       1.3  riastrad check-${testfile}: ${CHECKS.${testfile}}
    257       1.3  riastrad CHECKS+=	check-${testfile}
    258       1.3  riastrad .endfor
    259       1.3  riastrad 
    260       1.3  riastrad check: .PHONY ${CHECKS}
    261       1.3  riastrad 
    262       1.3  riastrad .SUFFIXES: .cl2 .cl2x .in .out .outx
    263       1.3  riastrad 
    264      1.10  riastrad # XXX These tests should automatically try different window sizes, but
    265      1.10  riastrad # that is tricky to express in make.
    266      1.10  riastrad 
    267       1.3  riastrad .in.cl2: vndcompress
    268       1.7  riastrad 	./vndcompress ${.IMPSRC} ${.TARGET}.tmp ${BLOCKSIZE.${.PREFIX}} \
    269       1.7  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    270       1.3  riastrad 
    271       1.3  riastrad .in.cl2x:
    272       1.7  riastrad 	vndcompress ${.IMPSRC} ${.TARGET}.tmp ${BLOCKSIZE.${.PREFIX}} \
    273       1.7  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    274       1.3  riastrad 
    275       1.3  riastrad .cl2.out: vndcompress
    276       1.7  riastrad 	./vndcompress -d ${.IMPSRC} ${.TARGET}.tmp \
    277       1.7  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    278       1.3  riastrad 
    279       1.3  riastrad .cl2.outx:
    280       1.7  riastrad 	vnduncompress ${.IMPSRC} ${.TARGET}.tmp \
    281       1.7  riastrad 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    282