Thread: Error when compiling postgresql 9.6.7 with Visual Studio 15.5.6
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
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
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
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
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
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