Gnulib supports multiple gnulib-tool invocations in the scope of the same
configure.ac since 2021 (cf. 2021-04-11, 2021-04-17, 2021-06-13). Namely,
the module indicator variable (@GNULIB_<module>@) expand to something that
depends on the gnulib-tool invocation.

This is still not working right with some header files, however. Namely,
the _GL_ALREADY_INCLUDING_*_H macros are a problem. In a build of GNU gettext
on mingw 13, I am seeing a compilation error:

gcc -DHAVE_CONFIG_H -I. -I../../../../gettext-tools/tests/gnulib-lib -I../..  
-I../../gnulib-lib -I../../../../gettext-tools/gnulib-lib 
-I/usr/local/mingw64/include -Wall  -Wno-cast-qual -Wno-conversion 
-Wno-float-equal -Wno-sign-compare -Wno-undef -Wno-unused-function 
-Wno-unused-parameter -Wno-float-conversion -Wimplicit-fallthrough 
-Wno-pedantic -Wno-sign-conversion -Wno-type-limits -Wno-unused-const-variable 
-Wno-unsuffixed-float-constants -g -O2 -MT libtestsgnu_a-pthread_sigmask.o -MD 
-MP -MF .deps/libtestsgnu_a-pthread_sigmask.Tpo -c -o 
libtestsgnu_a-pthread_sigmask.o `test -f 'pthread_sigmask.c' || echo 
'../../../../gettext-tools/tests/gnulib-lib/'`pthread_sigmask.c
../../../../gettext-tools/tests/gnulib-lib/pthread_sigmask.c: In function 
'rpl_pthread_sigmask':
../../../../gettext-tools/tests/gnulib-lib/pthread_sigmask.c:89:13: error: 
implicit declaration of function 'sigprocmask' [-Wimplicit-function-declaration]
   89 |   int ret = sigprocmask (how, new_mask, old_mask);
      |             ^~~~~~~~~~~
make[5]: *** [Makefile:3963: libtestsgnu_a-pthread_sigmask.o] Error 1

The module 'pthread_sigmask' depends on the module 'sigprocmask', so why
is sigprocmask not declared? It ought to be declared in gnulib's signal.h
override. The reason is that there are two signal.h overrides:
  1. tests/gnulib-lib/signal.h
  2. gnulib-lib/signal.h
In the gnulib-tool invocation #1, @GNULIB_SIGPROCMASK@ expands to 0.
In the gnulib-tool invocation #2, @GNULIB_SIGPROCMASK@ expands to 1.
When pthread_sigmask.c does #include <signal.h>, the include_next chain
consists of
  1. tests/gnulib-lib/signal.h
  2. gnulib-lib/signal.h
  3. the system's <signal.h>,
and since #1 defines _GL_ALREADY_INCLUDING_SIGNAL_H, #2 becomes
essentially a no-op. Thus the declaration of sigprocmask in #2 is hidden.

Here's a patch series that fixes that.


2024-12-24  Bruno Haible  <br...@clisp.org>

        wchar: Support several gnulib-tool invocations better.
        * lib/wchar.in.h (_GL_ALREADY_INCLUDING_WCHAR_H): Rename to a macro that
        depends on GUARD_PREFIX.
        (mbszero): Avoid duplicate definition.

2024-12-24  Bruno Haible  <br...@clisp.org>

        threads-h: Support several gnulib-tool invocations better.
        * lib/threads.in.h (_GL_ALREADY_INCLUDING_THREADS_H): Rename to a macro
        that depends on GUARD_PREFIX.
        (struct thrd_with_exitcode): Avoid duplicate definition.

2024-12-24  Bruno Haible  <br...@clisp.org>

        sys_socket: Support several gnulib-tool invocations better.
        * lib/sys_socket.in.h (_GL_ALREADY_INCLUDING_SYS_SOCKET_H): Rename to a
        macro that depends on GUARD_PREFIX.
        (struct msghdr): Avoid duplicate definition.

2024-12-24  Bruno Haible  <br...@clisp.org>

        string: Support several gnulib-tool invocations better.
        * lib/string.in.h (_GL_ALREADY_INCLUDING_STRING_H): Rename to a macro
        that depends on GUARD_PREFIX.

2024-12-24  Bruno Haible  <br...@clisp.org>

        stdio: Support several gnulib-tool invocations better.
        * lib/stdio.in.h: Test _GL_SKIP_GNULIB_STDIO_H.
        (_GL_ALREADY_INCLUDING_STDIO_H): Rename to a macro that depends on
        GUARD_PREFIX.
        * lib/fopen.c: Set _GL_SKIP_GNULIB_STDIO_H instead of
        _GL_ALREADY_INCLUDING_STDIO_H.
        * lib/freopen.c: Likewise.

2024-12-24  Bruno Haible  <br...@clisp.org>

        spawn: Support several gnulib-tool invocations better.
        * lib/spawn.in.h (_GL_ALREADY_INCLUDING_SPAWN_H): Rename to a macro that
        depends on GUARD_PREFIX.

