autoconf
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]