aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2010-12-15 23:50:56 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2010-12-15 23:50:56 -0500
commit2dffe1f8bb92abd90ee346ca474512191f520888 (patch)
tree122bf8d5ca16bb16f492ecaa61db132b4a35418d
parent7bfefa9a12968c5f3210569f37de402282fb99e6 (diff)
downloadpostgresql-2dffe1f8bb92abd90ee346ca474512191f520888.tar.gz
postgresql-2dffe1f8bb92abd90ee346ca474512191f520888.zip
Fix up getopt() reset management so it works on recent mingw.
The mingw people don't appear to care about compatibility with non-GNU versions of getopt, so force use of our own copy of getopt on Windows. Also, ensure that we make use of optreset when using our own copy. Per report from Andrew Dunstan. Back-patch to all versions supported on Windows.
-rwxr-xr-xconfigure17
-rw-r--r--configure.in7
-rw-r--r--src/backend/postmaster/postmaster.c5
3 files changed, 27 insertions, 2 deletions
diff --git a/configure b/configure
index 55c06f5e4c9..2bc14f1a11a 100755
--- a/configure
+++ b/configure
@@ -19017,6 +19017,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
+
# Win32 support
if test "$PORTNAME" = "win32"; then
diff --git a/configure.in b/configure.in
index 4d7cc3b4ef3..88890243576 100644
--- a/configure.in
+++ b/configure.in
@@ -1314,6 +1314,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
+
# 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 463ed819766..04ee6c7954f 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -305,7 +305,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
@@ -722,7 +723,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