2024-12-24  Bruno Haible  <br...@clisp.org>

        signal-h: Support several gnulib-tool invocations better.
        * lib/signal.in.h (_GL_ALREADY_INCLUDING_SIGNAL_H): Rename to a macro
        that depends on GUARD_PREFIX.

2024-12-24  Bruno Haible  <br...@clisp.org>

        pthread-h: Support several gnulib-tool invocations better.
        * lib/pthread.in.h (_GL_ALREADY_INCLUDING_PTHREAD_H): Rename to a macro
        that depends on GUARD_PREFIX.

2024-12-24  Bruno Haible  <br...@clisp.org>

        malloc-h: Support several gnulib-tool invocations better.
        * lib/malloc.in.h (_GL_ALREADY_INCLUDING_MALLOC_H): Rename to a macro
        that depends on GUARD_PREFIX.

2024-12-24  Bruno Haible  <br...@clisp.org>

        locale: Support several gnulib-tool invocations better.
        * lib/locale.in.h (_GL_ALREADY_INCLUDING_LOCALE_H): Rename to a macro
        that depends on GUARD_PREFIX.
        (struct lconv): Avoid duplicate definition.

2024-12-24  Bruno Haible  <br...@clisp.org>

        limits-h: Support several gnulib-tool invocations better.
        * lib/limits.in.h (_GL_ALREADY_INCLUDING_LIMITS_H): Rename to a macro
        that depends on GUARD_PREFIX.

>From 31682bc14840b2e003f5ca3cc90378dabd6e256a Mon Sep 17 00:00:00 2001
From: Bruno Haible <br...@clisp.org>
Date: Tue, 24 Dec 2024 11:13:16 +0100
Subject: [PATCH 01/11] limits-h: Support several gnulib-tool invocations
 better.

* lib/limits.in.h (_GL_ALREADY_INCLUDING_LIMITS_H): Rename to a macro
that depends on GUARD_PREFIX.
---
 ChangeLog       | 6 ++++++
 lib/limits.in.h | 6 +++---
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 416a05dd1c..3df9fe9997 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2024-12-24  Bruno Haible  <br...@clisp.org>
+
+	limits-h: Support several gnulib-tool invocations better.
+	* lib/limits.in.h (_GL_ALREADY_INCLUDING_LIMITS_H): Rename to a macro
+	that depends on GUARD_PREFIX.
+
 2024-12-23  Paul Eggert  <egg...@cs.ucla.edu>
 
 	stdlib: fix MB_CUR_MAX on older Android
diff --git a/lib/limits.in.h b/lib/limits.in.h
index c65eb4c1cf..3347e369fb 100644
--- a/lib/limits.in.h
+++ b/lib/limits.in.h
@@ -20,7 +20,7 @@
 #endif
 @PRAGMA_COLUMNS@
 
-#if defined _GL_ALREADY_INCLUDING_LIMITS_H
+#if defined _@GUARD_PREFIX@_ALREADY_INCLUDING_LIMITS_H
 /* Special invocation convention:
    On Haiku/x86_64, we have a sequence of nested includes
    <limits.h> -> <syslimits.h> -> <limits.h>.
@@ -34,12 +34,12 @@
 
 #ifndef _@GUARD_PREFIX@_LIMITS_H
 
-# define _GL_ALREADY_INCLUDING_LIMITS_H
+# define _@GUARD_PREFIX@_ALREADY_INCLUDING_LIMITS_H
 
 /* The include_next requires a split double-inclusion guard.  */
 # @INCLUDE_NEXT@ @NEXT_LIMITS_H@
 
-# undef _GL_ALREADY_INCLUDING_LIMITS_H
+# undef _@GUARD_PREFIX@_ALREADY_INCLUDING_LIMITS_H
 
 #ifndef _@GUARD_PREFIX@_LIMITS_H
 #define _@GUARD_PREFIX@_LIMITS_H
-- 
2.43.0

>From d41d22f63df00445dac1bcb17fb8005008cef5a4 Mon Sep 17 00:00:00 2001
From: Bruno Haible <br...@clisp.org>
Date: Tue, 24 Dec 2024 11:14:20 +0100
Subject: [PATCH 02/11] locale: Support several gnulib-tool invocations better.

* lib/locale.in.h (_GL_ALREADY_INCLUDING_LOCALE_H): Rename to a macro
that depends on GUARD_PREFIX.
(struct lconv): Avoid duplicate definition.
---
 ChangeLog       |  7 +++++++
 lib/locale.in.h | 13 ++++++++-----
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 3df9fe9997..d7793aab69 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2024-12-24  Bruno Haible  <br...@clisp.org>
+
+	locale: Support several gnulib-tool invocations better.
+	* lib/locale.in.h (_GL_ALREADY_INCLUDING_LOCALE_H): Rename to a macro
+	that depends on GUARD_PREFIX.
+	(struct lconv): Avoid duplicate definition.
+
 2024-12-24  Bruno Haible  <br...@clisp.org>
 
 	limits-h: Support several gnulib-tool invocations better.
