Error when compiling postgresql 9.6.7 with Visual Studio 15.5.6

Started by Aditya Nugrahaabout 8 years ago6 messagesgeneral
Jump to latest
#1Aditya Nugraha
vortexilation@gmail.com

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

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Aditya Nugraha (#1)
Re: Error when compiling postgresql 9.6.7 with Visual Studio 15.5.6

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:

/messages/by-id/CANFyU959RRvAqmrGvLor=go3PSi4LdYcjDw8TQ6YRvzpouZrog@mail.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

#3Thomas Munro
thomas.munro@gmail.com
In reply to: Tom Lane (#2)
Re: Error when compiling postgresql 9.6.7 with Visual Studio 15.5.6

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:

/messages/by-id/CANFyU959RRvAqmrGvLor=go3PSi4LdYcjDw8TQ6YRvzpouZrog@mail.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

#4Aditya Nugraha
vortexilation@gmail.com
In reply to: Thomas Munro (#3)
Re: Error when compiling postgresql 9.6.7 with Visual Studio 15.5.6

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:

Show quoted text

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:

/messages/by-id/CANFyU959RRvAqmrGvLor=go3PSi4LdYcjDw8TQ6YRvzpouZrog@mail.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

#5Tom Lane
tgl@sss.pgh.pa.us
In reply to: Aditya Nugraha (#4)
Re: Error when compiling postgresql 9.6.7 with Visual Studio 15.5.6

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

#6Michael Paquier
michael@paquier.xyz
In reply to: Tom Lane (#5)
Re: Error when compiling postgresql 9.6.7 with Visual Studio 15.5.6

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