The msvc winsock2.h header file conditionally defines or declares poll() related symbols which cause many macro redefinition errors, a struct type redefinition error and syntax errors. These symbols are defined in support of the WSAPoll() API, new in Windows Vista, when the symbol _WIN32_WINNT is defined and _WIN32_WINNT >= 0x0600. In order to avoid the compilation errors, we set _WIN32_WINNT to 0x0502 (which would target Windows Server 2003) prior to including the winsock2.h header file. Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk> --- compat/win32/sys/poll.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/compat/win32/sys/poll.c b/compat/win32/sys/poll.c index 7e74ebe..708a6c9 100644 --- a/compat/win32/sys/poll.c +++ b/compat/win32/sys/poll.c @@ -34,6 +34,9 @@ #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # define WIN32_NATIVE +# if defined (_MSC_VER) +# define _WIN32_WINNT 0x0502 +# endif # include <winsock2.h> # include <windows.h> # include <io.h> -- 1.7.3 --
Could it make sense to define this at the same time as _GNU_SOURCE et al? #define _ALL_SOURCE 1 #define _GNU_SOURCE 1 #define _BSD_SOURCE 1 #define _NETBSD_SOURCE 1 #define _SGI_SOURCE 1 #define _WIN32_WINNT 0x0502 Haven't thought carefully about the consequences, though; your patch is probably safer. --
[Sorry for the late reply, I've been away from email for several days] This would not fix the compilation errors, since compat/win32/sys/poll.c does not include the git-compat-util.h header file (and I *don't* think it should). ;-) ATB, Ramsay Jones --
I have an almost identical patch in my msvc-tree, so FWIW: Acked-by: Erik Faye-Lund <kusmabite@gmail.com> --
Don't you have to do the same in git-compat-util.h? -- Hannes --
No. compat/win32/sys/poll.c doesn't include git-compat-util.h (and I don't think it should), so adding it there would not solve the immediate problem. Also, I don't see any reason to restrict the API used by both MinGW and msvc in other parts of git. ATB, Ramsay Jones --
Didn't I say: "do the same..."? :-) So the question remains open. After all, by doing so, you would make sure that the rest of git sees the same API (struct definitions and #defined constants) as compat/win32/sys/poll.c, no? -- Hannes --
Thanks. This dispels my concerns. -- Hannes --
