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. 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 AT_DATA([test.in], [[@HAVE_$2@ @$2@ ]]) # Unversioned tests 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([$[]1 left behind by [D@@&t@&t@X_PROG_$2]]) 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], [$1]) TEST_CONFIGURE AT_CHECK_UNQUOTED([cat test], [0], [yes $expected ]) PATH=$save_PATH # Check the search via user override TEST_CONFIGURE([$2="$srcdir/t/$1.sh"]) AT_CHECK_UNQUOTED([cat test], [0], [yes $srcdir/t/$1.sh ]) # Check that a bogus program doesn't come back as valid. TEST_CONFIGURE([$2=true]) AT_CHECK_UNQUOTED([cat test], [0], [no true ]) # min-version tests mv configure.ac configure.old sed ['s/\(DX_PROG_$2(\)\[\]/\1[2.1.3]/'] configure.old >configure.ac TEST_AUTORECONF TEST_CONFIGURE([FAKE_$2_VERSION=2.0.0 $2="$srcdir/t/$1.sh"]) AT_CHECK_UNQUOTED([cat test], [0], [no $srcdir/t/$1.sh ]) TEST_CONFIGURE([FAKE_$2_VERSION=3.0.0 $2="$srcdir/t/$1.sh"]) AT_CHECK_UNQUOTED([cat test], [0], [yes $srcdir/t/$1.sh ]) TEST_CONFIGURE([FAKE_$2_VERSION=2.5.0 $2="$srcdir/t/$1.sh"]) AT_CHECK_UNQUOTED([cat test], [0], [yes $srcdir/t/$1.sh ]) TEST_CONFIGURE([FAKE_$2_VERSION=2.1.2 $2="$srcdir/t/$1.sh"]) AT_CHECK_UNQUOTED([cat test], [0], [no $srcdir/t/$1.sh ]) TEST_CONFIGURE([FAKE_$2_VERSION=2.1.3 $2="$srcdir/t/$1.sh"]) AT_CHECK_UNQUOTED([cat test], [0], [yes $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