changeset 8902:eb07e44564a4

Split the double-inclusion guard. Fixes a problem with #include_next.
author Bruno Haible <bruno@clisp.org>
date Wed, 30 May 2007 02:16:51 +0000
parents 220e79620e7a
children 33db9cbd68d7
files ChangeLog lib/dirent_.h lib/fcntl_.h lib/float_.h lib/iconv_.h lib/inttypes_.h lib/locale_.h lib/math_.h lib/netinet_in_.h lib/search_.h lib/signal_.h lib/stdint_.h lib/stdio_.h lib/stdlib_.h lib/string_.h lib/sys_select_.h lib/sys_socket_.h lib/sys_stat_.h lib/sys_time_.h lib/sysexits_.h lib/time_.h lib/unistd_.h lib/wchar_.h lib/wctype_.h
diffstat 24 files changed, 226 insertions(+), 118 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,30 @@
+2007-05-29  Bruno Haible  <bruno@clisp.org>
+
+	Fix a problem with #include_next.
+	* lib/dirent_.h: Split the double-inclusion guard.
+	* lib/fcntl_.h: Likewise.
+	* lib/float_.h: Likewise.
+	* lib/iconv_.h: Likewise.
+	* lib/inttypes_.h: Likewise.
+	* lib/locale_.h: Likewise.
+	* lib/math_.h: Likewise.
+	* lib/netinet_in_.h: Likewise.
+	* lib/search_.h: Likewise.
+	* lib/signal_.h: Likewise.
+	* lib/stdint_.h: Likewise.
+	* lib/stdio_.h: Likewise.
+	* lib/stdlib_.h: Likewise.
+	* lib/string_.h: Likewise.
+	* lib/sys_select_.h: Likewise.
+	* lib/sys_socket_.h: Likewise.
+	* lib/sys_stat_.h: Likewise.
+	* lib/sys_time_.h: Likewise.
+	* lib/sysexits_.h: Likewise.
+	* lib/time_.h: Likewise.
+	* lib/unistd_.h: Likewise.
+	* lib/wchar_.h: Likewise.
+	* lib/wctype_.h: Likewise.
+
 2007-05-29  Bruno Haible  <bruno@clisp.org>
 
 	* tests/test-unistd.c: Disable the tests for useconds_t and intptr_t
--- a/lib/dirent_.h
+++ b/lib/dirent_.h
@@ -16,14 +16,18 @@
    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 #ifndef _GL_DIRENT_H
-#define _GL_DIRENT_H
 
+/* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_INCLUDE_NEXT@
 # include_next <dirent.h>
 #else
 # include @ABSOLUTE_DIRENT_H@
 #endif
 
+#ifndef _GL_DIRENT_H
+#define _GL_DIRENT_H
+
+
 /* Declare overridden functions.  */
 
 #ifdef __cplusplus
@@ -43,3 +47,4 @@
 
 
 #endif /* _GL_DIRENT_H */
+#endif /* _GL_DIRENT_H */
--- a/lib/fcntl_.h
+++ b/lib/fcntl_.h
@@ -1,6 +1,6 @@
 /* Like <fcntl.h>, but with non-working flags defined to 0.
 
-   Copyright (C) 2006 Free Software Foundation, Inc.
+   Copyright (C) 2006-2007 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -19,17 +19,20 @@
 /* written by Paul Eggert */
 
 #ifndef _GL_FCNTL_H
-#define _GL_FCNTL_H
 
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
+/* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_INCLUDE_NEXT@
 # include_next <fcntl.h>
 #else
 # include @ABSOLUTE_FCNTL_H@
 #endif
 
+#ifndef _GL_FCNTL_H
+#define _GL_FCNTL_H
+
 
 /* Declare overridden functions.  */
 
@@ -117,4 +120,6 @@
 # define O_TEXT 0
 #endif
 
-#endif
+
+#endif /* _GL_FCNTL_H */
+#endif /* _GL_FCNTL_H */
--- a/lib/float_.h
+++ b/lib/float_.h
@@ -17,14 +17,17 @@
    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 #ifndef _GL_FLOAT_H
-#define _GL_FLOAT_H
 
+/* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_INCLUDE_NEXT@
 # include_next <float.h>
 #else
 # include @ABSOLUTE_FLOAT_H@
 #endif
 
+#ifndef _GL_FLOAT_H
+#define _GL_FLOAT_H
+
 /* 'long double' properties.  */
 #if defined __i386__ && defined __BEOS__
 /* Number of mantissa units, in base FLT_RADIX.  */
@@ -57,3 +60,4 @@
 #endif
 
 #endif /* _GL_FLOAT_H */
+#endif /* _GL_FLOAT_H */
--- a/lib/iconv_.h
+++ b/lib/iconv_.h
@@ -17,14 +17,17 @@
    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 #ifndef _GL_ICONV_H
-#define _GL_ICONV_H
 
+/* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_INCLUDE_NEXT@
 # include_next <iconv.h>
 #else
 # include @ABSOLUTE_ICONV_H@
 #endif
 
+#ifndef _GL_ICONV_H
+#define _GL_ICONV_H
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -42,4 +45,5 @@
 }
 #endif
 
-#endif
+#endif /* _GL_ICONV_H */
+#endif /* _GL_ICONV_H */
--- a/lib/inttypes_.h
+++ b/lib/inttypes_.h
@@ -16,9 +16,15 @@
    along with this program; if not, write to the Free Software Foundation,
    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
+/*
+ * ISO C 99 <inttypes.h> for platforms that lack it.
+ * <http://www.opengroup.org/susv3xbd/inttypes.h.html>
+ */
+
 /* Include the original <inttypes.h> if it exists, and if this file
    has not been included yet or if this file includes gnulib stdint.h
-   which in turn includes this file.  */
+   which in turn includes this file.
+   The include_next requires a split double-inclusion guard.  */
 #if ! defined INTTYPES_H || defined _GL_JUST_INCLUDE_ABSOLUTE_INTTYPES_H
 # if @HAVE_INTTYPES_H@
 #  if @HAVE_INCLUDE_NEXT@
@@ -32,11 +38,6 @@
 #if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_ABSOLUTE_INTTYPES_H
 #define INTTYPES_H
 
-/*
- * ISO C 99 <inttypes.h> for platforms that lack it.
- * <http://www.opengroup.org/susv3xbd/inttypes.h.html>
- */
-
 /* Include <stdint.h> or the gnulib replacement.  */
 #include <stdint.h>
 /* Get CHAR_BIT.  */
--- a/lib/locale_.h
+++ b/lib/locale_.h
@@ -16,14 +16,17 @@
    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 #ifndef _GL_LOCALE_H
-#define _GL_LOCALE_H
 
+/* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_INCLUDE_NEXT@
 # include_next <locale.h>
 #else
 # include @ABSOLUTE_LOCALE_H@
 #endif
 
+#ifndef _GL_LOCALE_H
+#define _GL_LOCALE_H
+
 /* The LC_MESSAGES locale category is specified in POSIX, but not in ISO C.
    On systems that don't define it, use the same value as GNU libintl.  */
 #if !defined LC_MESSAGES
@@ -31,3 +34,4 @@
 #endif
 
 #endif /* _GL_LOCALE_H */
+#endif /* _GL_LOCALE_H */
--- a/lib/math_.h
+++ b/lib/math_.h
@@ -16,17 +16,18 @@
    along with this program; if not, write to the Free Software Foundation,
    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
+#ifndef _GL_MATH_H
+
+/* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_INCLUDE_NEXT@
 # include_next <math.h>
+#else
+# include @ABSOLUTE_MATH_H@
 #endif
 
 #ifndef _GL_MATH_H
 #define _GL_MATH_H
 
-#if ! @HAVE_INCLUDE_NEXT@
-# include @ABSOLUTE_MATH_H@
-#endif
-
 
 /* The definition of GL_LINK_WARNING is copied here.  */
 
@@ -264,4 +265,5 @@
 }
 #endif
 
-#endif
+#endif /* _GL_MATH_H */
+#endif /* _GL_MATH_H */
--- a/lib/netinet_in_.h
+++ b/lib/netinet_in_.h
@@ -16,20 +16,26 @@
    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 #ifndef _GL_NETINET_IN_H
