Thread: Re: [pgsql-hackers-win32] Proposed dirmod.c fix for Win32

Re: [pgsql-hackers-win32] Proposed dirmod.c fix for Win32

From
Claudio Natoli
Date:
For application to HEAD, pending community review (rationale provided below
in previous message; no responses hopefully indicates agreement :-)

Following application, dirmod.c must be moved to src/backend/port/win32 (ie.
add to src/backend/port/win32, and remove from src/port).

[changes to configure.in are essentially only the removal of
AC_LIBOBJ(dirmod); other changes to configure.in appear in a previous patch
and yet to be applied]

Please note that dirmod.c has recently been changed to work under cygwin,
along side of the existing win32/mingw implementation, however does not
currently appear, afaics, to be included during a cygwin build. This patch
does not address this deficiency.

Cheers,
Claudio


> -----Original Message-----
> From: Claudio Natoli [mailto:claudio.natoli@memetrics.com]
> Sent: Thursday, 29 January 2004 8:11 PM
> To: pgsql-hackers@postgresql.org
> Cc: 'pgsql-hackers-win32@postgresql.org'
> Subject: [pgsql-hackers-win32] Proposed dirmod.c fix for Win32
>
>
>
> The current version of dirmod.c causes a compilation failure
> under MingW:
>
> ../../../src/port/libpgport.a(dirmod.o.b)(.text+0xe1): In function
> `pgrename':
> e:/cygwin/opt/diff8c/pgsql/src/port/dirmod.c:38: undefined
> reference to
> `errstart'
> ../../../src/port/libpgport.a(dirmod.o.b)(.text+0xef):e:/cygwi
> n/opt/diff8c/p
> gsql/src/port/dirmod.c:38: undefined reference to `elog_finish'
>
> and so on.
>
> [dirmod.c provides replacements for unlink + rename under Win32. These
> functions are currently only ever used by the backend code, and by
> pg_resetxlog]
>
> One solution is, obviously, to drop the elog calls...
>
> A somewhat better solution is to move dirmod.c into
> src/backend/port(/win32?), and just compile dirmod.c directly into the
> backend. pg_resetxlog could then use dirmod.c just as it
> currently uses
> pg_crc.c (refer to Makefile in pg_resetxlog directory). One additional
> requirement would be for pg_resetxlog to be considered a
> FRONTEND component.
>
> Does anyone take issue with this (and/or is it advisable to
> add -DFRONTEND
> to pg_resetxlog Makefile; seems ok to me), or have a better
> idea, before I
> go create/submit a patch?
>
> Cheers,
> Claudio

---
Certain disclaimers and policies apply to all email sent from Memetrics.
For the full text of these disclaimers and policies see
<a
href="http://www.memetrics.com/emailpolicy.html">http://www.memetrics.com/em
ailpolicy.html</a>



Attachment

Re: [pgsql-hackers-win32] Proposed dirmod.c fix for Win32

From
Bruce Momjian
Date:
Claudio Natoli wrote:
>
> For application to HEAD, pending community review (rationale provided below
> in previous message; no responses hopefully indicates agreement :-)
>
> Following application, dirmod.c must be moved to src/backend/port/win32 (ie.
> add to src/backend/port/win32, and remove from src/port).
>
> [changes to configure.in are essentially only the removal of
> AC_LIBOBJ(dirmod); other changes to configure.in appear in a previous patch
> and yet to be applied]

I made more adjustments to configure/configure.in, attached, that should
have this working fine now.

> Please note that dirmod.c has recently been changed to work under cygwin,
> along side of the existing win32/mingw implementation, however does not
> currently appear, afaics, to be included during a cygwin build. This patch
> does not address this deficiency.

OK, I have addressed the cygwin issue in this patch.

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: configure
===================================================================
RCS file: /cvsroot/pgsql-server/configure,v
retrieving revision 1.323
diff -c -c -r1.323 configure
*** configure    2 Feb 2004 04:07:18 -0000    1.323
--- configure    2 Feb 2004 22:00:30 -0000
***************
*** 2502,2508 ****

  # We already have this in Makefile.win32, but configure needs it too
  if test "$PORTNAME" = "win32"; then
!   CPPFLAGS="$CPPFLAGS -I$srcdir/src/include/port/win32"
  fi

  # Check if the compiler still works with the template settings
--- 2502,2508 ----

  # We already have this in Makefile.win32, but configure needs it too
  if test "$PORTNAME" = "win32"; then
!   CPPFLAGS="$CPPFLAGS -I$srcdir/src/include/port/win32 -DEXEC_BACKEND"
  fi

  # Check if the compiler still works with the template settings
***************
*** 12077,12086 ****

  # Win32 can't to rename or unlink on an open file
  case $host_os in mingw*)
- LIBOBJS="$LIBOBJS dirmod.$ac_objext"
  LIBOBJS="$LIBOBJS copydir.$ac_objext"
  LIBOBJS="$LIBOBJS gettimeofday.$ac_objext"
! LIBOBJS="$LIBOBJS pipe.$ac_objext" ;;
  esac

  if test "$with_readline" = yes; then
--- 12077,12090 ----

  # Win32 can't to rename or unlink on an open file
  case $host_os in mingw*)
  LIBOBJS="$LIBOBJS copydir.$ac_objext"
  LIBOBJS="$LIBOBJS gettimeofday.$ac_objext"
! LIBOBJS="$LIBOBJS pipe.$ac_objext"
! LIBOBJS="$LIBOBJS rand.$ac_objext" ;;
! esac
!
! case $host_os in mingw*|cygwin*)
! LIBOBJS="$LIBOBJS dirmod.$ac_objext" ;;
  esac

  if test "$with_readline" = yes; then
Index: configure.in
===================================================================
RCS file: /cvsroot/pgsql-server/configure.in,v
retrieving revision 1.312
diff -c -c -r1.312 configure.in
*** configure.in    2 Feb 2004 16:00:49 -0000    1.312
--- configure.in    2 Feb 2004 22:00:32 -0000
***************
*** 906,915 ****
  # Win32 can't to rename or unlink on an open file
  case $host_os in mingw*)
  AC_LIBOBJ(copydir)
- AC_LIBOBJ(dirmod)
  AC_LIBOBJ(gettimeofday)
  AC_LIBOBJ(pipe)
  AC_LIBOBJ(rand) ;;
  esac

  if test "$with_readline" = yes; then
--- 906,918 ----
  # Win32 can't to rename or unlink on an open file
  case $host_os in mingw*)
  AC_LIBOBJ(copydir)
  AC_LIBOBJ(gettimeofday)
  AC_LIBOBJ(pipe)
  AC_LIBOBJ(rand) ;;
+ esac
+
+ case $host_os in mingw*|cygwin*)
+ AC_LIBOBJ(dirmod) ;;
  esac

  if test "$with_readline" = yes; then
Index: src/include/port.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port.h,v
retrieving revision 1.17
diff -c -c -r1.17 port.h
*** src/include/port.h    2 Feb 2004 00:17:23 -0000    1.17
--- src/include/port.h    2 Feb 2004 22:00:34 -0000
***************
*** 30,36 ****
  extern off_t ftello(FILE *stream);
  #endif

! #if !defined(FRONTEND) && (defined(WIN32) || defined(CYGWIN))
  /*
   * Win32 doesn't have reliable rename/unlink during concurrent access
   */
--- 30,36 ----
  extern off_t ftello(FILE *stream);
  #endif

! #if defined(WIN32) || defined(CYGWIN)
  /*
   * Win32 doesn't have reliable rename/unlink during concurrent access
   */
Index: src/port/dirmod.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/port/dirmod.c,v
retrieving revision 1.9
diff -c -c -r1.9 dirmod.c
*** src/port/dirmod.c    2 Feb 2004 00:17:23 -0000    1.9
--- src/port/dirmod.c    2 Feb 2004 22:00:35 -0000
***************
*** 17,23 ****
--- 17,29 ----

  #ifndef TEST_VERSION

+ #if defined(WIN32) || defined(CYGWIN)
+
+ #ifndef FRONTEND
  #include "postgres.h"
+ #else
+ #include "postgres_fe.h"
+ #endif

  #undef rename
  #undef unlink
***************
*** 95,100 ****
--- 101,107 ----
      return 0;
  }

+ #endif

  #else


Re: [pgsql-hackers-win32] Proposed dirmod.c fix for Win32

From
Bruce Momjian
Date:
Claudio Natoli wrote:
>
> For application to HEAD, pending community review (rationale provided below
> in previous message; no responses hopefully indicates agreement :-)
>
> Following application, dirmod.c must be moved to src/backend/port/win32 (ie.
> add to src/backend/port/win32, and remove from src/port).

backend/port is for port files _only_ used by the backend.  If you look
at libpq, you will see crypt() used by the backend and in
Makefile/libpq, with special compile flags.

I have fixed dirmod.c in CVS so it uses the same logic as crypt.  Please
review and tell me how you like it.

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073