]> git.draconx.ca Git - dxcommon.git/blobdiff - tests/programs.at
dx_getline: Fix EOF handling in standard C fallback.
[dxcommon.git] / tests / programs.at
index 1346edee73ec816e48590d6146f46c2a920e818f..e482fcbdd775a0efbf7809044619f356b33d7450 100644 (file)
@@ -1,4 +1,4 @@
-dnl Copyright © 2020-2021 Nick Bowler
+dnl Copyright © 2020-2023 Nick Bowler
 dnl
 dnl License WTFPL2: Do What The Fuck You Want To Public License, version 2.
 dnl This is free software: you are free to do what the fuck you want to.
@@ -6,6 +6,18 @@ dnl There is NO WARRANTY, to the extent permitted by law.
 
 AT_BANNER([Program tests])
 
+dnl TEST_PATH_LOOKUP(var, program, [abspath=`pwd`/bin])
+dnl
+dnl If "command -v program" returns abspath/program, then set var=program.
+dnl Otherwise, set var=abspath/program.  This helps compute the expected
+dnl program name from path lookups as certain older shells (e.g., Solaris
+dnl 10 /bin/sh) do not implement "command".
+m4_define([TEST_PATH_LOOKUP],
+[AS_VAR_SET([$1], [$2])
+val=`$TEST_SHELL -c 'command -v $2'`
+AS_IF([test x"$val" != x"m4_default([$3], [`pwd`/bin])/$2"],
+  [AS_VAR_SET([$1], [m4_default([$3], [`pwd`/bin])/$2])])])
+
 m4_define([TEST_SIMPLE_PROGRAM_PROBES],
   [TEST_SIMPLE_PROGRAM_PROBES_([$1], m4_toupper($1))])
 m4_define([TEST_SIMPLE_PROGRAM_PROBES_],
@@ -37,14 +49,12 @@ TEST_AUTORECONF
 
 # Check the search via path lookup
 save_PATH=$PATH
-PATH=$PWD/bin${PATH:+":$PATH"}
-
-# Sanity test on PATH lookup
-AT_CHECK([test x"`command -v $1`" = x"$PWD/bin/$1" || exit 99 #''])
+PATH=`pwd`/bin${PATH:+":$PATH"}
 
+TEST_PATH_LOOKUP([expected], [$1])
 TEST_CONFIGURE
 AT_CHECK_UNQUOTED([cat test], [0], [yes
-$1
+$expected
 ])
 PATH=$save_PATH
 
@@ -96,3 +106,178 @@ AT_CLEANUP
 TEST_SIMPLE_PROGRAM_PROBES([gob2])
 TEST_SIMPLE_PROGRAM_PROBES([flex])
 TEST_SIMPLE_PROGRAM_PROBES([bison])
+
+AT_SETUP([md5 probes])
+AT_KEYWORDS([DX_PROG_MD5 program])
+AT_CAPTURE_FILE([config.log])
+
+mkdir bin
+cp -P "$srcdir/t/md5.sh" bin/md5sum
+
+AT_DATA([test.in],
+[[MD5=@MD5@
+dx_cv_md5_works=@dx_cv_md5_works@
+dx_cv_md5_outpos=@dx_cv_md5_outpos@
+]])
+
+TEST_CONFIGURE_AC([[DX_PROG_MD5
+AC_SUBST([dx_cv_md5_works])
+AC_SUBST([dx_cv_md5_outpos])
+
+set x conftest*; shift
+if test -f $[]1; then
+  AC_MSG_ERROR([$[]1 left behind by [D@@&t@&t@X_PROG_MD5]])
+fi
+
+AC_CONFIG_FILES([test])
+]])
+TEST_AUTORECONF
+
+# Check the search via path lookup
+save_PATH=$PATH
+PATH=`pwd`/bin${PATH:+":$PATH"}
+
+TEST_PATH_LOOKUP([expected], [md5sum])
+TEST_CONFIGURE
+AT_CHECK_UNQUOTED([cat test], [0], [MD5=$expected
+dx_cv_md5_works=yes
+dx_cv_md5_outpos=front
+])
+
+mv bin/md5sum bin/md5
+TEST_PATH_LOOKUP([expected], [md5])
+TEST_CONFIGURE([MD5_DIRECTION=reverse])
+AT_CHECK_UNQUOTED([cat test], [0], [MD5=$expected -r
+dx_cv_md5_works=yes
+dx_cv_md5_outpos=front
+])
+
+mv bin/md5 bin/openssl
+TEST_PATH_LOOKUP([expected], [openssl])
+TEST_CONFIGURE([MD5_DIRECTION=reverse MD5_NO_R=true])
+AT_CHECK_UNQUOTED([cat test], [0], [MD5=$expected md5
+dx_cv_md5_works=yes
+dx_cv_md5_outpos=back
+])
+
+PATH=$save_PATH
+
+# Check the search via user override
+TEST_CONFIGURE([MD5_DIRECTION=reverse MD5="$srcdir/t/md5.sh"])
+AT_CHECK_UNQUOTED([cat test], [0], [MD5=$srcdir/t/md5.sh
+dx_cv_md5_works=yes
+dx_cv_md5_outpos=back
+])
+
+# Check that a bogus program doesn't come back as valid.
+TEST_CONFIGURE([MD5=true])
+AT_CHECK([grep dx_cv_md5_works test], [0], [dx_cv_md5_works=no
+])
+
+AT_CLEANUP
+
+AT_SETUP([join probes])
+
+AT_DATA([test.in],
+[[JOIN=@JOIN@
+dx_cv_join_works=@dx_cv_join_works@
+]])
+
+TEST_CONFIGURE_AC([[DX_PROG_JOIN
+AC_SUBST([dx_cv_join_works])
+
+set x conftest*; shift
+if test -f $[]1; then
+  AC_MSG_ERROR([$[]1 left behind by [D@@&t@&t@X_PROG_JOIN]])
+fi
+
+AC_CONFIG_FILES([test])
+]])
+TEST_AUTORECONF
+
+TEST_CONFIGURE([JOIN=true AWK="$AWK"])
+AT_CHECK_UNQUOTED([$AWK '{ print $1 }' test], [0],
+[JOIN=$AWK
+dx_cv_join_works=no
+])
+
+save_IFS=$IFS
+IFS='='; read x JOIN <test
+IFS=$save_IFS
+
+AT_DATA([a],
+[[a
+b
+c
+d
+]])
+
+AT_DATA([b],
+[[b
+d
+d
+]])
+
+AT_CHECK([$JOIN a b], [0], [[b
+d
+d
+]])
+
+TEST_CONFIGURE([JOIN="$JOIN"])
+AT_CHECK_UNQUOTED([cat test], [0],
+[JOIN=$JOIN
+dx_cv_join_works=yes
+])
+
+AT_CLEANUP
+
+AT_SETUP([autotest probes])
+AT_KEYWORDS([DX_PROG_BISON program])dnl
+
+AT_DATA([test.in],
+[[@AUTOTEST@
+@dx_cv_autotest_works@
+]])
+
+TEST_CONFIGURE_AC([[DX_PROG_AUTOTEST
+AC_SUBST([dx_cv_autotest_works])
+
+set x conftest*; shift
+if test -f $[]1; then
+  AC_MSG_ERROR([$[]1 left behind by [D@@&t@&t@X_PROG_AUTOTEST]])
+fi
+AC_CONFIG_FILES([test])]])
+TEST_AUTORECONF
+
+# Check the search via path lookup for autom4te
+mkdir bin
+cp -P "$srcdir/t/autotest.sh" bin/autom4te
+
+save_PATH=$PATH
+PATH=`pwd`/bin${PATH:+":$PATH"}
+TEST_CONFIGURE
+PATH=$save_PATH
+
+AT_CHECK([cat test], [0], [[autom4te -l autotest
+yes
+]])
+
+# Check that we can assign AUTOTEST directly
+TEST_CONFIGURE([AUTOTEST="$srcdir/t/autotest.sh"])
+AT_CHECK_UNQUOTED([cat test], [0], [[$srcdir/t/autotest.sh
+yes
+]])
+
+# Check that we can assign AUTOM4TE directly
+TEST_CONFIGURE([AUTOM4TE="$srcdir/t/autotest.sh"])
+AT_CHECK_UNQUOTED([cat test], [0], [[$srcdir/t/autotest.sh -l autotest
+yes
+]])
+
+# Check that a bogus program doesn't come back as valid
+TEST_CONFIGURE([AUTOTEST=true])
+AT_CHECK([cat test], [0], [[true
+no
+]])
+
+AT_CLEANUP