diff --git a/lib/locale.in.h b/lib/locale.in.h
index c3d34085de..5c45ef4507 100644
--- a/lib/locale.in.h
+++ b/lib/locale.in.h
@@ -20,7 +20,7 @@
 @PRAGMA_COLUMNS@
 
 #if (defined _WIN32 && !defined __CYGWIN__ && defined __need_locale_t) \
-    || defined _GL_ALREADY_INCLUDING_LOCALE_H
+    || defined _@GUARD_PREFIX@_ALREADY_INCLUDING_LOCALE_H
 
 /* Special invocation convention:
    - Inside mingw header files,
@@ -34,12 +34,12 @@
 
 #ifndef _@GUARD_PREFIX@_LOCALE_H
 
-#define _GL_ALREADY_INCLUDING_LOCALE_H
+#define _@GUARD_PREFIX@_ALREADY_INCLUDING_LOCALE_H
 
 /* The include_next requires a split double-inclusion guard.  */
 #@INCLUDE_NEXT@ @NEXT_LOCALE_H@
 
-#undef _GL_ALREADY_INCLUDING_LOCALE_H
+#undef _@GUARD_PREFIX@_ALREADY_INCLUDING_LOCALE_H
 
 #ifndef _@GUARD_PREFIX@_LOCALE_H
 #define _@GUARD_PREFIX@_LOCALE_H
@@ -83,7 +83,8 @@
 
 /* Bionic libc's 'struct lconv' is just a dummy.  */
 #if @REPLACE_STRUCT_LCONV@
-# define lconv rpl_lconv
+# if !defined GNULIB_defined_struct_lconv
+#  define lconv rpl_lconv
 struct lconv
 {
   /* All 'char *' are actually 'const char *'.  */
@@ -160,6 +161,8 @@ struct lconv
      number.  */
   char int_n_sep_by_space;
 };
+#  define GNULIB_defined_struct_lconv 1
+# endif
 #endif
 
 #if @GNULIB_LOCALECONV@
@@ -309,4 +312,4 @@ _GL_WARN_ON_USE (freelocale, "freelocale is not portable");
 
 #endif /* _@GUARD_PREFIX@_LOCALE_H */
 #endif /* _@GUARD_PREFIX@_LOCALE_H */
-#endif /* !(__need_locale_t || _GL_ALREADY_INCLUDING_LOCALE_H) */
+#endif /* !(__need_locale_t || _@GUARD_PREFIX@_ALREADY_INCLUDING_LOCALE_H) */
-- 
2.43.0

>From fe929b50226665aef7d05d6d8197b650dc8ed646 Mon Sep 17 00:00:00 2001
From: Bruno Haible <br...@clisp.org>
Date: Tue, 24 Dec 2024 11:15:25 +0100
Subject: [PATCH 03/11] malloc-h: Support several gnulib-tool invocations
 better.

* lib/malloc.in.h (_GL_ALREADY_INCLUDING_MALLOC_H): Rename to a macro
that depends on GUARD_PREFIX.
---
 ChangeLog       | 6 ++++++
 lib/malloc.in.h | 6 +++---
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index d7793aab69..c87b7366e0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2024-12-24  Bruno Haible  <br...@clisp.org>
+
+	malloc-h: Support several gnulib-tool invocations better.
+	* lib/malloc.in.h (_GL_ALREADY_INCLUDING_MALLOC_H): Rename to a macro
+	that depends on GUARD_PREFIX.
+
 2024-12-24  Bruno Haible  <br...@clisp.org>
 
 	locale: Support several gnulib-tool invocations better.
diff --git a/lib/malloc.in.h b/lib/malloc.in.h
index a22a4a8a39..ed90ea36ad 100644
--- a/lib/malloc.in.h
+++ b/lib/malloc.in.h
@@ -19,7 +19,7 @@
 #endif
 @PRAGMA_COLUMNS@
 
-#if defined _GL_ALREADY_INCLUDING_MALLOC_H
+#if defined _@GUARD_PREFIX@_ALREADY_INCLUDING_MALLOC_H
 /* Special invocation convention:
    - On Android we have a sequence of nested includes
        <malloc.h> -> <stdio.h> -> <sys/stat.h> -> <time.h> -> <sys/time.h> ->
@@ -34,14 +34,14 @@
 
 #ifndef _@GUARD_PREFIX@_MALLOC_H
 
-#define _GL_ALREADY_INCLUDING_MALLOC_H
+#define _@GUARD_PREFIX@_ALREADY_INCLUDING_MALLOC_H
 
 /* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_MALLOC_H@
 # @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_MALLOC_H@
 #endif
 
-#undef _GL_ALREADY_INCLUDING_MALLOC_H
+#undef _@GUARD_PREFIX@_ALREADY_INCLUDING_MALLOC_H
 
 #ifndef _@GUARD_PREFIX@_MALLOC_H
 #define _@GUARD_PREFIX@_MALLOC_H
-- 
2.43.0

>From 64c2831dae3c1172ce417b25b425881fe72a880a Mon Sep 17 00:00:00 2001
From: Bruno Haible <br...@clisp.org>
Date: Tue, 24 Dec 2024 11:16:25 +0100
Subject: [PATCH 04/11] pthread-h: Support several gnulib-tool invocations
 better.

* lib/pthread.in.h (_GL_ALREADY_INCLUDING_PTHREAD_H): Rename to a macro
that depends on GUARD_PREFIX.
---
 ChangeLog        | 6 ++++++
 lib/pthread.in.h | 6 +++---
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index c87b7366e0..574a519bac 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2024-12-24  Bruno Haible  <br...@clisp.org>
+
+	pthread-h: Support several gnulib-tool invocations better.
+	* lib/pthread.in.h (_GL_ALREADY_INCLUDING_PTHREAD_H): Rename to a macro
+	that depends on GUARD_PREFIX.
+
 2024-12-24  Bruno Haible  <br...@clisp.org>
 
 	malloc-h: Support several gnulib-tool invocations better.
diff --git a/lib/pthread.in.h b/lib/pthread.in.h
index 80081da7a7..4a193ef908 100644
--- a/lib/pthread.in.h
+++ b/lib/pthread.in.h
@@ -22,7 +22,7 @@
 #endif
 @PRAGMA_COLUMNS@
 
-#if defined _GL_ALREADY_INCLUDING_PTHREAD_H
+#if defined _@GUARD_PREFIX@_ALREADY_INCLUDING_PTHREAD_H
 /* Special invocation convention:
    On Android, we have a sequence of nested includes
    <pthread.h> -> <time.h> -> <sys/time.h> -> <sys/select.h> ->
@@ -39,12 +39,12 @@
 
 #if @HAVE_PTHREAD_H@
 
-# define _GL_ALREADY_INCLUDING_PTHREAD_H
+# define _@GUARD_PREFIX@_ALREADY_INCLUDING_PTHREAD_H
 
 /* The include_next requires a split double-inclusion guard.  */
 # @INCLUDE_NEXT@ @NEXT_PTHREAD_H@
 
-# undef _GL_ALREADY_INCLUDING_PTHREAD_H
+# undef _@GUARD_PREFIX@_ALREADY_INCLUDING_PTHREAD_H
 
 #endif
 
-- 
2.43.0

>From 0985d0c8079a7fdb07e8e4dd9c5dfd24e4a9cfb6 Mon Sep 17 00:00:00 2001
From: Bruno Haible <br...@clisp.org>
Date: Tue, 24 Dec 2024 11:25:01 +0100
Subject: [PATCH 05/11] signal-h: Support several gnulib-tool invocations
 better.

* lib/signal.in.h (_GL_ALREADY_INCLUDING_SIGNAL_H): Rename to a macro
that depends on GUARD_PREFIX.
---
 ChangeLog       | 6 ++++++
 lib/signal.in.h | 6 +++---
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 574a519bac..4bc25a006f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2024-12-24  Bruno Haible  <br...@clisp.org>
+
+	signal-h: Support several gnulib-tool invocations better.
+	* lib/signal.in.h (_GL_ALREADY_INCLUDING_SIGNAL_H): Rename to a macro
+	that depends on GUARD_PREFIX.
+
 2024-12-24  Bruno Haible  <br...@clisp.org>
 
 	pthread-h: Support several gnulib-tool invocations better.
diff --git a/lib/signal.in.h b/lib/signal.in.h
index 6239b90adf..18c88f0c1d 100644
--- a/lib/signal.in.h
+++ b/lib/signal.in.h
@@ -20,7 +20,7 @@
 #endif
 @PRAGMA_COLUMNS@
 
-#if defined __need_sig_atomic_t || defined __need_sigset_t || defined _GL_ALREADY_INCLUDING_SIGNAL_H || (defined _SIGNAL_H && !defined __SIZEOF_PTHREAD_MUTEX_T)
+#if defined __need_sig_atomic_t || defined __need_sigset_t || defined _@GUARD_PREFIX@_ALREADY_INCLUDING_SIGNAL_H || (defined _SIGNAL_H && !defined __SIZEOF_PTHREAD_MUTEX_T)
 /* Special invocation convention:
    - Inside glibc header files.
    - On glibc systems we have a sequence of nested includes
@@ -39,7 +39,7 @@
 
 #ifndef _@GUARD_PREFIX@_SIGNAL_H
 
-#define _GL_ALREADY_INCLUDING_SIGNAL_H
+#define _@GUARD_PREFIX@_ALREADY_INCLUDING_SIGNAL_H
 
 /* Define pid_t, uid_t.
    Also, mingw defines sigset_t not in <signal.h>, but in <sys/types.h>.
@@ -50,7 +50,7 @@
 /* The include_next requires a split double-inclusion guard.  */
 #@INCLUDE_NEXT@ @NEXT_SIGNAL_H@
 
