]> git.draconx.ca Git - dxcommon.git/blob - tests/programs.at
DX_C_ALIGNAS: Work around bash-5 parsing bug.
[dxcommon.git] / tests / programs.at
1 dnl Copyright © 2020-2023 Nick Bowler
2 dnl
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.
6
7 AT_BANNER([Program tests])
8
9 dnl TEST_PATH_LOOKUP(var, program, [abspath=`pwd`/bin])
10 dnl
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])])])
20
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
27
28 mkdir bin
29 cp -P "$srcdir/t/$1.sh" bin/$1
30
31 AT_DATA([test.in],
32 [[@HAVE_$2@
33 @$2@
34 ]])
35
36 # Unversioned tests
37 TEST_CONFIGURE_AC([[DX_PROG_$2([], [HAVE_$2=yes], [HAVE_$2=no])
38 AC_SUBST([$2])
39 AC_SUBST([HAVE_$2])
40
41 set x conftest*; shift
42 if test -f $[]1; then
43   AC_MSG_ERROR([$[]1 left behind by [D@@&t@&t@X_PROG_$2]])
44 fi
45
46 AC_CONFIG_FILES([test])
47 ]])
48 TEST_AUTORECONF
49
50 # Check the search via path lookup
51 save_PATH=$PATH
52 PATH=`pwd`/bin${PATH:+":$PATH"}
53
54 TEST_PATH_LOOKUP([expected], [$1])
55 TEST_CONFIGURE
56 AT_CHECK_UNQUOTED([cat test], [0], [yes
57 $expected
58 ])
59 PATH=$save_PATH
60
61 # Check the search via user override
62 TEST_CONFIGURE([$2="$srcdir/t/$1.sh"])
63 AT_CHECK_UNQUOTED([cat test], [0], [yes
64 $srcdir/t/$1.sh
65 ])
66
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
70 true
71 ])
72
73 # min-version tests
74 mv configure.ac configure.old
75 sed ['s/\(DX_PROG_$2(\)\[\]/\1[2.1.3]/'] configure.old >configure.ac
76 TEST_AUTORECONF
77
78 TEST_CONFIGURE([FAKE_$2_VERSION=2.0.0 $2="$srcdir/t/$1.sh"])
79 AT_CHECK_UNQUOTED([cat test], [0], [no
80 $srcdir/t/$1.sh
81 ])
82
83 TEST_CONFIGURE([FAKE_$2_VERSION=3.0.0 $2="$srcdir/t/$1.sh"])
84 AT_CHECK_UNQUOTED([cat test], [0], [yes
85 $srcdir/t/$1.sh
86 ])
87
88 TEST_CONFIGURE([FAKE_$2_VERSION=2.5.0 $2="$srcdir/t/$1.sh"])
89 AT_CHECK_UNQUOTED([cat test], [0], [yes
90 $srcdir/t/$1.sh
91 ])
92
93 TEST_CONFIGURE([FAKE_$2_VERSION=2.1.2 $2="$srcdir/t/$1.sh"])
94 AT_CHECK_UNQUOTED([cat test], [0], [no
95 $srcdir/t/$1.sh
96 ])
97
98 TEST_CONFIGURE([FAKE_$2_VERSION=2.1.3 $2="$srcdir/t/$1.sh"])
99 AT_CHECK_UNQUOTED([cat test], [0], [yes
100 $srcdir/t/$1.sh
101 ])
102
103 AT_CLEANUP
104 ])
105
106 TEST_SIMPLE_PROGRAM_PROBES([gob2])
107 TEST_SIMPLE_PROGRAM_PROBES([flex])
108 TEST_SIMPLE_PROGRAM_PROBES([bison])
109
110 AT_SETUP([md5 probes])
111 AT_KEYWORDS([DX_PROG_MD5 program])
112 AT_CAPTURE_FILE([config.log])
113
114 mkdir bin
115 cp -P "$srcdir/t/md5.sh" bin/md5sum
116
117 AT_DATA([test.in],
118 [[MD5=@MD5@
119 dx_cv_md5_works=@dx_cv_md5_works@
120 dx_cv_md5_outpos=@dx_cv_md5_outpos@
121 ]])
122
123 TEST_CONFIGURE_AC([[DX_PROG_MD5
124 AC_SUBST([dx_cv_md5_works])
125 AC_SUBST([dx_cv_md5_outpos])
126
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]])
130 fi
131
132 AC_CONFIG_FILES([test])
133 ]])
134 TEST_AUTORECONF
135
136 # Check the search via path lookup
137 save_PATH=$PATH
138 PATH=`pwd`/bin${PATH:+":$PATH"}
139
140 TEST_PATH_LOOKUP([expected], [md5sum])
141 TEST_CONFIGURE
142 AT_CHECK_UNQUOTED([cat test], [0], [MD5=$expected
143 dx_cv_md5_works=yes
144 dx_cv_md5_outpos=front
145 ])
146
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
151 dx_cv_md5_works=yes
152 dx_cv_md5_outpos=front
153 ])
154
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
159 dx_cv_md5_works=yes
160 dx_cv_md5_outpos=back
161 ])
162
163 PATH=$save_PATH
164
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
168 dx_cv_md5_works=yes
169 dx_cv_md5_outpos=back
170 ])
171
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
175 ])
176
177 AT_CLEANUP
178
179 AT_SETUP([join probes])
180
181 AT_DATA([test.in],
182 [[JOIN=@JOIN@
183 dx_cv_join_works=@dx_cv_join_works@
184 ]])
185
186 TEST_CONFIGURE_AC([[DX_PROG_JOIN
187 AC_SUBST([dx_cv_join_works])
188
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]])
192 fi
193
194 AC_CONFIG_FILES([test])
195 ]])
196 TEST_AUTORECONF
197
198 TEST_CONFIGURE([JOIN=true AWK="$AWK"])
199 AT_CHECK_UNQUOTED([$AWK '{ print $1 }' test], [0],
200 [JOIN=$AWK
201 dx_cv_join_works=no
202 ])
203
204 save_IFS=$IFS
205 IFS='='; read x JOIN <test
206 IFS=$save_IFS
207
208 AT_DATA([a],
209 [[a
210 b
211 c
212 d
213 ]])
214
215 AT_DATA([b],
216 [[b
217 d
218 d
219 ]])
220
221 AT_CHECK([$JOIN a b], [0], [[b
222 d
223 d
224 ]])
225
226 TEST_CONFIGURE([JOIN="$JOIN"])
227 AT_CHECK_UNQUOTED([cat test], [0],
228 [JOIN=$JOIN
229 dx_cv_join_works=yes
230 ])
231
232 AT_CLEANUP
233
234 AT_SETUP([autotest probes])
235 AT_KEYWORDS([DX_PROG_BISON program])dnl
236
237 AT_DATA([test.in],
238 [[@AUTOTEST@
239 @dx_cv_autotest_works@
240 ]])
241
242 TEST_CONFIGURE_AC([[DX_PROG_AUTOTEST
243 AC_SUBST([dx_cv_autotest_works])
244
245 set x conftest*; shift
246 if test -f $[]1; then
247   AC_MSG_ERROR([$[]1 left behind by [D@@&t@&t@X_PROG_AUTOTEST]])
248 fi
249 AC_CONFIG_FILES([test])]])
250 TEST_AUTORECONF
251
252 # Check the search via path lookup for autom4te
253 mkdir bin
254 cp -P "$srcdir/t/autotest.sh" bin/autom4te
255
256 save_PATH=$PATH
257 PATH=`pwd`/bin${PATH:+":$PATH"}
258 TEST_CONFIGURE
259 PATH=$save_PATH
260
261 AT_CHECK([cat test], [0], [[autom4te -l autotest
262 yes
263 ]])
264
265 # Check that we can assign AUTOTEST directly
266 TEST_CONFIGURE([AUTOTEST="$srcdir/t/autotest.sh"])
267 AT_CHECK_UNQUOTED([cat test], [0], [[$srcdir/t/autotest.sh
268 yes
269 ]])
270
271 # Check that we can assign AUTOM4TE directly
272 TEST_CONFIGURE([AUTOM4TE="$srcdir/t/autotest.sh"])
273 AT_CHECK_UNQUOTED([cat test], [0], [[$srcdir/t/autotest.sh -l autotest
274 yes
275 ]])
276
277 # Check that a bogus program doesn't come back as valid
278 TEST_CONFIGURE([AUTOTEST=true])
279 AT_CHECK([cat test], [0], [[true
280 no
281 ]])
282
283 AT_CLEANUP