Home | History | Annotate | Line # | Download | only in vndcompress
Makefile revision 1.10
      1 PROG=	vndcompress
      2 SRCS=	main.c offtab.c utils.c vndcompress.c vnduncompress.c
      3 
      4 LINKS=	${BINDIR}/vndcompress ${BINDIR}/vnduncompress
      5 MLINKS=	vndcompress.1 vnduncompress.1
      6 
      7 DPADD+=	${LIBZ}
      8 LDADD+=	-lz
      9 
     10 WARNS=	5
     11 
     12 .include <bsd.prog.mk>
     13 
     14 TESTFILES+=	oneblock
     15 XFAIL+=		oneblock.in-outx
     16 XFAIL+=		oneblock.cl2-cl2x
     17 oneblock.in:
     18 	head -c 512 < /usr/share/dict/words > ${.TARGET}.tmp \
     19 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     20 
     21 TESTFILES+=	tenblock
     22 XFAIL+=		tenblock.in-outx
     23 XFAIL+=		tenblock.cl2-cl2x
     24 tenblock.in:
     25 	head -c 5120 < /usr/share/dict/words > ${.TARGET}.tmp \
     26 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     27 
     28 TESTFILES+=	smallfile
     29 XFAIL+=		smallfile.in-outx
     30 XFAIL+=		smallfile.cl2-cl2x
     31 smallfile.in:
     32 	head -c 12345 < /usr/share/dict/words > ${.TARGET}.tmp \
     33 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     34 
     35 CHECKS+=	check-pipe
     36 CLEANFILES+=	smallfile.cl2pipe
     37 check-pipe: .PHONY smallfile.cl2 smallfile.cl2pipe
     38 	cmp ${.ALLSRC}
     39 smallfile.cl2pipe: smallfile.in vndcompress
     40 	head -c 54321 < /usr/share/dict/words \
     41 	| ./vndcompress -l 12345 /dev/stdin ${.TARGET}.tmp \
     42 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     43 
     44 TESTFILES+=	onechunk
     45 onechunk.in:
     46 	head -c 65536 < /usr/share/dict/words > ${.TARGET}.tmp \
     47 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     48 
     49 TESTFILES+=	tenchunk
     50 tenchunk.in:
     51 	head -c 655360 < /usr/share/dict/words > ${.TARGET}.tmp \
     52 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     53 
     54 TESTFILES+=	extrablock
     55 XFAIL+=		extrablock.in-outx
     56 XFAIL+=		extrablock.cl2-cl2x
     57 extrablock.in:
     58 	head -c $$((65536 + 512)) < /usr/share/dict/words > ${.TARGET}.tmp \
     59 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     60 
     61 TESTFILES+=	medfile
     62 XFAIL+=		medfile.in-outx
     63 XFAIL+=		medfile.cl2-cl2x
     64 medfile.in:
     65 	head -c 123456 < /usr/share/dict/words > ${.TARGET}.tmp \
     66 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     67 
     68 TESTFILES+=		onetinyblock
     69 BLOCKSIZE.onetinyblock=	512
     70 onetinyblock.in:
     71 	head -c 512 < /usr/share/dict/words > ${.TARGET}.tmp \
     72 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     73 
     74 TESTFILES+=		tentinyblock
     75 BLOCKSIZE.tentinyblock=	512
     76 tentinyblock.in:
     77 	head -c 5120 < /usr/share/dict/words > ${.TARGET}.tmp \
     78 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     79 
     80 CHECKS+=	check-pipe-restart
     81 CLEANFILES+=	piperestart.in piperestart.in.tmp
     82 CLEANFILES+=	piperestart.cl2 piperestart.cl2.tmp
     83 CLEANFILES+=	piperestart.cl2restart piperestart.cl2restart.tmp
     84 CLEANFILES+=	piperestart.cl2part piperestart.cl2part.tmp
     85 check-pipe-restart: .PHONY piperestart.cl2 piperestart.cl2restart
     86 	cmp ${.ALLSRC}
     87 piperestart.cl2restart: piperestart.cl2part vndcompress
     88 	cp piperestart.cl2part ${.TARGET}.tmp \
     89 	&& head -c 700000 < /usr/share/dict/words \
     90 	| ./vndcompress -l 655360 -k 1 -rR /dev/stdin ${.TARGET}.tmp \
     91 	&& mv -f ${.TARGET}.tmp ${.TARGET}
     92 # The following rule uses ; and not && on purpose: vndcompress is
     93 # supposed to fail (and it is even OK to interrupt!) so we can restart
     94 # and fill in the rest.
     95 piperestart.cl2part: vndcompress
     96 	head -c 600000 < /usr/share/dict/words \
     97 	| ./vndcompress -l 655360 -k 1 /dev/stdin ${.TARGET}.tmp; \
     98 	mv -f ${.TARGET}.tmp ${.TARGET}
     99 piperestart.in:
    100 	head -c 655360 < /usr/share/dict/words > ${.TARGET}.tmp \
    101 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    102 
    103 CHECKS+=	check-part
    104 CLEANFILES+=	part.orig part.cl2part part.cl2 part.out
    105 check-part: .PHONY part.orig part.out
    106 	cmp part.orig part.out
    107 part.cl2: part.orig part.cl2part vndcompress
    108 	cp part.cl2part ${.TARGET}.tmp \
    109 	&& ./vndcompress -s 512 -rR part.orig ${.TARGET}.tmp \
    110 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    111 part.cl2part: part.orig vndcompress
    112 	./vndcompress -s 512 -p 10 part.orig ${.TARGET}.tmp \
    113 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    114 part.orig:
    115 	head -c 12345 < /usr/share/dict/words > ${.TARGET}.tmp \
    116 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    117 
    118 TESTFILES+=	smallwindow
    119 smallwindow.in:
    120 	head -c 655360 < /usr/share/dict/words > ${.TARGET}.tmp \
    121 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    122 smallwindow.cl2: smallwindow.in
    123 	./vndcompress -w 1 ${.IMPSRC} ${.TARGET}.tmp \
    124 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    125 smallwindow.out: smallwindow.cl2
    126 	./vndcompress -w 1 -d ${.IMPSRC} ${.TARGET}.tmp \
    127 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    128 
    129 CHECKS+=	check-pipewindow
    130 check-pipewindow: smallwindow.cl2
    131 	@echo '# expecting failure...'
    132 	if cat smallwindow.cl2 | ./vndcompress -w 1 -d /dev/stdin /dev/null; \
    133 	then \
    134 	  echo 'unexpected pass!' && exit 1; \
    135 	fi
    136 
    137 # These checks don't work unless RLIMIT_AS (i.e., ulimit -v) actually
    138 # works!  Apparently it doesn't...
    139 
    140 # CHECKS+=	check-ulimit
    141 # check-ulimit:
    142 # 	@echo '# expecting failure...'
    143 # 	if head -c 1073741824 < /dev/zero \
    144 # 	    | (ulimit -v 20000 && \
    145 # 	        ./vndcompress -l 1g -s 512 /dev/stdin /dev/null); then \
    146 # 	  echo 'unexpected pass!' && exit 0; \
    147 # 	fi
    148 
    149 # CHECKS+=	check-ulimit-window
    150 # check-ulimit-window:
    151 # 	head -c 1073741824 < /dev/zero \
    152 # 	| (ulimit -v 20000 && \
    153 # 	    ./vndcompress -w 1 -l 1g -s 512 /dev/stdin /dev/null)
    154 
    155 TESTSUFFIXES+=	in cl2 cl2x out outx
    156 
    157 TESTFORMS+=	cl2 cl2x
    158 TESTFORMS+=	in out
    159 TESTFORMS+=	in outx
    160 
    161 .for testfile in ${TESTFILES}
    162 .  for suffix in ${TESTSUFFIXES}
    163 CLEANFILES+=	${testfile}.${suffix}
    164 CLEANFILES+=	${testfile}.${suffix}.tmp
    165 .  endfor
    166 .  for left right in ${TESTFORMS}
    167 CHECKS.${testfile}+=	check-${testfile}.${left}-${right}
    168 check-${testfile}.${left}-${right}: .PHONY \
    169   ${testfile}.${left} ${testfile}.${right}
    170 .    if empty(XFAIL:M${testfile}.${left}-${right})
    171 	cmp ${testfile}.${left} ${testfile}.${right}
    172 .    else
    173 	@echo '# expecting failure...' \
    174 	&& echo 'cmp ${testfile}.${left} ${testfile}.${right}' \
    175 	&& if cmp ${testfile}.${left} ${testfile}.${right}; then \
    176 	  echo 'unexpected pass!' \
    177 	  && exit 1; \
    178 	fi
    179 .    endif
    180 .  endfor
    181 check-${testfile}: ${CHECKS.${testfile}}
    182 CHECKS+=	check-${testfile}
    183 .endfor
    184 
    185 check: .PHONY ${CHECKS}
    186 
    187 .SUFFIXES: .cl2 .cl2x .in .out .outx
    188 
    189 # XXX These tests should automatically try different window sizes, but
    190 # that is tricky to express in make.
    191 
    192 .in.cl2: vndcompress
    193 	./vndcompress ${.IMPSRC} ${.TARGET}.tmp ${BLOCKSIZE.${.PREFIX}} \
    194 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    195 
    196 .in.cl2x:
    197 	vndcompress ${.IMPSRC} ${.TARGET}.tmp ${BLOCKSIZE.${.PREFIX}} \
    198 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    199 
    200 .cl2.out: vndcompress
    201 	./vndcompress -d ${.IMPSRC} ${.TARGET}.tmp \
    202 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    203 
    204 .cl2.outx:
    205 	vnduncompress ${.IMPSRC} ${.TARGET}.tmp \
    206 	&& mv -f ${.TARGET}.tmp ${.TARGET}
    207