Mercurial > hg > octave-lyh > gnulib-hg
changeset 13041:3c571b86f200
gethostname: fix build on mingw
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. The fix is to ensure
that our replacement unistd.h does not declare any replacements
until we are sure that winsock2.h is completely included.
* lib/unistd.in.h (includes): Work around fact that mingw
<winsock2.h> re-includes <unistd.h>, by avoiding any
redeclarations if we are being included by <winsock2.h>.
Reported by Matthias Bolte.
Signed-off-by: Eric Blake <eblake@redhat.com>
author | Eric Blake <eblake@redhat.com> |
---|---|
date | Fri, 19 Mar 2010 16:57:28 -0600 |
parents | 320f40c27bf5 |
children | 80d3dab738c0 |
files | ChangeLog lib/unistd.in.h |
diffstat | 2 files changed, 33 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2010-03-22 Eric Blake <eblake@redhat.com> + + gethostname: fix build on mingw + * lib/unistd.in.h (includes): Work around fact that mingw + <winsock2.h> re-includes <unistd.h>, by avoiding any + redeclarations if we are being included by <winsock2.h>. + Reported by Matthias Bolte. + 2010-03-21 Bruno Haible <bruno@clisp.org> forkpty: Provide replacement on AIX, HP-UX, IRIX, Solaris.
--- a/lib/unistd.in.h +++ b/lib/unistd.in.h @@ -15,7 +15,23 @@ 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. */ +#if @UNISTD_H_HAVE_WINSOCK2_H@ && !defined _GL_WINSOCK2_H_WITNESS \ + && defined _WINSOCK2_H +/* <unistd.h> is being indirectly included for the first time from + <winsock2.h>; avoid declaring any overrides. */ +# if @HAVE_UNISTD_H@ +# @INCLUDE_NEXT@ @NEXT_UNISTD_H@ +# else +# error unexpected; report this to bug-gnulib@gnu.org +# endif +# define _GL_WINSOCK2_H_WITNESS + +/* Normal invocation. */ +#elif !defined _GL_UNISTD_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ @@ -26,7 +42,14 @@ # @INCLUDE_NEXT@ @NEXT_UNISTD_H@ #endif -#ifndef _GL_UNISTD_H +/* Get all possible declarations of gethostname(). */ +#if @UNISTD_H_HAVE_WINSOCK2_H@ && !defined _GL_INCLUDING_WINSOCK2_H +# define _GL_INCLUDING_WINSOCK2_H +# include <winsock2.h> +# undef _GL_INCLUDING_WINSOCK2_H +#endif + +#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 +99,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