diff --git a/configure b/configure index e8890b18100..8af662acb90 100755 --- a/configure +++ b/configure @@ -15047,6 +15047,27 @@ case $host_os in bsdi*|netbsd*) ac_cv_func_fseeko=yes esac +# mingw has adopted a GNU-centric interpretation of optind/optreset, +# so always use our version on Windows. +if test "$PORTNAME" = "win32"; then + case $LIBOBJS in + "getopt.$ac_objext" | \ + *" getopt.$ac_objext" | \ + "getopt.$ac_objext "* | \ + *" getopt.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS getopt.$ac_objext" ;; +esac + + case $LIBOBJS in + "getopt_long.$ac_objext" | \ + *" getopt_long.$ac_objext" | \ + "getopt_long.$ac_objext "* | \ + *" getopt_long.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS getopt_long.$ac_objext" ;; +esac + +fi + # Win32 support if test "$PORTNAME" = "win32"; then diff --git a/configure.in b/configure.in index 99f62812492..4d6ad04f75e 100644 --- a/configure.in +++ b/configure.in @@ -1019,6 +1019,13 @@ case $host_os in bsdi*|netbsd*) ac_cv_func_fseeko=yes esac +# mingw has adopted a GNU-centric interpretation of optind/optreset, +# so always use our version on Windows. +if test "$PORTNAME" = "win32"; then + AC_LIBOBJ(getopt) + AC_LIBOBJ(getopt_long) +fi + # Win32 support if test "$PORTNAME" = "win32"; then AC_REPLACE_FUNCS(gettimeofday) diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 21ed2eaf669..6148f286636 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -232,7 +232,8 @@ extern char *optarg; extern int optind, opterr; -#ifdef HAVE_INT_OPTRESET +/* If not HAVE_GETOPT, we are using src/port/getopt.c, which has optreset */ +#if defined(HAVE_INT_OPTRESET) || !defined(HAVE_GETOPT) extern int optreset; #endif @@ -658,7 +659,7 @@ PostmasterMain(int argc, char *argv[]) * getopt(3) library so that it will work correctly in subprocesses. */ optind = 1; -#ifdef HAVE_INT_OPTRESET +#if defined(HAVE_INT_OPTRESET) || !defined(HAVE_GETOPT) optreset = 1; /* some systems need this too */ #endif