diff --git a/configure b/configure index 70000347538..f96c0ffdd60 100755 --- a/configure +++ b/configure @@ -20713,6 +20713,23 @@ esac fi +# 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 "* ) ;; + *) LIBOBJS="$LIBOBJS getopt.$ac_objext" + ;; +esac + + case " $LIBOBJS " in + *" getopt_long.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS getopt_long.$ac_objext" + ;; +esac + +fi + # Cygwin's erand48() is broken (always returns zero) in some releases, # so force use of ours. if test "$PORTNAME" = "cygwin"; then @@ -20835,25 +20852,25 @@ fi done -case " $LIBOBJS " in + case " $LIBOBJS " in *" kill.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS kill.$ac_objext" ;; esac -case " $LIBOBJS " in + case " $LIBOBJS " in *" open.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS open.$ac_objext" ;; esac -case " $LIBOBJS " in + case " $LIBOBJS " in *" win32env.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS win32env.$ac_objext" ;; esac -case " $LIBOBJS " in + case " $LIBOBJS " in *" win32error.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS win32error.$ac_objext" ;; diff --git a/configure.in b/configure.in index df95cc7b09b..b0644dfb6d3 100644 --- a/configure.in +++ b/configure.in @@ -1328,6 +1328,13 @@ if test "$PORTNAME" = "solaris"; then AC_LIBOBJ(getopt) fi +# 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 + # Cygwin's erand48() is broken (always returns zero) in some releases, # so force use of ours. if test "$PORTNAME" = "cygwin"; then @@ -1336,13 +1343,13 @@ fi # Win32 support if test "$PORTNAME" = "win32"; then -AC_REPLACE_FUNCS(gettimeofday) -AC_LIBOBJ(kill) -AC_LIBOBJ(open) -AC_LIBOBJ(win32env) -AC_LIBOBJ(win32error) -AC_DEFINE([HAVE_SYMLINK], 1, - [Define to 1 if you have the `symlink' function.]) + AC_REPLACE_FUNCS(gettimeofday) + AC_LIBOBJ(kill) + AC_LIBOBJ(open) + AC_LIBOBJ(win32env) + AC_LIBOBJ(win32error) + AC_DEFINE([HAVE_SYMLINK], 1, + [Define to 1 if you have the `symlink' function.]) fi if test "$with_readline" = yes; then diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 279f0f081a4..7e8af148ac8 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -312,7 +312,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; /* might not be declared by system headers */ #endif @@ -750,7 +751,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 diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 62adaca2174..052b2565570 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -77,7 +77,8 @@ extern char *optarg; extern int optind; -#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; /* might not be declared by system headers */ #endif @@ -3439,7 +3440,7 @@ process_postgres_switches(int argc, char *argv[], GucContext ctx) * or when this function is called a second time with another array. */ optind = 1; -#ifdef HAVE_INT_OPTRESET +#if defined(HAVE_INT_OPTRESET) || !defined(HAVE_GETOPT) optreset = 1; /* some systems need this too */ #endif