1
0
mirror of https://github.com/postgres/postgres.git synced 2025-04-27 22:56:53 +03:00

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.
This commit is contained in:
Tom Lane 2010-12-15 23:51:07 -05:00
parent 16d5fd6a99
commit 6a61d58ca8
3 changed files with 31 additions and 2 deletions

21
configure vendored
View File

@ -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

View 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)

View 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