[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
M4sh tests 77 and 78 vs /bin/sh -> dash
From: |
Zack Weinberg |
Subject: |
M4sh tests 77 and 78 vs /bin/sh -> dash |
Date: |
Thu, 12 Mar 2020 11:38:46 -0400 |
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
- M4sh tests 77 and 78 vs /bin/sh -> dash,
Zack Weinberg <=
- Re: M4sh tests 77 and 78 vs /bin/sh -> dash, Bob Friesenhahn, 2020/03/12
- Re: M4sh tests 77 and 78 vs /bin/sh -> dash, Zack Weinberg, 2020/03/12
- Re: M4sh tests 77 and 78 vs /bin/sh -> dash, Bob Friesenhahn, 2020/03/12
- Re: M4sh tests 77 and 78 vs /bin/sh -> dash, Andrew W. Nosenko, 2020/03/12
- Re: M4sh tests 77 and 78 vs /bin/sh -> dash, Sébastien Hinderer, 2020/03/13
- Re: M4sh tests 77 and 78 vs /bin/sh -> dash, Bob Friesenhahn, 2020/03/13
- Re: M4sh tests 77 and 78 vs /bin/sh -> dash, Bob Friesenhahn, 2020/03/13
- Re: M4sh tests 77 and 78 vs /bin/sh -> dash, Michael Orlitzky, 2020/03/13
- Re: M4sh tests 77 and 78 vs /bin/sh -> dash, Bob Friesenhahn, 2020/03/13
- Re: M4sh tests 77 and 78 vs /bin/sh -> dash, Sébastien Hinderer, 2020/03/13