Обсуждение: Error when compiling postgresql 9.6.7 with Visual Studio 15.5.6

Поиск
Список
Период
Сортировка

Error when compiling postgresql 9.6.7 with Visual Studio 15.5.6

От
Aditya Nugraha
Дата:
Hello everyone,

   When trying to compile postgresql 9.6.7 with Visual Studio 15.5.6,
i am getting errors at these following line :
"C:\Users\nameless\Documents\Works\Compiling\pgwininstall\builddir\postgresql\postgresql-9.6.7\pgsql.sln"
(default targe
t) (1) ->
"C:\Users\nameless\Documents\Works\Compiling\pgwininstall\builddir\postgresql\postgresql-9.6.7\ascii_and_mic.vcxproj"
(d
efault target) (5) ->
"C:\Users\nameless\Documents\Works\Compiling\pgwininstall\builddir\postgresql\postgresql-9.6.7\postgres.vcxproj"
(defaul
t target) (6) ->
(ClCompile target) ->
  src/backend/utils/adt/pg_locale.c(927): error C2037: left of
'locale_name' specifies undefined struct/union '__crt_lo
cale_data'
[C:\Users\nameless\Documents\Works\Compiling\pgwininstall\builddir\postgresql\postgresql-9.6.7\postgres.vcxpr
oj]
  src/backend/utils/adt/pg_locale.c(928): error C2198: 'wchar2char':
too few arguments for call [C:\Users\nameless\Docum
ents\Works\Compiling\pgwininstall\builddir\postgresql\postgresql-9.6.7\postgres.vcxproj]

    4 Warning(s)
    2 Error(s)

Searching through the mailinglist archive i am getting this thread :
http://www.postgresql-archive.org/Building-PostgreSQL-9-6devel-sources-with-Microsoft-Visual-C-2015-td5880108.html

But the intended patched file is different than above error which is
on this src/backend/utils/adt/pg_locale.c file.

Here is the snapshot of the offending code from pg_locale.c file :
/* Locale names use only ASCII, any conversion locale suffices. */
rc = wchar2char(iso_lc_messages, loct->locinfo->locale_name[LC_CTYPE],
sizeof(iso_lc_messages), NULL);

Can anyone tell me the fixes ?.


Cheers.



Aditya


Re: Error when compiling postgresql 9.6.7 with Visual Studio 15.5.6

От
Tom Lane
Дата:
Aditya Nugraha <vortexilation@gmail.com> writes:
>    When trying to compile postgresql 9.6.7 with Visual Studio 15.5.6,
> i am getting errors at these following line :
>   src/backend/utils/adt/pg_locale.c(927): error C2037: left of
> 'locale_name' specifies undefined struct/union '__crt_lo
> cale_data'
[C:\Users\nameless\Documents\Works\Compiling\pgwininstall\builddir\postgresql\postgresql-9.6.7\postgres.vcxpr
> oj]
>   src/backend/utils/adt/pg_locale.c(928): error C2198: 'wchar2char':
> too few arguments for call [C:\Users\nameless\Docum
> ents\Works\Compiling\pgwininstall\builddir\postgresql\postgresql-9.6.7\postgres.vcxproj]

This was previously discussed here:

https://www.postgresql.org/message-id/flat/CANFyU959RRvAqmrGvLor%3Dgo3PSi4LdYcjDw8TQ6YRvzpouZrog%40mail.gmail.com

Apparently Microsoft have changed their APIs in VS2015.  Somebody needs to
figure out what's the approved way now to get the locale name out of a
_locale_t object.

            regards, tom lane


Re: Error when compiling postgresql 9.6.7 with Visual Studio 15.5.6

От
Thomas Munro
Дата:
On Tue, Feb 20, 2018 at 6:23 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Aditya Nugraha <vortexilation@gmail.com> writes:
>>    When trying to compile postgresql 9.6.7 with Visual Studio 15.5.6,
>> i am getting errors at these following line :
>>   src/backend/utils/adt/pg_locale.c(927): error C2037: left of
>> 'locale_name' specifies undefined struct/union '__crt_lo
>> cale_data'
[C:\Users\nameless\Documents\Works\Compiling\pgwininstall\builddir\postgresql\postgresql-9.6.7\postgres.vcxpr
>> oj]
>>   src/backend/utils/adt/pg_locale.c(928): error C2198: 'wchar2char':
>> too few arguments for call [C:\Users\nameless\Docum
>> ents\Works\Compiling\pgwininstall\builddir\postgresql\postgresql-9.6.7\postgres.vcxproj]
>
> This was previously discussed here:
>
> https://www.postgresql.org/message-id/flat/CANFyU959RRvAqmrGvLor%3Dgo3PSi4LdYcjDw8TQ6YRvzpouZrog%40mail.gmail.com
>
> Apparently Microsoft have changed their APIs in VS2015.  Somebody needs to
> figure out what's the approved way now to get the locale name out of a
> _locale_t object.

