So I was fixing my MingW environment to test and fix that issue with the
functions missing. In doing so, I came across the error previously
discussed that gettimeofday() is now suddently defined in the latest
versions of mingw, but wasn't before. 

So I figured I'd have to fix that. Attached is a patch for configure to
check this. I'd like comments from someone who knows autoconf better than
me on:
1) does it look ok?
2) is it ok to put checks for win32-only this way?


It does work on my mingw build, and with the new version of mingw the
functions aren't missing so I can actualliy build CVS HEAD to working state
with that one. Which just means I'll have to write another autoconf test
for the missing functions ni older mingw, but I'd like to get comments on
this one first.

//Magnus
Index: configure
===================================================================
RCS file: /cvsroot/pgsql/configure,v
retrieving revision 1.565
diff -c -r1.565 configure
*** configure   27 Oct 2007 00:22:42 -0000      1.565
--- configure   29 Oct 2007 08:41:55 -0000
***************
*** 16962,16975 ****
  
  # Win32 support
  if test "$PORTNAME" = "win32"; then
! case $LIBOBJS in
!     "gettimeofday.$ac_objext"   | \
!   *" gettimeofday.$ac_objext"   | \
!     "gettimeofday.$ac_objext "* | \
!   *" gettimeofday.$ac_objext "* ) ;;
!   *) LIBOBJS="$LIBOBJS gettimeofday.$ac_objext" ;;
  esac
  
  case $LIBOBJS in
      "kill.$ac_objext"   | \
    *" kill.$ac_objext"   | \
--- 16962,17079 ----
  
  # Win32 support
  if test "$PORTNAME" = "win32"; then
! 
! for ac_func in gettimeofday
! do
! as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
! echo "$as_me:$LINENO: checking for $ac_func" >&5
! echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
! if eval "test \"\${$as_ac_var+set}\" = set"; then
!   echo $ECHO_N "(cached) $ECHO_C" >&6
! else
!   cat >conftest.$ac_ext <<_ACEOF
! /* confdefs.h.  */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h.  */
! /* Define $ac_func to an innocuous variant, in case <limits.h> declares 
$ac_func.
!    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
! #define $ac_func innocuous_$ac_func
! 
! /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char $ac_func (); below.
!     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
!     <limits.h> exists even on freestanding compilers.  */
! 
! #ifdef __STDC__
! # include <limits.h>
! #else
! # include <assert.h>
! #endif
! 
! #undef $ac_func
! 
! /* Override any gcc2 internal prototype to avoid an error.  */
! #ifdef __cplusplus
! extern "C"
! {
! #endif
! /* We use char because int might match the return type of a gcc2
!    builtin and then its argument prototype would still apply.  */
! char $ac_func ();
! /* The GNU C library defines this for functions which it implements
!     to always fail with ENOSYS.  Some functions are actually named
!     something starting with __ and the normal name is an alias.  */
! #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
! choke me
! #else
! char (*f) () = $ac_func;
! #endif
! #ifdef __cplusplus
! }
! #endif
! 
! int
! main ()
! {
! return f != $ac_func;
!   ;
!   return 0;
! }
! _ACEOF
! rm -f conftest.$ac_objext conftest$ac_exeext
! if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
!   (eval $ac_link) 2>conftest.er1
!   ac_status=$?
!   grep -v '^ *+' conftest.er1 >conftest.err
!   rm -f conftest.er1
!   cat conftest.err >&5
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); } &&
!        { ac_try='test -z "$ac_c_werror_flag"
!                        || test ! -s conftest.err'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; } &&
!        { ac_try='test -s conftest$ac_exeext'
!   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
!   (eval $ac_try) 2>&5
!   ac_status=$?
!   echo "$as_me:$LINENO: \$? = $ac_status" >&5
!   (exit $ac_status); }; }; then
!   eval "$as_ac_var=yes"
! else
!   echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! eval "$as_ac_var=no"
! fi
! rm -f conftest.err conftest.$ac_objext \
!       conftest$ac_exeext conftest.$ac_ext
! fi
! echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
! echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
! if test `eval echo '${'$as_ac_var'}'` = yes; then
!   cat >>confdefs.h <<_ACEOF
! #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
! _ACEOF
! 
! else
!   case $LIBOBJS in
!     "$ac_func.$ac_objext"   | \
!   *" $ac_func.$ac_objext"   | \
!     "$ac_func.$ac_objext "* | \
!   *" $ac_func.$ac_objext "* ) ;;
!   *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;;
  esac
  
