postgres.git / summary / log / commit / refs
commit 9fe5a62a1711b939643f5d1faeba1d336f990184
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: Thu Dec 16 04:51:02 2010 +0000
First released in: 9.1.0, 8.2.20, 8.3.14, 8.4.7, 9.0.3
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.
configure | 21 +++++++++++++++++++++
configure.in | 7 +++++++
src/backend/postmaster/postmaster.c | 5 +++--
3 files changed, 31 insertions(+), 2 deletions(-)
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
[parent: 04a1f0938717]