-#define _GL_NETINET_IN_H
 
 #if @HAVE_NETINET_IN_H@
 
 /* On many platforms, <netinet/in.h> assumes prior inclusion of
    <sys/types.h>.  */
+# include <sys/types.h>
 
-# include <sys/types.h>
+/* The include_next requires a split double-inclusion guard.  */
 # if @HAVE_INCLUDE_NEXT@
 #  include_next <netinet/in.h>
 # else
 #  include @ABSOLUTE_NETINET_IN_H@
 # endif
-#else
+
+#endif
+
+#ifndef _GL_NETINET_IN_H
+#define _GL_NETINET_IN_H
+
+#if !@HAVE_NETINET_IN_H@
 
 /* A platform that lacks <netinet/in.h>.  */
 
@@ -38,3 +44,4 @@
 #endif
 
 #endif /* _GL_NETINET_IN_H */
+#endif /* _GL_NETINET_IN_H */
--- a/lib/search_.h
+++ b/lib/search_.h
@@ -17,8 +17,8 @@
    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 #ifndef _GL_SEARCH_H
-#define _GL_SEARCH_H
 
+/* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_SEARCH_H@
 # if @HAVE_INCLUDE_NEXT@
 #  include_next <search.h>
@@ -27,6 +27,9 @@
 # endif
 #endif
 
+#ifndef _GL_SEARCH_H
+#define _GL_SEARCH_H
+
 
 /* The definition of GL_LINK_WARNING is copied here.  */
 
@@ -112,4 +115,5 @@
 }
 #endif
 
-#endif
+#endif /* _GL_SEARCH_H */
+#endif /* _GL_SEARCH_H */
--- a/lib/signal_.h
+++ b/lib/signal_.h
@@ -29,14 +29,17 @@
 /* Normal invocation convention.  */
 
 #ifndef _GL_SIGNAL_H
-#define _GL_SIGNAL_H
 
+/* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_INCLUDE_NEXT@
 # include_next <signal.h>
 #else
 # include @ABSOLUTE_SIGNAL_H@
 #endif
 
+#ifndef _GL_SIGNAL_H
+#define _GL_SIGNAL_H
+
 /* The definition of GL_LINK_WARNING is copied here.  */
 
 
@@ -99,4 +102,5 @@
 #endif
 
 #endif /* _GL_SIGNAL_H */
+#endif /* _GL_SIGNAL_H */
 #endif
--- a/lib/stdint_.h
+++ b/lib/stdint_.h
@@ -16,14 +16,13 @@
    along with this program; if not, write to the Free Software Foundation,
    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
-#ifndef _GL_STDINT_H
-#define _GL_STDINT_H
-
 /*
  * ISO C 99 <stdint.h> for platforms that lack it.
  * <http://www.opengroup.org/susv3xbd/stdint.h.html>
  */
 
+#ifndef _GL_STDINT_H
+
 /* Get those types that are already defined in other system include
    files, so that we can "#define int8_t signed char" below without
    worrying about a later system include file containing a "typedef
@@ -42,7 +41,8 @@
   /* Other systems may have an incomplete or buggy <stdint.h>.
      Include it before <inttypes.h>, since any "#include <stdint.h>"
      in <inttypes.h> would reinclude us, skipping our contents because
-     _GL_STDINT_H is defined.  */
+     _GL_STDINT_H is defined.
+     The include_next requires a split double-inclusion guard.  */
 # if @HAVE_INCLUDE_NEXT@
 #  include_next <stdint.h>
 # else
@@ -50,6 +50,9 @@
 # endif
 #endif
 
+#ifndef _GL_STDINT_H
+#define _GL_STDINT_H
+
 /* <sys/types.h> defines some of the stdint.h types as well, on glibc,
    IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>).
    AIX 5.2 <sys/types.h> isn't needed and causes troubles.
@@ -506,3 +509,4 @@
 #endif /* !defined __cplusplus || defined __STDC_CONSTANT_MACROS */
 
 #endif /* _GL_STDINT_H */
