X-Git-Url: https://git.draconx.ca/gitweb/dxcommon.git/blobdiff_plain/b3a380d027135bff7d13a08557bd7db294d18f08..5865ffc2d8b828aa78235fbdcf9dfe18a8799980:/tests/programs.at diff --git a/tests/programs.at b/tests/programs.at index b99fa82..b02d9ab 100644 --- a/tests/programs.at +++ b/tests/programs.at @@ -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