X-Git-Url: http://git.draconx.ca/gitweb/dxcommon.git/blobdiff_plain/4705ffd69e7b7551bab4650f9e49756667be783b..7b34413e9942b5777aed4fd3dc9c261214981e74:/tests/programs.at diff --git a/tests/programs.at b/tests/programs.at index 0228ac3..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,24 +6,41 @@ dnl There is NO WARRANTY, to the extent permitted by law. AT_BANNER([Program tests]) -AT_SETUP([gob2 probes]) +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/gob2.sh" bin +cp -P "$srcdir/t/$1.sh" bin/$1 AT_DATA([test.in], -[[@HAVE_GOB2@ -@GOB2@ +[[@HAVE_$2@ +@$2@ ]]) # Unversioned tests -TEST_CONFIGURE_AC([[DX_PROG_GOB2([], [HAVE_GOB2=yes], [HAVE_GOB2=no]) -AC_SUBST([GOB2]) -AC_SUBST([HAVE_GOB2]) +TEST_CONFIGURE_AC([[DX_PROG_$2([], [HAVE_$2=yes], [HAVE_$2=no]) +AC_SUBST([$2]) +AC_SUBST([HAVE_$2]) set x conftest*; shift if test -f $[]1; then - AC_MSG_ERROR([conftest* left behind by [DX_PROG_GOB2]]) + AC_MSG_ERROR([$[]1 left behind by [D@@&t@&t@X_PROG_$2]]) fi AC_CONFIG_FILES([test]) @@ -32,59 +49,184 @@ TEST_AUTORECONF # Check the search via path lookup save_PATH=$PATH -PATH=$PWD/bin${PATH:+":$PATH"} +PATH=`pwd`/bin${PATH:+":$PATH"} + +TEST_PATH_LOOKUP([expected], [$1]) TEST_CONFIGURE AT_CHECK_UNQUOTED([cat test], [0], [yes -gob2 +$expected ]) PATH=$save_PATH # Check the search via user override -TEST_CONFIGURE([GOB2="$srcdir/t/gob2.sh"]) +TEST_CONFIGURE([$2="$srcdir/t/$1.sh"]) AT_CHECK_UNQUOTED([cat test], [0], [yes -$srcdir/t/gob2.sh +$srcdir/t/$1.sh ]) # Check that a bogus program doesn't come back as valid. -TEST_CONFIGURE([GOB2=true]) +TEST_CONFIGURE([$2=true]) AT_CHECK_UNQUOTED([cat test], [0], [no true ]) # min-version tests mv configure.ac configure.old -[sed 's/DX_PROG_GOB2(\[\]/DX_PROG_GOB2([2.1.3]/' configure.old >configure.ac] +sed ['s/\(DX_PROG_$2(\)\[\]/\1[2.1.3]/'] configure.old >configure.ac TEST_AUTORECONF -FAKE_GOB2_VERSION=2.0.0 -export FAKE_GOB2_VERSION -TEST_CONFIGURE([GOB2="$srcdir/t/gob2.sh"]) +TEST_CONFIGURE([FAKE_$2_VERSION=2.0.0 $2="$srcdir/t/$1.sh"]) AT_CHECK_UNQUOTED([cat test], [0], [no -$srcdir/t/gob2.sh +$srcdir/t/$1.sh ]) -FAKE_GOB2_VERSION=3.0.0 -TEST_CONFIGURE([GOB2="$srcdir/t/gob2.sh"]) +TEST_CONFIGURE([FAKE_$2_VERSION=3.0.0 $2="$srcdir/t/$1.sh"]) AT_CHECK_UNQUOTED([cat test], [0], [yes -$srcdir/t/gob2.sh +$srcdir/t/$1.sh ]) -FAKE_GOB2_VERSION=2.5.0 -TEST_CONFIGURE([GOB2="$srcdir/t/gob2.sh"]) +TEST_CONFIGURE([FAKE_$2_VERSION=2.5.0 $2="$srcdir/t/$1.sh"]) AT_CHECK_UNQUOTED([cat test], [0], [yes -$srcdir/t/gob2.sh +$srcdir/t/$1.sh ]) -FAKE_GOB2_VERSION=2.1.2 -TEST_CONFIGURE([GOB2="$srcdir/t/gob2.sh"]) +TEST_CONFIGURE([FAKE_$2_VERSION=2.1.2 $2="$srcdir/t/$1.sh"]) AT_CHECK_UNQUOTED([cat test], [0], [no -$srcdir/t/gob2.sh +$srcdir/t/$1.sh ]) -FAKE_GOB2_VERSION=2.1.3 -TEST_CONFIGURE([GOB2="$srcdir/t/gob2.sh"]) +TEST_CONFIGURE([FAKE_$2_VERSION=2.1.3 $2="$srcdir/t/$1.sh"]) AT_CHECK_UNQUOTED([cat test], [0], [yes -$srcdir/t/gob2.sh +$srcdir/t/$1.sh +]) + +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