Re: BUG #15080: ecpg on windows doesn't define HAVE_LONG_LONG_INT

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: Andrew Dunstan <andrew@dunslane.net>
Cc: Huong Dangminh <huo-dangminh@ys.jp.nec.com>, Jonathan Allen <jallen@americansavingslife.com>, Andrew Gierth <andrew@tao11.riddles.org.uk>, "pgsql-bugs@lists.postgresql.org" <pgsql-bugs@lists.postgresql.org>, Michael Meskes <meskes@postgresql.org>, Akio Iwaasa <aki-iwaasa@vt.jp.nec.com>
Date: 2018-05-19T23:31:20Z
Lists: pgsql-bugs
Andrew Dunstan <andrew@dunslane.net> writes:
> On 05/19/2018 06:49 PM, Tom Lane wrote:
>> Might be worth trying.  As I mentioned in
>> <13103.1526749980@sss.pgh.pa.us>, it seems like it's time to jettison
>> any pretense of support for non-C99-compliant spellings of "%lld".
>> It'd be good to know whether __USE_MINGW_ANSI_STDIO works for that
>> purpose on ancient MinGW.

> Is anybody actually using the I64 stuff any more? I guess we can look at 
> the config.logs of recent buildfarm builds.

Yeah, I already did.  Every active member is reporting "ll" or "l"
for INT64_MODIFIER.  In some cases such as frogmouth, I believe this
is because we're overriding the initial result for the benefit of
our replacement snprintf --- but nonetheless, we're not using I64.

The info I've been able to find on the web suggests that in all
post-XP-or-so Windows versions, printf does accept "ll".

> Well, I think we can make a little effort here. I think we just need to 
> put something like this somewhere before we include stdio.h:

>     /* add this define on XP only, not needed elsewhere */
>     #ifdef WIN32_WINNT
>     #if WIN32_WINNT < 0x0600
>     #define __USE_MINGW_ANSI_STDIO 1
>     #endif
>     #endif

I'd be inclined to just stick -D__USE_MINGW_ANSI_STDIO=1 into
frogmouth's configuration.  Given that we've already tossed
support for XP overboard in HEAD, it would seem a bit silly
to put it back in this way.

			regards, tom lane


Commits

  1. Remove configure's check for nonstandard "long long" printf modifiers.

  2. printf("%lf") is not portable, so omit the "l".

  3. Support platforms where strtoll/strtoull are spelled __strtoll/__strtoull.

  4. Arrange to supply declarations for strtoll/strtoull if needed.

  5. Hot-fix ecpg regression test for missing ecpg_config.h inclusion.

  6. Add some test coverage for ecpg's "long long" support.

  7. Recognize that MSVC can support strtoll() and strtoull().

  8. Fix up ecpg's configuration so it handles "long long int" in MSVC builds.