+ fi
+ done
+ 
+ 
  case $LIBOBJS in
      "kill.$ac_objext"   | \
    *" kill.$ac_objext"   | \
Index: configure.in
===================================================================
RCS file: /cvsroot/pgsql/configure.in,v
retrieving revision 1.531
diff -c -r1.531 configure.in
*** configure.in        27 Oct 2007 00:22:42 -0000      1.531
--- configure.in        29 Oct 2007 08:41:55 -0000
***************
*** 1110,1116 ****
  
  # Win32 support
  if test "$PORTNAME" = "win32"; then
! AC_LIBOBJ(gettimeofday)
  AC_LIBOBJ(kill)
  AC_LIBOBJ(open)
  AC_LIBOBJ(rand)
--- 1110,1116 ----
  
  # Win32 support
  if test "$PORTNAME" = "win32"; then
! AC_REPLACE_FUNCS(gettimeofday)
  AC_LIBOBJ(kill)
  AC_LIBOBJ(open)
  AC_LIBOBJ(rand)
Index: src/include/pg_config.h.in
===================================================================
RCS file: /cvsroot/pgsql/src/include/pg_config.h.in,v
retrieving revision 1.124
diff -c -r1.124 pg_config.h.in
*** src/include/pg_config.h.in  23 Oct 2007 21:38:16 -0000      1.124
--- src/include/pg_config.h.in  29 Oct 2007 08:41:55 -0000
***************
*** 175,180 ****
--- 175,183 ----
  /* Define to 1 if you have the `getrusage' function. */
  #undef HAVE_GETRUSAGE
  
+ /* Define to 1 if you have the `gettimeofday' function. */
+ #undef HAVE_GETTIMEOFDAY
+ 
  /* Define to 1 if you have the <gssapi/gssapi.h> header file. */
  #undef HAVE_GSSAPI_GSSAPI_H
  
Index: src/include/port.h
===================================================================
RCS file: /cvsroot/pgsql/src/include/port.h,v
retrieving revision 1.113
diff -c -r1.113 port.h
*** src/include/port.h  28 Sep 2007 22:25:49 -0000      1.113
--- src/include/port.h  29 Oct 2007 08:41:55 -0000
***************
*** 296,303 ****
--- 296,306 ----
  extern long lrand48(void);
  extern void srand48(long seed);
  
+ /* New versions of MingW have gettimeofday, old mingw and msvc don't */
+ #ifndef HAVE_GETTIMEOFDAY
  /* Last parameter not used */
  extern int    gettimeofday(struct timeval * tp, struct timezone * tzp);
+ #endif
  #else                                                 /* !WIN32 */
  
  /*
Index: src/include/port/win32.h
===================================================================
RCS file: /cvsroot/pgsql/src/include/port/win32.h,v
retrieving revision 1.77
diff -c -r1.77 win32.h
*** src/include/port/win32.h    26 Oct 2007 21:50:10 -0000      1.77
--- src/include/port/win32.h    29 Oct 2007 08:41:55 -0000
***************
*** 166,177 ****
  #define SIGUSR1                               30
  #define SIGUSR2                               31
  #endif
! 
  struct timezone
  {
        int                     tz_minuteswest; /* Minutes west of GMT.  */
        int                     tz_dsttime;             /* Nonzero if DST is 
ever in effect.  */
  };
  
  /* for setitimer in backend/port/win32/timer.c */
  #define ITIMER_REAL 0
--- 166,180 ----
  #define SIGUSR1                               30
  #define SIGUSR2                               31
  #endif
! /* new versions of mingw have gettimeofday() and also declare 
!  * struct timezone to support it. */
! #ifndef HAVE_GETTIMEOFDAY
  struct timezone
  {
        int                     tz_minuteswest; /* Minutes west of GMT.  */
        int                     tz_dsttime;             /* Nonzero if DST is 
ever in effect.  */
  };
+ #endif
  
  /* for setitimer in backend/port/win32/timer.c */
  #define ITIMER_REAL 0
---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
       choose an index scan if your joining column's datatypes do not
       match

Reply via email to