1 dnl Copyright © 2020-2022 Nick Bowler
3 dnl License WTFPL2: Do What The Fuck You Want To Public License, version 2.
4 dnl This is free software: you are free to do what the fuck you want to.
5 dnl There is NO WARRANTY, to the extent permitted by law.
7 AT_BANNER([Program tests])
9 dnl TEST_PATH_LOOKUP(var, program, [abspath=`pwd`/bin])
11 dnl If "command -v program" returns abspath/program, then set var=program.
12 dnl Otherwise, set var=abspath/program. This helps compute the expected
13 dnl program name from path lookups as certain older shells (e.g., Solaris
14 dnl 10 /bin/sh) do not implement "command".
15 m4_define([TEST_PATH_LOOKUP],
16 [AS_VAR_SET([$1], [$2])
17 val=`$TEST_SHELL -c 'command -v $2'`
18 AS_IF([test x"$val" != x"m4_default([$3], [`pwd`/bin])/$2"],
19 [AS_VAR_SET([$1], [m4_default([$3], [`pwd`/bin])/$2])])])
21 m4_define([TEST_SIMPLE_PROGRAM_PROBES],
22 [TEST_SIMPLE_PROGRAM_PROBES_([$1], m4_toupper($1))])
23 m4_define([TEST_SIMPLE_PROGRAM_PROBES_],
24 [AT_SETUP([$1 probes])
25 AT_KEYWORDS([DX_PROG_$2 program])dnl
26 AT_CAPTURE_FILE([config.log])dnl
29 cp -P "$srcdir/t/$1.sh" bin/$1
37 TEST_CONFIGURE_AC([[DX_PROG_$2([], [HAVE_$2=yes], [HAVE_$2=no])
41 set x conftest*; shift
43 AC_MSG_ERROR([$[]1 left behind by [D@@&t@&t@X_PROG_$2]])
46 AC_CONFIG_FILES([test])
50 # Check the search via path lookup
52 PATH=`pwd`/bin${PATH:+":$PATH"}
54 TEST_PATH_LOOKUP([expected], [$1])
56 AT_CHECK_UNQUOTED([cat test], [0], [yes
61 # Check the search via user override
62 TEST_CONFIGURE([$2="$srcdir/t/$1.sh"])
63 AT_CHECK_UNQUOTED([cat test], [0], [yes
67 # Check that a bogus program doesn't come back as valid.
68 TEST_CONFIGURE([$2=true])
69 AT_CHECK_UNQUOTED([cat test], [0], [no
74 mv configure.ac configure.old
75 sed ['s/\(DX_PROG_$2(\)\[\]/\1[2.1.3]/'] configure.old >configure.ac
78 TEST_CONFIGURE([FAKE_$2_VERSION=2.0.0 $2="$srcdir/t/$1.sh"])
79 AT_CHECK_UNQUOTED([cat test], [0], [no
83 TEST_CONFIGURE([FAKE_$2_VERSION=3.0.0 $2="$srcdir/t/$1.sh"])
84 AT_CHECK_UNQUOTED([cat test], [0], [yes
88 TEST_CONFIGURE([FAKE_$2_VERSION=2.5.0 $2="$srcdir/t/$1.sh"])
89 AT_CHECK_UNQUOTED([cat test], [0], [yes
93 TEST_CONFIGURE([FAKE_$2_VERSION=2.1.2 $2="$srcdir/t/$1.sh"])
94 AT_CHECK_UNQUOTED([cat test], [0], [no
98 TEST_CONFIGURE([FAKE_$2_VERSION=2.1.3 $2="$srcdir/t/$1.sh"])
99 AT_CHECK_UNQUOTED([cat test], [0], [yes
106 TEST_SIMPLE_PROGRAM_PROBES([gob2])
107 TEST_SIMPLE_PROGRAM_PROBES([flex])
108 TEST_SIMPLE_PROGRAM_PROBES([bison])
110 AT_SETUP([md5 probes])
111 AT_KEYWORDS([DX_PROG_MD5 program])
112 AT_CAPTURE_FILE([config.log])
115 cp -P "$srcdir/t/md5.sh" bin/md5sum
119 dx_cv_md5_works=@dx_cv_md5_works@
120 dx_cv_md5_outpos=@dx_cv_md5_outpos@
123 TEST_CONFIGURE_AC([[DX_PROG_MD5
124 AC_SUBST([dx_cv_md5_works])
125 AC_SUBST([dx_cv_md5_outpos])
127 set x conftest*; shift
128 if test -f $[]1; then
129 AC_MSG_ERROR([$[]1 left behind by [D@@&t@&t@X_PROG_MD5]])
132 AC_CONFIG_FILES([test])
136 # Check the search via path lookup
138 PATH=`pwd`/bin${PATH:+":$PATH"}
140 TEST_PATH_LOOKUP([expected], [md5sum])
142 AT_CHECK_UNQUOTED([cat test], [0], [MD5=$expected
144 dx_cv_md5_outpos=front
147 mv bin/md5sum bin/md5
148 TEST_PATH_LOOKUP([expected], [md5])
149 TEST_CONFIGURE([MD5_DIRECTION=reverse])
150 AT_CHECK_UNQUOTED([cat test], [0], [MD5=$expected -r
152 dx_cv_md5_outpos=front
155 mv bin/md5 bin/openssl
156 TEST_PATH_LOOKUP([expected], [openssl])
157 TEST_CONFIGURE([MD5_DIRECTION=reverse MD5_NO_R=true])
158 AT_CHECK_UNQUOTED([cat test], [0], [MD5=$expected md5
160 dx_cv_md5_outpos=back
165 # Check the search via user override
166 TEST_CONFIGURE([MD5_DIRECTION=reverse MD5="$srcdir/t/md5.sh"])
167 AT_CHECK_UNQUOTED([cat test], [0], [MD5=$srcdir/t/md5.sh
169 dx_cv_md5_outpos=back
172 # Check that a bogus program doesn't come back as valid.
173 TEST_CONFIGURE([MD5=true])
174 AT_CHECK([grep dx_cv_md5_works test], [0], [dx_cv_md5_works=no
179 AT_SETUP([join probes])
183 dx_cv_join_works=@dx_cv_join_works@
186 TEST_CONFIGURE_AC([[DX_PROG_JOIN
187 AC_SUBST([dx_cv_join_works])
189 set x conftest*; shift
190 if test -f $[]1; then
191 AC_MSG_ERROR([$[]1 left behind by [D@@&t@&t@X_PROG_JOIN]])
194 AC_CONFIG_FILES([test])
198 TEST_CONFIGURE([JOIN=true AWK="$AWK"])
199 AT_CHECK_UNQUOTED([$AWK '{ print $1 }' test], [0],
205 IFS='='; read x JOIN <test
221 AT_CHECK([$JOIN a b], [0], [[b
226 TEST_CONFIGURE([JOIN="$JOIN"])
227 AT_CHECK_UNQUOTED([cat test], [0],