diff --git a/configure b/configure index 316f9bb3d37..cd4f2f17468 100755 --- a/configure +++ b/configure @@ -17192,6 +17192,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 ef9d5efe3da..a9b22a3e01a 100644 --- a/configure.in +++ b/configure.in @@ -1128,6 +1128,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 e58d1ecd23f..ba51d932d55 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -284,7 +284,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 @@ -721,7 +722,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