-#undef _GL_ALREADY_INCLUDING_SIGNAL_H
+#undef _@GUARD_PREFIX@_ALREADY_INCLUDING_SIGNAL_H
 
 #ifndef _@GUARD_PREFIX@_SIGNAL_H
 #define _@GUARD_PREFIX@_SIGNAL_H
-- 
2.43.0

>From 143d6b17fa01eba73bb253b839b38dd5e6a50606 Mon Sep 17 00:00:00 2001
From: Bruno Haible <br...@clisp.org>
Date: Tue, 24 Dec 2024 11:17:31 +0100
Subject: [PATCH 06/11] spawn: Support several gnulib-tool invocations better.

* lib/spawn.in.h (_GL_ALREADY_INCLUDING_SPAWN_H): Rename to a macro that
depends on GUARD_PREFIX.
---
 ChangeLog      | 6 ++++++
 lib/spawn.in.h | 6 +++---
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 4bc25a006f..ba83b79725 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2024-12-24  Bruno Haible  <br...@clisp.org>
+
+	spawn: Support several gnulib-tool invocations better.
+	* lib/spawn.in.h (_GL_ALREADY_INCLUDING_SPAWN_H): Rename to a macro that
+	depends on GUARD_PREFIX.
+
 2024-12-24  Bruno Haible  <br...@clisp.org>
 
 	signal-h: Support several gnulib-tool invocations better.
diff --git a/lib/spawn.in.h b/lib/spawn.in.h
index 5f42407d87..7bf7af60d5 100644
--- a/lib/spawn.in.h
+++ b/lib/spawn.in.h
@@ -20,7 +20,7 @@
 #endif
 @PRAGMA_COLUMNS@
 
-#if defined _GL_ALREADY_INCLUDING_SPAWN_H
+#if defined _@GUARD_PREFIX@_ALREADY_INCLUDING_SPAWN_H
 /* Special invocation convention:
    On OS/2 kLIBC, <spawn.h> includes <signal.h>. Then <signal.h> ->
    <pthread.h> -> <sched.h> -> <spawn.h> are included by GNULIB.
@@ -36,11 +36,11 @@
 /* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_SPAWN_H@
 
-# define _GL_ALREADY_INCLUDING_SPAWN_H
+# define _@GUARD_PREFIX@_ALREADY_INCLUDING_SPAWN_H
 
 # @INCLUDE_NEXT@ @NEXT_SPAWN_H@
 
-# define _GL_ALREADY_INCLUDING_SPAWN_H
+# define _@GUARD_PREFIX@_ALREADY_INCLUDING_SPAWN_H
 
 #endif
 
-- 
2.43.0

>From ff96fd7cf0afff896a5a123286df8bf4340b3fd3 Mon Sep 17 00:00:00 2001
From: Bruno Haible <br...@clisp.org>
Date: Tue, 24 Dec 2024 11:19:49 +0100
Subject: [PATCH 07/11] stdio: Support several gnulib-tool invocations better.

* lib/stdio.in.h: Test _GL_SKIP_GNULIB_STDIO_H.
(_GL_ALREADY_INCLUDING_STDIO_H): Rename to a macro that depends on
GUARD_PREFIX.
* lib/fopen.c: Set _GL_SKIP_GNULIB_STDIO_H instead of
_GL_ALREADY_INCLUDING_STDIO_H.
* lib/freopen.c: Likewise.
---
 ChangeLog      | 10 ++++++++++
 lib/fopen.c    |  4 ++--
 lib/freopen.c  |  4 ++--
 lib/stdio.in.h |  6 +++---
 4 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index ba83b79725..62a1149468 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2024-12-24  Bruno Haible  <br...@clisp.org>
+
+	stdio: Support several gnulib-tool invocations better.
+	* lib/stdio.in.h: Test _GL_SKIP_GNULIB_STDIO_H.
+	(_GL_ALREADY_INCLUDING_STDIO_H): Rename to a macro that depends on
+	GUARD_PREFIX.
+	* lib/fopen.c: Set _GL_SKIP_GNULIB_STDIO_H instead of
+	_GL_ALREADY_INCLUDING_STDIO_H.
+	* lib/freopen.c: Likewise.
+
 2024-12-24  Bruno Haible  <br...@clisp.org>
 
 	spawn: Support several gnulib-tool invocations better.
diff --git a/lib/fopen.c b/lib/fopen.c
index d3b57a987a..b9e6e37374 100644
--- a/lib/fopen.c
+++ b/lib/fopen.c
@@ -19,12 +19,12 @@
 /* If the user's config.h happens to include <stdio.h>, let it include only
    the system's <stdio.h> here, so that orig_fopen doesn't recurse to
    rpl_fopen.  */
-#define _GL_ALREADY_INCLUDING_STDIO_H
+#define _GL_SKIP_GNULIB_STDIO_H
 #include <config.h>
 
 /* Get the original definition of fopen.  It might be defined as a macro.  */
 #include <stdio.h>
