Re: Complier warnings on mingw gcc 4.5.0

Andrew Dunstan <andrew@dunslane.net>

From: Andrew Dunstan <andrew@dunslane.net>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Magnus Hagander <magnus@hagander.net>, Alvaro Herrera <alvherre@commandprompt.com>, Itagaki Takahiro <itagaki.takahiro@gmail.com>, Hiroshi Inoue <inoue@tpf.co.jp>, PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2010-12-15T21:20:06Z
Lists: pgsql-hackers

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Make the win32 putenv() override update *all* present versions of the

  2. Remove the use of the pg_auth flat file for client authentication.


On 12/15/2010 03:52 PM, Tom Lane wrote:
> Andrew Dunstan<andrew@dunslane.net>  writes:
>> And here is where it changed:
>> <http://sourceforge.net/project/shownotes.php?release_id=24832>
>>      * A replacement implementation for the getopt() family of functions,
>>         adding support for the GNU getopt_long_only() function.  Users
>>         should note that this intentionally *removes* support for the BSD
>>         or Mac OS-X specific, and non-standard, `optreset' global variable;
>>         to reset the getopt() scanner, use `optind = 0;' instead of relying
>>         on this non-standard, non-portable and now-unsupported feature.
> Great.  So instead of a nonstandard but pretty portable API, they
> decided on a nonstandard interpretation of optind ... which absolutely
> will not work for our usage, because we need to be able to tell getopt
> to skip over --single, even if we were willing to figure out whether
> getopt behaves this way or the more usual way.  Dolts.
>
> While I don't mind forcing use of our getopt() on mingw, I'm a mite
> concerned by the idea that this might represent an upstream change we'll
> soon see elsewhere, rather than just mingw-specific brain damage.
> Anybody know?
>
> 			

On my Fedora box, man 3 getopt says this:

    A program that scans multiple argument vectors, or rescans the same
    vector more than once, and wants to make use of GNU extensions such
    as '+'  and '-'  at  the start of optstring, or changes the value of
    POSIXLY_CORRECT between scans, must reinitialize getopt() by
    resetting optind to 0, rather than the traditional value of 1. 
    (Resetting to 0 forces the invocation of an internal initialization
    routine that rechecks POSIXLY_CORRECT and checks for GNU extensions
    in optstring.)

Modulo the --single issue, we don't have to force use of our getopt on 
Mingw. This patch seems to work, at least to get regression working:

    diff --git a/src/backend/postmaster/postmaster.c
    b/src/backend/postmaster/postmaster.c
    index 90854f4..9ae3767 100644
    --- a/src/backend/postmaster/postmaster.c
    +++ b/src/backend/postmaster/postmaster.c
    @@ -753,6 +753,8 @@ PostmasterMain(int argc, char *argv[])
          optind = 1;
      #ifdef HAVE_INT_OPTRESET
          optreset = 1;                /* some systems need this too */
    +#elsif defined (WIN32) &&  !defined(_MSC_VER)
    +    optind = 0;                 /* modern Mingw needs this instead */
      #endif

          /* For debugging: display postmaster environment */
    diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
    index ff2e9bd..ea4ae79 100644
    --- a/src/backend/tcop/postgres.c
    +++ b/src/backend/tcop/postgres.c
    @@ -3444,6 +3444,8 @@ process_postgres_switches(int argc, char
    *argv[], GucContext ctx)
          optind = 1;
      #ifdef HAVE_INT_OPTRESET
          optreset = 1;                /* some systems need this too */
    +#elsif defined (WIN32) &&  !defined(_MSC_VER)
    +        optind = 0;                             /* modern Mingw
    needs this instead */
      #endif

cheers

andrew