|
65 | 65 | fi
|
66 | 66 | }
|
67 | 67 |
|
| 68 | +deadcheck() { |
| 69 | + cat << EOF > conftest.c |
| 70 | +#include <stdlib.h> |
| 71 | +__dead usage(void){exit(1);}int main(void){usage();return 0;} |
| 72 | +EOF |
| 73 | + $cc $cflags $ldflags -o conftest conftest.c > /dev/null 2>&1 |
| 74 | + if [ $? -eq 0 ] ; then |
| 75 | + rm -f conftest conftest.o conftest.c |
| 76 | + return 0 |
| 77 | + else |
| 78 | + rm -f conftest conftest.o conftest.c |
| 79 | + return 1 |
| 80 | + fi |
| 81 | +} |
| 82 | + |
| 83 | +dead2check() { |
| 84 | + cat << EOF > conftest.c |
| 85 | +#include <stdlib.h> |
| 86 | +__dead2 usage(void){exit(1);}int main(void){usage();return 0;} |
| 87 | +EOF |
| 88 | + $cc $cflags $ldflags -o conftest conftest.c > /dev/null 2>&1 |
| 89 | + if [ $? -eq 0 ] ; then |
| 90 | + rm -f conftest conftest.o conftest.c |
| 91 | + return 0 |
| 92 | + else |
| 93 | + rm -f conftest conftest.o conftest.c |
| 94 | + return 1 |
| 95 | + fi |
| 96 | +} |
| 97 | + |
68 | 98 | getprognamecheck() {
|
69 | 99 | cat << EOF > conftest.c
|
70 | 100 | #include <stdlib.h>
|
|
95 | 125 | fi
|
96 | 126 | }
|
97 | 127 |
|
| 128 | +noreturncheck() { |
| 129 | + cat << EOF > conftest.c |
| 130 | +#include <stdlib.h> |
| 131 | +__attribute__((__no_return__)) usage(void){exit(1);}int main(void){usage();return 0;} |
| 132 | +EOF |
| 133 | + $cc $cflags $ldflags -o conftest conftest.c > /dev/null 2>&1 |
| 134 | + if [ $? -eq 0 ] ; then |
| 135 | + rm -f conftest conftest.o conftest.c |
| 136 | + return 0 |
| 137 | + else |
| 138 | + rm -f conftest conftest.o conftest.c |
| 139 | + return 1 |
| 140 | + fi |
| 141 | +} |
| 142 | + |
98 | 143 | pledgecheck() {
|
99 | 144 | cat << EOF > conftest.c
|
100 | 145 | #include <unistd.h>
|
@@ -178,6 +223,31 @@ if [ "x$os" = "xNetBSD" ] ; then
|
178 | 223 | cflags="$cflags -D_OPENBSD_SOURCE"
|
179 | 224 | fi
|
180 | 225 |
|
| 226 | +printf "checking for __dead... " |
| 227 | +deadcheck |
| 228 | +if [ $? -eq 0 ] ; then |
| 229 | + echo "yes" |
| 230 | +else |
| 231 | + echo "no" |
| 232 | + printf "checking for __dead2... " |
| 233 | + dead2check |
| 234 | + if [ $? -eq 0 ] ; then |
| 235 | + cflags="$cflags -D__dead=__dead2" |
| 236 | + echo "yes" |
| 237 | + else |
| 238 | + echo "no" |
| 239 | + printf "checking for __attribute__((__no_return__))... " |
| 240 | + noreturncheck |
| 241 | + if [ $? -eq 0 ] ; then |
| 242 | + cflags="$cflags -D__dead=\"__attribute__((__no_return__))\"" |
| 243 | + echo "yes" |
| 244 | + else |
| 245 | + cflags="$cflags -D__dead=" |
| 246 | + echo "no" |
| 247 | + fi |
| 248 | + fi |
| 249 | +fi |
| 250 | + |
181 | 251 | printf "checking for arc4random_uniform... "
|
182 | 252 | arc4randomuniformcheck
|
183 | 253 | if [ $? -eq 0 ] ; then
|
@@ -260,16 +330,35 @@ cat << EOF >> Makefile
|
260 | 330 | PREFIX ?= /usr/local
|
261 | 331 | MANDIR ?= \${PREFIX}/man
|
262 | 332 |
|
263 |
| -PROG = shuf |
264 |
| -OBJS = shuf.o |
| 333 | +PROG = shuf |
| 334 | +OBJS = shuf.o |
265 | 335 |
|
266 | 336 | all: \${OBJS}
|
267 |
| - \${CC} \${CFLAGS} \${LDFLAGS} -o \${PROG} \${OBJS} $libs |
| 337 | + \${CC} \${LDFLAGS} -o \${PROG} \${OBJS} $libs |
268 | 338 |
|
269 | 339 | install:
|
270 | 340 | install -c -S -s -m 755 \${PROG} \${PREFIX}/bin
|
271 | 341 | install -c -S -m 644 shuf.1 \${MANDIR}/man1/\${PROG}.1
|
272 | 342 |
|
| 343 | +test: |
| 344 | + @echo ==================================== |
| 345 | + @echo BSD shuf test suite |
| 346 | + @echo ==================================== |
| 347 | + @echo Test 1: File input |
| 348 | + @echo shuf shuf.c |
| 349 | + @./shuf shuf.c || (echo Test 1 failed; exit 1) |
| 350 | + @echo ==================================== |
| 351 | + @echo Test 2: -e flag, -n flag, -r flag |
| 352 | + @echo shuf -e -n 10 -r Heads Tails |
| 353 | + @./shuf -e -n 10 -r Heads Tails || (echo Test 2 failed; exit 1) |
| 354 | + @echo ==================================== |
| 355 | + @echo Test 3: -i flag |
| 356 | + @echo shuf -i 1-20 -n 10 |
| 357 | + @./shuf -i 1-20 -n 10 || (echo Test 3 failed; exit 1) |
| 358 | + @echo ==================================== |
| 359 | + @echo All tests passed |
| 360 | + @echo ==================================== |
| 361 | +
|
273 | 362 | clean:
|
274 | 363 | rm -f \${PROG} \${OBJS} \${PROG}.core
|
275 | 364 |
|
|
0 commit comments