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