diff options
author | Zack Weinberg <zackw@panix.com> | 2020-11-09 15:15:23 -0500 |
---|---|---|
committer | Zack Weinberg <zackw@panix.com> | 2020-11-09 15:15:23 -0500 |
commit | 3b411849a0f97d6531d6a671ba5d7bc50e268df1 (patch) | |
tree | 350f84cbf72a9255028df4fbad8e565ae090a847 /lib | |
parent | d1a65dc04301a11b7fe33708489a9ab470cfe55f (diff) | |
download | autoconf-3b411849a0f97d6531d6a671ba5d7bc50e268df1.tar.gz |
m4sh: Require shell to support $(...) command substitution.
As of the 2020-11-07 update, config.sub and config.guess
unconditionally use $(...) command substitution; see
<https://lists.gnu.org/archive/html/config-patches/2020-11/msg00011.html>.
Therefore, add this to the set of required shell features, searched
for by _AS_DETECT_BETTER_SHELL. On a system where /bin/sh doesn’t
support $(...), $CONFIG_SHELL will be set to one that does (and the
primary configure script will be re-executed using that shell).
AC_CANONICAL_* use $CONFIG_SHELL to execute config.guess/sub, so they
will keep working. This also means that configure scripts and
third-party macros that use $(...) will quietly start working
correctly on such ancient systems.
The test code is simple, but sufficient to weed out Solaris 10’s
/bin/sh, which doesn’t support $(...) but *does* support shell
functions.
I’m not going to touch any of the existing uses of `...` command
substitution in Autoconf proper for now, but it might make sense to
bulk upgrade them early in the 2.71 release cycle; if nothing else,
it would remove a major obstacle to running shellcheck over our
scripts.
* lib/m4sugar/m4sh.m4 (_AS_MODERN_CMDSUBST_WORKS): New macro.
(AS_INIT, AS_SHELL_SANITIZE): Call _AS_DETECT_REQUIRED for
_AS_MODERN_CMDSUBST_WORKS.
* NEWS: Mention the requirement for $(...).
Diffstat (limited to 'lib')
-rw-r--r-- | lib/m4sugar/m4sh.m4 | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/lib/m4sugar/m4sh.m4 b/lib/m4sugar/m4sh.m4 index a1c1cd47..8f96eb7b 100644 --- a/lib/m4sugar/m4sh.m4 +++ b/lib/m4sugar/m4sh.m4 @@ -468,6 +468,15 @@ AS_IF([( set x; as_fn_ret_success y && test x = "[$]1" )], [], test x$exitcode = x0[]])# _AS_SHELL_FN_WORK +# _AS_MODERN_CMDSUBST_WORKS +# ------------------------- +# This is a spy to detect "in the wild" shells that do not support +# the newer $(...) form of command substitutions. +m4_define([_AS_MODERN_CMDSUBST_WORKS], +[blah=$(echo $(echo blah)) +test x"$blah" = xblah]) + + # _AS_SHELL_SANITIZE # ------------------ # This is the prolog that is emitted by AS_INIT and AS_INIT_GENERATED; @@ -544,6 +553,7 @@ m4_define([AS_SHELL_SANITIZE], m4_provide_if([AS_INIT], [], [m4_provide([AS_INIT]) _AS_DETECT_REQUIRED([_AS_SHELL_FN_WORK]) +_AS_DETECT_REQUIRED([_AS_MODERN_CMDSUBST_WORKS]) _AS_DETECT_REQUIRED([_AS_TEST_X_WORKS]) _AS_DETECT_BETTER_SHELL _AS_UNSET_PREPARE @@ -2177,6 +2187,7 @@ m4_divert_text([M4SH-INIT-FN], [m4_text_box([M4sh Shell Functions.])]) m4_divert([BODY])dnl m4_text_box([Main body of script.]) _AS_DETECT_REQUIRED([_AS_SHELL_FN_WORK])dnl +_AS_DETECT_REQUIRED([_AS_MODERN_CMDSUBST_WORKS])dnl _AS_DETECT_REQUIRED([_AS_TEST_X_WORKS])dnl AS_REQUIRE([_AS_UNSET_PREPARE], [], [M4SH-INIT-FN])dnl ]) |