Re: [PATCH 09/14] Avoid including windows.h in winansi.c for MSVC build
- From
- Reece Dunn <msclrhd@googlemail.com>
- Date
- Aug 21, 2009, 21:16 UTC
- Message-ID
- <3f4fd2640908211416i489b6e23s27cb9cae6a439ddc@mail.gmail.com>
- In-Reply-To
- <7vmy5sdgoc.fsf@alter.siamese.dyndns.org>
2009/8/21 Junio C Hamano <gitster@pobox.com>:
Show 14 quoted lines
> Marius Storm-Olsen <mstormo@gmail.com> writes: > >> From: Frank Li <lznuaa@gmail.com> >> >> compat/msvc.h includes winsock2.h which conflicts with windows.h. >> msvc.h also defines the oldest Windows API version required. > > The first sentence sort-of makes sense; compat/msvc.h will be included by > git-compat-util.h and including <windows.h> here will bring conflicting > definitions, so we avoid doing so when on MSC. > > The second sentence does not make any sense to me. It may be correctly > stating a fact (i.e. "defines required WAPI version"), but it is unclear > what relevance it has to this change to stop including <windows.h>.
The way things are configured, windows.h is pulling in winsock.h. In git-compat-util.h, winsock2.h is included which has conflicting definitions of various functions and data structures.
> Having said that, the first sentence hints me that perhaps you guys should > include (conditionally only on windows but not with MSC) <windows.h> not > from this file, but from git-compat-util.h?
It would make sense for windows.h to be included in git-compat-util.h.
According to http://social.msdn.microsoft.com/Forums/en-US/windowssdk/thread/4a90b143-1fb8-43e9-a54c-956127e0c579, the following will work:
#define _WINSOCKAPI_ // stops windows.h including winsock.h #include <winsock2.h> #include <windows.h>
Also, if you define WIN32_LEAN_AND_MEAN, windows.h will pull in a subset of the Windows header files (which also improves compilation times). Adding this may prevent it from pulling in winsock.h. This would be a better approach (and would make sense to go into git-compat-util.h).
I don't have access to a Windows dev box at the moment, so can't verify that this does indeed work.
- Reece