+#endif /* _GL_STDINT_H */
--- a/lib/stdio_.h
+++ b/lib/stdio_.h
@@ -28,17 +28,18 @@
 #else
 /* Normal invocation convention.  */
 
+#ifndef _GL_STDIO_H
+
+/* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_INCLUDE_NEXT@
 # include_next <stdio.h>
+#else
+# include @ABSOLUTE_STDIO_H@
 #endif
 
 #ifndef _GL_STDIO_H
 #define _GL_STDIO_H
 
-#if ! @HAVE_INCLUDE_NEXT@
-# include @ABSOLUTE_STDIO_H@
-#endif
-
 #include <stdarg.h>
 #include <stddef.h>
 
@@ -315,4 +316,5 @@
 #endif
 
 #endif /* _GL_STDIO_H */
+#endif /* _GL_STDIO_H */
 #endif
--- a/lib/stdlib_.h
+++ b/lib/stdlib_.h
@@ -28,17 +28,18 @@
 #else
 /* Normal invocation convention.  */
 
+#ifndef _GL_STDLIB_H
+
+/* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_INCLUDE_NEXT@
 # include_next <stdlib.h>
+#else
+# include @ABSOLUTE_STDLIB_H@
 #endif
 
 #ifndef _GL_STDLIB_H
 #define _GL_STDLIB_H
 
-#if ! @HAVE_INCLUDE_NEXT@
-# include @ABSOLUTE_STDLIB_H@
-#endif
-
 
 /* The definition of GL_LINK_WARNING is copied here.  */
 
@@ -135,4 +136,5 @@
 #endif
 
 #endif /* _GL_STDLIB_H */
+#endif /* _GL_STDLIB_H */
 #endif
--- a/lib/string_.h
+++ b/lib/string_.h
@@ -16,17 +16,18 @@
    along with this program; if not, write to the Free Software Foundation,
    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
+#ifndef _GL_STRING_H
+
+/* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_INCLUDE_NEXT@
 # include_next <string.h>
+#else
+# include @ABSOLUTE_STRING_H@
 #endif
 
 #ifndef _GL_STRING_H
 #define _GL_STRING_H
 
-#if ! @HAVE_INCLUDE_NEXT@
-# include @ABSOLUTE_STRING_H@
-#endif
-
 
 /* The definition of GL_LINK_WARNING is copied here.  */
 
@@ -541,4 +542,5 @@
 }
 #endif
 
-#endif
+#endif /* _GL_STRING_H */
+#endif /* _GL_STRING_H */
--- a/lib/sys_select_.h
+++ b/lib/sys_select_.h
@@ -16,22 +16,26 @@
    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 #ifndef _GL_SYS_SELECT_H
-#define _GL_SYS_SELECT_H
 
 #if @HAVE_SYS_SELECT_H@
 
 /* On many platforms, <sys/select.h> assumes prior inclusion of
    <sys/types.h>.  */
-
 # include <sys/types.h>
 
+/* The include_next requires a split double-inclusion guard.  */
 # if @HAVE_INCLUDE_NEXT@
 #  include_next <sys/select.h>
 # else
 #  include @ABSOLUTE_SYS_SELECT_H@
 # endif
 
-#else
+#endif
+
+#ifndef _GL_SYS_SELECT_H
+#define _GL_SYS_SELECT_H
+
+#if !@HAVE_SYS_SELECT_H@
 
 /* A platform that lacks <sys/select.h>.  */
 
@@ -40,3 +44,4 @@
 #endif
 
 #endif /* _GL_SYS_SELECT_H */
+#endif /* _GL_SYS_SELECT_H */
--- a/lib/sys_socket_.h
+++ b/lib/sys_socket_.h
@@ -16,28 +16,32 @@
    along with this program; if not, write to the Free Software Foundation,
    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
-#ifndef _GL_SYS_SOCKET_H
-#define _GL_SYS_SOCKET_H
-
 /* This file is supposed to be used on platforms that lack <sys/socket.h>
    and on platforms where <sys/socket.h> cannot be included standalone.
    It is intended to provide definitions and prototypes needed by an
    application.  */
 
