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