Paul Eggert wrote: > diff --git a/modules/unitypes-h b/modules/unitypes-h > index faf0d89b6c..b512947c73 100644 > --- a/modules/unitypes-h > +++ b/modules/unitypes-h > @@ -26,8 +26,7 @@ AH_VERBATIM([unitypes_restrict], [ > # define _UC_RESTRICT restrict > # else > # define _UC_RESTRICT > -# endif > -]) > +# endif]) > > Makefile.am: > BUILT_SOURCES += $(LIBUNISTRING_UNITYPES_H) >
I don't like this way of putting a closing ]) on the same line as C code, because in the past I've encountered cases where Autoconf did not add a newline, and the result were invalid C preprocessor expressions. > Likewise, bearing in mind that configure.ac lines will be indented > so such lines containing only '])' should be avoided when they > generate C code. It is gnulib-tool which adds 2 spaces of indentation when copying the contents of the configure.ac part of a module description. We could possibly fix this in gnulib-tool (so that it recognizes AH_VERBATIM, AH_TOP, and AH_BOTTOM invocations specially), but it sounds like overkill for this one AH_VERBATIM invocation that we have. It's simpler to move out this AH_VERBATIM invocation: 2025-04-18 Bruno Haible <br...@clisp.org> unitypes-h: Avoid risky coding pattern. * m4/unitypes_h.m4: New file, based on modules/unitypes-h. * modules/unitypes-h (Files): Add it. (configure.ac): Invoke gl_UNITYPES_H. Remove AH_VERBATIM invocation. diff --git a/m4/unitypes_h.m4 b/m4/unitypes_h.m4 new file mode 100644 index 0000000000..264e61be6c --- /dev/null +++ b/m4/unitypes_h.m4 @@ -0,0 +1,26 @@ +# unitypes_h.m4 +# serial 1 +dnl Copyright (C) 2021-2025 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl This file is offered as-is, without any warranty. + +AC_DEFUN_ONCE([gl_UNITYPES_H], +[ + AH_VERBATIM([unitypes_restrict], [ +/* This definition is a duplicate of the one in unitypes.h. + It is here so that we can cope with an older version of unitypes.h + that does not contain this definition and that is pre-installed among + the public header files. */ +# if defined __restrict \ + || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \ + || __clang_major__ >= 3 +# define _UC_RESTRICT __restrict +# elif 199901L <= __STDC_VERSION__ || defined restrict +# define _UC_RESTRICT restrict +# else +# define _UC_RESTRICT +# endif +]) +]) diff --git a/modules/unitypes-h b/modules/unitypes-h index b512947c73..0d83814c1d 100644 --- a/modules/unitypes-h +++ b/modules/unitypes-h @@ -3,6 +3,7 @@ Base types for Unicode string functions. Files: lib/unitypes.in.h +m4/unitypes_h.m4 m4/libunistring-base.m4 Depends-on: @@ -12,21 +13,7 @@ stdint-h configure.ac: gl_LIBUNISTRING_LIBHEADER([0.9.11], [unitypes.h]) AC_PROG_MKDIR_P - -AH_VERBATIM([unitypes_restrict], [ -/* This definition is a duplicate of the one in unitypes.h. - It is here so that we can cope with an older version of unitypes.h - that does not contain this definition and that is pre-installed among - the public header files. */ -# if defined __restrict \ - || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \ - || __clang_major__ >= 3 -# define _UC_RESTRICT __restrict -# elif 199901L <= __STDC_VERSION__ || defined restrict -# define _UC_RESTRICT restrict -# else -# define _UC_RESTRICT -# endif]) +gl_UNITYPES_H Makefile.am: BUILT_SOURCES += $(LIBUNISTRING_UNITYPES_H)