In https://lists.gnu.org/archive/html/autoconf/2020-03/msg00003.html I said that tests 77 and 78 fail when run from within `make distcheck` with /bin/sh being dash. I haven’t yet completely solved this bug but I now know why it wasn’t happening on a regular `make check` for me.
To trigger the bug, the testsuite driver script needs to be run by dash. If you manually invoke tests/testsuite, it’s easy to see the failures: ``` /bin/dash ./tests/testsuite -C tests 77 78 ## --------------------------------------- ## ## GNU Autoconf 2.69.205-8dcc5 test suite. ## ## --------------------------------------- ## M4sh. 77: Forced re-exec with CONFIG_SHELL FAILED (m4sh.at:68) 78: Configure re-execs self with CONFIG_SHELL FAILED (m4sh.at:132) ``` For a manual invocation like this, it doesn’t matter what `SHELL` or `CONFIG_SHELL` are set to. However, you won’t see the failure on a `make check` unless `config.status` was generated *from scratch* by trunk autoconf. `make distcheck` does that, but the sequence suggested in README-hacking, ``` $ autoreconf -vi $ ./configure $ make $ ( PATH=`pwd`/tests:$PATH; autoreconf -vi ) $ make check ``` does not, assuming the stock `autoreconf` is from Autoconf 2.69. This is because `make check` in this sequence re-runs configure via `config.status --recheck`, which doesn’t recalculate *everything*. In particular, the value of @SHELL@ will remain at whatever the first run of ./configure picked. @SHELL@ controls which shell is used to run tests/testsuite from `make check`. And, on a system where /bin/sh is dash (and /bin/bash also exists), autoconf 2.69’s `_AS_DETECT_BETTER_SHELL` picks /bin/bash for @SHELL@, but autoconf trunk’s `_AS_DETECT_BETTER_SHELL` picks /bin/sh. I don’t yet know why the testsuite driver script malfunctions in this particular way when run by dash. I also don’t yet know why trunk `_AS_DETECT_BETTER_SHELL` winds up setting SHELL to /bin/sh but autoconf 2.69’s `_AS_DETECT_BETTER_SHELL` sets it to /bin/bash. For right now, though, I propose the following patch to the documentation: ``` diff --git a/README-hacking b/README-hacking index abf841b9..ab1cf679 100644 --- a/README-hacking +++ b/README-hacking @@ -81,6 +81,8 @@ generated files are regenerated using the tools just built by "make" $ ./configure $ make $ ( PATH=`pwd`/tests:$PATH; autoreconf -vi ) + $ make distclean + $ ./configure $ make check At this point, there should be no difference between your local copy, ``` zw