From 595785701d1fe44d8abac5a1454f2468a0482bf0 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Sun, 6 Feb 2011 17:01:26 -0800
Subject: [PATCH] gnulib: allow multiple gnulib generated replacements to
 coexist

This defines a few preprocessor symbols that should not affect Emacs.
* lib/getopt.in.h, lib/time.in.h, lib/unistd.in.h: Regenerate
via "make sync-from-gnulib".
---
 ChangeLog       |  5 +++++
 lib/getopt.in.h |  3 +++
 lib/time.in.h   | 10 ++++++++--
 lib/unistd.in.h |  3 +++
 4 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index ec53bb0ecd5..07f01d6207e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2011-02-06  Paul Eggert  <eggert@cs.ucla.edu>
 
+	gnulib: allow multiple gnulib generated replacements to coexist
+	This defines a few preprocessor symbols that should not affect Emacs.
+	* lib/getopt.in.h, lib/time.in.h, lib/unistd.in.h: Regenerate
+	via "make sync-from-gnulib".
+
 	gnulib: undo previous change
 	The upstream _HEADERS change was backed out of gnulib (see the
 	same thread).  Stay in sync with gnulib.
diff --git a/lib/getopt.in.h b/lib/getopt.in.h
index 9b0a9a58bc9..82e2937d6d2 100644
--- a/lib/getopt.in.h
+++ b/lib/getopt.in.h
@@ -181,6 +181,7 @@ extern int optopt;
    one).  For long options that have a zero `flag' field, `getopt'
    returns the contents of the `val' field.  */
 
+# if !GNULIB_defined_struct_option
 struct option
 {
   const char *name;
@@ -190,6 +191,8 @@ struct option
   int *flag;
   int val;
 };
+#  define GNULIB_defined_struct_option 1
+# endif
 
 /* Names for the values of the `has_arg' field of `struct option'.  */
 
diff --git a/lib/time.in.h b/lib/time.in.h
index 2d6da7161fb..cb533a46e10 100644
--- a/lib/time.in.h
+++ b/lib/time.in.h
@@ -69,13 +69,16 @@
 extern "C" {
 #   endif
 
-#   undef timespec
-#   define timespec rpl_timespec
+#   if !GNULIB_defined_struct_timespec
+#    undef timespec
+#    define timespec rpl_timespec
 struct timespec
 {
   time_t tv_sec;
   long int tv_nsec;
 };
+#    define GNULIB_defined_struct_timespec 1
+#   endif
 
 #   ifdef __cplusplus
 }
@@ -84,6 +87,7 @@ struct timespec
 #  endif
 # endif
 
+# if !GNULIB_defined_struct_time_t_must_be_integral
 /* Per http://austingroupbugs.net/view.php?id=327, POSIX requires
    time_t to be an integer type, even though C99 permits floating
    point.  We don't know of any implementation that uses floating
@@ -92,6 +96,8 @@ struct timespec
 struct __time_t_must_be_integral {
   unsigned int __floating_time_t_unsupported : (time_t) 1;
 };
+#  define GNULIB_defined_struct_time_t_must_be_integral 1
+# endif
 
 /* Sleep for at least RQTP seconds unless interrupted,  If interrupted,
    return -1 and store the remaining time into RMTP.  See
diff --git a/lib/unistd.in.h b/lib/unistd.in.h
index 14d685e0c8f..15893d7eecc 100644
--- a/lib/unistd.in.h
+++ b/lib/unistd.in.h
@@ -796,11 +796,14 @@ _GL_CXXALIAS_RPL (getpagesize, int, (void));
 #    if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 #     define getpagesize() _gl_getpagesize ()
 #    else
+#     if !GNULIB_defined_getpagesize_function
 static inline int
 getpagesize ()
 {
   return _gl_getpagesize ();
 }
+#      define GNULIB_defined_getpagesize_function 1
+#     endif
 #    endif
 #   endif
 #  endif
-- 
2.39.5