]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix up getopt() reset management so it works on recent mingw.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 16 Dec 2010 04:51:07 +0000 (23:51 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 16 Dec 2010 04:51:07 +0000 (23:51 -0500)
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
configure.in
src/backend/postmaster/postmaster.c

index e8890b1810074f9a181a37db31445b5985c8deeb..8af662acb90b2230c74bac7e1ebf9ec132f5c96a 100755 (executable)
--- 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
 
index 99f62812492021d3ec67b7a39fac4dd72843acd1..4d6ad04f75e693d5bb60fcb282285f1513346e30 100644 (file)
@@ -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)
index 21ed2eaf669c4c0578acd12672b7e586d5b68959..6148f286636193f10d3ce8a58f15a1b7717423f3 100644 (file)
@@ -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