Paul Eggert <[email protected]> writes:

> On 2026-01-27 11:21, Collin Funk wrote:
>
>> [1] https://lists.gnu.org/archive/html/autoconf-patches/2025-10/msg00002.html
>
> Thanks for reminding us. My intuition is that it's better to pacify
> -Wtrailing-whitespace by removing the trailing whitespace, instead of
> appending " /**/", so I installed the attached instead.
>
> The only place where removing trailing white space is arguably wrong
> is a line like "#define ABC \ ", which is so deliberately tricky (and
> some C compilers, as I vaguely recall, trim that trailing whitespace
> anyway, and the C standard allows this!) that we probably shouldn't
> support it anyway.

I didn't test your patch, but it looks good to me.

Thanks,
Collin

>
> From 32aea018e70f1beca8c07c480e4c2596d1f5c8df Mon Sep 17 00:00:00 2001
> From: Paul Eggert <[email protected]>
> Date: Tue, 27 Jan 2026 12:41:00 -0800
> Subject: [PATCH] Avoid trailing whitespace in config.h
>
> Problem (and earlier patch) reported by Collin Funk in:
> https://lists.gnu.org/archive/html/autoconf-patches/2025-10/msg00002.html
> * NEWS: Mention this.
> * lib/autoconf/status.m4 (_AC_OUTPUT_HEADERS_PREPARE):
> Omit trailing white space from C macro definitions.
> * tests/torture.at (No trailing white space in macro definitions):
> New test.
> ---
>  NEWS                   |  3 +++
>  lib/autoconf/status.m4 |  6 +++++-
>  tests/torture.at       | 45 ++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 53 insertions(+), 1 deletion(-)
>
> diff --git a/NEWS b/NEWS
> index 3ebeabae..da40e8a4 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -43,6 +43,9 @@ GNU Autoconf NEWS - User visible changes.
>  *** AC_DEFINE_UNQUOTED no longer mishandles double-quotes inside $(...)
>    and ${...}.
>  
> +*** AC_DEFINE and similar macros no longer emit trailing whitespace.
> +  This pacifies the -Wtrailing-whitespace introduced in GCC 15.
> +
>  *** AC_FUNC_STRNLEN now detects Android 5.0's broken strnlen.
>  
>  *** AC_PROG_OBJC now finds the GNU Objective-C compiler, as packaged in
> diff --git a/lib/autoconf/status.m4 b/lib/autoconf/status.m4
> index 3836a453..472c1e6c 100644
> --- a/lib/autoconf/status.m4
> +++ b/lib/autoconf/status.m4
> @@ -838,8 +838,12 @@ cat >>"$CONFIG_STATUS" <<_ACEOF || ac_write_fail=1
>    macro = mac2[1]
>    prefix = substr(line, 1, index(line, defundef) - 1)
>    if (D_is_set[macro]) {
> +    suffix = P[macro] D[macro]
> +    while (suffix ~ /[\t ]$/) {
> +      suffix = substr(suffix, 1, length(suffix) - 1)
> +    }
>      # Preserve the white space surrounding the "#".
> -    print prefix "define", macro P[macro] D[macro]
> +    print prefix "define", macro suffix
>      next
>    } else {
>      # Replace #undef with comments.  This is necessary, for example,
> diff --git a/tests/torture.at b/tests/torture.at
> index 3b1d9f08..0332a08f 100644
> --- a/tests/torture.at
> +++ b/tests/torture.at
> @@ -1029,6 +1029,51 @@ X@file@
>  done
>  AT_CLEANUP
>  
> +## ---------------------------------------------- ##
> +## No trailing white space in macro definitions.  ##
> +## ---------------------------------------------- ##
> +AT_SETUP([No trailing white space in macro definitions])
> +AT_KEYWORDS([AC@&t@_DEFINE AC@&t@_DEFINE_UNQUOTED])
> +
> +AT_DATA([config.hin], [
> +#undef EMPTY
> +#undef SPACE
> +#undef TAB
> +#undef LEADING_SPACES
> +#undef LEADING_TABS
> +])
> +
> +AT_DATA([configure.ac],
> +[[AC_INIT
> +AC_CONFIG_HEADERS([config.h:config.hin])
> +empty=
> +space=' '
> +tab='        '
> +leading_spaces='  a'
> +leading_tabs='               a'
> +AC_DEFINE_UNQUOTED([EMPTY], [$empty], [empty])
> +AC_DEFINE_UNQUOTED([SPACE], [$space], [space])
> +AC_DEFINE_UNQUOTED([TAB], [$tab], [tab])
> +AC_DEFINE_UNQUOTED([LEADING_SPACES], [$leading_spaces], [leading spaces])
> +AC_DEFINE_UNQUOTED([LEADING_TABS], [$leading_tabs], [leading tabs])
> +AC_OUTPUT
> +]])
> +
> +AT_CHECK_AUTOCONF
> +AT_CHECK_CONFIGURE
> +
> +AT_DATA([expout],
> +[[/* config.h.  Generated from config.hin by configure.  */
> +
> +#define EMPTY
> +#define SPACE
> +#define TAB
> +#define LEADING_SPACES a
> +#define LEADING_TABS a
> +]])
> +AT_CHECK([cat config.h], 0, expout)
> +
> +AT_CLEANUP
>  
>  ## ---------------------- ##
>  ## Substitute a newline.  ##

Reply via email to