]> git.draconx.ca Git - dxcommon.git/blobdiff - tests/programs.at
Add "join" detection macro.
[dxcommon.git] / tests / programs.at
index b99fa828f969736722d2d5596ccdff516bbb3f2a..b02d9abc7e94c3a965ab4932576842f74dabde6d 100644 (file)
@@ -1,4 +1,4 @@
-dnl Copyright © 2020 Nick Bowler
+dnl Copyright © 2020-2022 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,11 +6,24 @@ 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_],
 [AT_SETUP([$1 probes])
 AT_KEYWORDS([DX_PROG_$2 program])dnl
+AT_CAPTURE_FILE([config.log])dnl
 
 mkdir bin
 cp -P "$srcdir/t/$1.sh" bin/$1
@@ -27,7 +40,7 @@ AC_SUBST([HAVE_$2])
 
 set x conftest*; shift
 if test -f $[]1; then
-  AC_MSG_ERROR([$[]1 left behind by [DX_PROG_$2]])
+  AC_MSG_ERROR([$[]1 left behind by [D@@&t@&t@X_PROG_$2]])
 fi
 
 AC_CONFIG_FILES([test])
@@ -36,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
 
@@ -94,3 +105,128 @@ 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