+#ifndef _GL_SYS_SOCKET_H
+
 #if @HAVE_SYS_SOCKET_H@
 
 /* On many platforms, <sys/socket.h> assumes prior inclusion of
    <sys/types.h>.  */
-
 # include <sys/types.h>
 
+/* The include_next requires a split double-inclusion guard.  */
 # if @HAVE_INCLUDE_NEXT@
 #  include_next <sys/socket.h>
 # else
 #  include @ABSOLUTE_SYS_SOCKET_H@
 # endif
 
-#else
+#endif
+
+#ifndef _GL_SYS_SOCKET_H
+#define _GL_SYS_SOCKET_H
+
+#if !@HAVE_SYS_SOCKET_H@
 
 /* A platform that lacks <sys/socket.h>.
 
@@ -88,3 +92,4 @@
 #endif /* HAVE_SYS_SOCKET_H */
 
 #endif /* _GL_SYS_SOCKET_H */
+#endif /* _GL_SYS_SOCKET_H */
--- a/lib/sys_stat_.h
+++ b/lib/sys_stat_.h
@@ -17,19 +17,22 @@
 
 /* Written by Eric Blake, Paul Eggert, and Jim Meyering.  */
 
-#ifndef _GL_SYS_STAT_H
-#define _GL_SYS_STAT_H
-
 /* This file is supposed to be used on platforms where <sys/stat.h> is
    incomplete.  It is intended to provide definitions and prototypes
    needed by an application.  Start with what the system provides.  */
 
+#ifndef _GL_SYS_STAT_H
+
+/* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_INCLUDE_NEXT@
 # include_next <sys/stat.h>
 #else
 # include @ABSOLUTE_SYS_STAT_H@
 #endif
 
+#ifndef _GL_SYS_STAT_H
+#define _GL_SYS_STAT_H
+
 #ifndef S_IFMT
 # define S_IFMT 0170000
 #endif
@@ -278,3 +281,4 @@
 #endif
 
 #endif /* _GL_SYS_STAT_H */
+#endif /* _GL_SYS_STAT_H */
--- a/lib/sys_time_.h
+++ b/lib/sys_time_.h
@@ -19,8 +19,8 @@
 /* Written by Paul Eggert.  */
 
 #ifndef _GL_SYS_TIME_H
-#define _GL_SYS_TIME_H
 
+/* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_SYS_TIME_H@
 # if @HAVE_INCLUDE_NEXT@
 #  include_next <sys/time.h>
@@ -31,6 +31,9 @@
 # include <time.h>
 #endif
 
+#ifndef _GL_SYS_TIME_H
+#define _GL_SYS_TIME_H
+
 #if ! @HAVE_STRUCT_TIMEVAL@
 struct timeval
 {
@@ -46,3 +49,4 @@
 #endif
 
 #endif /* _GL_SYS_TIME_H */
+#endif /* _GL_SYS_TIME_H */
--- a/lib/sysexits_.h
+++ b/lib/sysexits_.h
@@ -18,7 +18,6 @@
 /* Written by Simon Josefsson based on sysexits(3) man page */
 
 #ifndef _GL_SYSEXITS_H
-#define _GL_SYSEXITS_H
 
 #if @HAVE_SYSEXITS_H@
 
@@ -30,6 +29,7 @@
 #  undef EX_OK
 # endif
 
+/* The include_next requires a split double-inclusion guard.  */
 # if @HAVE_INCLUDE_NEXT@
 #  include_next <sysexits.h>
 # else
@@ -41,7 +41,12 @@
 #  define EX_CONFIG 78
 # endif
 
-#else
+#endif
+
+#ifndef _GL_SYSEXITS_H
+#define _GL_SYSEXITS_H
+
+#if !@HAVE_SYSEXITS_H@
 
 # define EX_OK 0 /* same value as EXIT_SUCCESS */
 
@@ -64,3 +69,4 @@
 #endif
 
 #endif /* _GL_SYSEXITS_H */
+#endif /* _GL_SYSEXITS_H */
--- a/lib/time_.h
+++ b/lib/time_.h
@@ -30,94 +30,96 @@
 #else
 /* Normal invocation convention.  */
 
