Re: Visual Studio 2012 RC - Mailing list pgsql-hackers

From Craig Ringer
Subject Re: Visual Studio 2012 RC
Date
Msg-id 50FD0B35.3020503@2ndQuadrant.com
Whole thread Raw
In response to Re: Visual Studio 2012 RC  (Noah Misch <noah@leadboat.com>)
Responses Re: Visual Studio 2012 RC
Re: Visual Studio 2012 RC
List pgsql-hackers
<div class="moz-cite-prefix">On 01/01/2013 10:54 AM, Noah Misch wrote:<br /></div><blockquote
cite="mid:20130101025421.GA17763@tornado.leadboat.com"type="cite"><pre wrap="">On Mon, Oct 15, 2012 at 07:53:51AM
-0400,Noah Misch wrote:
 
</pre><blockquote type="cite"><pre wrap="">The only matter still requiring attention is a fix for IsoLocaleName().
</pre></blockquote><pre wrap="">
Following off-list coordination with Brar, I went about finishing up this
patch.  The above problem proved deeper than expected.  For Windows Vista,
Microsoft made RFC 4646 tags the preferred way to denote a locale in Windows.
Microsoft calls them "locale names".  Starting with Visual Studio 2012,
setlocale() accepts locale names in addition to all the things it previously
accepted.  One can now use things like "initdb --locale=zh-CN" and "CREATE
DATABASE foo LC_CTYPE = 'pl'".  This meant updating win32_langinfo() and
find_matching_ts_config() to handle the new formats.  In passing, I fixed an
unchecked malloc() in win32_langinfo().

In addition to expanding the set of valid locale inputs, VS2012 changes the
(undocumented) content of _locale_t to hold locale names where it previously
held locale identifiers.  I taught IsoLocaleName() to handle the new material.
I also sought to improve the comments on IsoLocaleName(); its significance was
not previously clear to me.  This thread has some background:
<a class="moz-txt-link-freetext"
href="http://archives.postgresql.org/message-id/4964B45E.5080003@hagander.net">http://archives.postgresql.org/message-id/4964B45E.5080003@hagander.net</a>

Though I'm not entirely sanguine about digging into the officially-opaque
_locale_t, we have been doing it that way for several years.  None of the
alternatives are clearly-satisfying.  In particular, I found no good way to
look up the code page corresponding to a locale name on pre-Vista systems.
The CRT itself handles this by translating locale names to locale identifiers
using a lookup table.  The Gnulib "localename" and "setlocale" modules are
also interesting studies on the topic.

In previous reviews, I missed the need to update pgwin32_putenv().  The
addition of VS2010 support had also missed it, so this catches up.  That
function has other problems, but I will hold them for another patch.

Tester warning: if you currently have some form of VS2010 installed, including
the compilers of Windows SDK 7.1, beware of this problem:
<a class="moz-txt-link-freetext"
href="http://stackoverflow.com/questions/10888391/link-fatal-error-lnk1123-failure-during-conversion-to-coff-file-invalid-or-c">http://stackoverflow.com/questions/10888391/link-fatal-error-lnk1123-failure-during-conversion-to-coff-file-invalid-or-c</a>
</pre></blockquote> FYI, you can properly fix this without uninstalling anything, giving you a system with a working VS
2012as well as working SDK 7.1 / VS 2010 SP1 32-bit and 64-bit compilers.<br /><br /> Install the tools in the
followingorder:<br /><br /> * VS Express 2010: <a class="moz-txt-link-freetext"
href="http://www.microsoft.com/visualstudio/eng/products/visual-studio-2010-express">http://www.microsoft.com/visualstudio/eng/products/visual-studio-2010-express</a><br
/>* Windows SDK 7.1<br /> * VS 2010 SP1: <a class="moz-txt-link-freetext"
href="http://www.microsoft.com/en-au/download/details.aspx?id=23691">http://www.microsoft.com/en-au/download/details.aspx?id=23691</a><br
/>* VS 2010 SP1 Compiler Update: <a class="moz-txt-link-freetext"
href="http://www.microsoft.com/en-au/download/details.aspx?id=4422">http://www.microsoft.com/en-au/download/details.aspx?id=4422</a><br
/>* VS Express 2012<br /><br /> Note that SDK 7.1 and VS 2010 will fail to install if you have a newer version of the
Visualc++ 2010 runtime installed. Newer programs often install this for you. As a workaround, you must uninstall the
newerruntime, install Visual Studio, the SDK, and service pack, then reinstall the newer runtime to get the programs
thatrequire it to work again.<br /><br /> I've written more about both of these in the TROUBLESHOOTING section of <a
href="https://github.com/2ndQuadrant/pg_build_win/blob/master/README.md">https://github.com/2ndQuadrant/pg_build_win/blob/master/README.md</a><br
/><br/><pre class="moz-signature" cols="72">-- Craig Ringer                   <a class="moz-txt-link-freetext"
href="http://www.2ndQuadrant.com/">http://www.2ndQuadrant.com/</a>PostgreSQLDevelopment, 24x7 Support, Training &
Services</pre>

pgsql-hackers by date:

Previous
From: Jeff Davis
Date:
Subject: Re: Removing PD_ALL_VISIBLE
Next
From: Heikki Linnakangas
Date:
Subject: Re: Removing PD_ALL_VISIBLE