-#undef _GL_ALREADY_INCLUDING_STDIO_H
+#undef _GL_SKIP_GNULIB_STDIO_H
 
 static FILE *
 orig_fopen (const char *filename, const char *mode)
diff --git a/lib/freopen.c b/lib/freopen.c
index e003c0ba7f..ab4a40dfe0 100644
--- a/lib/freopen.c
+++ b/lib/freopen.c
@@ -19,12 +19,12 @@
 /* If the user's config.h happens to include <stdio.h>, let it include only
    the system's <stdio.h> here, so that orig_freopen doesn't recurse to
    rpl_freopen.  */
-#define _GL_ALREADY_INCLUDING_STDIO_H
+#define _GL_SKIP_GNULIB_STDIO_H
 #include <config.h>
 
 /* Get the original definition of freopen.  It might be defined as a macro.  */
 #include <stdio.h>
-#undef _GL_ALREADY_INCLUDING_STDIO_H
+#undef _GL_SKIP_GNULIB_STDIO_H
 
 #include <errno.h>
 
diff --git a/lib/stdio.in.h b/lib/stdio.in.h
index e77798d9b2..ed260d308b 100644
--- a/lib/stdio.in.h
+++ b/lib/stdio.in.h
@@ -20,7 +20,7 @@
 #endif
 @PRAGMA_COLUMNS@
 
-#if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H
+#if defined __need_FILE || defined __need___FILE || defined _@GUARD_PREFIX@_ALREADY_INCLUDING_STDIO_H || defined _GL_SKIP_GNULIB_STDIO_H
 /* Special invocation convention:
    - Inside glibc header files.
    - On OSF/1 5.1 we have a sequence of nested includes
@@ -48,12 +48,12 @@
 # endif
 #endif
 
-#define _GL_ALREADY_INCLUDING_STDIO_H
+#define _@GUARD_PREFIX@_ALREADY_INCLUDING_STDIO_H
 
 /* The include_next requires a split double-inclusion guard.  */
 #@INCLUDE_NEXT@ @NEXT_STDIO_H@
 
-#undef _GL_ALREADY_INCLUDING_STDIO_H
+#undef _@GUARD_PREFIX@_ALREADY_INCLUDING_STDIO_H
 
 #ifdef _GL_DEFINED__POSIX_C_SOURCE
 # undef _GL_DEFINED__POSIX_C_SOURCE
-- 
2.43.0

>From 7e9b92b4fc06d24b8df992c3958b82db9d75d470 Mon Sep 17 00:00:00 2001
From: Bruno Haible <br...@clisp.org>
Date: Tue, 24 Dec 2024 11:20:52 +0100
Subject: [PATCH 08/11] string: Support several gnulib-tool invocations better.

* lib/string.in.h (_GL_ALREADY_INCLUDING_STRING_H): Rename to a macro
that depends on GUARD_PREFIX.
---
 ChangeLog       | 6 ++++++
 lib/string.in.h | 6 +++---
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 62a1149468..5037f1bbc5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2024-12-24  Bruno Haible  <br...@clisp.org>
+
+	string: Support several gnulib-tool invocations better.
+	* lib/string.in.h (_GL_ALREADY_INCLUDING_STRING_H): Rename to a macro
+	that depends on GUARD_PREFIX.
+
 2024-12-24  Bruno Haible  <br...@clisp.org>
 
 	stdio: Support several gnulib-tool invocations better.
diff --git a/lib/string.in.h b/lib/string.in.h
index f5a6d8b326..72cd7566e6 100644
--- a/lib/string.in.h
+++ b/lib/string.in.h
@@ -20,7 +20,7 @@
 #endif
 @PRAGMA_COLUMNS@
 
-#if defined _GL_ALREADY_INCLUDING_STRING_H
+#if defined _@GUARD_PREFIX@_ALREADY_INCLUDING_STRING_H
 /* Special invocation convention:
    - On OS X/NetBSD we have a sequence of nested includes
        <string.h> -> <strings.h> -> "string.h"
@@ -34,12 +34,12 @@
 
 #ifndef _@GUARD_PREFIX@_STRING_H
 
-#define _GL_ALREADY_INCLUDING_STRING_H
+#define _@GUARD_PREFIX@_ALREADY_INCLUDING_STRING_H
 
 /* The include_next requires a split double-inclusion guard.  */
 #@INCLUDE_NEXT@ @NEXT_STRING_H@
 
-#undef _GL_ALREADY_INCLUDING_STRING_H
+#undef _@GUARD_PREFIX@_ALREADY_INCLUDING_STRING_H
 
 #ifndef _@GUARD_PREFIX@_STRING_H
 #define _@GUARD_PREFIX@_STRING_H
-- 
2.43.0

>From e095b4f2f55b1311ce170de5e014ba24325f0a91 Mon Sep 17 00:00:00 2001
From: Bruno Haible <br...@clisp.org>
Date: Tue, 24 Dec 2024 11:21:51 +0100
Subject: [PATCH 09/11] sys_socket: Support several gnulib-tool invocations
 better.

