* stddef: Define 'unreachable', for ISO C 23 compliance
@ 2023-03-16 12:48 Bruno Haible
2023-04-10 14:40 ` Pádraig Brady
0 siblings, 1 reply; 7+ messages in thread
From: Bruno Haible @ 2023-03-16 12:48 UTC (permalink / raw)
To: bug-gnulib
ISO C 23 § 7.21.1 requires that <stddef.h> implements 'unreachable'.
This patch does it.
2023-03-16 Bruno Haible <bruno@clisp.org>
stddef: Define 'unreachable', for ISO C 23 compliance.
* lib/verify.h (_GL_HAS_BUILTIN_UNREACHABLE): Don't define if already
defined.
* lib/stddef.in.h (_GL_HAS_BUILTIN_UNREACHABLE, unreachable): New
macros.
(abort): Declare if needed for unreachable.
* m4/stddef_h.m4 (gl_STDDEF_H): Test for unreachable.
* tests/test-stddef.c (test_unreachable_optimization,
test_unreachable_noreturn): New functions, based on tests/test-verify.c.
* doc/posix-headers/stddef.texi: Mention unreachable.
diff --git a/doc/posix-headers/stddef.texi b/doc/posix-headers/stddef.texi
index e240f93363..33ad48244c 100644
--- a/doc/posix-headers/stddef.texi
+++ b/doc/posix-headers/stddef.texi
@@ -7,6 +7,10 @@
Portability problems fixed by Gnulib:
@itemize
+@item
+Some platforms fail to provide @code{unreachable}, which was added in C23:
+GCC 13, clang 15, AIX with xlc 12.1, Solaris with Sun C 5.15, and others.
+
@item
Some platforms fail to provide @code{max_align_t}, which was added in C11:
NetBSD 8.0, Solaris 11.0, and others.
diff --git a/lib/stddef.in.h b/lib/stddef.in.h
index 6eadcc3d5a..9e9d4b7cc6 100644
--- a/lib/stddef.in.h
+++ b/lib/stddef.in.h
@@ -18,7 +18,7 @@
/* Written by Eric Blake. */
/*
- * POSIX 2008 <stddef.h> for platforms that have issues.
+ * POSIX 2008 and ISO C 23 <stddef.h> for platforms that have issues.
* <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stddef.h.html>
*/
@@ -142,6 +142,43 @@ typedef union
# endif
#endif
+/* ISO C 23 § 7.21.1 The unreachable macro */
+#ifndef unreachable
+
+/* Code borrowed from verify.h. */
+# ifndef _GL_HAS_BUILTIN_UNREACHABLE
+# if defined __clang_major__ && __clang_major__ < 5
+# define _GL_HAS_BUILTIN_UNREACHABLE 0
+# elif 4 < __GNUC__ + (5 <= __GNUC_MINOR__)
+# define _GL_HAS_BUILTIN_UNREACHABLE 1
+# elif defined __has_builtin
+# define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable)
+# else
+# define _GL_HAS_BUILTIN_UNREACHABLE 0
+# endif
+# endif
+
+# if _GL_HAS_BUILTIN_UNREACHABLE
+# define unreachable() __builtin_unreachable ()
+# elif 1200 <= _MSC_VER
+# define unreachable() __assume (0)
+# else
+/* Declare abort(), without including <stdlib.h>. */
+extern
+# if defined __cplusplus
+"C"
+# endif
+_Noreturn
+void abort (void)
+# if defined __cplusplus && (__GLIBC__ >= 2)
+throw ()
+# endif
+;
+# define unreachable() abort ()
+# endif
+
+#endif
+
# endif /* _@GUARD_PREFIX@_STDDEF_H */
# endif /* _@GUARD_PREFIX@_STDDEF_H */
#endif /* __need_XXX */
diff --git a/lib/verify.h b/lib/verify.h
index f0b3fc5851..c700243209 100644
--- a/lib/verify.h
+++ b/lib/verify.h
@@ -285,14 +285,16 @@ template <int w>
# define _GL_HAS_BUILTIN_TRAP 0
#endif
-#if defined __clang_major__ && __clang_major__ < 5
-# define _GL_HAS_BUILTIN_UNREACHABLE 0
-#elif 4 < __GNUC__ + (5 <= __GNUC_MINOR__)
-# define _GL_HAS_BUILTIN_UNREACHABLE 1
-#elif defined __has_builtin
-# define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable)
-#else
-# define _GL_HAS_BUILTIN_UNREACHABLE 0
+#ifndef _GL_HAS_BUILTIN_UNREACHABLE
+# if defined __clang_major__ && __clang_major__ < 5
+# define _GL_HAS_BUILTIN_UNREACHABLE 0
+# elif 4 < __GNUC__ + (5 <= __GNUC_MINOR__)
+# define _GL_HAS_BUILTIN_UNREACHABLE 1
+# elif defined __has_builtin
+# define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable)
+# else
+# define _GL_HAS_BUILTIN_UNREACHABLE 0
+# endif
#endif
/* Each of these macros verifies that its argument R is nonzero. To
diff --git a/m4/stddef_h.m4 b/m4/stddef_h.m4
index a2322ebb7e..aa012219fc 100644
--- a/m4/stddef_h.m4
+++ b/m4/stddef_h.m4
@@ -1,4 +1,4 @@
-# stddef_h.m4 serial 13
+# stddef_h.m4 serial 14
dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -68,6 +68,21 @@ AC_DEFUN_ONCE([gl_STDDEF_H]
GL_GENERATE_STDDEF_H=true
fi
+ AC_CACHE_CHECK([for unreachable],
+ [gl_cv_func_unreachable],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stddef.h>
+ ]],
+ [[unreachable ();
+ ]])],
+ [gl_cv_func_unreachable=yes],
+ [gl_cv_func_unreachable=no])
+ ])
+ if test $gl_cv_func_unreachable = no; then
+ GL_GENERATE_STDDEF_H=true
+ fi
+
if $GL_GENERATE_STDDEF_H; then
gl_NEXT_HEADERS([stddef.h])
fi
diff --git a/tests/test-stddef.c b/tests/test-stddef.c
index 1d674b3cea..3ec00a8f25 100644
--- a/tests/test-stddef.c
+++ b/tests/test-stddef.c
@@ -68,6 +68,30 @@ static_assert (__alignof__ (wchar_t) <= __alignof__ (max_align_t));
static_assert (__alignof__ (struct d) <= __alignof__ (max_align_t));
#endif
+int test_unreachable_optimization (int x);
+_Noreturn void test_unreachable_noreturn (void);
+
+int
+test_unreachable_optimization (int x)
+{
+ /* Check that the compiler uses 'unreachable' for optimization.
+ This function, when compiled with optimization, should have code
+ equivalent to
+ return x + 3;
+ Use 'objdump --disassemble test-stddef.o' to verify this. */
+ if (x < 4)
+ unreachable ();
+ return (x > 1 ? x + 3 : 2 * x + 10);
+}
+
+_Noreturn void
+test_unreachable_noreturn (void)
+{
+ /* Check that the compiler's data-flow analysis recognizes 'unreachable ()'.
+ This function should not elicit a warning. */
+ unreachable ();
+}
+
int
main (void)
{
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: stddef: Define 'unreachable', for ISO C 23 compliance
2023-03-16 12:48 stddef: Define 'unreachable', for ISO C 23 compliance Bruno Haible
@ 2023-04-10 14:40 ` Pádraig Brady
2023-04-10 17:46 ` Bruno Haible
0 siblings, 1 reply; 7+ messages in thread
From: Pádraig Brady @ 2023-04-10 14:40 UTC (permalink / raw)
To: Bruno Haible, bug-gnulib
On 16/03/2023 12:48, Bruno Haible wrote:
> ISO C 23 § 7.21.1 requires that <stddef.h> implements 'unreachable'.
>
> This patch does it.
>
>
> 2023-03-16 Bruno Haible <bruno@clisp.org>
>
> stddef: Define 'unreachable', for ISO C 23 compliance.
> * lib/verify.h (_GL_HAS_BUILTIN_UNREACHABLE): Don't define if already
> defined.
> * lib/stddef.in.h (_GL_HAS_BUILTIN_UNREACHABLE, unreachable): New
> macros.
> (abort): Declare if needed for unreachable.
> * m4/stddef_h.m4 (gl_STDDEF_H): Test for unreachable.
> * tests/test-stddef.c (test_unreachable_optimization,
> test_unreachable_noreturn): New functions, based on tests/test-verify.c.
> * doc/posix-headers/stddef.texi: Mention unreachable.
>
> diff --git a/doc/posix-headers/stddef.texi b/doc/posix-headers/stddef.texi
> index e240f93363..33ad48244c 100644
> --- a/doc/posix-headers/stddef.texi
> +++ b/doc/posix-headers/stddef.texi
> @@ -7,6 +7,10 @@
>
> Portability problems fixed by Gnulib:
> @itemize
> +@item
> +Some platforms fail to provide @code{unreachable}, which was added in C23:
> +GCC 13, clang 15, AIX with xlc 12.1, Solaris with Sun C 5.15, and others.
> +
> @item
> Some platforms fail to provide @code{max_align_t}, which was added in C11:
> NetBSD 8.0, Solaris 11.0, and others.
> diff --git a/lib/stddef.in.h b/lib/stddef.in.h
> index 6eadcc3d5a..9e9d4b7cc6 100644
> --- a/lib/stddef.in.h
> +++ b/lib/stddef.in.h
> @@ -18,7 +18,7 @@
> /* Written by Eric Blake. */
>
> /*
> - * POSIX 2008 <stddef.h> for platforms that have issues.
> + * POSIX 2008 and ISO C 23 <stddef.h> for platforms that have issues.
> * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stddef.h.html>
> */
>
> @@ -142,6 +142,43 @@ typedef union
> # endif
> #endif
>
> +/* ISO C 23 § 7.21.1 The unreachable macro */
> +#ifndef unreachable
> +
> +/* Code borrowed from verify.h. */
> +# ifndef _GL_HAS_BUILTIN_UNREACHABLE
> +# if defined __clang_major__ && __clang_major__ < 5
> +# define _GL_HAS_BUILTIN_UNREACHABLE 0
> +# elif 4 < __GNUC__ + (5 <= __GNUC_MINOR__)
> +# define _GL_HAS_BUILTIN_UNREACHABLE 1
> +# elif defined __has_builtin
> +# define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable)
> +# else
> +# define _GL_HAS_BUILTIN_UNREACHABLE 0
> +# endif
> +# endif
> +
> +# if _GL_HAS_BUILTIN_UNREACHABLE
> +# define unreachable() __builtin_unreachable ()
> +# elif 1200 <= _MSC_VER
> +# define unreachable() __assume (0)
> +# else
> +/* Declare abort(), without including <stdlib.h>. */
> +extern
> +# if defined __cplusplus
> +"C"
> +# endif
> +_Noreturn
The above _Noreturn is causing a build failure on Solaris 10 on Sparc.
From config.log:
$ gcc --version
$ gcc (GCC) 3.4.3 (csl-sol210-3_4-branch+sol_rpath)
> +void abort (void)
> +# if defined __cplusplus && (__GLIBC__ >= 2)
> +throw ()
> +# endif
> +;
> +# define unreachable() abort ()
> +# endif
> +
> +#endif
> +
> # endif /* _@GUARD_PREFIX@_STDDEF_H */
> # endif /* _@GUARD_PREFIX@_STDDEF_H */
> #endif /* __need_XXX */
Commenting out that _Noreturn allows the build to complete.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: stddef: Define 'unreachable', for ISO C 23 compliance
2023-04-10 14:40 ` Pádraig Brady
@ 2023-04-10 17:46 ` Bruno Haible
2023-04-10 18:05 ` Pádraig Brady
0 siblings, 1 reply; 7+ messages in thread
From: Bruno Haible @ 2023-04-10 17:46 UTC (permalink / raw)
To: bug-gnulib, Pádraig Brady
Hi Pádraig,
> > +/* Declare abort(), without including <stdlib.h>. */
> > +extern
> > +# if defined __cplusplus
> > +"C"
> > +# endif
> > +_Noreturn
>
> The above _Noreturn is causing a build failure on Solaris 10 on Sparc.
A build failure of which package, which version?
Can you please show the tail of the output of "make V=1"? I need to
see whether it's a warning or an error (since I guess that you often
compile with -Werror).
> From config.log:
>
> $ gcc --version
> $ gcc (GCC) 3.4.3 (csl-sol210-3_4-branch+sol_rpath)
Is this on a publicly accessible machine (e.g. in the GCC compile farm)?
If so, that would speed up my reproduction.
> Commenting out that _Noreturn allows the build to complete.
Thanks for the hint; I'll consider this after analyzing.
Bruno
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: stddef: Define 'unreachable', for ISO C 23 compliance
2023-04-10 17:46 ` Bruno Haible
@ 2023-04-10 18:05 ` Pádraig Brady
2023-04-10 18:15 ` Pádraig Brady
0 siblings, 1 reply; 7+ messages in thread
From: Pádraig Brady @ 2023-04-10 18:05 UTC (permalink / raw)
To: Bruno Haible, bug-gnulib
On 10/04/2023 18:46, Bruno Haible wrote:
> Hi Pádraig,
>
>>> +/* Declare abort(), without including <stdlib.h>. */
>>> +extern
>>> +# if defined __cplusplus
>>> +"C"
>>> +# endif
>>> +_Noreturn
>>
>> The above _Noreturn is causing a build failure on Solaris 10 on Sparc.
>
> A build failure of which package, which version?
>
> Can you please show the tail of the output of "make V=1"? I need to
> see whether it's a warning or an error (since I guess that you often
> compile with -Werror).
>
>> From config.log:
>>
>> $ gcc --version
>> $ gcc (GCC) 3.4.3 (csl-sol210-3_4-branch+sol_rpath)
>
> Is this on a publicly accessible machine (e.g. in the GCC compile farm)?
> If so, that would speed up my reproduction.
>
>> Commenting out that _Noreturn allows the build to complete.
>
> Thanks for the hint; I'll consider this after analyzing.
Sorry for the terse info.
This is for the latest coreutils snapshot on a Solaris 10 machine only I have access to.
So a dist tarball, so an error not a warning.
https://www.pixelbeat.org/cu/coreutils-ss.tar.xz
End of build output is:
CC src/cksum-crctab.o
In file included from ./lib/time.h:50,
from /usr/include/sys/time.h:421,
from ./lib/sys/time.h:39,
from /usr/include/sys/select.h:23,
from ./lib/sys/select.h:36,
from /usr/sfw/lib/gcc/sparc-sun-solaris2.10/3.4.3/include/sys/types.h:631,
from ./lib/sys/types.h:39,
from ./lib/stdint.h:105,
from src/crctab.c:1:
./lib/stddef.h:175: error: syntax error before "void"
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: stddef: Define 'unreachable', for ISO C 23 compliance
2023-04-10 18:05 ` Pádraig Brady
@ 2023-04-10 18:15 ` Pádraig Brady
2023-04-12 17:51 ` Add more reminders to include <config.h> Bruno Haible
0 siblings, 1 reply; 7+ messages in thread
From: Pádraig Brady @ 2023-04-10 18:15 UTC (permalink / raw)
To: Bruno Haible, bug-gnulib
On 10/04/2023 19:05, Pádraig Brady wrote:
> On 10/04/2023 18:46, Bruno Haible wrote:
>> Hi Pádraig,
>>
>>>> +/* Declare abort(), without including <stdlib.h>. */
>>>> +extern
>>>> +# if defined __cplusplus
>>>> +"C"
>>>> +# endif
>>>> +_Noreturn
>>>
>>> The above _Noreturn is causing a build failure on Solaris 10 on Sparc.
>>
>> A build failure of which package, which version?
>>
>> Can you please show the tail of the output of "make V=1"? I need to
>> see whether it's a warning or an error (since I guess that you often
>> compile with -Werror).
>>
>>> From config.log:
>>>
>>> $ gcc --version
>>> $ gcc (GCC) 3.4.3 (csl-sol210-3_4-branch+sol_rpath)
>>
>> Is this on a publicly accessible machine (e.g. in the GCC compile farm)?
>> If so, that would speed up my reproduction.
>>
>>> Commenting out that _Noreturn allows the build to complete.
>>
>> Thanks for the hint; I'll consider this after analyzing.
>
> Sorry for the terse info.
> This is for the latest coreutils snapshot on a Solaris 10 machine only I have access to.
> So a dist tarball, so an error not a warning.
> https://www.pixelbeat.org/cu/coreutils-ss.tar.xz
>
> End of build output is:
>
> CC src/cksum-crctab.o
> In file included from ./lib/time.h:50,
> from /usr/include/sys/time.h:421,
> from ./lib/sys/time.h:39,
> from /usr/include/sys/select.h:23,
> from ./lib/sys/select.h:36,
> from /usr/sfw/lib/gcc/sparc-sun-solaris2.10/3.4.3/include/sys/types.h:631,
> from ./lib/sys/types.h:39,
> from ./lib/stdint.h:105,
> from src/crctab.c:1:
> ./lib/stddef.h:175: error: syntax error before "void"
Ah, this isn't a gnulib issue.
crctab.c in coreutils didn't include <config.h>
Sorry for the noise.
Pádraig
^ permalink raw reply [flat|nested] 7+ messages in thread
* Add more reminders to include <config.h>
2023-04-10 18:15 ` Pádraig Brady
@ 2023-04-12 17:51 ` Bruno Haible
2023-04-13 12:42 ` Pádraig Brady
0 siblings, 1 reply; 7+ messages in thread
From: Bruno Haible @ 2023-04-12 17:51 UTC (permalink / raw)
To: bug-gnulib, Pádraig Brady
[-- Attachment #1: Type: text/plain, Size: 8354 bytes --]
Pádraig Brady wrote:
> > CC src/cksum-crctab.o
> > In file included from ./lib/time.h:50,
> > from /usr/include/sys/time.h:421,
> > from ./lib/sys/time.h:39,
> > from /usr/include/sys/select.h:23,
> > from ./lib/sys/select.h:36,
> > from /usr/sfw/lib/gcc/sparc-sun-solaris2.10/3.4.3/include/sys/types.h:631,
> > from ./lib/sys/types.h:39,
> > from ./lib/stdint.h:105,
> > from src/crctab.c:1:
> > ./lib/stddef.h:175: error: syntax error before "void"
>
> Ah, this isn't a gnulib issue.
> crctab.c in coreutils didn't include <config.h>
While we document that #include <config.h> is a necessity, in
<https://www.gnu.org/software/gnulib/manual/html_node/Source-changes.html>,
we don't enforce it well.
It would have been better if, instead of getting a syntax error,
you would have gotten an error "Please include config.h first.".
We already have such errors in a few places, but apparently not in enough
places.
With the attached patch, you would have gotten an error
"Please include config.h first."
from
- the included lib/sys/select.h,
- the included lib/sys/time.h,
- the included lib/time.h,
- the included lib/stddef.h
on that particular platform.
It is well possible — and even the intention — that this patch causes
compilation errors in packages that before compiled fine, on a particular
platform. It will force the package maintainers to add '#include <config.h>'
in some (hopefully most) of the missing places and thus increase the
portability, i.e. reduce the risk of other platform-related compilation
errors.
2023-04-12 Bruno Haible <bruno@clisp.org>
Add more reminders to include <config.h>.
* m4/gnulib-common.m4 (gl_COMMON): In config.h, define
_GL_CONFIG_H_INCLUDED.
* lib/acl-internal.h: Test _GL_CONFIG_H_INCLUDED instead of
_GL_INLINE_HEADER_BEGIN.
* lib/alignalloc.h: Likewise.
* lib/argp-fmtstream.h: Likewise.
* lib/argp.h: Likewise.
* lib/binary-io.h: Likewise.
* lib/bitrotate.h: Likewise.
* lib/c-ctype.h: Likewise.
* lib/count-leading-zeros.h: Likewise.
* lib/count-one-bits.h: Likewise.
* lib/count-trailing-zeros.h: Likewise.
* lib/eealloc.h: Likewise.
* lib/execinfo.in.h: Likewise.
* lib/gethrxtime.h: Likewise.
* lib/gl_list.h: Likewise.
* lib/gl_map.h: Likewise.
* lib/gl_omap.h: Likewise.
* lib/gl_openssl.h: Likewise.
* lib/gl_oset.h: Likewise.
* lib/gl_set.h: Likewise.
* lib/gl_xlist.h: Likewise.
* lib/gl_xmap.h: Likewise.
* lib/gl_xomap.h: Likewise.
* lib/gl_xoset.h: Likewise.
* lib/gl_xset.h: Likewise.
* lib/gl_xsublist.h: Likewise.
* lib/glthread/cond.h: Likewise.
* lib/hamt.h: Likewise.
* lib/ialloc.h: Likewise.
* lib/math.in.h: Likewise.
* lib/mbchar.h: Likewise.
* lib/mbfile.h: Likewise.
* lib/mbiter.h: Likewise.
* lib/mbuiter.h: Likewise.
* lib/openat.h: Likewise.
* lib/pipe-filter-aux.h: Likewise.
* lib/priv-set.h: Likewise.
* lib/safe-alloc.h: Likewise.
* lib/savewd.h: Likewise.
* lib/se-context.in.h: Likewise.
* lib/se-label.in.h: Likewise.
* lib/se-selinux.in.h: Likewise.
* lib/sig-handler.h: Likewise.
* lib/stat-time.h: Likewise.
* lib/string-desc-quotearg.h: Likewise.
* lib/string-desc.h: Likewise.
* lib/sys_socket.in.h: Likewise.
* lib/timespec.h: Likewise.
* lib/u64.h: Likewise.
* lib/uchar.in.h: Likewise.
* lib/unistd.in.h: Likewise.
* lib/utimens.h: Likewise.
* lib/wctype.in.h: Likewise.
* lib/xalloc.h: Likewise.
* lib/xbinary-io.h: Likewise.
* lib/xsize.h: Likewise.
* lib/xstring-desc.h: Likewise.
* lib/xtime.h: Likewise.
* lib/acl.h: Check that config.h was already included.
* lib/alignof.h: Likewise.
* lib/argmatch.h: Likewise.
* lib/argv-iter.h: Likewise.
* lib/arpa_inet.in.h: Likewise.
* lib/attribute.h: Likewise.
* lib/backupfile.h: Likewise.
* lib/base32.h: Likewise.
* lib/base64.h: Likewise.
* lib/basename-lgpl.h: Likewise.
* lib/bitset.h: Likewise.
* lib/bitsetv.h: Likewise.
* lib/c-snprintf.h: Likewise.
* lib/c-stack.h: Likewise.
* lib/c-strcase.h: Likewise.
* lib/c-vasnprintf.h: Likewise.
* lib/c-vasprintf.h: Likewise.
* lib/c-vsnprintf.h: Likewise.
* lib/c-xvasprintf.h: Likewise.
* lib/canon-host.h: Likewise.
* lib/canonicalize.h: Likewise.
* lib/clean-temp.h: Likewise.
* lib/concat-filename.h: Likewise.
* lib/ctype.in.h: Likewise.
* lib/dfa.h: Likewise.
* lib/di-set.h: Likewise.
* lib/dirent-safer.h: Likewise.
* lib/dirent.in.h: Likewise.
* lib/dirname.h: Likewise.
* lib/eloop-threshold.h: Likewise.
* lib/error.in.h: Likewise.
* lib/exclude.h: Likewise.
* lib/fatal-signal.h: Likewise.
* lib/fcntl.in.h: Likewise.
* lib/file-type.h: Likewise.
* lib/filenamecat.h: Likewise.
* lib/filevercmp.h: Likewise.
* lib/flexmember.h: Likewise.
* lib/fnmatch.in.h: Likewise.
* lib/fpending.h: Likewise.
* lib/freadable.h: Likewise.
* lib/freadahead.h: Likewise.
* lib/freading.h: Likewise.
* lib/fts_.h: Likewise.
* lib/fwritable.h: Likewise.
* lib/fwriting.h: Likewise.
* lib/gc.h: Likewise.
* lib/get_progname_of.h: Likewise.
* lib/glob.in.h: Likewise.
* lib/glthread/thread.h: Likewise.
* lib/hash-pjw-bare.h: Likewise.
* lib/hash-pjw.h: Likewise.
* lib/hash-triple.h: Likewise.
* lib/hash.h: Likewise.
* lib/i-ring.h: Likewise.
* lib/iconv.in.h: Likewise.
* lib/ino-map.h: Likewise.
* lib/inttostr.h: Likewise.
* lib/inttypes.in.h: Likewise.
* lib/javaversion.h: Likewise.
* lib/langinfo.in.h: Likewise.
* lib/locale.in.h: Likewise.
* lib/localename.h: Likewise.
* lib/malloc.in.h: Likewise.
* lib/malloca.h: Likewise.
* lib/memcasecmp.h: Likewise.
* lib/memchr2.h: Likewise.
* lib/memcmp2.h: Likewise.
* lib/modechange.h: Likewise.
* lib/monetary.in.h: Likewise.
* lib/mountlist.h: Likewise.
* lib/netdb.in.h: Likewise.
* lib/obstack.h: Likewise.
* lib/opendirat.h: Likewise.
* lib/pagealign_alloc.h: Likewise.
* lib/pipe-filter.h: Likewise.
* lib/poll.in.h: Likewise.
* lib/pthread.in.h: Likewise.
* lib/pty.in.h: Likewise.
* lib/quotearg.h: Likewise.
* lib/read-file.h: Likewise.
* lib/readline.h: Likewise.
* lib/readutmp.h: Likewise.
* lib/regex-quote.h: Likewise.
* lib/relocatable.h: Likewise.
* lib/savedir.h: Likewise.
* lib/sched.in.h: Likewise.
* lib/search.in.h: Likewise.
* lib/sh-quote.h: Likewise.
* lib/signal.in.h: Likewise.
* lib/sigpipe-die.h: Likewise.
* lib/sockets.h: Likewise.
* lib/spawn.in.h: Likewise.
* lib/ssfmalloc.h: Likewise.
* lib/stack.h: Likewise.
* lib/stdalign.in.h: Likewise.
* lib/stdarg.in.h: Likewise.
* lib/stddef.in.h: Likewise.
* lib/stdio-safer.h: Likewise.
* lib/stdio.in.h: Likewise.
* lib/stdlib.in.h: Likewise.
* lib/stdnoreturn.in.h: Likewise.
* lib/strerror-override.h: Likewise.
* lib/striconv.h: Likewise.
* lib/striconveh.h: Likewise.
* lib/striconveha.h: Likewise.
* lib/string-buffer.h: Likewise.
* lib/string.in.h: Likewise.
* lib/strings.in.h: Likewise.
* lib/strnlen1.h: Likewise.
* lib/sys_file.in.h: Likewise.
* lib/sys_ioctl.in.h: Likewise.
* lib/sys_random.in.h: Likewise.
* lib/sys_resource.in.h: Likewise.
* lib/sys_select.in.h: Likewise.
* lib/sys_stat.in.h: Likewise.
* lib/sys_time.in.h: Likewise.
* lib/sys_times.in.h: Likewise.
* lib/sys_utsname.in.h: Likewise.
* lib/sys_wait.in.h: Likewise.
* lib/system-quote.h: Likewise.
* lib/term-style-control.h: Likewise.
* lib/termios.in.h: Likewise.
* lib/textstyle.in.h: Likewise.
* lib/threads.in.h: Likewise.
* lib/time.in.h: Likewise.
* lib/trim.h: Likewise.
* lib/utime.in.h: Likewise.
* lib/utmp.in.h: Likewise.
* lib/vasnprintf.h: Likewise.
* lib/verror.h: Likewise.
* lib/version-etc.h: Likewise.
* lib/wchar.in.h: Likewise.
* lib/windows-spawn.h: Likewise.
* lib/windows-thread.h: Likewise.
* lib/xgetcwd.h: Likewise.
* lib/xgetdomainname.h: Likewise.
* lib/xgethostname.h: Likewise.
* lib/xmalloca.h: Likewise.
* lib/xmemdup0.h: Likewise.
* lib/xprintf.h: Likewise.
* lib/xreadlink.h: Likewise.
* lib/xstriconv.h: Likewise.
* lib/xstriconveh.h: Likewise.
* lib/xstrndup.h: Likewise.
* lib/xstrtol-error.h: Likewise.
* lib/xvasprintf.h: Likewise.
* Makefile (config_h_MACROS*): New variables.
(sc_check_config_h_reminder): New rule.
[-- Attachment #2: 0001-Add-more-reminders-to-include-config.h.patch --]
[-- Type: text/x-patch, Size: 127170 bytes --]
From 8ad7bc671475d3291df10a1a1d64fddfd30e5175 Mon Sep 17 00:00:00 2001
From: Bruno Haible <bruno@clisp.org>
Date: Wed, 12 Apr 2023 14:49:29 +0200
Subject: [PATCH] Add more reminders to include <config.h>.
* m4/gnulib-common.m4 (gl_COMMON): In config.h, define
_GL_CONFIG_H_INCLUDED.
* lib/acl-internal.h: Test _GL_CONFIG_H_INCLUDED instead of
_GL_INLINE_HEADER_BEGIN.
* lib/alignalloc.h: Likewise.
* lib/argp-fmtstream.h: Likewise.
* lib/argp.h: Likewise.
* lib/binary-io.h: Likewise.
* lib/bitrotate.h: Likewise.
* lib/c-ctype.h: Likewise.
* lib/count-leading-zeros.h: Likewise.
* lib/count-one-bits.h: Likewise.
* lib/count-trailing-zeros.h: Likewise.
* lib/eealloc.h: Likewise.
* lib/execinfo.in.h: Likewise.
* lib/gethrxtime.h: Likewise.
* lib/gl_list.h: Likewise.
* lib/gl_map.h: Likewise.
* lib/gl_omap.h: Likewise.
* lib/gl_openssl.h: Likewise.
* lib/gl_oset.h: Likewise.
* lib/gl_set.h: Likewise.
* lib/gl_xlist.h: Likewise.
* lib/gl_xmap.h: Likewise.
* lib/gl_xomap.h: Likewise.
* lib/gl_xoset.h: Likewise.
* lib/gl_xset.h: Likewise.
* lib/gl_xsublist.h: Likewise.
* lib/glthread/cond.h: Likewise.
* lib/hamt.h: Likewise.
* lib/ialloc.h: Likewise.
* lib/math.in.h: Likewise.
* lib/mbchar.h: Likewise.
* lib/mbfile.h: Likewise.
* lib/mbiter.h: Likewise.
* lib/mbuiter.h: Likewise.
* lib/openat.h: Likewise.
* lib/pipe-filter-aux.h: Likewise.
* lib/priv-set.h: Likewise.
* lib/safe-alloc.h: Likewise.
* lib/savewd.h: Likewise.
* lib/se-context.in.h: Likewise.
* lib/se-label.in.h: Likewise.
* lib/se-selinux.in.h: Likewise.
* lib/sig-handler.h: Likewise.
* lib/stat-time.h: Likewise.
* lib/string-desc-quotearg.h: Likewise.
* lib/string-desc.h: Likewise.
* lib/sys_socket.in.h: Likewise.
* lib/timespec.h: Likewise.
* lib/u64.h: Likewise.
* lib/uchar.in.h: Likewise.
* lib/unistd.in.h: Likewise.
* lib/utimens.h: Likewise.
* lib/wctype.in.h: Likewise.
* lib/xalloc.h: Likewise.
* lib/xbinary-io.h: Likewise.
* lib/xsize.h: Likewise.
* lib/xstring-desc.h: Likewise.
* lib/xtime.h: Likewise.
* lib/acl.h: Check that config.h was already included.
* lib/alignof.h: Likewise.
* lib/argmatch.h: Likewise.
* lib/argv-iter.h: Likewise.
* lib/arpa_inet.in.h: Likewise.
* lib/attribute.h: Likewise.
* lib/backupfile.h: Likewise.
* lib/base32.h: Likewise.
* lib/base64.h: Likewise.
* lib/basename-lgpl.h: Likewise.
* lib/bitset.h: Likewise.
* lib/bitsetv.h: Likewise.
* lib/c-snprintf.h: Likewise.
* lib/c-stack.h: Likewise.
* lib/c-strcase.h: Likewise.
* lib/c-vasnprintf.h: Likewise.
* lib/c-vasprintf.h: Likewise.
* lib/c-vsnprintf.h: Likewise.
* lib/c-xvasprintf.h: Likewise.
* lib/canon-host.h: Likewise.
* lib/canonicalize.h: Likewise.
* lib/clean-temp.h: Likewise.
* lib/concat-filename.h: Likewise.
* lib/ctype.in.h: Likewise.
* lib/dfa.h: Likewise.
* lib/di-set.h: Likewise.
* lib/dirent-safer.h: Likewise.
* lib/dirent.in.h: Likewise.
* lib/dirname.h: Likewise.
* lib/eloop-threshold.h: Likewise.
* lib/error.in.h: Likewise.
* lib/exclude.h: Likewise.
* lib/fatal-signal.h: Likewise.
* lib/fcntl.in.h: Likewise.
* lib/file-type.h: Likewise.
* lib/filenamecat.h: Likewise.
* lib/filevercmp.h: Likewise.
* lib/flexmember.h: Likewise.
* lib/fnmatch.in.h: Likewise.
* lib/fpending.h: Likewise.
* lib/freadable.h: Likewise.
* lib/freadahead.h: Likewise.
* lib/freading.h: Likewise.
* lib/fts_.h: Likewise.
* lib/fwritable.h: Likewise.
* lib/fwriting.h: Likewise.
* lib/gc.h: Likewise.
* lib/get_progname_of.h: Likewise.
* lib/glob.in.h: Likewise.
* lib/glthread/thread.h: Likewise.
* lib/hash-pjw-bare.h: Likewise.
* lib/hash-pjw.h: Likewise.
* lib/hash-triple.h: Likewise.
* lib/hash.h: Likewise.
* lib/i-ring.h: Likewise.
* lib/iconv.in.h: Likewise.
* lib/ino-map.h: Likewise.
* lib/inttostr.h: Likewise.
* lib/inttypes.in.h: Likewise.
* lib/javaversion.h: Likewise.
* lib/langinfo.in.h: Likewise.
* lib/locale.in.h: Likewise.
* lib/localename.h: Likewise.
* lib/malloc.in.h: Likewise.
* lib/malloca.h: Likewise.
* lib/memcasecmp.h: Likewise.
* lib/memchr2.h: Likewise.
* lib/memcmp2.h: Likewise.
* lib/modechange.h: Likewise.
* lib/monetary.in.h: Likewise.
* lib/mountlist.h: Likewise.
* lib/netdb.in.h: Likewise.
* lib/obstack.h: Likewise.
* lib/opendirat.h: Likewise.
* lib/pagealign_alloc.h: Likewise.
* lib/pipe-filter.h: Likewise.
* lib/poll.in.h: Likewise.
* lib/pthread.in.h: Likewise.
* lib/pty.in.h: Likewise.
* lib/quotearg.h: Likewise.
* lib/read-file.h: Likewise.
* lib/readline.h: Likewise.
* lib/readutmp.h: Likewise.
* lib/regex-quote.h: Likewise.
* lib/relocatable.h: Likewise.
* lib/savedir.h: Likewise.
* lib/sched.in.h: Likewise.
* lib/search.in.h: Likewise.
* lib/sh-quote.h: Likewise.
* lib/signal.in.h: Likewise.
* lib/sigpipe-die.h: Likewise.
* lib/sockets.h: Likewise.
* lib/spawn.in.h: Likewise.
* lib/ssfmalloc.h: Likewise.
* lib/stack.h: Likewise.
* lib/stdalign.in.h: Likewise.
* lib/stdarg.in.h: Likewise.
* lib/stddef.in.h: Likewise.
* lib/stdio-safer.h: Likewise.
* lib/stdio.in.h: Likewise.
* lib/stdlib.in.h: Likewise.
* lib/stdnoreturn.in.h: Likewise.
* lib/strerror-override.h: Likewise.
* lib/striconv.h: Likewise.
* lib/striconveh.h: Likewise.
* lib/striconveha.h: Likewise.
* lib/string-buffer.h: Likewise.
* lib/string.in.h: Likewise.
* lib/strings.in.h: Likewise.
* lib/strnlen1.h: Likewise.
* lib/sys_file.in.h: Likewise.
* lib/sys_ioctl.in.h: Likewise.
* lib/sys_random.in.h: Likewise.
* lib/sys_resource.in.h: Likewise.
* lib/sys_select.in.h: Likewise.
* lib/sys_stat.in.h: Likewise.
* lib/sys_time.in.h: Likewise.
* lib/sys_times.in.h: Likewise.
* lib/sys_utsname.in.h: Likewise.
* lib/sys_wait.in.h: Likewise.
* lib/system-quote.h: Likewise.
* lib/term-style-control.h: Likewise.
* lib/termios.in.h: Likewise.
* lib/textstyle.in.h: Likewise.
* lib/threads.in.h: Likewise.
* lib/time.in.h: Likewise.
* lib/trim.h: Likewise.
* lib/utime.in.h: Likewise.
* lib/utmp.in.h: Likewise.
* lib/vasnprintf.h: Likewise.
* lib/verror.h: Likewise.
* lib/version-etc.h: Likewise.
* lib/wchar.in.h: Likewise.
* lib/windows-spawn.h: Likewise.
* lib/windows-thread.h: Likewise.
* lib/xgetcwd.h: Likewise.
* lib/xgetdomainname.h: Likewise.
* lib/xgethostname.h: Likewise.
* lib/xmalloca.h: Likewise.
* lib/xmemdup0.h: Likewise.
* lib/xprintf.h: Likewise.
* lib/xreadlink.h: Likewise.
* lib/xstriconv.h: Likewise.
* lib/xstriconveh.h: Likewise.
* lib/xstrndup.h: Likewise.
* lib/xstrtol-error.h: Likewise.
* lib/xvasprintf.h: Likewise.
* Makefile (config_h_MACROS*): New variables.
(sc_check_config_h_reminder): New rule.
---
ChangeLog | 213 +++++++++++++++++++++++++++++++++++++
Makefile | 89 ++++++++++++++++
lib/acl-internal.h | 8 +-
lib/acl.h | 5 +
lib/alignalloc.h | 9 +-
lib/alignof.h | 5 +
lib/argmatch.h | 5 +
lib/argp-fmtstream.h | 9 +-
lib/argp.h | 8 +-
lib/argv-iter.h | 5 +
lib/arpa_inet.in.h | 5 +
lib/attribute.h | 15 +++
lib/backupfile.h | 5 +
lib/base32.h | 5 +
lib/base64.h | 5 +
lib/basename-lgpl.h | 5 +
lib/binary-io.h | 8 +-
lib/bitrotate.h | 8 +-
lib/bitset.h | 5 +
lib/bitsetv.h | 5 +
lib/c-ctype.h | 4 +-
lib/c-snprintf.h | 5 +
lib/c-stack.h | 9 +-
lib/c-strcase.h | 5 +
lib/c-vasnprintf.h | 5 +
lib/c-vasprintf.h | 5 +
lib/c-vsnprintf.h | 5 +
lib/c-xvasprintf.h | 5 +
lib/canon-host.h | 5 +
lib/canonicalize.h | 5 +
lib/clean-temp.h | 5 +
lib/concat-filename.h | 5 +
lib/count-leading-zeros.h | 8 +-
lib/count-one-bits.h | 8 +-
lib/count-trailing-zeros.h | 8 +-
lib/ctype.in.h | 5 +
lib/dfa.h | 6 ++
lib/di-set.h | 6 ++
lib/dirent-safer.h | 5 +
lib/dirent.in.h | 6 ++
lib/dirname.h | 6 ++
lib/eealloc.h | 9 +-
lib/eloop-threshold.h | 5 +
lib/error.in.h | 5 +
lib/exclude.h | 6 ++
lib/execinfo.in.h | 4 +-
lib/fatal-signal.h | 5 +
lib/fcntl.in.h | 5 +
lib/file-type.h | 5 +
lib/filenamecat.h | 5 +
lib/filevercmp.h | 5 +
lib/flexmember.h | 5 +
lib/fnmatch.in.h | 5 +
lib/fpending.h | 5 +
lib/freadable.h | 5 +
lib/freadahead.h | 5 +
lib/freading.h | 5 +
lib/fts_.h | 5 +
lib/fwritable.h | 5 +
lib/fwriting.h | 5 +
lib/gc.h | 5 +
lib/get_progname_of.h | 5 +
lib/gethrxtime.h | 8 +-
lib/gl_list.h | 9 +-
lib/gl_map.h | 9 +-
lib/gl_omap.h | 9 +-
lib/gl_openssl.h | 8 +-
lib/gl_oset.h | 9 +-
lib/gl_set.h | 9 +-
lib/gl_xlist.h | 9 +-
lib/gl_xmap.h | 9 +-
lib/gl_xomap.h | 9 +-
lib/gl_xoset.h | 9 +-
lib/gl_xset.h | 9 +-
lib/gl_xsublist.h | 9 +-
lib/glob.in.h | 5 +
lib/glthread/cond.h | 9 +-
lib/glthread/thread.h | 5 +
lib/hamt.h | 7 +-
lib/hash-pjw-bare.h | 5 +
lib/hash-pjw.h | 5 +
lib/hash-triple.h | 5 +
lib/hash.h | 7 ++
lib/i-ring.h | 5 +
lib/ialloc.h | 9 +-
lib/iconv.in.h | 5 +
lib/ino-map.h | 6 ++
lib/inttostr.h | 5 +
lib/inttypes.in.h | 5 +
lib/javaversion.h | 5 +
lib/langinfo.in.h | 5 +
lib/locale.in.h | 5 +
lib/localename.h | 5 +
lib/malloc.in.h | 5 +
lib/malloca.h | 6 ++
lib/math.in.h | 9 +-
lib/mbchar.h | 8 +-
lib/mbfile.h | 8 +-
lib/mbiter.h | 8 +-
lib/mbuiter.h | 8 +-
lib/memcasecmp.h | 5 +
lib/memchr2.h | 5 +
lib/memcmp2.h | 5 +
lib/modechange.h | 5 +
lib/monetary.in.h | 5 +
lib/mountlist.h | 5 +
lib/netdb.in.h | 5 +
lib/obstack.h | 5 +
lib/openat.h | 9 +-
lib/opendirat.h | 5 +
lib/pagealign_alloc.h | 7 ++
lib/pipe-filter-aux.h | 4 +-
lib/pipe-filter.h | 5 +
lib/poll.in.h | 5 +
lib/priv-set.h | 4 +-
lib/pthread.in.h | 5 +
lib/pty.in.h | 5 +
lib/quotearg.h | 5 +
lib/read-file.h | 5 +
lib/readline.h | 5 +
lib/readutmp.h | 5 +
lib/regex-quote.h | 5 +
lib/relocatable.h | 5 +
lib/safe-alloc.h | 9 +-
lib/savedir.h | 5 +
lib/savewd.h | 10 +-
lib/sched.in.h | 5 +
lib/se-context.in.h | 11 +-
lib/se-label.in.h | 10 +-
lib/se-selinux.in.h | 9 +-
lib/search.in.h | 5 +
lib/sh-quote.h | 5 +
lib/sig-handler.h | 8 +-
lib/signal.in.h | 5 +
lib/sigpipe-die.h | 5 +
lib/sockets.h | 5 +
lib/spawn.in.h | 5 +
lib/ssfmalloc.h | 5 +
lib/stack.h | 5 +
lib/stat-time.h | 9 +-
lib/stdalign.in.h | 5 +
lib/stdarg.in.h | 5 +
lib/stddef.in.h | 5 +
lib/stdio-safer.h | 5 +
lib/stdio.in.h | 6 ++
lib/stdlib.in.h | 6 ++
lib/stdnoreturn.in.h | 5 +
lib/strerror-override.h | 5 +
lib/striconv.h | 5 +
lib/striconveh.h | 5 +
lib/striconveha.h | 5 +
lib/string-buffer.h | 5 +
lib/string-desc-quotearg.h | 9 +-
lib/string-desc.h | 9 +-
lib/string.in.h | 6 ++
lib/strings.in.h | 5 +
lib/strnlen1.h | 5 +
lib/sys_file.in.h | 5 +
lib/sys_ioctl.in.h | 5 +
lib/sys_random.in.h | 5 +
lib/sys_resource.in.h | 5 +
lib/sys_select.in.h | 5 +
lib/sys_socket.in.h | 5 +-
lib/sys_stat.in.h | 5 +
lib/sys_time.in.h | 5 +
lib/sys_times.in.h | 5 +
lib/sys_utsname.in.h | 5 +
lib/sys_wait.in.h | 5 +
lib/system-quote.h | 5 +
lib/term-style-control.h | 5 +
lib/termios.in.h | 5 +
lib/textstyle.in.h | 5 +
lib/threads.in.h | 5 +
lib/time.in.h | 5 +
lib/timespec.h | 9 +-
lib/trim.h | 5 +
lib/u64.h | 8 +-
lib/uchar.in.h | 9 +-
lib/unistd.in.h | 8 +-
lib/utime.in.h | 5 +
lib/utimens.h | 8 +-
lib/utmp.in.h | 5 +
lib/vasnprintf.h | 5 +
lib/verror.h | 5 +
lib/version-etc.h | 5 +
lib/wchar.in.h | 6 ++
lib/wctype.in.h | 8 +-
lib/windows-spawn.h | 5 +
lib/windows-thread.h | 5 +
lib/xalloc.h | 10 +-
lib/xbinary-io.h | 8 +-
lib/xgetcwd.h | 5 +
lib/xgetdomainname.h | 5 +
lib/xgethostname.h | 5 +
lib/xmalloca.h | 6 ++
lib/xmemdup0.h | 5 +
lib/xprintf.h | 5 +
lib/xreadlink.h | 5 +
lib/xsize.h | 8 +-
lib/xstriconv.h | 5 +
lib/xstriconveh.h | 5 +
lib/xstring-desc.h | 8 +-
lib/xstrndup.h | 5 +
lib/xstrtol-error.h | 5 +
lib/xtime.h | 4 +-
lib/xvasprintf.h | 5 +
m4/gnulib-common.m4 | 6 +-
207 files changed, 1374 insertions(+), 165 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index c80d5587e8..21ab60e8a9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,216 @@
+2023-04-12 Bruno Haible <bruno@clisp.org>
+
+ Add more reminders to include <config.h>.
+ * m4/gnulib-common.m4 (gl_COMMON): In config.h, define
+ _GL_CONFIG_H_INCLUDED.
+ * lib/acl-internal.h: Test _GL_CONFIG_H_INCLUDED instead of
+ _GL_INLINE_HEADER_BEGIN.
+ * lib/alignalloc.h: Likewise.
+ * lib/argp-fmtstream.h: Likewise.
+ * lib/argp.h: Likewise.
+ * lib/binary-io.h: Likewise.
+ * lib/bitrotate.h: Likewise.
+ * lib/c-ctype.h: Likewise.
+ * lib/count-leading-zeros.h: Likewise.
+ * lib/count-one-bits.h: Likewise.
+ * lib/count-trailing-zeros.h: Likewise.
+ * lib/eealloc.h: Likewise.
+ * lib/execinfo.in.h: Likewise.
+ * lib/gethrxtime.h: Likewise.
+ * lib/gl_list.h: Likewise.
+ * lib/gl_map.h: Likewise.
+ * lib/gl_omap.h: Likewise.
+ * lib/gl_openssl.h: Likewise.
+ * lib/gl_oset.h: Likewise.
+ * lib/gl_set.h: Likewise.
+ * lib/gl_xlist.h: Likewise.
+ * lib/gl_xmap.h: Likewise.
+ * lib/gl_xomap.h: Likewise.
+ * lib/gl_xoset.h: Likewise.
+ * lib/gl_xset.h: Likewise.
+ * lib/gl_xsublist.h: Likewise.
+ * lib/glthread/cond.h: Likewise.
+ * lib/hamt.h: Likewise.
+ * lib/ialloc.h: Likewise.
+ * lib/math.in.h: Likewise.
+ * lib/mbchar.h: Likewise.
+ * lib/mbfile.h: Likewise.
+ * lib/mbiter.h: Likewise.
+ * lib/mbuiter.h: Likewise.
+ * lib/openat.h: Likewise.
+ * lib/pipe-filter-aux.h: Likewise.
+ * lib/priv-set.h: Likewise.
+ * lib/safe-alloc.h: Likewise.
+ * lib/savewd.h: Likewise.
+ * lib/se-context.in.h: Likewise.
+ * lib/se-label.in.h: Likewise.
+ * lib/se-selinux.in.h: Likewise.
+ * lib/sig-handler.h: Likewise.
+ * lib/stat-time.h: Likewise.
+ * lib/string-desc-quotearg.h: Likewise.
+ * lib/string-desc.h: Likewise.
+ * lib/sys_socket.in.h: Likewise.
+ * lib/timespec.h: Likewise.
+ * lib/u64.h: Likewise.
+ * lib/uchar.in.h: Likewise.
+ * lib/unistd.in.h: Likewise.
+ * lib/utimens.h: Likewise.
+ * lib/wctype.in.h: Likewise.
+ * lib/xalloc.h: Likewise.
+ * lib/xbinary-io.h: Likewise.
+ * lib/xsize.h: Likewise.
+ * lib/xstring-desc.h: Likewise.
+ * lib/xtime.h: Likewise.
+ * lib/acl.h: Check that config.h was already included.
+ * lib/alignof.h: Likewise.
+ * lib/argmatch.h: Likewise.
+ * lib/argv-iter.h: Likewise.
+ * lib/arpa_inet.in.h: Likewise.
+ * lib/attribute.h: Likewise.
+ * lib/backupfile.h: Likewise.
+ * lib/base32.h: Likewise.
+ * lib/base64.h: Likewise.
+ * lib/basename-lgpl.h: Likewise.
+ * lib/bitset.h: Likewise.
+ * lib/bitsetv.h: Likewise.
+ * lib/c-snprintf.h: Likewise.
+ * lib/c-stack.h: Likewise.
+ * lib/c-strcase.h: Likewise.
+ * lib/c-vasnprintf.h: Likewise.
+ * lib/c-vasprintf.h: Likewise.
+ * lib/c-vsnprintf.h: Likewise.
+ * lib/c-xvasprintf.h: Likewise.
+ * lib/canon-host.h: Likewise.
+ * lib/canonicalize.h: Likewise.
+ * lib/clean-temp.h: Likewise.
+ * lib/concat-filename.h: Likewise.
+ * lib/ctype.in.h: Likewise.
+ * lib/dfa.h: Likewise.
+ * lib/di-set.h: Likewise.
+ * lib/dirent-safer.h: Likewise.
+ * lib/dirent.in.h: Likewise.
+ * lib/dirname.h: Likewise.
+ * lib/eloop-threshold.h: Likewise.
+ * lib/error.in.h: Likewise.
+ * lib/exclude.h: Likewise.
+ * lib/fatal-signal.h: Likewise.
+ * lib/fcntl.in.h: Likewise.
+ * lib/file-type.h: Likewise.
+ * lib/filenamecat.h: Likewise.
+ * lib/filevercmp.h: Likewise.
+ * lib/flexmember.h: Likewise.
+ * lib/fnmatch.in.h: Likewise.
+ * lib/fpending.h: Likewise.
+ * lib/freadable.h: Likewise.
+ * lib/freadahead.h: Likewise.
+ * lib/freading.h: Likewise.
+ * lib/fts_.h: Likewise.
+ * lib/fwritable.h: Likewise.
+ * lib/fwriting.h: Likewise.
+ * lib/gc.h: Likewise.
+ * lib/get_progname_of.h: Likewise.
+ * lib/glob.in.h: Likewise.
+ * lib/glthread/thread.h: Likewise.
+ * lib/hash-pjw-bare.h: Likewise.
+ * lib/hash-pjw.h: Likewise.
+ * lib/hash-triple.h: Likewise.
+ * lib/hash.h: Likewise.
+ * lib/i-ring.h: Likewise.
+ * lib/iconv.in.h: Likewise.
+ * lib/ino-map.h: Likewise.
+ * lib/inttostr.h: Likewise.
+ * lib/inttypes.in.h: Likewise.
+ * lib/javaversion.h: Likewise.
+ * lib/langinfo.in.h: Likewise.
+ * lib/locale.in.h: Likewise.
+ * lib/localename.h: Likewise.
+ * lib/malloc.in.h: Likewise.
+ * lib/malloca.h: Likewise.
+ * lib/memcasecmp.h: Likewise.
+ * lib/memchr2.h: Likewise.
+ * lib/memcmp2.h: Likewise.
+ * lib/modechange.h: Likewise.
+ * lib/monetary.in.h: Likewise.
+ * lib/mountlist.h: Likewise.
+ * lib/netdb.in.h: Likewise.
+ * lib/obstack.h: Likewise.
+ * lib/opendirat.h: Likewise.
+ * lib/pagealign_alloc.h: Likewise.
+ * lib/pipe-filter.h: Likewise.
+ * lib/poll.in.h: Likewise.
+ * lib/pthread.in.h: Likewise.
+ * lib/pty.in.h: Likewise.
+ * lib/quotearg.h: Likewise.
+ * lib/read-file.h: Likewise.
+ * lib/readline.h: Likewise.
+ * lib/readutmp.h: Likewise.
+ * lib/regex-quote.h: Likewise.
+ * lib/relocatable.h: Likewise.
+ * lib/savedir.h: Likewise.
+ * lib/sched.in.h: Likewise.
+ * lib/search.in.h: Likewise.
+ * lib/sh-quote.h: Likewise.
+ * lib/signal.in.h: Likewise.
+ * lib/sigpipe-die.h: Likewise.
+ * lib/sockets.h: Likewise.
+ * lib/spawn.in.h: Likewise.
+ * lib/ssfmalloc.h: Likewise.
+ * lib/stack.h: Likewise.
+ * lib/stdalign.in.h: Likewise.
+ * lib/stdarg.in.h: Likewise.
+ * lib/stddef.in.h: Likewise.
+ * lib/stdio-safer.h: Likewise.
+ * lib/stdio.in.h: Likewise.
+ * lib/stdlib.in.h: Likewise.
+ * lib/stdnoreturn.in.h: Likewise.
+ * lib/strerror-override.h: Likewise.
+ * lib/striconv.h: Likewise.
+ * lib/striconveh.h: Likewise.
+ * lib/striconveha.h: Likewise.
+ * lib/string-buffer.h: Likewise.
+ * lib/string.in.h: Likewise.
+ * lib/strings.in.h: Likewise.
+ * lib/strnlen1.h: Likewise.
+ * lib/sys_file.in.h: Likewise.
+ * lib/sys_ioctl.in.h: Likewise.
+ * lib/sys_random.in.h: Likewise.
+ * lib/sys_resource.in.h: Likewise.
+ * lib/sys_select.in.h: Likewise.
+ * lib/sys_stat.in.h: Likewise.
+ * lib/sys_time.in.h: Likewise.
+ * lib/sys_times.in.h: Likewise.
+ * lib/sys_utsname.in.h: Likewise.
+ * lib/sys_wait.in.h: Likewise.
+ * lib/system-quote.h: Likewise.
+ * lib/term-style-control.h: Likewise.
+ * lib/termios.in.h: Likewise.
+ * lib/textstyle.in.h: Likewise.
+ * lib/threads.in.h: Likewise.
+ * lib/time.in.h: Likewise.
+ * lib/trim.h: Likewise.
+ * lib/utime.in.h: Likewise.
+ * lib/utmp.in.h: Likewise.
+ * lib/vasnprintf.h: Likewise.
+ * lib/verror.h: Likewise.
+ * lib/version-etc.h: Likewise.
+ * lib/wchar.in.h: Likewise.
+ * lib/windows-spawn.h: Likewise.
+ * lib/windows-thread.h: Likewise.
+ * lib/xgetcwd.h: Likewise.
+ * lib/xgetdomainname.h: Likewise.
+ * lib/xgethostname.h: Likewise.
+ * lib/xmalloca.h: Likewise.
+ * lib/xmemdup0.h: Likewise.
+ * lib/xprintf.h: Likewise.
+ * lib/xreadlink.h: Likewise.
+ * lib/xstriconv.h: Likewise.
+ * lib/xstriconveh.h: Likewise.
+ * lib/xstrndup.h: Likewise.
+ * lib/xstrtol-error.h: Likewise.
+ * lib/xvasprintf.h: Likewise.
+ * Makefile (config_h_MACROS*): New variables.
+ (sc_check_config_h_reminder): New rule.
+
2023-04-11 Paul Eggert <eggert@cs.ucla.edu>
doc: update year2038 list further
diff --git a/Makefile b/Makefile
index 1044869450..76e3b5cc54 100644
--- a/Makefile
+++ b/Makefile
@@ -138,6 +138,95 @@ sc_check_sym_list:
<(sed -n /^_intprops_name/,/^_intprops_syms_re/p top/maint.mk \
|sed '/^_/d;s/^ //;s/ *\\$$//')
+
+# List of C macros defined through AH_VERBATIM in m4/extern-inline.m4:
+config_h_MACROS1 = \
+ _GL_INLINE \
+ _GL_EXTERN_INLINE \
+ _GL_INLINE_HEADER_BEGIN \
+ _GL_INLINE_HEADER_END
+# List of C macros defined through AH_VERBATIM in m4/gnulib-common.m4:
+config_h_MACROS2 = \
+ _GL_GNUC_PREREQ \
+ _Noreturn \
+ _GL_ATTRIBUTE_ALLOC_SIZE \
+ _GL_ATTRIBUTE_ALWAYS_INLINE \
+ _GL_ATTRIBUTE_ARTIFICIAL \
+ _GL_ATTRIBUTE_COLD \
+ _GL_ATTRIBUTE_CONST \
+ _GL_ATTRIBUTE_DEALLOC \
+ _GL_ATTRIBUTE_DEPRECATED \
+ _GL_ATTRIBUTE_ERROR \
+ _GL_ATTRIBUTE_WARNING \
+ _GL_ATTRIBUTE_EXTERNALLY_VISIBLE \
+ _GL_ATTRIBUTE_FALLTHROUGH \
+ _GL_ATTRIBUTE_FORMAT \
+ _GL_ATTRIBUTE_LEAF \
+ _GL_ATTRIBUTE_MALLOC \
+ _GL_ATTRIBUTE_MAY_ALIAS \
+ _GL_ATTRIBUTE_MAYBE_UNUSED \
+ _GL_UNUSED \
+ _GL_ATTRIBUTE_NODISCARD \
+ _GL_ATTRIBUTE_NOINLINE \
+ _GL_ATTRIBUTE_NONNULL \
+ _GL_ATTRIBUTE_NONSTRING \
+ _GL_ATTRIBUTE_NOTHROW \
+ _GL_ATTRIBUTE_PACKED \
+ _GL_ATTRIBUTE_PURE \
+ _GL_ATTRIBUTE_RETURNS_NONNULL \
+ _GL_ATTRIBUTE_SENTINEL \
+ _GL_ATTRIBUTE_UNUSED \
+ _GL_UNUSED_LABEL \
+ _GL_BEGIN_C_LINKAGE \
+ _GL_END_C_LINKAGE \
+ _GL_ASYNC_SAFE \
+ _GL_CMP
+# List of C macros defined through AH_VERBATIM in m4/nullptr.m4:
+config_h_MACROS3 = \
+ nullptr
+# List of C macros defined through AH_VERBATIM in m4/posixcheck.m4:
+config_h_MACROS4 = \
+ GNULIB_POSIXCHECK
+# List of C macros defined through AH_VERBATIM in m4/sh-filename.m4:
+config_h_MACROS5 = \
+ BOURNE_SHELL
+# List of C macros defined through AH_VERBATIM in m4/stdalign.m4:
+config_h_MACROS6 = \
+ alignof \
+ alignas
+# List of C macros defined through AH_VERBATIM in m4/stdarg.m4:
+config_h_MACROS7 = \
+ va_copy
+# List of C macros defined through AH_VERBATIM in m4/threads_h.m4:
+config_h_MACROS8 = \
+ _Thread_local
+# List of C macros defined through AH_VERBATIM (only the most important ones):
+config_h_MACROS = \
+ $(config_h_MACROS1) $(config_h_MACROS2) $(config_h_MACROS3) \
+ $(config_h_MACROS4) $(config_h_MACROS5) $(config_h_MACROS6) \
+ $(config_h_MACROS7) $(config_h_MACROS8)
+
+# Ensure that .h files that use macros from config.h contain a reminder to
+# include <config.h>.
+sc_check_config_h_reminder:
+ fail=0; \
+ for file in `grep -l -F -w -f <(for macro in $(config_h_MACROS); do echo $$macro; done) lib/*.h lib/*/*.h`; do \
+ : "Filter out .h files that are not public header files of their respective module."; \
+ include_pattern='[<"]'`echo $$file | sed -e 's,^lib/,,' -e 's,[.]in[.]h,.h,' -e 's,_,[/_],g' -e 's,[.],[.],g'`'[>"]' ; \
+ if ./gnulib-tool --extract-include-directive `./gnulib-tool --find $$file` | grep "$$include_pattern" >/dev/null; then \
+ grep '# *error "Please include config[.]h first[.]"' $$file >/dev/null \
+ || { echo -n "File $$file lacks a config.h reminder. Needed for:"; \
+ for macro in $(config_h_MACROS); do \
+ if grep -F -w $$macro $$file >/dev/null; then echo -n " $$macro"; fi; \
+ done; \
+ echo; \
+ fail=1; \
+ }; \
+ fi; \
+ done; \
+ exit $$fail
+
+
# Ensure that the copyright statements in files and in the module descriptions
# are consistent.
sc_check_copyright:
diff --git a/lib/acl-internal.h b/lib/acl-internal.h
index c97e847cdc..496e41d7b2 100644
--- a/lib/acl-internal.h
+++ b/lib/acl-internal.h
@@ -17,6 +17,11 @@
Written by Paul Eggert, Andreas Grünbacher, and Bruno Haible. */
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include "acl.h"
#include <stdlib.h>
@@ -60,9 +65,6 @@ extern int aclsort (int, int, struct acl *);
# define fchmod(fd, mode) (-1)
#endif
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef ACL_INTERNAL_INLINE
# define ACL_INTERNAL_INLINE _GL_INLINE
diff --git a/lib/acl.h b/lib/acl.h
index 58e5797179..0d02120055 100644
--- a/lib/acl.h
+++ b/lib/acl.h
@@ -20,6 +20,11 @@
#ifndef _GL_ACL_H
#define _GL_ACL_H 1
+/* This file uses _GL_ATTRIBUTE_CONST. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <sys/types.h>
#include <sys/stat.h>
diff --git a/lib/alignalloc.h b/lib/alignalloc.h
index eacf47880a..1574e26c92 100644
--- a/lib/alignalloc.h
+++ b/lib/alignalloc.h
@@ -20,13 +20,16 @@
#ifndef ALIGNALLOC_H_
#define ALIGNALLOC_H_
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_ALLOC_SIZE,
+ _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <errno.h>
#include <stdlib.h>
#include "idx.h"
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef ALIGNALLOC_INLINE
# define ALIGNALLOC_INLINE _GL_INLINE
diff --git a/lib/alignof.h b/lib/alignof.h
index 2ded1c7884..a790972763 100644
--- a/lib/alignof.h
+++ b/lib/alignof.h
@@ -17,6 +17,11 @@
#ifndef _ALIGNOF_H
#define _ALIGNOF_H
+/* This file uses alignof. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stddef.h>
/* alignof_slot (TYPE)
diff --git a/lib/argmatch.h b/lib/argmatch.h
index f18127fc96..9e8d217d6d 100644
--- a/lib/argmatch.h
+++ b/lib/argmatch.h
@@ -22,6 +22,11 @@
#ifndef ARGMATCH_H_
# define ARGMATCH_H_ 1
+/* This file uses _GL_ATTRIBUTE_PURE. */
+# if !_GL_CONFIG_H_INCLUDED
+# error "Please include config.h first."
+# endif
+
# include <limits.h>
# include <stddef.h>
# include <stdio.h>
diff --git a/lib/argp-fmtstream.h b/lib/argp-fmtstream.h
index 3a42e372f3..5738551255 100644
--- a/lib/argp-fmtstream.h
+++ b/lib/argp-fmtstream.h
@@ -24,6 +24,12 @@
#ifndef _ARGP_FMTSTREAM_H
#define _ARGP_FMTSTREAM_H
+/* This file uses _GL_INLINE_HEADER_BEGIN, __GL_INLINE, _GL_ATTRIBUTE_DEALLOC,
+ _GL_ATTRIBUTE_FORMAT. */
+#if !_LIBC && !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdio.h>
#include <string.h>
#include <unistd.h>
@@ -187,9 +193,6 @@ extern int __argp_fmtstream_ensure (argp_fmtstream_t __fs, size_t __amount);
#define __argp_fmtstream_point argp_fmtstream_point
#define __argp_fmtstream_update _argp_fmtstream_update
#define __argp_fmtstream_ensure _argp_fmtstream_ensure
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef ARGP_FS_EI
# define ARGP_FS_EI _GL_INLINE
diff --git a/lib/argp.h b/lib/argp.h
index ae0edd390e..7de939a2a1 100644
--- a/lib/argp.h
+++ b/lib/argp.h
@@ -19,6 +19,11 @@
#ifndef _ARGP_H
#define _ARGP_H
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_FORMAT. */
+#if !_LIBC && !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdio.h>
#include <ctype.h>
#include <getopt.h>
@@ -590,9 +595,6 @@ extern void *__argp_input (const struct argp *__restrict __argp,
# define __argp_state_help argp_state_help
# define __option_is_short _option_is_short
# define __option_is_end _option_is_end
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
# ifndef ARGP_EI
# define ARGP_EI _GL_INLINE
diff --git a/lib/argv-iter.h b/lib/argv-iter.h
index d420ded808..d2d986c20a 100644
--- a/lib/argv-iter.h
+++ b/lib/argv-iter.h
@@ -14,6 +14,11 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
+/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdio.h>
/* Definition of _GL_ARG_NONNULL. */
diff --git a/lib/arpa_inet.in.h b/lib/arpa_inet.in.h
index 80e6713fdd..6df3901c07 100644
--- a/lib/arpa_inet.in.h
+++ b/lib/arpa_inet.in.h
@@ -49,6 +49,11 @@
#ifndef _@GUARD_PREFIX@_ARPA_INET_H
#define _@GUARD_PREFIX@_ARPA_INET_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get all possible declarations of inet_ntop() and inet_pton(). */
#if (@GNULIB_INET_NTOP@ || @GNULIB_INET_PTON@ || defined GNULIB_POSIXCHECK) \
&& @HAVE_WS2TCPIP_H@
diff --git a/lib/attribute.h b/lib/attribute.h
index 130644d879..9464fde0f3 100644
--- a/lib/attribute.h
+++ b/lib/attribute.h
@@ -41,6 +41,21 @@
These names begin with 'ATTRIBUTE_' to avoid name clashes. */
+/* This file uses _GL_ATTRIBUTE_ALLOC_SIZE, _GL_ATTRIBUTE_ALWAYS_INLINE,
+ _GL_ATTRIBUTE_ARTIFICIAL, _GL_ATTRIBUTE_COLD, _GL_ATTRIBUTE_CONST,
+ _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_DEPRECATED, _GL_ATTRIBUTE_ERROR,
+ _GL_ATTRIBUTE_WARNING, _GL_ATTRIBUTE_EXTERNALLY_VISIBLE,
+ _GL_ATTRIBUTE_FALLTHROUGH, _GL_ATTRIBUTE_FORMAT, _GL_ATTRIBUTE_LEAF,
+ _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_MAY_ALIAS, _GL_ATTRIBUTE_MAYBE_UNUSED,
+ _GL_ATTRIBUTE_NODISCARD, _GL_ATTRIBUTE_NOINLINE, _GL_ATTRIBUTE_NONNULL,
+ _GL_ATTRIBUTE_NONSTRING, _GL_ATTRIBUTE_NOTHROW, _GL_ATTRIBUTE_PACKED,
+ _GL_ATTRIBUTE_PURE, _GL_ATTRIBUTE_RETURNS_NONNULL,
+ _GL_ATTRIBUTE_SENTINEL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
+
/* =============== Attributes for specific kinds of functions =============== */
/* Attributes for functions that should not be used. */
diff --git a/lib/backupfile.h b/lib/backupfile.h
index 81fc35cf00..73fa610225 100644
--- a/lib/backupfile.h
+++ b/lib/backupfile.h
@@ -19,6 +19,11 @@
#ifndef BACKUPFILE_H_
#define BACKUPFILE_H_
+/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get AT_FDCWD, as a convenience for users of this file. */
#include <fcntl.h>
diff --git a/lib/base32.h b/lib/base32.h
index 8f8d862ab1..2e784d95c8 100644
--- a/lib/base32.h
+++ b/lib/base32.h
@@ -18,6 +18,11 @@
#ifndef BASE32_H
# define BASE32_H
+/* This file uses _GL_ATTRIBUTE_CONST. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get idx_t. */
# include <idx.h>
diff --git a/lib/base64.h b/lib/base64.h
index 9913765200..b5cb2ea5cb 100644
--- a/lib/base64.h
+++ b/lib/base64.h
@@ -18,6 +18,11 @@
#ifndef BASE64_H
# define BASE64_H
+/* This file uses _GL_ATTRIBUTE_CONST. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get idx_t. */
# include <idx.h>
diff --git a/lib/basename-lgpl.h b/lib/basename-lgpl.h
index 5d996c1da5..c1982fa8eb 100644
--- a/lib/basename-lgpl.h
+++ b/lib/basename-lgpl.h
@@ -19,6 +19,11 @@
#ifndef _BASENAME_LGPL_H
#define _BASENAME_LGPL_H
+/* This file uses _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stddef.h>
#ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT
diff --git a/lib/binary-io.h b/lib/binary-io.h
index 6f4db25335..855d6f819f 100644
--- a/lib/binary-io.h
+++ b/lib/binary-io.h
@@ -17,6 +17,11 @@
#ifndef _BINARY_H
#define _BINARY_H
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_UNUSED. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* For systems that distinguish between text and binary I/O.
O_BINARY is guaranteed by the gnulib <fcntl.h>. */
#include <fcntl.h>
@@ -25,9 +30,6 @@
so we include it here first. */
#include <stdio.h>
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef BINARY_IO_INLINE
# define BINARY_IO_INLINE _GL_INLINE
diff --git a/lib/bitrotate.h b/lib/bitrotate.h
index de1ee8257c..6fb7b4957f 100644
--- a/lib/bitrotate.h
+++ b/lib/bitrotate.h
@@ -19,13 +19,15 @@
#ifndef _GL_BITROTATE_H
#define _GL_BITROTATE_H
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <limits.h>
#include <stdint.h>
#include <sys/types.h>
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef BITROTATE_INLINE
# define BITROTATE_INLINE _GL_INLINE
diff --git a/lib/bitset.h b/lib/bitset.h
index fe5da8fd6a..bb6596f7fe 100644
--- a/lib/bitset.h
+++ b/lib/bitset.h
@@ -23,6 +23,11 @@
/* This file is the public interface to the bitset abstract data type.
Only use the functions and macros defined in this file. */
+/* This file uses _GL_ATTRIBUTE_DEALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdio.h>
#if USE_UNLOCKED_IO
# include "unlocked-io.h"
diff --git a/lib/bitsetv.h b/lib/bitsetv.h
index 72f7e0bd05..96cdd1d7fb 100644
--- a/lib/bitsetv.h
+++ b/lib/bitsetv.h
@@ -21,6 +21,11 @@
#ifndef _BITSETV_H
#define _BITSETV_H
+/* This file uses _GL_ATTRIBUTE_DEALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include "bitset.h"
typedef bitset * bitsetv;
diff --git a/lib/c-ctype.h b/lib/c-ctype.h
index 35ca83d7d4..cb0f4f3ba1 100644
--- a/lib/c-ctype.h
+++ b/lib/c-ctype.h
@@ -23,9 +23,11 @@
#ifndef C_CTYPE_H
#define C_CTYPE_H
-#ifndef _GL_INLINE_HEADER_BEGIN
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */
+#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
+
_GL_INLINE_HEADER_BEGIN
#ifndef C_CTYPE_INLINE
# define C_CTYPE_INLINE _GL_INLINE
diff --git a/lib/c-snprintf.h b/lib/c-snprintf.h
index 3515b14f66..c973f35b8a 100644
--- a/lib/c-snprintf.h
+++ b/lib/c-snprintf.h
@@ -17,6 +17,11 @@
#ifndef _C_SNPRINTF_H
#define _C_SNPRINTF_H
+/* This file uses _GL_ATTRIBUTE_FORMAT. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get size_t. */
#include <stddef.h>
diff --git a/lib/c-stack.h b/lib/c-stack.h
index d9556a9db2..7958112b82 100644
--- a/lib/c-stack.h
+++ b/lib/c-stack.h
@@ -15,6 +15,11 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
+/* This file uses _GL_ASYNC_SAFE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#ifdef __cplusplus
extern "C"
{
@@ -52,6 +57,6 @@ extern "C"
extern int c_stack_action (_GL_ASYNC_SAFE void (* /*action*/) (int));
-# ifdef __cplusplus
+#ifdef __cplusplus
}
-# endif
+#endif
diff --git a/lib/c-strcase.h b/lib/c-strcase.h
index 9bcca01b27..5dfa96c41f 100644
--- a/lib/c-strcase.h
+++ b/lib/c-strcase.h
@@ -18,6 +18,11 @@
#ifndef C_STRCASE_H
#define C_STRCASE_H
+/* This file uses _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stddef.h>
diff --git a/lib/c-vasnprintf.h b/lib/c-vasnprintf.h
index 21464ceb1d..c2f0c0c96d 100644
--- a/lib/c-vasnprintf.h
+++ b/lib/c-vasnprintf.h
@@ -17,6 +17,11 @@
#ifndef _C_VASNPRINTF_H
#define _C_VASNPRINTF_H
+/* This file uses _GL_ATTRIBUTE_FORMAT. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get va_list. */
#include <stdarg.h>
diff --git a/lib/c-vasprintf.h b/lib/c-vasprintf.h
index 9c4a042612..f61e78299e 100644
--- a/lib/c-vasprintf.h
+++ b/lib/c-vasprintf.h
@@ -17,6 +17,11 @@
#ifndef _C_VASPRINTF_H
#define _C_VASPRINTF_H
+/* This file uses _GL_ATTRIBUTE_FORMAT. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get va_list. */
#include <stdarg.h>
diff --git a/lib/c-vsnprintf.h b/lib/c-vsnprintf.h
index 978f372635..3e94846d22 100644
--- a/lib/c-vsnprintf.h
+++ b/lib/c-vsnprintf.h
@@ -17,6 +17,11 @@
#ifndef _C_VSNPRINTF_H
#define _C_VSNPRINTF_H
+/* This file uses _GL_ATTRIBUTE_FORMAT. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get size_t. */
#include <stddef.h>
diff --git a/lib/c-xvasprintf.h b/lib/c-xvasprintf.h
index 985314b738..33f87cd17c 100644
--- a/lib/c-xvasprintf.h
+++ b/lib/c-xvasprintf.h
@@ -17,6 +17,11 @@
#ifndef _C_XVASPRINTF_H
#define _C_XVASPRINTF_H
+/* This file uses _GL_ATTRIBUTE_FORMAT, _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get va_list. */
#include <stdarg.h>
diff --git a/lib/canon-host.h b/lib/canon-host.h
index c1f55c0982..91faabf7f7 100644
--- a/lib/canon-host.h
+++ b/lib/canon-host.h
@@ -20,6 +20,11 @@
#ifndef CANON_HOST_H
# define CANON_HOST_H 1
+/* This file uses _GL_ATTRIBUTE_MALLOC. */
+# if !_GL_CONFIG_H_INCLUDED
+# error "Please include config.h first."
+# endif
+
# include <stdlib.h>
char *canon_host (char const *host)
diff --git a/lib/canonicalize.h b/lib/canonicalize.h
index e0cfafd8fa..ea09c666f9 100644
--- a/lib/canonicalize.h
+++ b/lib/canonicalize.h
@@ -17,6 +17,11 @@
#ifndef CANONICALIZE_H_
# define CANONICALIZE_H_
+/* This file uses _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h> /* for canonicalize_file_name */
#define CAN_MODE_MASK (CAN_EXISTING | CAN_ALL_BUT_LAST | CAN_MISSING)
diff --git a/lib/clean-temp.h b/lib/clean-temp.h
index 1e754561b3..a7cf6e74c0 100644
--- a/lib/clean-temp.h
+++ b/lib/clean-temp.h
@@ -18,6 +18,11 @@
#ifndef _CLEAN_TEMP_H
#define _CLEAN_TEMP_H
+/* This file uses _GL_ATTRIBUTE_DEALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdio.h>
#include <sys/types.h>
diff --git a/lib/concat-filename.h b/lib/concat-filename.h
index 0912226387..490aa96fe5 100644
--- a/lib/concat-filename.h
+++ b/lib/concat-filename.h
@@ -17,6 +17,11 @@
#ifndef _CONCAT_FILENAME_H
#define _CONCAT_FILENAME_H
+/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h>
#ifdef __cplusplus
diff --git a/lib/count-leading-zeros.h b/lib/count-leading-zeros.h
index 99151d695b..9fe2a03ee0 100644
--- a/lib/count-leading-zeros.h
+++ b/lib/count-leading-zeros.h
@@ -19,12 +19,14 @@
#ifndef COUNT_LEADING_ZEROS_H
#define COUNT_LEADING_ZEROS_H 1
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <limits.h>
#include <stdlib.h>
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef COUNT_LEADING_ZEROS_INLINE
# define COUNT_LEADING_ZEROS_INLINE _GL_INLINE
diff --git a/lib/count-one-bits.h b/lib/count-one-bits.h
index 01a60b77b8..2821a1fb75 100644
--- a/lib/count-one-bits.h
+++ b/lib/count-one-bits.h
@@ -19,12 +19,14 @@
#ifndef COUNT_ONE_BITS_H
#define COUNT_ONE_BITS_H 1
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <limits.h>
#include <stdlib.h>
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef COUNT_ONE_BITS_INLINE
# define COUNT_ONE_BITS_INLINE _GL_INLINE
diff --git a/lib/count-trailing-zeros.h b/lib/count-trailing-zeros.h
index ef8e164126..9b33df76f6 100644
--- a/lib/count-trailing-zeros.h
+++ b/lib/count-trailing-zeros.h
@@ -19,12 +19,14 @@
#ifndef COUNT_TRAILING_ZEROS_H
#define COUNT_TRAILING_ZEROS_H 1
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <limits.h>
#include <stdlib.h>
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef COUNT_TRAILING_ZEROS_INLINE
# define COUNT_TRAILING_ZEROS_INLINE _GL_INLINE
diff --git a/lib/ctype.in.h b/lib/ctype.in.h
index 9ae63f911a..8f7b68aa0f 100644
--- a/lib/ctype.in.h
+++ b/lib/ctype.in.h
@@ -36,6 +36,11 @@
#ifndef _@GUARD_PREFIX@_CTYPE_H
#define _@GUARD_PREFIX@_CTYPE_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
/* The definition of _GL_WARN_ON_USE is copied here. */
diff --git a/lib/dfa.h b/lib/dfa.h
index 6ac30ffac3..117332694e 100644
--- a/lib/dfa.h
+++ b/lib/dfa.h
@@ -21,6 +21,12 @@
#ifndef DFA_H_
#define DFA_H_
+/* This file uses _Noreturn, _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC,
+ _GL_ATTRIBUTE_PURE, _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include "idx.h"
#include <regex.h>
#include <stddef.h>
diff --git a/lib/di-set.h b/lib/di-set.h
index 10dacd584e..01e10c891f 100644
--- a/lib/di-set.h
+++ b/lib/di-set.h
@@ -19,6 +19,12 @@
#ifndef _GL_DI_SET_H
# define _GL_DI_SET_H
+/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC,
+ _GL_ATTRIBUTE_NONNULL. */
+# if !_GL_CONFIG_H_INCLUDED
+# error "Please include config.h first."
+# endif
+
# include <sys/types.h>
struct di_set;
diff --git a/lib/dirent-safer.h b/lib/dirent-safer.h
index e7d00c5771..d9dad70ed0 100644
--- a/lib/dirent-safer.h
+++ b/lib/dirent-safer.h
@@ -17,6 +17,11 @@
/* Written by Eric Blake. */
+/* This file uses _GL_ATTRIBUTE_DEALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <dirent.h>
#ifdef __cplusplus
diff --git a/lib/dirent.in.h b/lib/dirent.in.h
index 2aaabd054a..e4e65bdeb8 100644
--- a/lib/dirent.in.h
+++ b/lib/dirent.in.h
@@ -29,6 +29,12 @@
#ifndef _@GUARD_PREFIX@_DIRENT_H
#define _@GUARD_PREFIX@_DIRENT_H
+/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC,
+ _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get ino_t. Needed on some systems, including glibc 2.8. */
#include <sys/types.h>
diff --git a/lib/dirname.h b/lib/dirname.h
index f98e83bd4c..0344f1c44c 100644
--- a/lib/dirname.h
+++ b/lib/dirname.h
@@ -19,6 +19,12 @@
#ifndef DIRNAME_H_
# define DIRNAME_H_ 1
+/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_PURE,
+ _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
# include <stdlib.h>
# include "filename.h"
# include "basename-lgpl.h"
diff --git a/lib/eealloc.h b/lib/eealloc.h
index 6a897072d7..6666f172c6 100644
--- a/lib/eealloc.h
+++ b/lib/eealloc.h
@@ -29,11 +29,14 @@
and realloc() this way; on such platforms the workalikes are aliased
to the original malloc()/realloc() functions. */
-#include <stdlib.h>
-
-#ifndef _GL_INLINE_HEADER_BEGIN
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_ALLOC_SIZE,
+ _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
+
+#include <stdlib.h>
+
_GL_INLINE_HEADER_BEGIN
#ifndef EEALLOC_INLINE
# define EEALLOC_INLINE _GL_INLINE
diff --git a/lib/eloop-threshold.h b/lib/eloop-threshold.h
index 510f261795..d9b154e486 100644
--- a/lib/eloop-threshold.h
+++ b/lib/eloop-threshold.h
@@ -19,6 +19,11 @@
#ifndef _ELOOP_THRESHOLD_H
#define _ELOOP_THRESHOLD_H 1
+/* This file uses _GL_ATTRIBUTE_CONST. */
+#if !_LIBC && !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <limits.h>
#ifdef _LIBC
# include <sys/param.h>
diff --git a/lib/error.in.h b/lib/error.in.h
index dcb49d1608..9a520f1ee3 100644
--- a/lib/error.in.h
+++ b/lib/error.in.h
@@ -30,6 +30,11 @@
#ifndef _@GUARD_PREFIX@_ERROR_H
#define _@GUARD_PREFIX@_ERROR_H
+/* This file uses _GL_ATTRIBUTE_FORMAT. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM. */
#include <stdio.h>
diff --git a/lib/exclude.h b/lib/exclude.h
index a16b8171b6..c91e04316a 100644
--- a/lib/exclude.h
+++ b/lib/exclude.h
@@ -19,6 +19,12 @@
#ifndef _GL_EXCLUDE_H
#define _GL_EXCLUDE_H 1
+/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC,
+ _GL_ATTRIBUTE_NONNULL, _GL_ATTRIBUTE_PURE, _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdio.h>
/* Written by Paul Eggert <eggert@twinsun.com>
diff --git a/lib/execinfo.in.h b/lib/execinfo.in.h
index ff9293b632..56b04d1d86 100644
--- a/lib/execinfo.in.h
+++ b/lib/execinfo.in.h
@@ -20,9 +20,11 @@
#ifndef _GL_EXECINFO_H
#define _GL_EXECINFO_H
-#ifndef _GL_INLINE_HEADER_BEGIN
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */
+#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
+
_GL_INLINE_HEADER_BEGIN
#ifndef _GL_EXECINFO_INLINE
# define _GL_EXECINFO_INLINE _GL_INLINE
diff --git a/lib/fatal-signal.h b/lib/fatal-signal.h
index 7baae2e15b..fed4f4bb66 100644
--- a/lib/fatal-signal.h
+++ b/lib/fatal-signal.h
@@ -19,6 +19,11 @@
#ifndef _FATAL_SIGNAL_H
#define _FATAL_SIGNAL_H
+/* This file uses _GL_ASYNC_SAFE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <signal.h>
#ifdef __cplusplus
diff --git a/lib/fcntl.in.h b/lib/fcntl.in.h
index e034eaf9f5..595e348223 100644
--- a/lib/fcntl.in.h
+++ b/lib/fcntl.in.h
@@ -74,6 +74,11 @@
#ifndef _@GUARD_PREFIX@_FCNTL_H
#define _@GUARD_PREFIX@_FCNTL_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */
# include <unistd.h>
#endif
diff --git a/lib/file-type.h b/lib/file-type.h
index 3301729e5a..2c5a8e9afd 100644
--- a/lib/file-type.h
+++ b/lib/file-type.h
@@ -21,6 +21,11 @@
#ifndef FILE_TYPE_H
# define FILE_TYPE_H 1
+/* This file uses _GL_ATTRIBUTE_PURE. */
+# if !_GL_CONFIG_H_INCLUDED
+# error "Please include config.h first."
+# endif
+
# include <sys/types.h>
# include <sys/stat.h>
diff --git a/lib/filenamecat.h b/lib/filenamecat.h
index ab867f9c81..29a4daafd4 100644
--- a/lib/filenamecat.h
+++ b/lib/filenamecat.h
@@ -18,6 +18,11 @@
/* Written by Jim Meyering. */
+/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h>
#if GNULIB_FILENAMECAT
diff --git a/lib/filevercmp.h b/lib/filevercmp.h
index 6b81ab32a7..9e052bdd08 100644
--- a/lib/filevercmp.h
+++ b/lib/filevercmp.h
@@ -20,6 +20,11 @@
#ifndef FILEVERCMP_H
#define FILEVERCMP_H
+/* This file uses _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stddef.h>
/* Compare strings A and B as file names containing version numbers,
diff --git a/lib/flexmember.h b/lib/flexmember.h
index a6cc876a6d..8c5915ecf9 100644
--- a/lib/flexmember.h
+++ b/lib/flexmember.h
@@ -20,6 +20,11 @@
Written by Paul Eggert. */
+/* This file uses _Alignof. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stddef.h>
/* Nonzero multiple of alignment of TYPE, suitable for FLEXSIZEOF below.
diff --git a/lib/fnmatch.in.h b/lib/fnmatch.in.h
index e8d19e2751..2502c61aa2 100644
--- a/lib/fnmatch.in.h
+++ b/lib/fnmatch.in.h
@@ -32,6 +32,11 @@
#ifndef _@GUARD_PREFIX@_FNMATCH_H
#define _@GUARD_PREFIX@_FNMATCH_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
/* The definition of _GL_ARG_NONNULL is copied here. */
diff --git a/lib/fpending.h b/lib/fpending.h
index 5e860db681..0585dcb329 100644
--- a/lib/fpending.h
+++ b/lib/fpending.h
@@ -18,6 +18,11 @@
Written by Jim Meyering. */
+/* This file uses _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stddef.h>
#include <stdio.h>
#if HAVE_STDIO_EXT_H
diff --git a/lib/freadable.h b/lib/freadable.h
index 1a676b106f..c5d5d5cfb9 100644
--- a/lib/freadable.h
+++ b/lib/freadable.h
@@ -14,6 +14,11 @@
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
+/* This file uses _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdio.h>
/* Return true if the stream STREAM supports reading, false if it supports
diff --git a/lib/freadahead.h b/lib/freadahead.h
index 91c74d525c..d47026a05a 100644
--- a/lib/freadahead.h
+++ b/lib/freadahead.h
@@ -14,6 +14,11 @@
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
+/* This file uses _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stddef.h>
#include <stdio.h>
diff --git a/lib/freading.h b/lib/freading.h
index 27b3abbc76..c18ea4a292 100644
--- a/lib/freading.h
+++ b/lib/freading.h
@@ -14,6 +14,11 @@
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
+/* This file uses _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdio.h>
/* Return true if the stream STREAM is opened read-only, or if the
diff --git a/lib/fts_.h b/lib/fts_.h
index 6de50bf692..fa3d4146e2 100644
--- a/lib/fts_.h
+++ b/lib/fts_.h
@@ -49,6 +49,11 @@
#ifndef _FTS_H
# define _FTS_H 1
+/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_NODISCARD. */
+# if !_LIBC && !_GL_CONFIG_H_INCLUDED
+# error "Please include config.h first."
+# endif
+
# ifdef _LIBC
# include <features.h>
# if __STDC_VERSION__ < 199901L
diff --git a/lib/fwritable.h b/lib/fwritable.h
index f87b112194..d3c0b46615 100644
--- a/lib/fwritable.h
+++ b/lib/fwritable.h
@@ -14,6 +14,11 @@
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
+/* This file uses _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdio.h>
/* Return true if the stream STREAM supports writing, false if it supports
diff --git a/lib/fwriting.h b/lib/fwriting.h
index 91e060081f..28cb2c878a 100644
--- a/lib/fwriting.h
+++ b/lib/fwriting.h
@@ -14,6 +14,11 @@
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
+/* This file uses _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdio.h>
/* Return true if the stream STREAM is opened write-only or
diff --git a/lib/gc.h b/lib/gc.h
index 1b94e36693..69a251f550 100644
--- a/lib/gc.h
+++ b/lib/gc.h
@@ -19,6 +19,11 @@
#ifndef _GL_GC_H
# define _GL_GC_H
+/* This file uses _GL_ATTRIBUTE_CONST. */
+# if !_GL_CONFIG_H_INCLUDED
+# error "Please include config.h first."
+# endif
+
/* Get size_t. */
# include <stddef.h>
diff --git a/lib/get_progname_of.h b/lib/get_progname_of.h
index 58b21accdb..a6b75195f8 100644
--- a/lib/get_progname_of.h
+++ b/lib/get_progname_of.h
@@ -18,6 +18,11 @@
#ifndef _GET_PROGNAME_OF_H
#define _GET_PROGNAME_OF_H
+/* This file uses _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h>
#include <sys/types.h>
diff --git a/lib/gethrxtime.h b/lib/gethrxtime.h
index 4a6847b725..3a1340b69d 100644
--- a/lib/gethrxtime.h
+++ b/lib/gethrxtime.h
@@ -20,11 +20,13 @@
#ifndef GETHRXTIME_H_
#define GETHRXTIME_H_ 1
-#include "xtime.h"
-
-#ifndef _GL_INLINE_HEADER_BEGIN
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */
+#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
+
+#include "xtime.h"
+
_GL_INLINE_HEADER_BEGIN
#ifndef GETHRXTIME_INLINE
# define GETHRXTIME_INLINE _GL_INLINE
diff --git a/lib/gl_list.h b/lib/gl_list.h
index 9bb3d38206..b550db0672 100644
--- a/lib/gl_list.h
+++ b/lib/gl_list.h
@@ -18,11 +18,14 @@
#ifndef _GL_LIST_H
#define _GL_LIST_H
-#include <stddef.h>
-
-#ifndef _GL_INLINE_HEADER_BEGIN
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE,
+ _GL_ATTRIBUTE_NODISCARD. */
+#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
+
+#include <stddef.h>
+
_GL_INLINE_HEADER_BEGIN
#ifndef GL_LIST_INLINE
# define GL_LIST_INLINE _GL_INLINE
diff --git a/lib/gl_map.h b/lib/gl_map.h
index f646ce8f51..12846f44d1 100644
--- a/lib/gl_map.h
+++ b/lib/gl_map.h
@@ -18,11 +18,14 @@
#ifndef _GL_MAP_H
#define _GL_MAP_H
-#include <stddef.h>
-
-#ifndef _GL_INLINE_HEADER_BEGIN
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE,
+ _GL_ATTRIBUTE_NODISCARD. */
+#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
+
+#include <stddef.h>
+
_GL_INLINE_HEADER_BEGIN
#ifndef GL_MAP_INLINE
# define GL_MAP_INLINE _GL_INLINE
diff --git a/lib/gl_omap.h b/lib/gl_omap.h
index 180c5df448..124c6d0852 100644
--- a/lib/gl_omap.h
+++ b/lib/gl_omap.h
@@ -18,11 +18,14 @@
#ifndef _GL_OMAP_H
#define _GL_OMAP_H
-#include <stddef.h>
-
-#ifndef _GL_INLINE_HEADER_BEGIN
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE,
+ _GL_ATTRIBUTE_NODISCARD. */
+#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
+
+#include <stddef.h>
+
_GL_INLINE_HEADER_BEGIN
#ifndef GL_OMAP_INLINE
# define GL_OMAP_INLINE _GL_INLINE
diff --git a/lib/gl_openssl.h b/lib/gl_openssl.h
index f63c386ecb..159a837f1a 100644
--- a/lib/gl_openssl.h
+++ b/lib/gl_openssl.h
@@ -17,13 +17,15 @@
/* Written by Pádraig Brady */
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#ifndef GL_OPENSSL_NAME
# error "Please define GL_OPENSSL_NAME to 1,5,256 etc."
#endif
-#ifndef _GL_INLINE_HEADER_BEGIN
-# error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef GL_OPENSSL_INLINE
# define GL_OPENSSL_INLINE _GL_INLINE
diff --git a/lib/gl_oset.h b/lib/gl_oset.h
index 890056484a..d5f20297b8 100644
--- a/lib/gl_oset.h
+++ b/lib/gl_oset.h
@@ -18,11 +18,14 @@
#ifndef _GL_OSET_H
#define _GL_OSET_H
-#include <stddef.h>
-
-#ifndef _GL_INLINE_HEADER_BEGIN
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE,
+ _GL_ATTRIBUTE_NODISCARD. */
+#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
+
+#include <stddef.h>
+
_GL_INLINE_HEADER_BEGIN
#ifndef GL_OSET_INLINE
# define GL_OSET_INLINE _GL_INLINE
diff --git a/lib/gl_set.h b/lib/gl_set.h
index b600ad572e..e88e2552bd 100644
--- a/lib/gl_set.h
+++ b/lib/gl_set.h
@@ -18,11 +18,14 @@
#ifndef _GL_SET_H
#define _GL_SET_H
-#include <stddef.h>
-
-#ifndef _GL_INLINE_HEADER_BEGIN
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE,
+ _GL_ATTRIBUTE_NODISCARD. */
+#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
+
+#include <stddef.h>
+
_GL_INLINE_HEADER_BEGIN
#ifndef GL_SET_INLINE
# define GL_SET_INLINE _GL_INLINE
diff --git a/lib/gl_xlist.h b/lib/gl_xlist.h
index f5fd929bbe..91ed804b9d 100644
--- a/lib/gl_xlist.h
+++ b/lib/gl_xlist.h
@@ -18,12 +18,15 @@
#ifndef _GL_XLIST_H
#define _GL_XLIST_H
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE,
+ _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include "gl_list.h"
#include "xalloc.h"
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef GL_XLIST_INLINE
# define GL_XLIST_INLINE _GL_INLINE
diff --git a/lib/gl_xmap.h b/lib/gl_xmap.h
index cfb2b9c3b9..ad1edbfb76 100644
--- a/lib/gl_xmap.h
+++ b/lib/gl_xmap.h
@@ -18,12 +18,15 @@
#ifndef _GL_XMAP_H
#define _GL_XMAP_H
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE,
+ _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include "gl_map.h"
#include "xalloc.h"
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef GL_XMAP_INLINE
# define GL_XMAP_INLINE _GL_INLINE
diff --git a/lib/gl_xomap.h b/lib/gl_xomap.h
index 4b7da8d019..e9115627d2 100644
--- a/lib/gl_xomap.h
+++ b/lib/gl_xomap.h
@@ -18,12 +18,15 @@
#ifndef _GL_XOMAP_H
#define _GL_XOMAP_H
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE,
+ _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include "gl_omap.h"
#include "xalloc.h"
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef GL_XOMAP_INLINE
# define GL_XOMAP_INLINE _GL_INLINE
diff --git a/lib/gl_xoset.h b/lib/gl_xoset.h
index f58930985c..5ebb209b2d 100644
--- a/lib/gl_xoset.h
+++ b/lib/gl_xoset.h
@@ -18,12 +18,15 @@
#ifndef _GL_XOSET_H
#define _GL_XOSET_H
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE,
+ _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include "gl_oset.h"
#include "xalloc.h"
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef GL_XOSET_INLINE
# define GL_XOSET_INLINE _GL_INLINE
diff --git a/lib/gl_xset.h b/lib/gl_xset.h
index 769bca8210..921e1f38f4 100644
--- a/lib/gl_xset.h
+++ b/lib/gl_xset.h
@@ -18,12 +18,15 @@
#ifndef _GL_XSET_H
#define _GL_XSET_H
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE,
+ _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include "gl_set.h"
#include "xalloc.h"
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef GL_XSET_INLINE
# define GL_XSET_INLINE _GL_INLINE
diff --git a/lib/gl_xsublist.h b/lib/gl_xsublist.h
index 47db4ab277..5d92e6c3e5 100644
--- a/lib/gl_xsublist.h
+++ b/lib/gl_xsublist.h
@@ -19,12 +19,15 @@
#ifndef _GL_XSUBLIST_H
#define _GL_XSUBLIST_H
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE,
+ _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include "gl_sublist.h"
#include "xalloc.h"
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef GL_XSUBLIST_INLINE
# define GL_XSUBLIST_INLINE _GL_INLINE
diff --git a/lib/glob.in.h b/lib/glob.in.h
index 7fc3ef7347..1f0481d524 100644
--- a/lib/glob.in.h
+++ b/lib/glob.in.h
@@ -32,6 +32,11 @@
#ifndef _@GUARD_PREFIX@_GLOB_H
#define _@GUARD_PREFIX@_GLOB_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
/* The definition of _GL_ARG_NONNULL is copied here. */
diff --git a/lib/glthread/cond.h b/lib/glthread/cond.h
index 5e6f681cac..4c780d2def 100644
--- a/lib/glthread/cond.h
+++ b/lib/glthread/cond.h
@@ -48,6 +48,11 @@
#ifndef _GLTHREAD_COND_H
#define _GLTHREAD_COND_H
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <errno.h>
#include <stdlib.h>
#include <time.h>
@@ -66,10 +71,6 @@
# endif
#endif
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
-
_GL_INLINE_HEADER_BEGIN
#ifndef _GLTHREAD_COND_INLINE
# define _GLTHREAD_COND_INLINE _GL_INLINE
diff --git a/lib/glthread/thread.h b/lib/glthread/thread.h
index 788dc5fe68..091b601e99 100644
--- a/lib/glthread/thread.h
+++ b/lib/glthread/thread.h
@@ -70,6 +70,11 @@
#ifndef _GLTHREAD_THREAD_H
#define _GLTHREAD_THREAD_H
+/* This file uses _Noreturn. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <errno.h>
#include <stdlib.h>
diff --git a/lib/hamt.h b/lib/hamt.h
index 36142418d3..bd025d4cb4 100644
--- a/lib/hamt.h
+++ b/lib/hamt.h
@@ -45,9 +45,12 @@
#ifndef _GL_HAMT_H
#define _GL_HAMT_H
-#ifndef _GL_INLINE_HEADER_BEGIN
-# error "Please include config.h first."
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_DEALLOC,
+ _GL_ATTRIBUTE_NODISCARD. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
#endif
+
_GL_INLINE_HEADER_BEGIN
#ifndef _GL_HAMT_INLINE
# define _GL_HAMT_INLINE _GL_INLINE
diff --git a/lib/hash-pjw-bare.h b/lib/hash-pjw-bare.h
index fb847946fb..7498ca20b4 100644
--- a/lib/hash-pjw-bare.h
+++ b/lib/hash-pjw-bare.h
@@ -14,6 +14,11 @@
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
+/* This file uses _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stddef.h>
/* Compute a hash code for a buffer starting at X and of size N,
diff --git a/lib/hash-pjw.h b/lib/hash-pjw.h
index 5e046c54d4..69af02f2c4 100644
--- a/lib/hash-pjw.h
+++ b/lib/hash-pjw.h
@@ -14,6 +14,11 @@
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
+/* This file uses _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stddef.h>
/* Compute a hash code for a NUL-terminated string starting at X,
diff --git a/lib/hash-triple.h b/lib/hash-triple.h
index 64d437285d..f2cf38b1db 100644
--- a/lib/hash-triple.h
+++ b/lib/hash-triple.h
@@ -19,6 +19,11 @@
#ifndef HASH_TRIPLE_H
#define HASH_TRIPLE_H
+/* This file uses _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <sys/types.h>
#include <sys/stat.h>
diff --git a/lib/hash.h b/lib/hash.h
index fe88b4dda8..be42e5af6a 100644
--- a/lib/hash.h
+++ b/lib/hash.h
@@ -24,6 +24,13 @@
#ifndef HASH_H_
# define HASH_H_
+/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_DEPRECATED,
+ _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_NODISCARD, _GL_ATTRIBUTE_PURE,
+ _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
# include <stdio.h>
# ifdef __cplusplus
diff --git a/lib/i-ring.h b/lib/i-ring.h
index a2e0c7a571..e10b5d980b 100644
--- a/lib/i-ring.h
+++ b/lib/i-ring.h
@@ -15,6 +15,11 @@
along with this program. If not, see <https://www.gnu.org/licenses/>. */
+/* This file uses _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
enum { I_RING_SIZE = 4 };
static_assert (1 <= I_RING_SIZE);
diff --git a/lib/ialloc.h b/lib/ialloc.h
index 275237ccb1..8d49887b6a 100644
--- a/lib/ialloc.h
+++ b/lib/ialloc.h
@@ -18,15 +18,18 @@
#ifndef IALLOC_H_
#define IALLOC_H_
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_COLD,
+ _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include "idx.h"
#include <errno.h>
#include <stdint.h>
#include <stdlib.h>
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef IALLOC_INLINE
# define IALLOC_INLINE _GL_INLINE
diff --git a/lib/iconv.in.h b/lib/iconv.in.h
index 09943a72cb..49390e98ca 100644
--- a/lib/iconv.in.h
+++ b/lib/iconv.in.h
@@ -28,6 +28,11 @@
#ifndef _@GUARD_PREFIX@_ICONV_H
#define _@GUARD_PREFIX@_ICONV_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
/* The definition of _GL_ARG_NONNULL is copied here. */
diff --git a/lib/ino-map.h b/lib/ino-map.h
index 06a664b3ed..a71d7bcfbb 100644
--- a/lib/ino-map.h
+++ b/lib/ino-map.h
@@ -19,6 +19,12 @@
#ifndef _GL_INO_MAP_H
# define _GL_INO_MAP_H
+/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC,
+ _GL_ATTRIBUTE_NONNULL. */
+# if !_GL_CONFIG_H_INCLUDED
+# error "Please include config.h first."
+# endif
+
# include <sys/types.h>
# define INO_MAP_INSERT_FAILURE ((size_t) -1)
diff --git a/lib/inttostr.h b/lib/inttostr.h
index 6fbe2312bf..7e653f2d1f 100644
--- a/lib/inttostr.h
+++ b/lib/inttostr.h
@@ -17,6 +17,11 @@
/* Written by Paul Eggert */
+/* This file uses _GL_ATTRIBUTE_NODISCARD. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdint.h>
#include <sys/types.h>
diff --git a/lib/inttypes.in.h b/lib/inttypes.in.h
index 5b7ef12dc7..aa8258d33c 100644
--- a/lib/inttypes.in.h
+++ b/lib/inttypes.in.h
@@ -46,6 +46,11 @@
#if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
#define INTTYPES_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Include <stdint.h> or the gnulib replacement.
But avoid namespace pollution on glibc systems. */
#ifndef __GLIBC__
diff --git a/lib/javaversion.h b/lib/javaversion.h
index 1e89291e7d..99157466b9 100644
--- a/lib/javaversion.h
+++ b/lib/javaversion.h
@@ -18,6 +18,11 @@
#ifndef _JAVAVERSION_H
#define _JAVAVERSION_H
+/* This file uses _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h>
diff --git a/lib/langinfo.in.h b/lib/langinfo.in.h
index 82e1e3cb1b..057cf15695 100644
--- a/lib/langinfo.in.h
+++ b/lib/langinfo.in.h
@@ -34,6 +34,11 @@
#ifndef _@GUARD_PREFIX@_LANGINFO_H
#define _@GUARD_PREFIX@_LANGINFO_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#if !@HAVE_LANGINFO_H@
diff --git a/lib/locale.in.h b/lib/locale.in.h
index e37702c4eb..917a43b02d 100644
--- a/lib/locale.in.h
+++ b/lib/locale.in.h
@@ -44,6 +44,11 @@
#ifndef _@GUARD_PREFIX@_LOCALE_H
#define _@GUARD_PREFIX@_LOCALE_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* NetBSD 5.0 mis-defines NULL. */
#include <stddef.h>
diff --git a/lib/localename.h b/lib/localename.h
index bfb429cb4d..f5663a6b37 100644
--- a/lib/localename.h
+++ b/lib/localename.h
@@ -17,6 +17,11 @@
#ifndef _GL_LOCALENAME_H
#define _GL_LOCALENAME_H
+/* This file uses _GL_ATTRIBUTE_CONST. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/lib/malloc.in.h b/lib/malloc.in.h
index 2fcbe23535..3da05c2057 100644
--- a/lib/malloc.in.h
+++ b/lib/malloc.in.h
@@ -46,6 +46,11 @@
#ifndef _@GUARD_PREFIX@_MALLOC_H
#define _@GUARD_PREFIX@_MALLOC_H
+/* This file uses _GL_ATTRIBUTE_DEALLOC, GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Solaris declares memalign() in <stdlib.h>, not in <malloc.h>. */
#if defined __sun || defined __hpux
# include <stdlib.h>
diff --git a/lib/malloca.h b/lib/malloca.h
index 325c727717..576a56de40 100644
--- a/lib/malloca.h
+++ b/lib/malloca.h
@@ -18,6 +18,12 @@
#ifndef _MALLOCA_H
#define _MALLOCA_H
+/* This file uses _GL_ATTRIBUTE_ALLOC_SIZE, _GL_ATTRIBUTE_DEALLOC,
+ _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <alloca.h>
#include <stddef.h>
#include <stdlib.h>
diff --git a/lib/math.in.h b/lib/math.in.h
index 76d48a4443..9d0e6918aa 100644
--- a/lib/math.in.h
+++ b/lib/math.in.h
@@ -48,14 +48,17 @@
#ifndef _@GUARD_PREFIX@_MATH_H
#define _@GUARD_PREFIX@_MATH_H
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_CONST,
+ GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* On OpenVMS, NAN, INFINITY, and HUGEVAL macros are defined in <fp.h>. */
#if defined __VMS && ! defined NAN
# include <fp.h>
#endif
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef _GL_MATH_INLINE
# define _GL_MATH_INLINE _GL_INLINE
diff --git a/lib/mbchar.h b/lib/mbchar.h
index 65050c023b..a2ff1d8b21 100644
--- a/lib/mbchar.h
+++ b/lib/mbchar.h
@@ -144,13 +144,15 @@
#ifndef _MBCHAR_H
#define _MBCHAR_H 1
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <string.h>
#include <wchar.h>
#include <wctype.h>
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef MBCHAR_INLINE
# define MBCHAR_INLINE _GL_INLINE
diff --git a/lib/mbfile.h b/lib/mbfile.h
index faf95f4be7..3482f394b9 100644
--- a/lib/mbfile.h
+++ b/lib/mbfile.h
@@ -47,6 +47,11 @@
#ifndef _MBFILE_H
#define _MBFILE_H 1
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <assert.h>
#include <stdio.h>
#include <string.h>
@@ -54,9 +59,6 @@
#include "mbchar.h"
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef MBFILE_INLINE
# define MBFILE_INLINE _GL_INLINE
diff --git a/lib/mbiter.h b/lib/mbiter.h
index ce901932f1..7b41870b55 100644
--- a/lib/mbiter.h
+++ b/lib/mbiter.h
@@ -82,6 +82,11 @@
#ifndef _MBITER_H
#define _MBITER_H 1
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <assert.h>
#include <stddef.h>
#include <string.h>
@@ -89,9 +94,6 @@
#include "mbchar.h"
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef MBITER_INLINE
# define MBITER_INLINE _GL_INLINE
diff --git a/lib/mbuiter.h b/lib/mbuiter.h
index fc1b9dbb32..7a619f19e1 100644
--- a/lib/mbuiter.h
+++ b/lib/mbuiter.h
@@ -89,6 +89,11 @@
#ifndef _MBUITER_H
#define _MBUITER_H 1
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <assert.h>
#include <stddef.h>
#include <stdlib.h>
@@ -98,9 +103,6 @@
#include "mbchar.h"
#include "strnlen1.h"
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef MBUITER_INLINE
# define MBUITER_INLINE _GL_INLINE
diff --git a/lib/memcasecmp.h b/lib/memcasecmp.h
index d8732401df..e5101aff03 100644
--- a/lib/memcasecmp.h
+++ b/lib/memcasecmp.h
@@ -17,6 +17,11 @@
/* Written by Jim Meyering. */
+/* This file uses _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stddef.h>
int memcasecmp (const void *vs1, const void *vs2, size_t n) _GL_ATTRIBUTE_PURE;
diff --git a/lib/memchr2.h b/lib/memchr2.h
index 51d8e7bbcf..6554a676b4 100644
--- a/lib/memchr2.h
+++ b/lib/memchr2.h
@@ -14,6 +14,11 @@
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
+/* This file uses _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stddef.h>
#ifdef __cplusplus
diff --git a/lib/memcmp2.h b/lib/memcmp2.h
index abcf3e7650..0878a73e73 100644
--- a/lib/memcmp2.h
+++ b/lib/memcmp2.h
@@ -17,6 +17,11 @@
#ifndef MEMCMP2_H
#define MEMCMP2_H
+/* This file uses _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stddef.h>
#ifdef __cplusplus
diff --git a/lib/modechange.h b/lib/modechange.h
index cd613c8555..b4fc36a563 100644
--- a/lib/modechange.h
+++ b/lib/modechange.h
@@ -19,6 +19,11 @@
#if ! defined MODECHANGE_H_
# define MODECHANGE_H_
+/* This file uses _GL_ATTRIBUTE_MALLOC. */
+# if !_GL_CONFIG_H_INCLUDED
+# error "Please include config.h first."
+# endif
+
# include <stdlib.h>
# include <sys/types.h>
diff --git a/lib/monetary.in.h b/lib/monetary.in.h
index 255958d2d8..45a92802b5 100644
--- a/lib/monetary.in.h
+++ b/lib/monetary.in.h
@@ -29,6 +29,11 @@
#ifndef _@GUARD_PREFIX@_MONETARY_H
#define _@GUARD_PREFIX@_MONETARY_H
+/* This file uses _GL_ATTRIBUTE_FORMAT, GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#if @GNULIB_STRFMON_L@
# if @HAVE_XLOCALE_H@
/* Get locale_t on Mac OS X 10.12. */
diff --git a/lib/mountlist.h b/lib/mountlist.h
index aed7f8877f..d33f13a036 100644
--- a/lib/mountlist.h
+++ b/lib/mountlist.h
@@ -19,6 +19,11 @@
#ifndef MOUNTLIST_H_
# define MOUNTLIST_H_
+/* This file uses _GL_ATTRIBUTE_MALLOC. */
+# if !_GL_CONFIG_H_INCLUDED
+# error "Please include config.h first."
+# endif
+
# include <sys/types.h>
/* A mount table entry. */
diff --git a/lib/netdb.in.h b/lib/netdb.in.h
index 9549cd7326..ea5ff40c60 100644
--- a/lib/netdb.in.h
+++ b/lib/netdb.in.h
@@ -36,6 +36,11 @@
#ifndef _@GUARD_PREFIX@_NETDB_H
#define _@GUARD_PREFIX@_NETDB_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get <netdb.h> definitions such as 'socklen_t' on IRIX 6.5 and OSF/1 4.0 and
'struct hostent' on MinGW. */
#include <sys/socket.h>
diff --git a/lib/obstack.h b/lib/obstack.h
index 1e66e4d4c8..cb080c33b5 100644
--- a/lib/obstack.h
+++ b/lib/obstack.h
@@ -103,6 +103,11 @@
#ifndef _OBSTACK_H
#define _OBSTACK_H 1
+/* This file uses _Noreturn, _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#ifndef _OBSTACK_INTERFACE_VERSION
# define _OBSTACK_INTERFACE_VERSION 2
#endif
diff --git a/lib/openat.h b/lib/openat.h
index 37d8eedbee..ba4a780dc0 100644
--- a/lib/openat.h
+++ b/lib/openat.h
@@ -19,15 +19,18 @@
#ifndef _GL_HEADER_OPENAT
#define _GL_HEADER_OPENAT
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _Noreturn,
+ _GL_ATTRIBUTE_DEPRECATED. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#if !HAVE_OPENAT
diff --git a/lib/opendirat.h b/lib/opendirat.h
index 9e445cd29a..5934e89bcd 100644
--- a/lib/opendirat.h
+++ b/lib/opendirat.h
@@ -15,6 +15,11 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
+/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <dirent.h>
DIR *opendirat (int, char const *, int, int *)
diff --git a/lib/pagealign_alloc.h b/lib/pagealign_alloc.h
index 8f2083c446..e8ed6551c5 100644
--- a/lib/pagealign_alloc.h
+++ b/lib/pagealign_alloc.h
@@ -18,6 +18,13 @@
#ifndef _PAGEALIGN_ALLOC_H
# define _PAGEALIGN_ALLOC_H
+/* This file uses _GL_ATTRIBUTE_ALLOC_SIZE, _GL_ATTRIBUTE_DEALLOC,
+ _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_NONNULL,
+ _GL_ATTRIBUTE_RETURNS_NONNULL. */
+# if !_GL_CONFIG_H_INCLUDED
+# error "Please include config.h first."
+# endif
+
# include <stddef.h>
/* Free a memory block.
diff --git a/lib/pipe-filter-aux.h b/lib/pipe-filter-aux.h
index 6294d0df85..4d60ddace9 100644
--- a/lib/pipe-filter-aux.h
+++ b/lib/pipe-filter-aux.h
@@ -15,9 +15,11 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
-#ifndef _GL_INLINE_HEADER_BEGIN
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */
+#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
+
_GL_INLINE_HEADER_BEGIN
#ifndef PIPE_FILTER_AUX_INLINE
# define PIPE_FILTER_AUX_INLINE _GL_INLINE
diff --git a/lib/pipe-filter.h b/lib/pipe-filter.h
index d93ba9d84d..219f07c901 100644
--- a/lib/pipe-filter.h
+++ b/lib/pipe-filter.h
@@ -19,6 +19,11 @@
#ifndef _PIPE_FILTER_H
#define _PIPE_FILTER_H
+/* This file uses _GL_ATTRIBUTE_DEALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stddef.h>
#ifdef __cplusplus
diff --git a/lib/poll.in.h b/lib/poll.in.h
index 9a15ef6732..5ae097fa60 100644
--- a/lib/poll.in.h
+++ b/lib/poll.in.h
@@ -33,6 +33,11 @@
#ifndef _@GUARD_PREFIX@_POLL_H
#define _@GUARD_PREFIX@_POLL_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* On native Windows, get the 'struct pollfd' type and the POLL* macro
definitions before we override them. mingw defines them in <winsock2.h>
if _WIN32_WINNT >= 0x0600. */
diff --git a/lib/priv-set.h b/lib/priv-set.h
index 78af45038f..e9ffc0c9aa 100644
--- a/lib/priv-set.h
+++ b/lib/priv-set.h
@@ -17,9 +17,11 @@
Written by David Bartley. */
-#ifndef _GL_INLINE_HEADER_BEGIN
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */
+#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
+
_GL_INLINE_HEADER_BEGIN
#ifndef PRIV_SET_INLINE
# define PRIV_SET_INLINE _GL_INLINE
diff --git a/lib/pthread.in.h b/lib/pthread.in.h
index 4f206681a9..ff6ad34a32 100644
--- a/lib/pthread.in.h
+++ b/lib/pthread.in.h
@@ -51,6 +51,11 @@
#ifndef _@GUARD_PREFIX@_PTHREAD_H_
#define _@GUARD_PREFIX@_PTHREAD_H_
+/* This file uses _Noreturn, _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#define __need_system_stdlib_h
#include <stdlib.h>
#undef __need_system_stdlib_h
diff --git a/lib/pty.in.h b/lib/pty.in.h
index 8f7b81071a..f746234428 100644
--- a/lib/pty.in.h
+++ b/lib/pty.in.h
@@ -29,6 +29,11 @@
#ifndef _@GUARD_PREFIX@_PTY_H
#define _@GUARD_PREFIX@_PTY_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Some platforms declare this in a different header than glibc. */
#if @HAVE_UTIL_H@
# include <util.h>
diff --git a/lib/quotearg.h b/lib/quotearg.h
index eb156126cb..baab58668f 100644
--- a/lib/quotearg.h
+++ b/lib/quotearg.h
@@ -21,6 +21,11 @@
#ifndef QUOTEARG_H_
# define QUOTEARG_H_ 1
+/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */
+# if !_GL_CONFIG_H_INCLUDED
+# error "Please include config.h first."
+# endif
+
# include <stdlib.h>
/* Basic quoting styles. For each style, an example is given on the
diff --git a/lib/read-file.h b/lib/read-file.h
index 4122954e9b..5a241369c5 100644
--- a/lib/read-file.h
+++ b/lib/read-file.h
@@ -18,6 +18,11 @@
#ifndef READ_FILE_H
#define READ_FILE_H
+/* This file uses _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get size_t, free(). */
#include <stdlib.h>
diff --git a/lib/readline.h b/lib/readline.h
index 3840d0fc2a..9048b727d7 100644
--- a/lib/readline.h
+++ b/lib/readline.h
@@ -18,6 +18,11 @@
#ifndef GL_READLINE_H
#define GL_READLINE_H
+/* This file uses _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#if HAVE_READLINE_READLINE_H
/* <readline/readline.h> makes use of the FILE type without including
<stdio.h> itself. */
diff --git a/lib/readutmp.h b/lib/readutmp.h
index bf2437e02a..eda80a44fa 100644
--- a/lib/readutmp.h
+++ b/lib/readutmp.h
@@ -20,6 +20,11 @@
#ifndef __READUTMP_H__
# define __READUTMP_H__
+/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */
+# if !_GL_CONFIG_H_INCLUDED
+# error "Please include config.h first."
+# endif
+
# include <stdlib.h>
# include <sys/types.h>
diff --git a/lib/regex-quote.h b/lib/regex-quote.h
index cc704b2bbc..db8c249e50 100644
--- a/lib/regex-quote.h
+++ b/lib/regex-quote.h
@@ -18,6 +18,11 @@
#ifndef _REGEX_QUOTE_H
#define _REGEX_QUOTE_H
+/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h>
/* Specifies a quotation task for converting a fixed string to a regular
diff --git a/lib/relocatable.h b/lib/relocatable.h
index ce8238a906..b29c29ed1b 100644
--- a/lib/relocatable.h
+++ b/lib/relocatable.h
@@ -18,6 +18,11 @@
#ifndef _RELOCATABLE_H
#define _RELOCATABLE_H
+/* This file uses _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h>
#ifdef __cplusplus
diff --git a/lib/safe-alloc.h b/lib/safe-alloc.h
index 6896e88147..46079d5c69 100644
--- a/lib/safe-alloc.h
+++ b/lib/safe-alloc.h
@@ -20,11 +20,14 @@
#ifndef SAFE_ALLOC_H_
#define SAFE_ALLOC_H_
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE,
+ _GL_ATTRIBUTE_NODISCARD. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h>
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef SAFE_ALLOC_INLINE
# define SAFE_ALLOC_INLINE _GL_INLINE
diff --git a/lib/savedir.h b/lib/savedir.h
index 0cc7c4eeaf..a1244ccbe4 100644
--- a/lib/savedir.h
+++ b/lib/savedir.h
@@ -21,6 +21,11 @@
#ifndef _GL_SAVEDIR_H
#define _GL_SAVEDIR_H
+/* This file uses _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <dirent.h>
#include <stdlib.h>
diff --git a/lib/savewd.h b/lib/savewd.h
index 4f69c04a05..3727f6a47b 100644
--- a/lib/savewd.h
+++ b/lib/savewd.h
@@ -18,13 +18,15 @@
/* Written by Paul Eggert. */
#ifndef SAVEWD_H
-# define SAVEWD_H 1
+#define SAVEWD_H 1
-#include <sys/types.h>
-
-#ifndef _GL_INLINE_HEADER_BEGIN
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
+
+#include <sys/types.h>
+
_GL_INLINE_HEADER_BEGIN
#ifndef SAVEWD_INLINE
# define SAVEWD_INLINE _GL_INLINE
diff --git a/lib/sched.in.h b/lib/sched.in.h
index 2e035b5548..fb314b86a3 100644
--- a/lib/sched.in.h
+++ b/lib/sched.in.h
@@ -32,6 +32,11 @@
#ifndef _@GUARD_PREFIX@_SCHED_H
#define _@GUARD_PREFIX@_SCHED_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get pid_t.
This is needed on glibc 2.11 (see
glibc bug <https://sourceware.org/bugzilla/show_bug.cgi?id=13198>)
diff --git a/lib/se-context.in.h b/lib/se-context.in.h
index 28515fb522..3847358e7e 100644
--- a/lib/se-context.in.h
+++ b/lib/se-context.in.h
@@ -17,13 +17,16 @@
/* Written by Jim Meyering, 2007. */
#ifndef SELINUX_CONTEXT_H
-# define SELINUX_CONTEXT_H
+#define SELINUX_CONTEXT_H
-# include <errno.h>
-
-#ifndef _GL_INLINE_HEADER_BEGIN
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE,
+ _GL_ATTRIBUTE_MAYBE_UNUSED. */
+#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
+
+#include <errno.h>
+
_GL_INLINE_HEADER_BEGIN
#ifndef SE_CONTEXT_INLINE
# define SE_CONTEXT_INLINE _GL_INLINE
diff --git a/lib/se-label.in.h b/lib/se-label.in.h
index 2e2a6ce8eb..6455808679 100644
--- a/lib/se-label.in.h
+++ b/lib/se-label.in.h
@@ -17,15 +17,17 @@
/* Written by Paul Eggert. */
#ifndef SELINUX_LABEL_H
-
#define SELINUX_LABEL_H
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE,
+ _GL_ATTRIBUTE_MAYBE_UNUSED. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <selinux/selinux.h>
#include <errno.h>
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef SE_LABEL_INLINE
# define SE_LABEL_INLINE _GL_INLINE
diff --git a/lib/se-selinux.in.h b/lib/se-selinux.in.h
index edf273be1f..5ec13dde73 100644
--- a/lib/se-selinux.in.h
+++ b/lib/se-selinux.in.h
@@ -27,12 +27,15 @@
# if !defined _@GUARD_PREFIX@_SELINUX_SELINUX_H
# define _@GUARD_PREFIX@_SELINUX_SELINUX_H
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE,
+ _GL_ATTRIBUTE_MAYBE_UNUSED. */
+# if !_GL_CONFIG_H_INCLUDED
+# error "Please include config.h first."
+# endif
+
# include <sys/types.h>
# include <errno.h>
-# ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-# endif
_GL_INLINE_HEADER_BEGIN
# ifndef SE_SELINUX_INLINE
# define SE_SELINUX_INLINE _GL_INLINE
diff --git a/lib/search.in.h b/lib/search.in.h
index 32b022edc6..c0f5f0a856 100644
--- a/lib/search.in.h
+++ b/lib/search.in.h
@@ -30,6 +30,11 @@
#ifndef _@GUARD_PREFIX@_SEARCH_H
#define _@GUARD_PREFIX@_SEARCH_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
diff --git a/lib/sh-quote.h b/lib/sh-quote.h
index df8e6af6d1..8c377c442c 100644
--- a/lib/sh-quote.h
+++ b/lib/sh-quote.h
@@ -22,6 +22,11 @@
arguments, since Unix shells interpret characters like " ", "'", "<", ">",
"$", '*', '?' etc. in a special way. */
+/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h>
#ifdef __cplusplus
diff --git a/lib/sig-handler.h b/lib/sig-handler.h
index 3ead5fabe6..e85d30b3d3 100644
--- a/lib/sig-handler.h
+++ b/lib/sig-handler.h
@@ -18,11 +18,13 @@
#ifndef _GL_SIG_HANDLER_H
#define _GL_SIG_HANDLER_H
-#include <signal.h>
-
-#ifndef _GL_INLINE_HEADER_BEGIN
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
+
+#include <signal.h>
+
_GL_INLINE_HEADER_BEGIN
#ifndef SIG_HANDLER_INLINE
# define SIG_HANDLER_INLINE _GL_INLINE
diff --git a/lib/signal.in.h b/lib/signal.in.h
index fea12e6572..a7006a2c49 100644
--- a/lib/signal.in.h
+++ b/lib/signal.in.h
@@ -55,6 +55,11 @@
#ifndef _@GUARD_PREFIX@_SIGNAL_H
#define _@GUARD_PREFIX@_SIGNAL_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* For testing the OpenBSD version. */
#if (@GNULIB_PTHREAD_SIGMASK@ || defined GNULIB_POSIXCHECK) \
&& defined __OpenBSD__
diff --git a/lib/sigpipe-die.h b/lib/sigpipe-die.h
index 1917d8cff0..f90edf105f 100644
--- a/lib/sigpipe-die.h
+++ b/lib/sigpipe-die.h
@@ -41,6 +41,11 @@
#ifndef _SIGPIPE_DIE_H
#define _SIGPIPE_DIE_H
+/* This file uses _Noreturn. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/lib/sockets.h b/lib/sockets.h
index a0b1601d6b..55d5e3a4b5 100644
--- a/lib/sockets.h
+++ b/lib/sockets.h
@@ -20,6 +20,11 @@
#ifndef SOCKETS_H
#define SOCKETS_H 1
+/* This file uses _GL_ATTRIBUTE_CONST. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#define SOCKETS_1_0 0x0001
#define SOCKETS_1_1 0x0101
#define SOCKETS_2_0 0x0002
diff --git a/lib/spawn.in.h b/lib/spawn.in.h
index b35e5d77b3..169dd0bf96 100644
--- a/lib/spawn.in.h
+++ b/lib/spawn.in.h
@@ -47,6 +47,11 @@
#ifndef _@GUARD_PREFIX@_SPAWN_H
#define _@GUARD_PREFIX@_SPAWN_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get definitions of 'struct sched_param' and 'sigset_t'.
But avoid namespace pollution on glibc systems. */
#if !(defined __GLIBC__ && !defined __UCLIBC__)
diff --git a/lib/ssfmalloc.h b/lib/ssfmalloc.h
index 510a08d400..87f44014e4 100644
--- a/lib/ssfmalloc.h
+++ b/lib/ssfmalloc.h
@@ -78,6 +78,11 @@
beginning of a page sequence returned by ALLOC_PAGES.
*/
+/* This file uses _GL_CMP. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* =================== Declarations of exported functions =================== */
#include <stdint.h>
diff --git a/lib/stack.h b/lib/stack.h
index 7a1abafc9c..ab6b873176 100644
--- a/lib/stack.h
+++ b/lib/stack.h
@@ -58,6 +58,11 @@
#include "xalloc.h"
*/
+/* This file uses _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#ifndef GL_STACK_ELEMENT
# error "Please define GL_STACK_ELEMENT first."
#endif
diff --git a/lib/stat-time.h b/lib/stat-time.h
index 92aa1e64e2..487e8b0971 100644
--- a/lib/stat-time.h
+++ b/lib/stat-time.h
@@ -20,15 +20,18 @@
#ifndef STAT_TIME_H
#define STAT_TIME_H 1
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_UNUSED,
+ _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <errno.h>
#include <stdckdint.h>
#include <stddef.h>
#include <sys/stat.h>
#include <time.h>
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef _GL_STAT_TIME_INLINE
# define _GL_STAT_TIME_INLINE _GL_INLINE
diff --git a/lib/stdalign.in.h b/lib/stdalign.in.h
index b616c100fd..2503817c87 100644
--- a/lib/stdalign.in.h
+++ b/lib/stdalign.in.h
@@ -37,6 +37,11 @@
#ifndef _@GUARD_PREFIX@_STDALIGN_H
#define _@GUARD_PREFIX@_STDALIGN_H
+/* This file uses alignof, alignas. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#if (defined alignas \
|| (defined __STDC_VERSION__ && 202311 <= __STDC_VERSION__) \
|| (defined __cplusplus && (201103 <= __cplusplus || defined _MSC_VER)))
diff --git a/lib/stdarg.in.h b/lib/stdarg.in.h
index 64baf87f04..8145216e86 100644
--- a/lib/stdarg.in.h
+++ b/lib/stdarg.in.h
@@ -27,6 +27,11 @@
#ifndef _@GUARD_PREFIX@_STDARG_H
#define _@GUARD_PREFIX@_STDARG_H
+/* This file uses va_copy. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#ifndef va_copy
# define va_copy(a,b) ((a) = (b))
#endif
diff --git a/lib/stddef.in.h b/lib/stddef.in.h
index ddbb74cedb..431e819b8b 100644
--- a/lib/stddef.in.h
+++ b/lib/stddef.in.h
@@ -101,6 +101,11 @@ typedef long max_align_t;
# ifndef _@GUARD_PREFIX@_STDDEF_H
# define _@GUARD_PREFIX@_STDDEF_H
+/* This file uses _Noreturn. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Some platforms lack wchar_t. */
#if !@HAVE_WCHAR_T@
# define wchar_t int
diff --git a/lib/stdio-safer.h b/lib/stdio-safer.h
index 9d404f1397..d091a25189 100644
--- a/lib/stdio-safer.h
+++ b/lib/stdio-safer.h
@@ -17,6 +17,11 @@
/* Written by Paul Eggert. */
+/* This file uses _GL_ATTRIBUTE_DEALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdio.h>
#if GNULIB_FOPEN_SAFER
diff --git a/lib/stdio.in.h b/lib/stdio.in.h
index f318014978..9c63e36b2a 100644
--- a/lib/stdio.in.h
+++ b/lib/stdio.in.h
@@ -57,6 +57,12 @@
#ifndef _@GUARD_PREFIX@_STDIO_H
#define _@GUARD_PREFIX@_STDIO_H
+/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_FORMAT,
+ GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get va_list. Needed on many systems, including glibc 2.8. */
#include <stdarg.h>
diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h
index f79c5a9d29..da827a5c7b 100644
--- a/lib/stdlib.in.h
+++ b/lib/stdlib.in.h
@@ -37,6 +37,12 @@
#ifndef _@GUARD_PREFIX@_STDLIB_H
#define _@GUARD_PREFIX@_STDLIB_H
+/* This file uses _Noreturn, _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC,
+ _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* NetBSD 5.0 mis-defines NULL. */
#include <stddef.h>
diff --git a/lib/stdnoreturn.in.h b/lib/stdnoreturn.in.h
index 9a304ef05b..d6d4c2adac 100644
--- a/lib/stdnoreturn.in.h
+++ b/lib/stdnoreturn.in.h
@@ -17,6 +17,11 @@
/* Written by Paul Eggert. */
+/* This file uses _Noreturn. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#ifndef noreturn
/* ISO C11 <stdnoreturn.h> for platforms that lack it.
diff --git a/lib/strerror-override.h b/lib/strerror-override.h
index 388cc28227..c9b3ba8c19 100644
--- a/lib/strerror-override.h
+++ b/lib/strerror-override.h
@@ -18,6 +18,11 @@
#ifndef _GL_STRERROR_OVERRIDE_H
# define _GL_STRERROR_OVERRIDE_H
+/* This file uses _GL_ATTRIBUTE_CONST. */
+# if !_GL_CONFIG_H_INCLUDED
+# error "Please include config.h first."
+# endif
+
# include <errno.h>
# include <stddef.h>
diff --git a/lib/striconv.h b/lib/striconv.h
index d0eb8e642d..6cd7dc31cf 100644
--- a/lib/striconv.h
+++ b/lib/striconv.h
@@ -18,6 +18,11 @@
#ifndef _STRICONV_H
#define _STRICONV_H
+/* This file uses _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h>
#if HAVE_ICONV
#include <iconv.h>
diff --git a/lib/striconveh.h b/lib/striconveh.h
index 7858b03ef6..6bced43e9c 100644
--- a/lib/striconveh.h
+++ b/lib/striconveh.h
@@ -18,6 +18,11 @@
#ifndef _STRICONVEH_H
#define _STRICONVEH_H
+/* This file uses _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h>
#if HAVE_ICONV
#include <iconv.h>
diff --git a/lib/striconveha.h b/lib/striconveha.h
index d0b0f4ddb7..a5c307ea2a 100644
--- a/lib/striconveha.h
+++ b/lib/striconveha.h
@@ -18,6 +18,11 @@
#ifndef _STRICONVEHA_H
#define _STRICONVEHA_H
+/* This file uses _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h>
#include "iconveh.h"
diff --git a/lib/string-buffer.h b/lib/string-buffer.h
index 8e2d80d16e..6cc4a82dec 100644
--- a/lib/string-buffer.h
+++ b/lib/string-buffer.h
@@ -19,6 +19,11 @@
#ifndef _STRING_BUFFER_H
#define _STRING_BUFFER_H
+/* This file uses _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdarg.h>
#include <stdlib.h>
diff --git a/lib/string-desc-quotearg.h b/lib/string-desc-quotearg.h
index b7cb306b89..20237a3bc7 100644
--- a/lib/string-desc-quotearg.h
+++ b/lib/string-desc-quotearg.h
@@ -19,13 +19,16 @@
#ifndef _STRING_DESC_QUOTEARG_H
#define _STRING_DESC_QUOTEARG_H 1
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_MALLOC,
+ _GL_ATTRIBUTE_NONNULL, _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include "string-desc.h"
#include "quotearg.h"
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef GL_STRING_DESC_QUOTEARG_INLINE
# define GL_STRING_DESC_QUOTEARG_INLINE _GL_INLINE
diff --git a/lib/string-desc.h b/lib/string-desc.h
index 9bd086f689..e5204d4ea6 100644
--- a/lib/string-desc.h
+++ b/lib/string-desc.h
@@ -19,6 +19,12 @@
#ifndef _STRING_DESC_H
#define _STRING_DESC_H 1
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE,
+ _GL_ATTRIBUTE_NODISCARD. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get ptrdiff_t. */
#include <stddef.h>
@@ -32,9 +38,6 @@
#include "idx.h"
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef GL_STRING_DESC_INLINE
# define GL_STRING_DESC_INLINE _GL_INLINE
diff --git a/lib/string.in.h b/lib/string.in.h
index b6bf432e1f..f7e46e936f 100644
--- a/lib/string.in.h
+++ b/lib/string.in.h
@@ -44,6 +44,12 @@
#ifndef _@GUARD_PREFIX@_STRING_H
#define _@GUARD_PREFIX@_STRING_H
+/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC,
+ _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* NetBSD 5.0 mis-defines NULL. */
#include <stddef.h>
diff --git a/lib/strings.in.h b/lib/strings.in.h
index 2cfe8b1670..bc5c2a1e88 100644
--- a/lib/strings.in.h
+++ b/lib/strings.in.h
@@ -36,6 +36,11 @@
#ifndef _@GUARD_PREFIX@_STRINGS_H
#define _@GUARD_PREFIX@_STRINGS_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#if ! @HAVE_DECL_STRNCASECMP@
/* Get size_t. */
# include <stddef.h>
diff --git a/lib/strnlen1.h b/lib/strnlen1.h
index 9e5b502bef..02dcd4c4ab 100644
--- a/lib/strnlen1.h
+++ b/lib/strnlen1.h
@@ -17,6 +17,11 @@
#ifndef _STRNLEN1_H
#define _STRNLEN1_H
+/* This file uses _GL_ATTRIBUTE_PURE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stddef.h>
diff --git a/lib/sys_file.in.h b/lib/sys_file.in.h
index d05337ad42..fb402e04c6 100644
--- a/lib/sys_file.in.h
+++ b/lib/sys_file.in.h
@@ -32,6 +32,11 @@
#ifndef _@GUARD_PREFIX@_SYS_FILE_H
#define _@GUARD_PREFIX@_SYS_FILE_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#ifndef LOCK_SH
/* Operations for the 'flock' call (same as Linux kernel constants). */
# define LOCK_SH 1 /* Shared lock. */
diff --git a/lib/sys_ioctl.in.h b/lib/sys_ioctl.in.h
index 86840e45a9..48e9c68090 100644
--- a/lib/sys_ioctl.in.h
+++ b/lib/sys_ioctl.in.h
@@ -29,6 +29,11 @@
#ifndef _@GUARD_PREFIX@_SYS_IOCTL_H
#define _@GUARD_PREFIX@_SYS_IOCTL_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* AIX 5.1 and Solaris 10 declare ioctl() in <unistd.h> and in <stropts.h>,
but not in <sys/ioctl.h>.
Haiku declares ioctl() in <unistd.h>, but not in <sys/ioctl.h>.
diff --git a/lib/sys_random.in.h b/lib/sys_random.in.h
index 8dca132683..35fd47b6b5 100644
--- a/lib/sys_random.in.h
+++ b/lib/sys_random.in.h
@@ -45,6 +45,11 @@
#ifndef _@GUARD_PREFIX@_SYS_RANDOM_H
#define _@GUARD_PREFIX@_SYS_RANDOM_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <sys/types.h>
/* Define the GRND_* constants. */
diff --git a/lib/sys_resource.in.h b/lib/sys_resource.in.h
index b0af9aa289..d7b898824e 100644
--- a/lib/sys_resource.in.h
+++ b/lib/sys_resource.in.h
@@ -36,6 +36,11 @@
#ifndef _@GUARD_PREFIX@_SYS_RESOURCE_H
#define _@GUARD_PREFIX@_SYS_RESOURCE_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#if !@HAVE_SYS_RESOURCE_H@
/* A platform that lacks <sys/resource.h>. */
diff --git a/lib/sys_select.in.h b/lib/sys_select.in.h
index 13440fa6f0..e817274181 100644
--- a/lib/sys_select.in.h
+++ b/lib/sys_select.in.h
@@ -71,6 +71,11 @@
#ifndef _@GUARD_PREFIX@_SYS_SELECT_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* On many platforms, <sys/select.h> assumes prior inclusion of
<sys/types.h>. Also, mingw defines sigset_t there, instead of
in <signal.h> where it belongs. */
diff --git a/lib/sys_socket.in.h b/lib/sys_socket.in.h
index 6705593f4a..a3c0e834f4 100644
--- a/lib/sys_socket.in.h
+++ b/lib/sys_socket.in.h
@@ -63,9 +63,12 @@
#ifndef _@GUARD_PREFIX@_SYS_SOCKET_H
#define _@GUARD_PREFIX@_SYS_SOCKET_H
-#ifndef _GL_INLINE_HEADER_BEGIN
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, GNULIB_POSIXCHECK,
+ alignof. */
+#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
+
_GL_INLINE_HEADER_BEGIN
#ifndef _GL_SYS_SOCKET_INLINE
# define _GL_SYS_SOCKET_INLINE _GL_INLINE
diff --git a/lib/sys_stat.in.h b/lib/sys_stat.in.h
index 0c2f39c12b..cbf98d9177 100644
--- a/lib/sys_stat.in.h
+++ b/lib/sys_stat.in.h
@@ -48,6 +48,11 @@
#ifndef _@GUARD_PREFIX@_SYS_STAT_H
#define _@GUARD_PREFIX@_SYS_STAT_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
/* The definition of _GL_ARG_NONNULL is copied here. */
diff --git a/lib/sys_time.in.h b/lib/sys_time.in.h
index e833d55167..62cd6bcd35 100644
--- a/lib/sys_time.in.h
+++ b/lib/sys_time.in.h
@@ -41,6 +41,11 @@
#ifndef _@GUARD_PREFIX@_SYS_TIME_H
#define _@GUARD_PREFIX@_SYS_TIME_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#if ! @HAVE_SYS_TIME_H@
# include <time.h>
#endif
diff --git a/lib/sys_times.in.h b/lib/sys_times.in.h
index 148dc60db9..6977f70318 100644
--- a/lib/sys_times.in.h
+++ b/lib/sys_times.in.h
@@ -32,6 +32,11 @@
# define _@GUARD_PREFIX@_SYS_TIMES_H
+/* This file uses GNULIB_POSIXCHECK. */
+# if !_GL_CONFIG_H_INCLUDED
+# error "Please include config.h first."
+# endif
+
/* Get clock_t.
But avoid namespace pollution on glibc systems. */
# ifndef __GLIBC__
diff --git a/lib/sys_utsname.in.h b/lib/sys_utsname.in.h
index 4420d94ef4..db689116df 100644
--- a/lib/sys_utsname.in.h
+++ b/lib/sys_utsname.in.h
@@ -35,6 +35,11 @@
#define _@GUARD_PREFIX@_SYS_UTSNAME_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* The definition of _GL_ARG_NONNULL is copied here. */
/* The definition of _GL_WARN_ON_USE is copied here. */
diff --git a/lib/sys_wait.in.h b/lib/sys_wait.in.h
index 6454eb5ad7..15d8ab28f1 100644
--- a/lib/sys_wait.in.h
+++ b/lib/sys_wait.in.h
@@ -30,6 +30,11 @@
#ifndef _@GUARD_PREFIX@_SYS_WAIT_H
#define _@GUARD_PREFIX@_SYS_WAIT_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get pid_t. */
#include <sys/types.h>
diff --git a/lib/system-quote.h b/lib/system-quote.h
index 2046c06a7e..870a5c1107 100644
--- a/lib/system-quote.h
+++ b/lib/system-quote.h
@@ -46,6 +46,11 @@
is to truncate the entire command line.
*/
+/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h>
#ifdef __cplusplus
diff --git a/lib/term-style-control.h b/lib/term-style-control.h
index 4e14c7c5b1..6b77277cf3 100644
--- a/lib/term-style-control.h
+++ b/lib/term-style-control.h
@@ -21,6 +21,11 @@
/* The user of this file will define a macro 'term_style_user_data', such that
'struct term_style_user_data' is a user-defined struct. */
+/* This file uses _GL_ASYNC_SAFE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* The amount of control to take over the underlying tty in order to avoid
garbled output on the screen, due to interleaved output of escape sequences
diff --git a/lib/termios.in.h b/lib/termios.in.h
index aa3a7cc9d9..2b64250d55 100644
--- a/lib/termios.in.h
+++ b/lib/termios.in.h
@@ -40,6 +40,11 @@ extern "C" {
#ifndef _@GUARD_PREFIX@_TERMIOS_H
#define _@GUARD_PREFIX@_TERMIOS_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get pid_t. */
#include <sys/types.h>
diff --git a/lib/textstyle.in.h b/lib/textstyle.in.h
index 38645bf6f8..c87fa38059 100644
--- a/lib/textstyle.in.h
+++ b/lib/textstyle.in.h
@@ -30,6 +30,11 @@
#ifndef _TEXTSTYLE_H
#define _TEXTSTYLE_H
+/* This file uses _GL_ATTRIBUTE_MAYBE_UNUSED, HAVE_TCDRAIN. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <errno.h>
#include <stdarg.h>
#include <stddef.h>
diff --git a/lib/threads.in.h b/lib/threads.in.h
index 2bc0f23b32..ff01b50cbb 100644
--- a/lib/threads.in.h
+++ b/lib/threads.in.h
@@ -47,6 +47,11 @@
#ifndef _@GUARD_PREFIX@_THREADS_H
#define _@GUARD_PREFIX@_THREADS_H
+/* This file uses _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, _Thread_local. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#if !@HAVE_THREADS_H@
# include <time.h>
diff --git a/lib/time.in.h b/lib/time.in.h
index f9b517a3dd..39dc1e4369 100644
--- a/lib/time.in.h
+++ b/lib/time.in.h
@@ -45,6 +45,11 @@
# @INCLUDE_NEXT@ @NEXT_TIME_H@
+/* This file uses _GL_ATTRIBUTE_DEPRECATED, GNULIB_POSIXCHECK. */
+# if !_GL_CONFIG_H_INCLUDED
+# error "Please include config.h first."
+# endif
+
/* NetBSD 5.0 mis-defines NULL. */
# include <stddef.h>
diff --git a/lib/timespec.h b/lib/timespec.h
index ba78647f09..0bdfd76ef7 100644
--- a/lib/timespec.h
+++ b/lib/timespec.h
@@ -19,11 +19,14 @@
#if ! defined TIMESPEC_H
#define TIMESPEC_H
-#include <time.h>
-
-#ifndef _GL_INLINE_HEADER_BEGIN
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_CONST,
+ _GL_ATTRIBUTE_PURE, _GL_CMP. */
+#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
+
+#include <time.h>
+
_GL_INLINE_HEADER_BEGIN
#ifndef _GL_TIMESPEC_INLINE
# define _GL_TIMESPEC_INLINE _GL_INLINE
diff --git a/lib/trim.h b/lib/trim.h
index b558fb218a..a8040ef3ad 100644
--- a/lib/trim.h
+++ b/lib/trim.h
@@ -16,6 +16,11 @@
/* Written by Davide Angelocola <davide.angelocola@gmail.com> */
+/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h>
/* Trim mode. */
diff --git a/lib/u64.h b/lib/u64.h
index 0353ad4d9a..8a99335b6a 100644
--- a/lib/u64.h
+++ b/lib/u64.h
@@ -17,11 +17,13 @@
/* Written by Paul Eggert. */
-#include <stdint.h>
-
-#ifndef _GL_INLINE_HEADER_BEGIN
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */
+#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
+
+#include <stdint.h>
+
_GL_INLINE_HEADER_BEGIN
#ifndef _GL_U64_INLINE
# define _GL_U64_INLINE _GL_INLINE
diff --git a/lib/uchar.in.h b/lib/uchar.in.h
index 27b91c5b58..aaba0b604a 100644
--- a/lib/uchar.in.h
+++ b/lib/uchar.in.h
@@ -43,6 +43,12 @@
# @INCLUDE_NEXT@ @NEXT_UCHAR_H@
#endif
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_BEGIN_C_LINKAGE,
+ _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get uint_least16_t, uint_least32_t. */
#include <stdint.h>
@@ -66,9 +72,6 @@
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
diff --git a/lib/unistd.in.h b/lib/unistd.in.h
index 8ba9867894..93ca7a97f9 100644
--- a/lib/unistd.in.h
+++ b/lib/unistd.in.h
@@ -69,6 +69,11 @@
#if !defined _@GUARD_PREFIX@_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H
#define _@GUARD_PREFIX@_UNISTD_H
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* NetBSD 5.0 mis-defines NULL. Also get size_t. */
/* But avoid namespace pollution on glibc systems. */
#ifndef __GLIBC__
@@ -170,9 +175,6 @@
# include <getopt-pfx-core.h>
#endif
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef _GL_UNISTD_INLINE
# define _GL_UNISTD_INLINE _GL_INLINE
diff --git a/lib/utime.in.h b/lib/utime.in.h
index b185019176..384271434a 100644
--- a/lib/utime.in.h
+++ b/lib/utime.in.h
@@ -29,6 +29,11 @@
#ifndef _@GUARD_PREFIX@_UTIME_H
#define _@GUARD_PREFIX@_UTIME_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#if !@HAVE_UTIME_H@
# include <sys/utime.h>
#endif
diff --git a/lib/utimens.h b/lib/utimens.h
index a7056981f3..4a21792a7e 100644
--- a/lib/utimens.h
+++ b/lib/utimens.h
@@ -17,6 +17,11 @@
/* Written by Paul Eggert. */
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <time.h>
int fdutimens (int, char const *, struct timespec const [2]);
int utimens (char const *, struct timespec const [2]);
@@ -26,9 +31,6 @@ int lutimens (char const *, struct timespec const [2]);
# include <fcntl.h>
# include <sys/stat.h>
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef _GL_UTIMENS_INLINE
# define _GL_UTIMENS_INLINE _GL_INLINE
diff --git a/lib/utmp.in.h b/lib/utmp.in.h
index 2c8c79d129..895704cb1b 100644
--- a/lib/utmp.in.h
+++ b/lib/utmp.in.h
@@ -32,6 +32,11 @@
#ifndef _@GUARD_PREFIX@_UTMP_H
#define _@GUARD_PREFIX@_UTMP_H
+/* This file uses GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* FreeBSD, NetBSD, OpenBSD, macOS, Minix, Haiku declare login_tty in
<util.h> or <libutil.h>, not in <utmp.h>. Solaris declares it in
<termios.h>, not in <utmp.h>. */
diff --git a/lib/vasnprintf.h b/lib/vasnprintf.h
index f69649fb45..2d13407079 100644
--- a/lib/vasnprintf.h
+++ b/lib/vasnprintf.h
@@ -17,6 +17,11 @@
#ifndef _VASNPRINTF_H
#define _VASNPRINTF_H
+/* This file uses _GL_ATTRIBUTE_FORMAT. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get va_list. */
#include <stdarg.h>
diff --git a/lib/verror.h b/lib/verror.h
index 8917988db6..bd385e1ef5 100644
--- a/lib/verror.h
+++ b/lib/verror.h
@@ -17,6 +17,11 @@
#ifndef _VERROR_H
#define _VERROR_H 1
+/* This file uses _GL_ATTRIBUTE_FORMAT. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdarg.h>
/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */
diff --git a/lib/version-etc.h b/lib/version-etc.h
index 58297fc349..2313d98b3f 100644
--- a/lib/version-etc.h
+++ b/lib/version-etc.h
@@ -19,6 +19,11 @@
#ifndef VERSION_ETC_H
# define VERSION_ETC_H 1
+/* This file uses _GL_ATTRIBUTE_SENTINEL. */
+# if !_GL_CONFIG_H_INCLUDED
+# error "Please include config.h first."
+# endif
+
# include <stdarg.h>
# include <stdio.h>
diff --git a/lib/wchar.in.h b/lib/wchar.in.h
index 194a1c6723..b2620ad92e 100644
--- a/lib/wchar.in.h
+++ b/lib/wchar.in.h
@@ -84,6 +84,12 @@
#ifndef _@GUARD_PREFIX@_WCHAR_H
#define _@GUARD_PREFIX@_WCHAR_H
+/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC,
+ _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
that can be freed by passing them as the Ith argument to the
function F. */
diff --git a/lib/wctype.in.h b/lib/wctype.in.h
index f6e474d38d..22fa1df239 100644
--- a/lib/wctype.in.h
+++ b/lib/wctype.in.h
@@ -44,6 +44,11 @@
#ifndef _@GUARD_PREFIX@_WCTYPE_H
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, GNULIB_POSIXCHECK. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#if @HAVE_WINT_T@
/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */
# include <wchar.h>
@@ -68,9 +73,6 @@
#ifndef _@GUARD_PREFIX@_WCTYPE_H
#define _@GUARD_PREFIX@_WCTYPE_H
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef _GL_WCTYPE_INLINE
# define _GL_WCTYPE_INLINE _GL_INLINE
diff --git a/lib/windows-spawn.h b/lib/windows-spawn.h
index 42c5af7717..b218181803 100644
--- a/lib/windows-spawn.h
+++ b/lib/windows-spawn.h
@@ -18,6 +18,11 @@
#ifndef _WINDOWS_SPAWN_H
#define _WINDOWS_SPAWN_H
+/* This file uses _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdint.h>
#include <stdlib.h>
diff --git a/lib/windows-thread.h b/lib/windows-thread.h
index 68b8e96813..e6511d736e 100644
--- a/lib/windows-thread.h
+++ b/lib/windows-thread.h
@@ -20,6 +20,11 @@
#ifndef _WINDOWS_THREAD_H
#define _WINDOWS_THREAD_H
+/* This file uses _Noreturn. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#define WIN32_LEAN_AND_MEAN /* avoid including junk */
#include <windows.h>
diff --git a/lib/xalloc.h b/lib/xalloc.h
index f373c2fe59..0a951e1d59 100644
--- a/lib/xalloc.h
+++ b/lib/xalloc.h
@@ -18,6 +18,13 @@
#ifndef XALLOC_H_
#define XALLOC_H_
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _Noreturn,
+ _GL_ATTRIBUTE_ALLOC_SIZE, _GL_ATTRIBUTE_MALLOC,
+ _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stddef.h>
#include <stdlib.h>
@@ -25,9 +32,6 @@
# include "idx.h"
#endif
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef XALLOC_INLINE
# define XALLOC_INLINE _GL_INLINE
diff --git a/lib/xbinary-io.h b/lib/xbinary-io.h
index e66df769f4..d38256b489 100644
--- a/lib/xbinary-io.h
+++ b/lib/xbinary-io.h
@@ -17,11 +17,13 @@
#ifndef _XBINARY_IO_H
#define _XBINARY_IO_H
-#include "binary-io.h"
-
-#ifndef _GL_INLINE_HEADER_BEGIN
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _Noreturn. */
+#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
+
+#include "binary-io.h"
+
_GL_INLINE_HEADER_BEGIN
#ifndef XBINARY_IO_INLINE
# define XBINARY_IO_INLINE _GL_INLINE
diff --git a/lib/xgetcwd.h b/lib/xgetcwd.h
index 7467bc7bf1..59d225e642 100644
--- a/lib/xgetcwd.h
+++ b/lib/xgetcwd.h
@@ -14,6 +14,11 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
+/* This file uses _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h>
extern char *xgetcwd (void)
diff --git a/lib/xgetdomainname.h b/lib/xgetdomainname.h
index 2d4d67bdf2..86b8b18b80 100644
--- a/lib/xgetdomainname.h
+++ b/lib/xgetdomainname.h
@@ -18,6 +18,11 @@
#ifndef _XGETDOMAINNAME_H
#define _XGETDOMAINNAME_H
+/* This file uses _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h>
/* Return the NIS domain name of the machine, in malloc'd storage.
diff --git a/lib/xgethostname.h b/lib/xgethostname.h
index aad35601a8..c404b77439 100644
--- a/lib/xgethostname.h
+++ b/lib/xgethostname.h
@@ -15,6 +15,11 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
+/* This file uses _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h>
char *xgethostname (void)
diff --git a/lib/xmalloca.h b/lib/xmalloca.h
index 4b1bd470c2..3f03eba5aa 100644
--- a/lib/xmalloca.h
+++ b/lib/xmalloca.h
@@ -18,6 +18,12 @@
#ifndef _XMALLOCA_H
#define _XMALLOCA_H
+/* This file uses _GL_ATTRIBUTE_ALLOC_SIZE, _GL_ATTRIBUTE_DEALLOC,
+ _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include "malloca.h"
#include "xalloc.h"
#include "xalloc-oversized.h"
diff --git a/lib/xmemdup0.h b/lib/xmemdup0.h
index 4f9888c314..256cb4e966 100644
--- a/lib/xmemdup0.h
+++ b/lib/xmemdup0.h
@@ -18,6 +18,11 @@
#ifndef XMEMDUP_H_
# define XMEMDUP_H_
+/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
# include <stdlib.h>
diff --git a/lib/xprintf.h b/lib/xprintf.h
index ae1ea8f71d..3e05290299 100644
--- a/lib/xprintf.h
+++ b/lib/xprintf.h
@@ -17,6 +17,11 @@
#ifndef _XPRINTF_H
#define _XPRINTF_H
+/* This file uses _GL_ATTRIBUTE_FORMAT. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdarg.h>
#include <stdio.h>
diff --git a/lib/xreadlink.h b/lib/xreadlink.h
index 48438ce7cb..44f848f86d 100644
--- a/lib/xreadlink.h
+++ b/lib/xreadlink.h
@@ -18,6 +18,11 @@
/* Written by Jim Meyering <jim@meyering.net> */
+/* This file uses _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h>
extern char *xreadlink (char const *filename)
diff --git a/lib/xsize.h b/lib/xsize.h
index 1ec78e776f..746d6569bf 100644
--- a/lib/xsize.h
+++ b/lib/xsize.h
@@ -18,6 +18,11 @@
#ifndef _XSIZE_H
#define _XSIZE_H
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get size_t. */
#include <stddef.h>
@@ -30,9 +35,6 @@
/* Get ATTRIBUTE_PURE. */
#include "attribute.h"
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef XSIZE_INLINE
# define XSIZE_INLINE _GL_INLINE
diff --git a/lib/xstriconv.h b/lib/xstriconv.h
index f693194f8d..ee17e490c5 100644
--- a/lib/xstriconv.h
+++ b/lib/xstriconv.h
@@ -18,6 +18,11 @@
#ifndef _XSTRICONV_H
#define _XSTRICONV_H
+/* This file uses _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h>
#if HAVE_ICONV
#include <iconv.h>
diff --git a/lib/xstriconveh.h b/lib/xstriconveh.h
index bb3c3a8db0..fe15eed912 100644
--- a/lib/xstriconveh.h
+++ b/lib/xstriconveh.h
@@ -18,6 +18,11 @@
#ifndef _XSTRICONVEH_H
#define _XSTRICONVEH_H
+/* This file uses _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h>
/* Get the 'enum iconv_ilseq_handler' and iconveh_t types, and the
diff --git a/lib/xstring-desc.h b/lib/xstring-desc.h
index b07831baf4..cbc0f97eab 100644
--- a/lib/xstring-desc.h
+++ b/lib/xstring-desc.h
@@ -19,14 +19,16 @@
#ifndef _XSTRING_DESC_H
#define _XSTRING_DESC_H 1
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <string.h>
#include "string-desc.h"
#include "xalloc.h"
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
_GL_INLINE_HEADER_BEGIN
#ifndef GL_XSTRING_DESC_INLINE
# define GL_XSTRING_DESC_INLINE _GL_INLINE
diff --git a/lib/xstrndup.h b/lib/xstrndup.h
index 502881ea3d..5844731010 100644
--- a/lib/xstrndup.h
+++ b/lib/xstrndup.h
@@ -15,6 +15,11 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
+/* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h>
/* Return a newly allocated copy of at most N bytes of STRING.
diff --git a/lib/xstrtol-error.h b/lib/xstrtol-error.h
index d8892ea871..0872f590d9 100644
--- a/lib/xstrtol-error.h
+++ b/lib/xstrtol-error.h
@@ -19,6 +19,11 @@
#ifndef XSTRTOL_ERROR_H_
# define XSTRTOL_ERROR_H_ 1
+/* This file uses _Noreturn. */
+# if !_GL_CONFIG_H_INCLUDED
+# error "Please include config.h first."
+# endif
+
# include "xstrtol.h"
# include <getopt.h>
diff --git a/lib/xtime.h b/lib/xtime.h
index ddad01ed47..84a8a5db9a 100644
--- a/lib/xtime.h
+++ b/lib/xtime.h
@@ -20,9 +20,11 @@
#ifndef XTIME_H_
#define XTIME_H_ 1
-#ifndef _GL_INLINE_HEADER_BEGIN
+/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */
+#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
+
_GL_INLINE_HEADER_BEGIN
#ifndef XTIME_INLINE
# define XTIME_INLINE _GL_INLINE
diff --git a/lib/xvasprintf.h b/lib/xvasprintf.h
index 2f941ab22a..6a5952faa6 100644
--- a/lib/xvasprintf.h
+++ b/lib/xvasprintf.h
@@ -17,6 +17,11 @@
#ifndef _XVASPRINTF_H
#define _XVASPRINTF_H
+/* This file uses _GL_ATTRIBUTE_FORMAT, _GL_ATTRIBUTE_MALLOC. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
/* Get va_list. */
#include <stdarg.h>
diff --git a/m4/gnulib-common.m4 b/m4/gnulib-common.m4
index 0df2181871..0216017461 100644
--- a/m4/gnulib-common.m4
+++ b/m4/gnulib-common.m4
@@ -1,4 +1,4 @@
-# gnulib-common.m4 serial 83
+# gnulib-common.m4 serial 84
dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -15,6 +15,10 @@ AC_DEFUN([gl_COMMON]
AC_REQUIRE([gl_ZZGNULIB])
])
AC_DEFUN([gl_COMMON_BODY], [
+ AH_VERBATIM([0witness],
+[/* Witness that <config.h> has been included. */
+#define _GL_CONFIG_H_INCLUDED 1
+])
AH_VERBATIM([_GL_GNUC_PREREQ],
[/* True if the compiler says it groks GNU C version MAJOR.MINOR. */
#if defined __GNUC__ && defined __GNUC_MINOR__
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: Add more reminders to include <config.h>
2023-04-12 17:51 ` Add more reminders to include <config.h> Bruno Haible
@ 2023-04-13 12:42 ` Pádraig Brady
0 siblings, 0 replies; 7+ messages in thread
From: Pádraig Brady @ 2023-04-13 12:42 UTC (permalink / raw)
To: Bruno Haible, bug-gnulib
On 12/04/2023 18:51, Bruno Haible wrote:
> Pádraig Brady wrote:
>>> CC src/cksum-crctab.o
>>> In file included from ./lib/time.h:50,
>>> from /usr/include/sys/time.h:421,
>>> from ./lib/sys/time.h:39,
>>> from /usr/include/sys/select.h:23,
>>> from ./lib/sys/select.h:36,
>>> from /usr/sfw/lib/gcc/sparc-sun-solaris2.10/3.4.3/include/sys/types.h:631,
>>> from ./lib/sys/types.h:39,
>>> from ./lib/stdint.h:105,
>>> from src/crctab.c:1:
>>> ./lib/stddef.h:175: error: syntax error before "void"
>>
>> Ah, this isn't a gnulib issue.
>> crctab.c in coreutils didn't include <config.h>
>
> While we document that #include <config.h> is a necessity, in
> <https://www.gnu.org/software/gnulib/manual/html_node/Source-changes.html>,
> we don't enforce it well.
>
> It would have been better if, instead of getting a syntax error,
> you would have gotten an error "Please include config.h first.".
>
> We already have such errors in a few places, but apparently not in enough
> places.
>
> With the attached patch, you would have gotten an error
> "Please include config.h first."
> from
> - the included lib/sys/select.h,
> - the included lib/sys/time.h,
> - the included lib/time.h,
> - the included lib/stddef.h
> on that particular platform.
>
> It is well possible — and even the intention — that this patch causes
> compilation errors in packages that before compiled fine, on a particular
> platform. It will force the package maintainers to add '#include <config.h>'
> in some (hopefully most) of the missing places and thus increase the
> portability, i.e. reduce the risk of other platform-related compilation
> errors.
I like it.
It's better to catch such issues as early as possible.
thanks!
Pádraig
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-04-13 12:43 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-16 12:48 stddef: Define 'unreachable', for ISO C 23 compliance Bruno Haible
2023-04-10 14:40 ` Pádraig Brady
2023-04-10 17:46 ` Bruno Haible
2023-04-10 18:05 ` Pádraig Brady
2023-04-10 18:15 ` Pádraig Brady
2023-04-12 17:51 ` Add more reminders to include <config.h> Bruno Haible
2023-04-13 12:42 ` Pádraig Brady
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).