Skip site navigation (1) Skip section navigation (2)

Re: VS 2015 support in src/tools/msvc

From: Petr Jelinek <petr(at)2ndquadrant(dot)com>
To: Noah Misch <noah(at)leadboat(dot)com>, Michael Paquier <michael(dot)paquier(at)gmail(dot)com>
Cc: Andrew Dunstan <andrew(at)dunslane(dot)net>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Magnus Hagander <magnus(at)hagander(dot)net>, PostgreSQL mailing lists <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: VS 2015 support in src/tools/msvc
Date: 2016-03-09 14:10:33
Message-ID: 56E02ED9.1010308@2ndquadrant.com (view raw, whole thread or download thread mbox)
Thread:
Lists: pgsql-hackers
On 09/03/16 05:31, Noah Misch wrote:
> On Tue, Mar 08, 2016 at 10:32:28PM +0900, Michael Paquier wrote:
>> Subject: [PATCH 3/4] Fix use of locales for VS 2015
>>
>> lc_codepage is a flag missing from locale.h, causing this code path
>> introduced in VS 2012 to fail. Perhaps there is a reason for this field
>> to have been clobbered, but let's fall back to the pre-VS-2012 code
>> parsing directly LC_TYPE to get the codepage wanted.
>> ---
>>   src/port/chklocale.c | 11 ++++++++++-
>>   1 file changed, 10 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/port/chklocale.c b/src/port/chklocale.c
>> index a551fdc..a7d88fb 100644
>> --- a/src/port/chklocale.c
>> +++ b/src/port/chklocale.c
>> @@ -203,7 +203,16 @@ win32_langinfo(const char *ctype)
>>   {
>>   	char	   *r = NULL;
>>
>> -#if (_MSC_VER >= 1700)
>> +	/*
>> +	 * lc_codepage is correctly declared in Visual Studio 2012 and 2013.
>> +	 * However in VS 2015 this flag is missing from locale.h, visibly this
>> +	 * is an error of refactoring from Microsoft that is at the origin of
>> +	 * this missing field, causing a compilation failure in this code path.
>> +	 * Hence, it is more reliable to fall back to other code path grabbing
>
> No, the other path can't handle a "locale name" like "initdb --locale=th-TH".
> That makes the other code path inadequate for VS2012 and later.  See the
> IsoLocaleName() header comment.
>

Agreed, that's what I was saying as well.

Something like attached is simplest way this would work correctly (note 
that I didn't really test it and it's missing comments). Note that we 
are falling back to the old parsing in case the GetLocaleInfoEx didn't 
work, that's important because GetLocaleInfoEx does not support the 
<Language>_<Country>.<CodePage> format but supports all the rest of 
them. The problem with this is the binaries would need to be compiled 
with target of vista/windows server 2008+. That would be of course only 
the case with builds made with VS2015, so I am not sure if we care all 
that much (especially given the fact that older windows are not 
supported by MS anyway).

I don't currently know of any way of doing this in VS2015 that would 
work with older versions of windows with the exception of having our own 
definition of the locale_t struct so that the VS2013 code would still 
work...

-- 
   Petr Jelinek                  http://www.2ndQuadrant.com/
   PostgreSQL Development, 24x7 Support, Training & Services

Attachment: chklocale.diff
Description: text/x-patch (1.0 KB)

In response to

Responses

pgsql-hackers by date

Next:From: Robert HaasDate: 2016-03-09 14:19:20
Subject: Re: Declarative partitioning
Previous:From: Masahiko SawadaDate: 2016-03-09 14:09:46
Subject: Re: Freeze avoidance of very large table.

Privacy Policy | About PostgreSQL
Copyright © 1996-2018 The PostgreSQL Global Development Group