* lib/sys_socket.in.h (_GL_ALREADY_INCLUDING_SYS_SOCKET_H): Rename to a
macro that depends on GUARD_PREFIX.
(struct msghdr): Avoid duplicate definition.
---
 ChangeLog           | 7 +++++++
 lib/sys_socket.in.h | 9 ++++++---
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 5037f1bbc5..bec6cc301e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2024-12-24  Bruno Haible  <br...@clisp.org>
+
+	sys_socket: Support several gnulib-tool invocations better.
+	* lib/sys_socket.in.h (_GL_ALREADY_INCLUDING_SYS_SOCKET_H): Rename to a
+	macro that depends on GUARD_PREFIX.
+	(struct msghdr): Avoid duplicate definition.
+
 2024-12-24  Bruno Haible  <br...@clisp.org>
 
 	string: Support several gnulib-tool invocations better.
diff --git a/lib/sys_socket.in.h b/lib/sys_socket.in.h
index 2be986659f..9610a52647 100644
--- a/lib/sys_socket.in.h
+++ b/lib/sys_socket.in.h
@@ -27,7 +27,7 @@
 #endif
 @PRAGMA_COLUMNS@
 
-#if defined _GL_ALREADY_INCLUDING_SYS_SOCKET_H
+#if defined _@GUARD_PREFIX@_ALREADY_INCLUDING_SYS_SOCKET_H
 /* Special invocation convention:
    - On Cygwin 1.5.x we have a sequence of nested includes
      <sys/socket.h> -> <cygwin/socket.h> -> <asm/socket.h> -> <cygwin/if.h>,
@@ -43,7 +43,7 @@
 
 #if @HAVE_SYS_SOCKET_H@
 
-# define _GL_ALREADY_INCLUDING_SYS_SOCKET_H
+# define _@GUARD_PREFIX@_ALREADY_INCLUDING_SYS_SOCKET_H
 
 /* On many platforms, <sys/socket.h> assumes prior inclusion of
    <sys/types.h>.  */
@@ -56,7 +56,7 @@
 /* The include_next requires a split double-inclusion guard.  */
 # @INCLUDE_NEXT@ @NEXT_SYS_SOCKET_H@
 
-# undef _GL_ALREADY_INCLUDING_SYS_SOCKET_H
+# undef _@GUARD_PREFIX@_ALREADY_INCLUDING_SYS_SOCKET_H
 
 #endif
 
@@ -202,6 +202,7 @@ struct sockaddr_storage
 
 /* Rudimentary 'struct msghdr'; this works as long as you don't try to
    access msg_control or msg_controllen.  */
