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

Andrew Dunstan <andrew@dunslane.net>

From: Andrew Dunstan <andrew@dunslane.net>
To: Tom Lane <tgl@sss.pgh.pa.us>
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:23:18Z
Lists: pgsql-bugs

On 05/19/2018 06:49 PM, Tom Lane wrote:
>
>> So maybe we just need to define this on XP/mingw (shouldn't be necessary
>> on anything later). I don't know what other effects it might have,
>> though. Perhaps there is some other flag or define that has the same
>> effect that we use in compiling pgbench etc that isn't used by ecpg?
> 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.



>
>> Now recall that this animal is on serious life support. ...
>> Not sure how much more effort I should put in here.
> I couldn't blame you for just deciding to skip the ecpg tests on
> this critter.
>
> 			


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


cheers

andrew


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.