Re: [PATCH] PostgreSQL fails to build with 32bit MinGW-w64 - Mailing list pgsql-hackers

From Andrew Dunstan
Subject Re: [PATCH] PostgreSQL fails to build with 32bit MinGW-w64
Date
Msg-id 4ED152D9.9020707@dunslane.net
Whole thread Raw
In response to Re: [PATCH] PostgreSQL fails to build with 32bit MinGW-w64  (Lars Kanis <kanis@comcard.de>)
Responses Re: [PATCH] PostgreSQL fails to build with 32bit MinGW-w64
List pgsql-hackers

On 11/24/2011 06:29 AM, Lars Kanis wrote:
>> Isn't it better to check the value of macros itsef rather than checking for
>> system dependent macros that does not directly relate to the issue?
>> specifically for getaddrinfo.c case I think
>> #if EAI_NODATA != EAI_NONAME
>> is a better check than checking for
>> #if !defined(__MINGW64_VERSION_MAJOR)&&  !defined(WIN32_ONLY_COMPILER)    /* MSVC/WIN64 duplicate */
> Yes it's better and it works for all described test environments.
>
>> For the win32.h, I really don't understand why _WINSOCKAPI_ was defined before
>> <winsock2.h>
>> some google suggests that defining _WINSOCKAPI_ before<windows.h>  prevents
>> inclusion of winsock.h but that does not have relation to inclusion of
>> <winsock2.h>  and if<winsock2.h>  is included first, it should be ok.
>>
>> If this guess is right, perhaps it could be better to remove the three lines.
>> #if !defined(WIN64) || defined(WIN32_ONLY_COMPILER)
>> #define _WINSOCKAPI_
>> #endif



No, this broke some compilers, IIRC (probably the native mingw compiler, 
which is in use by several buildfarm members). Getting this right was 
very tricky and time-consuming when I was adding support for the 64 bit 
mingw-w64 compiler, and there were a couple of rounds of breakage.

I'm therefore much more inclined to go the way of your earlier patch, 
which seems much less risky.


> I only changed this for consistency. For me, it works without that define in all test
> environments, too.
>
>> +/* __MINGW64_VERSION_MAJOR is related to both 32/64 bit gcc compiles by
>> + * mingw-w64, however it gots defined only after
>> Why not use __MINGW32__, which is defined without including any headers?


Because it's defined by other than mingw-w64 compilers.


We have a bunch of compilers to support here. There are LOTS of compiler 
scenarios on Windows (several versions of MSVC, 32bit and 64bit 
mingw-w64, native mingw gcc, and a couple of Cygwin based compilers), 
and keeping track of them all and making sure they don't break can be a 
pain.

cheers

andrew





pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Avoiding repeated snapshot computation
Next
From: Andres Freund
Date:
Subject: Re: Avoiding repeated snapshot computation