+# if !defined GNULIB_defined_struct_msghdr
 struct msghdr {
   void *msg_name;
   socklen_t msg_namelen;
@@ -209,6 +210,8 @@ struct msghdr {
   int msg_iovlen;
   int msg_flags;
 };
+#  define GNULIB_defined_struct_msghdr 1
+# endif
 
 #endif
 
-- 
2.43.0

>From 399006d7f5d3937290bb3b8de9684ac30f5f0ec7 Mon Sep 17 00:00:00 2001
From: Bruno Haible <br...@clisp.org>
Date: Tue, 24 Dec 2024 11:22:40 +0100
Subject: [PATCH 10/11] threads-h: Support several gnulib-tool invocations
 better.

* lib/threads.in.h (_GL_ALREADY_INCLUDING_THREADS_H): Rename to a macro
that depends on GUARD_PREFIX.
(struct thrd_with_exitcode): Avoid duplicate definition.
---
 ChangeLog        |  7 +++++++
 lib/threads.in.h | 11 +++++++----
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index bec6cc301e..b2175edb0b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2024-12-24  Bruno Haible  <br...@clisp.org>
+
+	threads-h: Support several gnulib-tool invocations better.
+	* lib/threads.in.h (_GL_ALREADY_INCLUDING_THREADS_H): Rename to a macro
+	that depends on GUARD_PREFIX.
+	(struct thrd_with_exitcode): Avoid duplicate definition.
+
 2024-12-24  Bruno Haible  <br...@clisp.org>
 
 	sys_socket: Support several gnulib-tool invocations better.
diff --git a/lib/threads.in.h b/lib/threads.in.h
index 91834d0788..fd4a5818ad 100644
--- a/lib/threads.in.h
+++ b/lib/threads.in.h
@@ -20,7 +20,7 @@
 #endif
 @PRAGMA_COLUMNS@
 
-#if defined _GL_ALREADY_INCLUDING_THREADS_H
+#if defined _@GUARD_PREFIX@_ALREADY_INCLUDING_THREADS_H
 /* Special invocation convention:
    - On Android we have a sequence of nested includes
      <threads.h> -> <android/legacy_threads_inlines.h>
@@ -35,14 +35,14 @@
 
 #ifndef _@GUARD_PREFIX@_THREADS_H
 
-#define _GL_ALREADY_INCLUDING_THREADS_H
+#define _@GUARD_PREFIX@_ALREADY_INCLUDING_THREADS_H
 
 /* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_THREADS_H@
 # @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_THREADS_H@
 #endif
 
-#undef _GL_ALREADY_INCLUDING_THREADS_H
+#undef _@GUARD_PREFIX@_ALREADY_INCLUDING_THREADS_H
 
 #ifndef _@GUARD_PREFIX@_THREADS_H
 #define _@GUARD_PREFIX@_THREADS_H
@@ -144,6 +144,7 @@ typedef pthread_t thrd_t;
 #endif
 #if @BROKEN_THRD_START_T@ || @BROKEN_THRD_JOIN@
 /* Need to override thrd_t, to make thrd_join work.  */
+# if !defined GNULIB_defined_struct_thrd_with_exitcode
 struct thrd_with_exitcode
 {
   thrd_t volatile tid;
@@ -151,7 +152,9 @@ struct thrd_with_exitcode
   int volatile exitcode;
 };
 typedef struct thrd_with_exitcode *rpl_thrd_t;
-# define thrd_t rpl_thrd_t
+#  define thrd_t rpl_thrd_t
+#  define GNULIB_defined_struct_thrd_with_exitcode 1
+# endif
 #endif
 /* Type of the main function of a thread.  */
 #if !@HAVE_THREADS_H@ || @BROKEN_THRD_START_T@
-- 
2.43.0

>From 2dd90a9b5fb9851d3a764129ace6a744c8562c1a Mon Sep 17 00:00:00 2001
From: Bruno Haible <br...@clisp.org>
Date: Tue, 24 Dec 2024 11:23:45 +0100
Subject: [PATCH 11/11] wchar: Support several gnulib-tool invocations better.

* lib/wchar.in.h (_GL_ALREADY_INCLUDING_WCHAR_H): Rename to a macro that
depends on GUARD_PREFIX.
(mbszero): Avoid duplicate definition.
---
 ChangeLog      |  7 +++++++
 lib/wchar.in.h | 15 +++++++++------
 2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index b2175edb0b..20c4ab35c9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2024-12-24  Bruno Haible  <br...@clisp.org>
+
+	wchar: Support several gnulib-tool invocations better.
+	* lib/wchar.in.h (_GL_ALREADY_INCLUDING_WCHAR_H): Rename to a macro that
+	depends on GUARD_PREFIX.
+	(mbszero): Avoid duplicate definition.
+
 2024-12-24  Bruno Haible  <br...@clisp.org>
 
 	threads-h: Support several gnulib-tool invocations better.
diff --git a/lib/wchar.in.h b/lib/wchar.in.h
index 3c6beb0712..1eaaf363f4 100644
--- a/lib/wchar.in.h
+++ b/lib/wchar.in.h
@@ -37,7 +37,7 @@
               && !defined _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H)     \
              || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H))               \
      || (defined __MINGW32__ && defined __STRING_H_SOURCED__)           \
-     || defined _GL_ALREADY_INCLUDING_WCHAR_H)
+     || defined _@GUARD_PREFIX@_ALREADY_INCLUDING_WCHAR_H)
 /* Special invocation convention:
    - Inside glibc and uClibc header files, but not MinGW.
    - On HP-UX 11.00 we have a sequence of nested includes
@@ -59,7 +59,7 @@
 
 #ifndef _@GUARD_PREFIX@_WCHAR_H
 
-#define _GL_ALREADY_INCLUDING_WCHAR_H
+#define _@GUARD_PREFIX@_ALREADY_INCLUDING_WCHAR_H
 
 #if @HAVE_FEATURES_H@
 # include <features.h> /* for __GLIBC__ */
@@ -79,7 +79,7 @@
 # @INCLUDE_NEXT@ @NEXT_WCHAR_H@
 #endif
 
-#undef _GL_ALREADY_INCLUDING_WCHAR_H
+#undef _@GUARD_PREFIX@_ALREADY_INCLUDING_WCHAR_H
 
 #ifndef _@GUARD_PREFIX@_WCHAR_H
 #define _@GUARD_PREFIX@_WCHAR_H
@@ -531,16 +531,19 @@ _GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - "
 #  define _GL_MBSTATE_ZERO_SIZE sizeof (mbstate_t)
 # endif
 _GL_BEGIN_C_LINKAGE
-# if defined IN_MBSZERO
+# if !GNULIB_defined_mbszero
+#  if defined IN_MBSZERO
 _GL_EXTERN_INLINE
-# else
+#  else
 _GL_INLINE
-# endif
+#  endif
 _GL_ARG_NONNULL ((1)) void
 mbszero (mbstate_t *ps)
 {
   memset (ps, 0, _GL_MBSTATE_ZERO_SIZE);
 }
+#  define GNULIB_defined_mbszero 1
+# endif
 _GL_END_C_LINKAGE
 _GL_CXXALIAS_SYS (mbszero, void, (mbstate_t *ps));
 _GL_CXXALIASWARN (mbszero);
-- 
2.43.0

Reply via email to