-# if @HAVE_INCLUDE_NEXT@
-#  include_next <time.h>
-# endif
+# if ! defined _GL_TIME_H
 
-# if ! defined _GL_TIME_H
-#  define _GL_TIME_H
-
-#  if ! @HAVE_INCLUDE_NEXT@
+/* The include_next requires a split double-inclusion guard.  */
+#  if @HAVE_INCLUDE_NEXT@
+#   include_next <time.h>
+#  else
 #   include @ABSOLUTE_TIME_H@
 #  endif
 
-#  ifdef __cplusplus
+#  if ! defined _GL_TIME_H
+#   define _GL_TIME_H
+
+#   ifdef __cplusplus
 extern "C" {
-#  endif
+#   endif
 
 /* Some systems don't define struct timespec (e.g., AIX 4.1, Ultrix 4.3).
    Or they define it with the wrong member names or define it in <sys/time.h>
    (e.g., FreeBSD circa 1997).  */
-#  if ! @TIME_H_DEFINES_STRUCT_TIMESPEC@
-#   if @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
-#    include <sys/time.h>
-#   else
-#    undef timespec
-#    define timespec rpl_timespec
+#   if ! @TIME_H_DEFINES_STRUCT_TIMESPEC@
+#    if @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+#     include <sys/time.h>
+#    else
+#     undef timespec
+#     define timespec rpl_timespec
 struct timespec
 {
   time_t tv_sec;
   long int tv_nsec;
 };
+#    endif
 #   endif
-#  endif
 
 /* Sleep for at least RQTP seconds unless interrupted,  If interrupted,
    return -1 and store the remaining time into RMTP.  See
    <http://www.opengroup.org/susv3xsh/nanosleep.html>.  */
-#  if @REPLACE_NANOSLEEP@
-#   define nanosleep rpl_nanosleep
+#   if @REPLACE_NANOSLEEP@
+#    define nanosleep rpl_nanosleep
 int nanosleep (struct timespec const *__rqtp, struct timespec *__rmtp);
-#  endif
+#   endif
 
 /* Convert TIMER to RESULT, assuming local time and UTC respectively.  See
    <http://www.opengroup.org/susv3xsh/localtime_r.html> and
    <http://www.opengroup.org/susv3xsh/gmtime_r.html>.  */
-#  if @REPLACE_LOCALTIME_R@
-#   undef localtime_r
-#   define localtime_r rpl_localtime_r
-#   undef gmtime_r
-#   define gmtime_r rpl_gmtime_r
+#   if @REPLACE_LOCALTIME_R@
+#    undef localtime_r
+#    define localtime_r rpl_localtime_r
+#    undef gmtime_r
+#    define gmtime_r rpl_gmtime_r
 struct tm *localtime_r (time_t const *restrict __timer,
 			struct tm *restrict __result);
 struct tm *gmtime_r (time_t const *restrict __timer,
 		     struct tm *restrict __result);
-#  endif
+#   endif
 
 /* Parse BUF as a time stamp, assuming FORMAT specifies its layout, and store
    the resulting broken-down time into TM.  See
    <http://www.opengroup.org/susv3xsh/strptime.html>.  */
-#  if @REPLACE_STRPTIME@
-#   undef strptime
-#   define strptime rpl_strptime
+#   if @REPLACE_STRPTIME@
+#    undef strptime
+#    define strptime rpl_strptime
 char *strptime (char const *restrict __buf, char const *restrict __format,
 		struct tm *restrict __tm);
-#  endif
+#   endif
 
 /* Convert TM to a time_t value, assuming UTC.  */
-#  if @REPLACE_TIMEGM@
-#   undef timegm
-#   define timegm rpl_timegm
+#   if @REPLACE_TIMEGM@
+#    undef timegm
+#    define timegm rpl_timegm
 time_t timegm (struct tm *__tm);
-#  endif
+#   endif
 
 /* Encourage applications to avoid unsafe functions that can overrun
    buffers when given outlandish struct tm values.  Portable
    applications should use strftime (or even sprintf) instead.  */
-#  if GNULIB_PORTCHECK
-#   undef asctime
-#   define asctime eschew_asctime
-#   undef asctime_r
-#   define asctime_r eschew_asctime_r
-#   undef ctime
-#   define ctime eschew_ctime
-#   undef ctime_r
-#   define ctime_r eschew_ctime_r
-#  endif
+#   if GNULIB_PORTCHECK
+#    undef asctime
+#    define asctime eschew_asctime
+#    undef asctime_r
+#    define asctime_r eschew_asctime_r
+#    undef ctime
+#    define ctime eschew_ctime
+#    undef ctime_r
+#    define ctime_r eschew_ctime_r
+#   endif
 
-#  ifdef __cplusplus
+#   ifdef __cplusplus
 }