[Not a Windows person, just curious]

I wonder if the result of ResolveLocaleName("foo", output_buffer,
output_buffer_size) would be the same as
locale->locinfo->local_name[LC_TYPE] on the result of
_create_locale(LC_CTYPE, "foo").

https://msdn.microsoft.com/en-us/library/windows/desktop/dd319112(v=vs.85).aspx

-- 
Thomas Munro
http://www.enterprisedb.com


Re: Error when compiling postgresql 9.6.7 with Visual Studio 15.5.6

От
Aditya Nugraha
Дата:
Found out that the patch that is included in that discussion is
working fine for Visual Studio 2017 15.5.6, i think postgresql
developer should include it on upstream branch or 9.6.x variant.

Thanks a lot Tom!

@Thomas

I haven't checked it out but as above mentioned, the patch is working
fine so far, although i haven't check it thoroughly.

On Tue, Feb 20, 2018 at 3:54 AM, Thomas Munro
<thomas.munro@enterprisedb.com> wrote:
> On Tue, Feb 20, 2018 at 6:23 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> Aditya Nugraha <vortexilation@gmail.com> writes:
>>>    When trying to compile postgresql 9.6.7 with Visual Studio 15.5.6,
>>> i am getting errors at these following line :
>>>   src/backend/utils/adt/pg_locale.c(927): error C2037: left of
>>> 'locale_name' specifies undefined struct/union '__crt_lo
>>> cale_data'
[C:\Users\nameless\Documents\Works\Compiling\pgwininstall\builddir\postgresql\postgresql-9.6.7\postgres.vcxpr
>>> oj]
>>>   src/backend/utils/adt/pg_locale.c(928): error C2198: 'wchar2char':
>>> too few arguments for call [C:\Users\nameless\Docum
>>> ents\Works\Compiling\pgwininstall\builddir\postgresql\postgresql-9.6.7\postgres.vcxproj]
>>
>> This was previously discussed here:
>>
>> https://www.postgresql.org/message-id/flat/CANFyU959RRvAqmrGvLor%3Dgo3PSi4LdYcjDw8TQ6YRvzpouZrog%40mail.gmail.com
>>
>> Apparently Microsoft have changed their APIs in VS2015.  Somebody needs to
>> figure out what's the approved way now to get the locale name out of a
>> _locale_t object.
>
> [Not a Windows person, just curious]
>
> I wonder if the result of ResolveLocaleName("foo", output_buffer,
> output_buffer_size) would be the same as
> locale->locinfo->local_name[LC_TYPE] on the result of
> _create_locale(LC_CTYPE, "foo").
>
> https://msdn.microsoft.com/en-us/library/windows/desktop/dd319112(v=vs.85).aspx
>
> --
> Thomas Munro
> http://www.enterprisedb.com


Re: Error when compiling postgresql 9.6.7 with Visual Studio 15.5.6

От
Tom Lane
Дата:
Aditya Nugraha <vortexilation@gmail.com> writes:
> Found out that the patch that is included in that discussion is
> working fine for Visual Studio 2017 15.5.6, i think postgresql
> developer should include it on upstream branch or 9.6.x variant.

Well, as far as I'm concerned the patch that was proposed there is
far too fragile to be acceptable.  We need to find out what the
Microsoft-approved way of getting the information is.  Assuming that
we know the contents of non-exported data structures is surely not
what they have in mind, and it would undoubtedly break in the next VS
update.

            regards, tom lane


Re: Error when compiling postgresql 9.6.7 with Visual Studio 15.5.6

От
Michael Paquier
Дата:
On Mon, Feb 19, 2018 at 04:17:18PM -0500, Tom Lane wrote:
> Well, as far as I'm concerned the patch that was proposed there is
> far too fragile to be acceptable.  We need to find out what the
> Microsoft-approved way of getting the information is.  Assuming that
> we know the contents of non-exported data structures is surely not
> what they have in mind, and it would undoubtedly break in the next VS
> update.

Definitely agreed.  The locale-related code is *the* pain point when it
comes to MSVC things.  And each time we add support for a new version of
MSVC there is always something different happening and breaking.  There
has never been any discussion around ResolveLocaleName() though.  A
downside is that this would increase the minimal version support bar on
Windows.  Still that would be worth a serious look.
--
Michael

Вложения