Hannes Müller wrote: > In file included from poll.c:39: > C:/Users/hm/Documents/msys32/mingw32/i686-w64- > mingw32/include/winsock2.h:1155:16: error: redefinition of 'struct > pollfd' > 1155 | typedef struct pollfd { > | ^~~~~~ > In file included from poll.c:32: > ./poll.h:506:8: note: originally defined here > 506 | struct pollfd > | ^~~~~~
Thanks for the report. I reproduce it, when adding -D_WIN32_WINNT=0x0600 (-> compilation for Windows Vista or newer) to the CPPFLAGS. This patch fixes it. 2019-06-30 Bruno Haible <br...@clisp.org> poll-h: Fix compilation error on mingw with _WIN32_WINNT >= 0x0600. Reported by Hannes Müller <h.c.f.muel...@gmx.de>. * lib/poll.in.h: Include <winsock2.h>. (POLL*, pollfd): Override on native Windows. * m4/poll_h.m4 (gl_POLL_H): Invoke gl_PREREQ_SYS_H_WINSOCK2. * modules/poll-h (Files): Add m4/sys_socket_h.m4. (Makefile.am): Substitute HAVE_WINSOCK2_H. diff --git a/lib/poll.in.h b/lib/poll.in.h index 5cf6566..0b115dc 100644 --- a/lib/poll.in.h +++ b/lib/poll.in.h @@ -33,6 +33,13 @@ #ifndef _@GUARD_PREFIX@_POLL_H #define _@GUARD_PREFIX@_POLL_H +/* On native Windows, get the 'struct pollfd' type and the POLL* macro + definitions before we override them. mingw defines them in <winsock2.h> + if _WIN32_WINNT >= 0x0600. */ +#if @HAVE_WINSOCK2_H@ +# include <winsock2.h> +#endif + /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ @@ -41,6 +48,21 @@ #if !@HAVE_POLL_H@ +# if @HAVE_WINSOCK2_H@ +/* Override the definitions from <winsock2.h>. */ +# undef POLLIN +# undef POLLPRI +# undef POLLOUT +# undef POLLERR +# undef POLLHUP +# undef POLLNVAL +# undef POLLRDNORM +# undef POLLRDBAND +# undef POLLWRNORM +# undef POLLWRBAND +# define pollfd rpl_pollfd +# endif + /* fake a poll(2) environment */ # define POLLIN 0x0001 /* any readable data available */ # define POLLPRI 0x0002 /* OOB/Urgent readable data */ diff --git a/m4/poll_h.m4 b/m4/poll_h.m4 index 94de19b..8f0e105 100644 --- a/m4/poll_h.m4 +++ b/m4/poll_h.m4 @@ -1,4 +1,4 @@ -# poll_h.m4 serial 2 +# poll_h.m4 serial 3 dnl Copyright (C) 2010-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -23,6 +23,8 @@ AC_DEFUN([gl_POLL_H], dnl <poll.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([poll.h]) + gl_PREREQ_SYS_H_WINSOCK2 dnl for HAVE_WINSOCK2_H + dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <poll.h>]], diff --git a/modules/poll-h b/modules/poll-h index c1d3969..3c68758 100644 --- a/modules/poll-h +++ b/modules/poll-h @@ -4,6 +4,7 @@ A POSIX-like <poll.h>. Files: lib/poll.in.h m4/poll_h.m4 +m4/sys_socket_h.m4 Depends-on: extensions @@ -29,6 +30,7 @@ poll.h: poll.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_POLL_H''@|$(NEXT_POLL_H)|g' \ -e 's/@''GNULIB_POLL''@/$(GNULIB_POLL)/g' \ + -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ -e 's|@''HAVE_POLL''@|$(HAVE_POLL)|g' \ -e 's|@''REPLACE_POLL''@|$(REPLACE_POLL)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \