Subject: Re: bug#72267: automake 1.17 issue with new AM_SILENT_RULES

From: Nick Bowler <[email-masked]>
Date: Wed, 24 Jul 2024 22:36:54 -0400

On 2024-07-23 13:23, Francis Dupont wrote:
> I use homebrew on macOS Sonoma 14.5. This package system
> installed the version 1.17 automake (I use a binary package
> but the source one refers to this metadata:
>   desc "Tool for generating GNU Standards-compliant Makefiles"
>   homepage "https://www.gnu.org/software/automake/"
>   url "https://ftp.gnu.org/gnu/automake/automake-1.17.tar.xz"
>   mirror "https://ftpmirror.gnu.org/automake/automake-1.17.tar.xz"
>   sha256 "8920c1fc411e13b90bf704ef9db6f29d540e76d232cb3b2c9f4dc4cc599bd990"
>   license "GPL-2.0-or-later"
> 
> My problem is simple: configure generated by autoreconf includes
> this line:
> AM_DEFAULT_VERBOSITY=0ac_config_headers="$ac_config_headers config.h"
> 
> i.e. the last macro generating AM_DEFAULT_VERBOSITY setting
> misses to add a newline after its expansion.
> 
> I can propose an easy patch which fixes the problem for me:
> at the end of the silent.m4 file (m4 directory in sources
> but installed at another location my homebrew add a newline
> in the AM_SILENT_RULES macro setting AM_DEFAULT_VERBOSITY:
> 
> --- /usr/local/Cellar/automake/1.17/share/aclocal-1.17/silent.m4-orig-nl	2024-07-12 07:21:44
> +++ /usr/local/Cellar/automake/1.17/share/aclocal-1.17/silent.m4		2024-07-23 07:40:50
> @@ -68,4 +68,5 @@
>  # empty being verbose).
>  AC_DEFUN([AM_SILENT_RULES],
>  [AC_REQUIRE([_AM_SILENT_RULES])
> -AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1])])
> +AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1])
> +])

As far as I can see nothing in Automake expands AM_SILENT_RULES so
there must be an expansion written somewhere in configure.ac which is
producing the problematic construct.

The usual convention for an autoconf macro that ends in a shell command
is not to include a newline.  The newline present where a macro is
expanded serves to terminate the command.  Otherwise we'd have to write
dnl after basiclaly everything just to avoid unneeded newlines.

However, it is true that this is a change in behaviour.  Automake 1.16.5
didn't follow this convention and it does produce a newline at the end
of the AM_SILENT_RULES expansion.

So before, if you wrote something like:

  AM_SILENT_RULES([no])something else without intervening newline

it would work before (and avoid an extra newline) but now indeed it
probably will not work.

If possible, it is probably a good idea to change whatever package was
broken by this.  But at the same time, it is probably not a big deal to
restore the extra newline in Automake.  But maybe use m4_newline() to
make it extremely obvious that it was put there on purpose.

Cheers,
  Nick