[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] gethostname: fix build on mingw
From: |
Eric Blake |
Subject: |
[PATCH] gethostname: fix build on mingw |
Date: |
Sat, 20 Mar 2010 12:20:09 -0600 |
Since commit 4e86671a, gethostname failed to compile on mingw.
Gnulib's sys/socket.h includes winsock2.h, which then includes
unistd.h prior to declaring gethostname. Therefore, unistd.h
cannot replace gethostname until winsock2.h is complete, also
fixing things if a .c includes <unistd.h> (or even <winsock2.h>)
prior to <sys/socket.h>.
* lib/sys_socket.in.h (includes): Set witness when including
winsock2.h.
* lib/unistd.in.h (includes): Likewise, after hoisting <winsock2.h>
inclusion. Don't replace anything when included by winsock2.h.
Reported by Matthias Bolte.
Signed-off-by: Eric Blake <address@hidden>
---
Next round of attempts.
ChangeLog | 9 +++++++++
lib/sys_socket.in.h | 7 ++++++-
lib/unistd.in.h | 24 +++++++++++++++++++++---
3 files changed, 36 insertions(+), 4 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index cc3ef5a..eb4cf52 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2010-03-20 Eric Blake <address@hidden>
+
+ gethostname: fix build on mingw
+ * lib/sys_socket.in.h (includes): Set witness when including
+ winsock2.h.
+ * lib/unistd.in.h (includes): Likewise, after hoisting <winsock2.h>
+ inclusion. Don't replace anything when included by winsock2.h.
+ Reported by Matthias Bolte.
+
2010-03-20 Bruno Haible <address@hidden>
* m4/unlink.m4 (gl_FUNC_UNLINK): Fix last commit.
diff --git a/lib/sys_socket.in.h b/lib/sys_socket.in.h
index 006a901..b34b506 100644
--- a/lib/sys_socket.in.h
+++ b/lib/sys_socket.in.h
@@ -28,7 +28,10 @@
- On Cygwin 1.5.x we have a sequence of nested includes
<sys/socket.h> -> <cygwin/socket.h> -> <asm/socket.h> -> <cygwin/if.h>,
and the latter includes <sys/socket.h>. In this situation, the functions
- are not yet declared, therefore we cannot provide the C++ aliases. */
+ are not yet declared, therefore we cannot provide the C++ aliases.
+ - On mingw, <sys/socket.h> -> <winsock2.h> -> <unistd.h>, and the latter
+ includes <winsock2.h>. In this situation, functions like gethostname
+ are not yet declared, therefore we must defer. */
address@hidden@ @NEXT_SYS_SOCKET_H@
@@ -129,7 +132,9 @@ struct sockaddr_storage
# if @HAVE_WINSOCK2_H@
+# define _GL_INCLUDING_WINSOCK2_H
# include <winsock2.h>
+# undef _GL_INCLUDING_WINSOCK2_H
# endif
# if @HAVE_WS2TCPIP_H@
# include <ws2tcpip.h>
diff --git a/lib/unistd.in.h b/lib/unistd.in.h
index b74484a..bc2416a 100644
--- a/lib/unistd.in.h
+++ b/lib/unistd.in.h
@@ -15,18 +15,37 @@
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_UNISTD_H
+/* Special invocation convention:
+ - On mingw, several headers, including <winsock2.h>, include <unistd.h>,
+ but we need to ensure that both the system <unistd.h> and <winsock2.h>
+ are completely included before we replace gethostname. */
+#ifdef _GL_INCLUDING_UNISTD_H && @HAVE_UNISTD_H@
+# @INCLUDE_NEXT@ @NEXT_UNISTD_H@
+
+/* Normal invocation. */
+#elif !defined _GL_UNISTD_H
#if __GNUC__ >= 3
@PRAGMA_SYSTEM_HEADER@
#endif
+#define _GL_INCLUDING_UNISTD_H
+
/* The include_next requires a split double-inclusion guard. */
#if @HAVE_UNISTD_H@
# @INCLUDE_NEXT@ @NEXT_UNISTD_H@
#endif
-#ifndef _GL_UNISTD_H
+/* Get all possible declarations of gethostname(). */
+#if @UNISTD_H_HAVE_WINSOCK2_H@
+# define _GL_INCLUDING_WINSOCK2_H
+# include <winsock2.h>
+# undef _GL_INCLUDING_WINSOCK2_H
+#endif
+
+#undef _GL_INCLUDING_UNISTD_H
+
+#if !defined _GL_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H
#define _GL_UNISTD_H
/* NetBSD 5.0 mis-defines NULL. Also get size_t. */
@@ -76,7 +95,6 @@
#if @GNULIB_GETHOSTNAME@
/* Get all possible declarations of gethostname(). */
# if @UNISTD_H_HAVE_WINSOCK2_H@
-# include <winsock2.h>
# if !defined _GL_SYS_SOCKET_H
# undef socket
# define socket socket_used_without_including_sys_socket_h
--
1.6.6.1
- [PATCH] gethostname: fix build on mingw, Eric Blake, 2010/03/19
- Re: [PATCH] gethostname: fix build on mingw, Matthias Bolte, 2010/03/19
- Re: [PATCH] gethostname: fix build on mingw, Eric Blake, 2010/03/20
- Re: [PATCH] gethostname: fix build on mingw, Matthias Bolte, 2010/03/21
- Re: [PATCH] gethostname: fix build on mingw, Eric Blake, 2010/03/22
- [PATCHv4] gethostname: fix build on mingw, Eric Blake, 2010/03/22
- Re: [PATCHv4] gethostname: fix build on mingw, Simon Josefsson, 2010/03/22
- Re: [PATCHv4] gethostname: fix build on mingw, Eric Blake, 2010/03/22
- Re: [PATCHv4] gethostname: fix build on mingw, Simon Josefsson, 2010/03/22
- Re: [PATCHv4] gethostname: fix build on mingw, Eric Blake, 2010/03/22
- Re: [PATCHv4] gethostname: fix build on mingw, Matthias Bolte, 2010/03/22
- Re: [PATCHv4] gethostname: fix build on mingw, Bruno Haible, 2010/03/22
- [PATCH] gethostname: further tweaks, Eric Blake, 2010/03/22