-#  endif
+#   endif
 
-# endif
+#  endif /* _GL_TIME_H */
+# endif /* _GL_TIME_H */
 #endif
--- a/lib/unistd_.h
+++ b/lib/unistd_.h
@@ -16,8 +16,8 @@
    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 #ifndef _GL_UNISTD_H
-#define _GL_UNISTD_H
 
+/* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_UNISTD_H@
 # if @HAVE_INCLUDE_NEXT@
 #  include_next <unistd.h>
@@ -26,6 +26,9 @@
 # endif
 #endif
 
+#ifndef _GL_UNISTD_H
+#define _GL_UNISTD_H
+
 /* mingw doesn't define the SEEK_* macros in <unistd.h>.  */
 #if !(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET)
 # include <stdio.h>
@@ -236,3 +239,4 @@
 
 
 #endif /* _GL_UNISTD_H */
+#endif /* _GL_UNISTD_H */
--- a/lib/wchar_.h
+++ b/lib/wchar_.h
@@ -25,13 +25,7 @@
  * For now, this just ensures proper prerequisite inclusion order.
  */
 
-#if @HAVE_INCLUDE_NEXT@
-# include <stdio.h>
-# include_next <wchar.h>
-#endif
-
 #ifndef _GL_WCHAR_H
-#define _GL_WCHAR_H
 
 /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
    <wchar.h>.
@@ -42,8 +36,15 @@
 #include <time.h>
 
 /* Include the original <wchar.h>.  */
-#if ! @HAVE_INCLUDE_NEXT@
+/* The include_next requires a split double-inclusion guard.  */
+#if @HAVE_INCLUDE_NEXT@
+# include_next <wchar.h>
+#else
 # include @ABSOLUTE_WCHAR_H@
 #endif
 
+#ifndef _GL_WCHAR_H
+#define _GL_WCHAR_H
+
 #endif /* _GL_WCHAR_H */
+#endif /* _GL_WCHAR_H */
--- a/lib/wctype_.h
+++ b/lib/wctype_.h
@@ -26,6 +26,8 @@
  * wctrans_t, and wctype_t are not yet implemented.
  */
 
+#ifndef _GL_WCTYPE_H
+
 #if @HAVE_WINT_T@
 /* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.
    Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
@@ -38,23 +40,20 @@
 # include <wchar.h>
 #endif
 
+/* Include the original <wctype.h> if it exists.
+   BeOS 5 has the functions but no <wctype.h>.  */
+/* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_WCTYPE_H@
 # if @HAVE_INCLUDE_NEXT@
 #  include_next <wctype.h>
+# else
+#  include @ABSOLUTE_WCTYPE_H@
 # endif
 #endif
 
 #ifndef _GL_WCTYPE_H
 #define _GL_WCTYPE_H
 
-/* Include the original <wctype.h> if it exists.
-   BeOS 5 has the functions but no <wctype.h>.  */
-#if @HAVE_WCTYPE_H@
-# if ! @HAVE_INCLUDE_NEXT@
-#  include @ABSOLUTE_WCTYPE_H@
-# endif
-#endif
-
 #if @HAVE_WINT_T@
 typedef wint_t __wctype_wint_t;
 #else
@@ -163,3 +162,4 @@
 # endif /* ! HAVE_ISWCNTRL */
 
 #endif /* _GL_WCTYPE_H */
+#endif /* _GL_WCTYPE_H */