Обсуждение: libpgtcl.dll
Hi,
Below is the patch against current cvs for libpgtcl and
two additional files win32.mak and libpgtcl.def.
This patch allows to compile libpgtcl.dll on Windows
with tcl > 8.0. I've tested it on WinNT (VC6.0), SUSE Linux (7.0)
and Solaris 2.6 with tcl 8.3.3.
Regards,
Mikhail TerekhovIndex: libpgtcl/pgtclCmds.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/libpgtcl/pgtclCmds.c,v
retrieving revision 1.56
diff -C3 -r1.56 pgtclCmds.c
*** libpgtcl/pgtclCmds.c 2001/08/10 22:50:10 1.56
--- libpgtcl/pgtclCmds.c 2001/08/24 16:05:01
***************
*** 403,408 ****
--- 403,410 ----
int
Pg_disconnect(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
{
+ Pg_ConnectionId *connid;
+ PGconn *conn;
Tcl_Channel conn_chan;
if (argc != 2)
***************
*** 418,423 ****
--- 420,431 ----
Tcl_AppendResult(interp, argv[1], " is not a valid connection\n", 0);
return TCL_ERROR;
}
+
+ #if TCL_MAJOR_VERSION >= 8
+ conn = PgGetConnectionId(interp, argv[1], &connid);
+ if (connid->notifier_channel != NULL)
+ Tcl_UnregisterChannel(interp, connid->notifier_channel);
+ #endif
return Tcl_UnregisterChannel(interp, conn_chan);
}
Index: libpgtcl/pgtclCmds.h
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/libpgtcl/pgtclCmds.h,v
retrieving revision 1.21
diff -C3 -r1.21 pgtclCmds.h
*** libpgtcl/pgtclCmds.h 2001/03/22 04:01:24 1.21
--- libpgtcl/pgtclCmds.h 2001/08/24 16:05:01
***************
*** 64,70 ****
--- 64,74 ----
Pg_TclNotifies *notify_list;/* head of list of notify info */
int notifier_running; /* notify event source is live */
+ #if TCL_MAJOR_VERSION >= 8
+ Tcl_Channel notifier_channel;/* Tcl_Channel on which notifier is listening */
+ #else
int notifier_socket;/* PQsocket on which notifier is listening */
+ #endif
} Pg_ConnectionId;
/* Values of res_copyStatus */
Index: libpgtcl/pgtclId.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/libpgtcl/pgtclId.c,v
retrieving revision 1.25
diff -C3 -r1.25 pgtclId.c
*** libpgtcl/pgtclId.c 2001/02/10 02:31:29 1.25
--- libpgtcl/pgtclId.c 2001/08/24 16:05:01
***************
*** 174,183 ****
connid->results[i] = NULL;
connid->notify_list = NULL;
connid->notifier_running = 0;
- connid->notifier_socket = -1;
sprintf(connid->id, "pgsql%d", PQsocket(conn));
#if TCL_MAJOR_VERSION == 7 && TCL_MINOR_VERSION == 5
/* Original signature (only seen in Tcl 7.5) */
conn_chan = Tcl_CreateChannel(&Pg_ConnType, connid->id, NULL, NULL, (ClientData) connid);
--- 174,189 ----
connid->results[i] = NULL;
connid->notify_list = NULL;
connid->notifier_running = 0;
sprintf(connid->id, "pgsql%d", PQsocket(conn));
+ #if TCL_MAJOR_VERSION >= 8
+ connid->notifier_channel = Tcl_MakeTcpClientChannel((ClientData) PQsocket(conn));
+ Tcl_RegisterChannel(interp, connid->notifier_channel);
+ #else
+ connid->notifier_socket = -1;
+ #endif
+
#if TCL_MAJOR_VERSION == 7 && TCL_MINOR_VERSION == 5
/* Original signature (only seen in Tcl 7.5) */
conn_chan = Tcl_CreateChannel(&Pg_ConnType, connid->id, NULL, NULL, (ClientData) connid);
***************
*** 581,587 ****
event->info = *notify;
event->connid = connid;
Tcl_QueueEvent((Tcl_Event *) event, TCL_QUEUE_TAIL);
! free(notify);
}
/*
--- 587,593 ----
event->info = *notify;
event->connid = connid;
Tcl_QueueEvent((Tcl_Event *) event, TCL_QUEUE_TAIL);
! PQfreeNotify(notify);
}
/*
***************
*** 688,705 ****
if (pqsock >= 0)
{
#if TCL_MAJOR_VERSION >= 8
! /* In Tcl 8, Tcl_CreateFileHandler takes a socket directly. */
! Tcl_CreateFileHandler(pqsock, TCL_READABLE,
! Pg_Notify_FileHandler, (ClientData) connid);
#else
/* In Tcl 7.5 and 7.6, we need to gin up a Tcl_File. */
Tcl_File tclfile = Tcl_GetFile((ClientData) pqsock, TCL_UNIX_FD);
Tcl_CreateFileHandler(tclfile, TCL_READABLE,
Pg_Notify_FileHandler, (ClientData) connid);
#endif
connid->notifier_running = 1;
- connid->notifier_socket = pqsock;
}
}
}
--- 694,710 ----
if (pqsock >= 0)
{
#if TCL_MAJOR_VERSION >= 8
! Tcl_CreateChannelHandler(connid->notifier_channel, TCL_READABLE,
! Pg_Notify_FileHandler, (ClientData) connid);
#else
/* In Tcl 7.5 and 7.6, we need to gin up a Tcl_File. */
Tcl_File tclfile = Tcl_GetFile((ClientData) pqsock, TCL_UNIX_FD);
Tcl_CreateFileHandler(tclfile, TCL_READABLE,
Pg_Notify_FileHandler, (ClientData) connid);
+ connid->notifier_socket = pqsock;
#endif
connid->notifier_running = 1;
}
}
}
***************
*** 711,718 ****
if (connid->notifier_running)
{
#if TCL_MAJOR_VERSION >= 8
! /* In Tcl 8, Tcl_DeleteFileHandler takes a socket directly. */
! Tcl_DeleteFileHandler(connid->notifier_socket);
#else
/* In Tcl 7.5 and 7.6, we need to gin up a Tcl_File. */
Tcl_File tclfile = Tcl_GetFile((ClientData) connid->notifier_socket,
--- 716,723 ----
if (connid->notifier_running)
{
#if TCL_MAJOR_VERSION >= 8
! Tcl_DeleteChannelHandler(connid->notifier_channel,
! Pg_Notify_FileHandler, (ClientData) connid);
#else
/* In Tcl 7.5 and 7.6, we need to gin up a Tcl_File. */
Tcl_File tclfile = Tcl_GetFile((ClientData) connid->notifier_socket,
Index: libpq/fe-exec.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v
retrieving revision 1.108
diff -C3 -r1.108 fe-exec.c
*** libpq/fe-exec.c 2001/08/21 20:39:53 1.108
--- libpq/fe-exec.c 2001/08/24 16:05:01
***************
*** 1346,1351 ****
--- 1346,1365 ----
}
/*
+ * PQfreeNotify - free's the memory associated with a PGnotify
+ *
+ * This function is needed on Windows when using libpq.dll and
+ * for example libpgtcl.dll: All memory allocated inside a dll
+ * should be freed in the context of the same dll.
+ *
+ */
+ void
+ PQfreeNotify(PGnotify *notify)
+ {
+ free(notify);
+ }
+
+ /*
* PQgetline - gets a newline-terminated string from the backend.
*
* Chiefly here so that applications can use "COPY <rel> to stdout"
Index: libpq/libpq-fe.h
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/libpq/libpq-fe.h,v
retrieving revision 1.72
diff -C3 -r1.72 libpq-fe.h
*** libpq/libpq-fe.h 2001/08/21 20:39:54 1.72
--- libpq/libpq-fe.h 2001/08/24 16:05:01
***************
*** 254,259 ****
--- 254,260 ----
/* Simple synchronous query */
extern PGresult *PQexec(PGconn *conn, const char *query);
extern PGnotify *PQnotifies(PGconn *conn);
+ extern void PQfreeNotify(PGnotify *notify);
/* Interface for multiple-result or asynchronous queries */
extern int PQsendQuery(PGconn *conn, const char *query);
Index: libpq/libpqdll.def
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/libpq/libpqdll.def,v
retrieving revision 1.13
diff -C3 -r1.13 libpqdll.def
*** libpq/libpqdll.def 2001/06/07 00:10:18 1.13
--- libpq/libpqdll.def 2001/08/24 16:05:01
***************
*** 87,90 ****
PQresetStart @ 84
PQsetClientEncoding @ 85
PQsetnonblocking @ 86
!
--- 87,90 ----
PQresetStart @ 84
PQsetClientEncoding @ 85
PQsetnonblocking @ 86
! PQfreeNotify @ 87
;libpgtcl.def
; The LIBRARY entry must be same as the name of your DLL, the name of
; our DLL is libpgtcl.dll
LIBRARY libpgtcl
EXPORTS
Pgtcl_Init
Pgtcl_SafeInit
# Microsoft Developer Studio Generated NMAKE File, Based on libpgtcl_REL7_1_STABLE.dsp
!IF "$(CFG)" == ""
CFG=libpgtcl - Win32 Release
!MESSAGE No configuration specified. Defaulting to libpgtcl - Win32 Release.
!ENDIF
!IF "$(CFG)" != "libpgtcl - Win32 Release" && "$(CFG)" != "libpgtcl - Win32 Debug"
!MESSAGE Invalid configuration "$(CFG)" specified.
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "libpgtcl.mak" CFG="libpgtcl - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "libpgtcl - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "libpgtcl - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
!ERROR An invalid configuration is specified.
!ENDIF
!IF "$(OS)" == "Windows_NT"
NULL=
!ELSE
NULL=nul
!ENDIF
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
TCLBASE=\usr\local\tcltk833
PGINCLUDE=/I ..\..\include /I ..\libpq /I $(TCLBASE)\include
!IF "$(CFG)" == "libpgtcl - Win32 Release"
OUTDIR=.\Release
INTDIR=.\Release
# Begin Custom Macros
OutDir=.\Release
# End Custom Macros
ALL : "$(OUTDIR)\libpgtcl.dll" "$(OUTDIR)\libpgtcl.bsc"
CLEAN :
-@erase "$(INTDIR)\pgtcl.obj"
-@erase "$(INTDIR)\pgtcl.sbr"
-@erase "$(INTDIR)\pgtclCmds.obj"
-@erase "$(INTDIR)\pgtclCmds.sbr"
-@erase "$(INTDIR)\pgtclId.obj"
-@erase "$(INTDIR)\pgtclId.sbr"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(OUTDIR)\libpgtcl.dll"
-@erase "$(OUTDIR)\libpgtcl.exp"
-@erase "$(OUTDIR)\libpgtcl.lib"
-@erase "$(OUTDIR)\libpgtcl.bsc"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP_PROJ=/nologo /MT /W3 /GX /O2 $(PGINCLUDE) /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL"
/FR"$(INTDIR)\\"/Fp"$(INTDIR)\libpgtcl.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\libpgtcl.bsc"
BSC32_SBRS= \
"$(INTDIR)\pgtcl.sbr" \
"$(INTDIR)\pgtclCmds.sbr" \
"$(INTDIR)\pgtclId.sbr"
"$(OUTDIR)\libpgtcl.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
$(BSC32) @<<
$(BSC32_FLAGS) $(BSC32_SBRS)
<<
LINK32=link.exe
LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib
oleaut32.libuuid.lib odbc32.lib odbccp32.lib tcl83.lib libpq.lib /nologo /dll /incremental:no
/pdb:"$(OUTDIR)\libpgtcl.pdb"/machine:I386 /def:".\libpgtcl.def" /out:"$(OUTDIR)\libpgtcl.dll"
/implib:"$(OUTDIR)\libpgtcl.lib"/libpath:"$(TCLBASE)\lib" /libpath:"..\libpq\Release"
DEF_FILE= \
".\libpgtcl.def"
LINK32_OBJS= \
"$(INTDIR)\pgtcl.obj" \
"$(INTDIR)\pgtclCmds.obj" \
"$(INTDIR)\pgtclId.obj"
"$(OUTDIR)\libpgtcl.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ELSEIF "$(CFG)" == "libpgtcl - Win32 Debug"
OUTDIR=.\Debug
INTDIR=.\Debug
# Begin Custom Macros
OutDir=.\Debug
# End Custom Macros
ALL : "$(OUTDIR)\libpgtcl.dll" "$(OUTDIR)\libpgtcl.bsc"
CLEAN :
-@erase "$(INTDIR)\pgtcl.obj"
-@erase "$(INTDIR)\pgtcl.sbr"
-@erase "$(INTDIR)\pgtclCmds.obj"
-@erase "$(INTDIR)\pgtclCmds.sbr"
-@erase "$(INTDIR)\pgtclId.obj"
-@erase "$(INTDIR)\pgtclId.sbr"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(INTDIR)\vc60.pdb"
-@erase "$(OUTDIR)\libpgtcl.dll"
-@erase "$(OUTDIR)\libpgtcl.exp"
-@erase "$(OUTDIR)\libpgtcl.ilk"
-@erase "$(OUTDIR)\libpgtcl.lib"
-@erase "$(OUTDIR)\libpgtcl.pdb"
-@erase "$(OUTDIR)\libpgtcl.bsc"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP_PROJ=/nologo /MTd /W3 /Gm /GX /ZI /Od $(PGINCLUDE) /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL"
/FR"$(INTDIR)\\"/Fp"$(INTDIR)\libpgtcl.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\libpgtcl.bsc"
BSC32_SBRS= \
"$(INTDIR)\pgtcl.sbr" \
"$(INTDIR)\pgtclCmds.sbr" \
"$(INTDIR)\pgtclId.sbr"
"$(OUTDIR)\libpgtcl.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
$(BSC32) @<<
$(BSC32_FLAGS) $(BSC32_SBRS)
<<
LINK32=link.exe
LINK32_FLAGS=tcl83.lib libpq.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib
ole32.liboleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\libpgtcl.pdb"
/debug/machine:I386 /def:".\libpgtcl.def" /out:"$(OUTDIR)\libpgtcl.dll" /implib:"$(OUTDIR)\libpgtcl.lib" /pdbtype:sept
/libpath:"$(TCLBASE)\lib"/libpath:"..\libpq\Debug"
DEF_FILE= \
".\libpgtcl.def"
LINK32_OBJS= \
"$(INTDIR)\pgtcl.obj" \
"$(INTDIR)\pgtclCmds.obj" \
"$(INTDIR)\pgtclId.obj"
"$(OUTDIR)\libpgtcl.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ENDIF
.c{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.c{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
!IF "$(CFG)" == "libpgtcl - Win32 Release" || "$(CFG)" == "libpgtcl - Win32 Debug"
SOURCE=pgtcl.c
"$(INTDIR)\pgtcl.obj" "$(INTDIR)\pgtcl.sbr" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=pgtclCmds.c
"$(INTDIR)\pgtclCmds.obj" "$(INTDIR)\pgtclCmds.sbr" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=pgtclId.c
"$(INTDIR)\pgtclId.obj" "$(INTDIR)\pgtclId.sbr" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
!ENDIF
Your patch has been added to the PostgreSQL unapplied patches list at:
http://candle.pha.pa.us/cgi-bin/pgpatches
I will try to apply it within the next 48 hours.
> Hi,
>
> Below is the patch against current cvs for libpgtcl and
> two additional files win32.mak and libpgtcl.def.
> This patch allows to compile libpgtcl.dll on Windows
> with tcl > 8.0. I've tested it on WinNT (VC6.0), SUSE Linux (7.0)
> and Solaris 2.6 with tcl 8.3.3.
>
> Regards,
> Mikhail Terekhov
> Index: libpgtcl/pgtclCmds.c
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/libpgtcl/pgtclCmds.c,v
> retrieving revision 1.56
> diff -C3 -r1.56 pgtclCmds.c
> *** libpgtcl/pgtclCmds.c 2001/08/10 22:50:10 1.56
> --- libpgtcl/pgtclCmds.c 2001/08/24 16:05:01
> ***************
> *** 403,408 ****
> --- 403,410 ----
> int
> Pg_disconnect(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
> {
> + Pg_ConnectionId *connid;
> + PGconn *conn;
> Tcl_Channel conn_chan;
>
> if (argc != 2)
> ***************
> *** 418,423 ****
> --- 420,431 ----
> Tcl_AppendResult(interp, argv[1], " is not a valid connection\n", 0);
> return TCL_ERROR;
> }
> +
> + #if TCL_MAJOR_VERSION >= 8
> + conn = PgGetConnectionId(interp, argv[1], &connid);
> + if (connid->notifier_channel != NULL)
> + Tcl_UnregisterChannel(interp, connid->notifier_channel);
> + #endif
>
> return Tcl_UnregisterChannel(interp, conn_chan);
> }
> Index: libpgtcl/pgtclCmds.h
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/libpgtcl/pgtclCmds.h,v
> retrieving revision 1.21
> diff -C3 -r1.21 pgtclCmds.h
> *** libpgtcl/pgtclCmds.h 2001/03/22 04:01:24 1.21
> --- libpgtcl/pgtclCmds.h 2001/08/24 16:05:01
> ***************
> *** 64,70 ****
> --- 64,74 ----
>
> Pg_TclNotifies *notify_list;/* head of list of notify info */
> int notifier_running; /* notify event source is live */
> + #if TCL_MAJOR_VERSION >= 8
> + Tcl_Channel notifier_channel;/* Tcl_Channel on which notifier is listening */
> + #else
> int notifier_socket;/* PQsocket on which notifier is listening */
> + #endif
> } Pg_ConnectionId;
>
> /* Values of res_copyStatus */
> Index: libpgtcl/pgtclId.c
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/libpgtcl/pgtclId.c,v
> retrieving revision 1.25
> diff -C3 -r1.25 pgtclId.c
> *** libpgtcl/pgtclId.c 2001/02/10 02:31:29 1.25
> --- libpgtcl/pgtclId.c 2001/08/24 16:05:01
> ***************
> *** 174,183 ****
> connid->results[i] = NULL;
> connid->notify_list = NULL;
> connid->notifier_running = 0;
> - connid->notifier_socket = -1;
>
> sprintf(connid->id, "pgsql%d", PQsocket(conn));
>
> #if TCL_MAJOR_VERSION == 7 && TCL_MINOR_VERSION == 5
> /* Original signature (only seen in Tcl 7.5) */
> conn_chan = Tcl_CreateChannel(&Pg_ConnType, connid->id, NULL, NULL, (ClientData) connid);
> --- 174,189 ----
> connid->results[i] = NULL;
> connid->notify_list = NULL;
> connid->notifier_running = 0;
>
> sprintf(connid->id, "pgsql%d", PQsocket(conn));
>
> + #if TCL_MAJOR_VERSION >= 8
> + connid->notifier_channel = Tcl_MakeTcpClientChannel((ClientData) PQsocket(conn));
> + Tcl_RegisterChannel(interp, connid->notifier_channel);
> + #else
> + connid->notifier_socket = -1;
> + #endif
> +
> #if TCL_MAJOR_VERSION == 7 && TCL_MINOR_VERSION == 5
> /* Original signature (only seen in Tcl 7.5) */
> conn_chan = Tcl_CreateChannel(&Pg_ConnType, connid->id, NULL, NULL, (ClientData) connid);
> ***************
> *** 581,587 ****
> event->info = *notify;
> event->connid = connid;
> Tcl_QueueEvent((Tcl_Event *) event, TCL_QUEUE_TAIL);
> ! free(notify);
> }
>
> /*
> --- 587,593 ----
> event->info = *notify;
> event->connid = connid;
> Tcl_QueueEvent((Tcl_Event *) event, TCL_QUEUE_TAIL);
> ! PQfreeNotify(notify);
> }
>
> /*
> ***************
> *** 688,705 ****
> if (pqsock >= 0)
> {
> #if TCL_MAJOR_VERSION >= 8
> ! /* In Tcl 8, Tcl_CreateFileHandler takes a socket directly. */
> ! Tcl_CreateFileHandler(pqsock, TCL_READABLE,
> ! Pg_Notify_FileHandler, (ClientData) connid);
> #else
> /* In Tcl 7.5 and 7.6, we need to gin up a Tcl_File. */
> Tcl_File tclfile = Tcl_GetFile((ClientData) pqsock, TCL_UNIX_FD);
>
> Tcl_CreateFileHandler(tclfile, TCL_READABLE,
> Pg_Notify_FileHandler, (ClientData) connid);
> #endif
> connid->notifier_running = 1;
> - connid->notifier_socket = pqsock;
> }
> }
> }
> --- 694,710 ----
> if (pqsock >= 0)
> {
> #if TCL_MAJOR_VERSION >= 8
> ! Tcl_CreateChannelHandler(connid->notifier_channel, TCL_READABLE,
> ! Pg_Notify_FileHandler, (ClientData) connid);
> #else
> /* In Tcl 7.5 and 7.6, we need to gin up a Tcl_File. */
> Tcl_File tclfile = Tcl_GetFile((ClientData) pqsock, TCL_UNIX_FD);
>
> Tcl_CreateFileHandler(tclfile, TCL_READABLE,
> Pg_Notify_FileHandler, (ClientData) connid);
> + connid->notifier_socket = pqsock;
> #endif
> connid->notifier_running = 1;
> }
> }
> }
> ***************
> *** 711,718 ****
> if (connid->notifier_running)
> {
> #if TCL_MAJOR_VERSION >= 8
> ! /* In Tcl 8, Tcl_DeleteFileHandler takes a socket directly. */
> ! Tcl_DeleteFileHandler(connid->notifier_socket);
> #else
> /* In Tcl 7.5 and 7.6, we need to gin up a Tcl_File. */
> Tcl_File tclfile = Tcl_GetFile((ClientData) connid->notifier_socket,
> --- 716,723 ----
> if (connid->notifier_running)
> {
> #if TCL_MAJOR_VERSION >= 8
> ! Tcl_DeleteChannelHandler(connid->notifier_channel,
> ! Pg_Notify_FileHandler, (ClientData) connid);
> #else
> /* In Tcl 7.5 and 7.6, we need to gin up a Tcl_File. */
> Tcl_File tclfile = Tcl_GetFile((ClientData) connid->notifier_socket,
> Index: libpq/fe-exec.c
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v
> retrieving revision 1.108
> diff -C3 -r1.108 fe-exec.c
> *** libpq/fe-exec.c 2001/08/21 20:39:53 1.108
> --- libpq/fe-exec.c 2001/08/24 16:05:01
> ***************
> *** 1346,1351 ****
> --- 1346,1365 ----
> }
>
> /*
> + * PQfreeNotify - free's the memory associated with a PGnotify
> + *
> + * This function is needed on Windows when using libpq.dll and
> + * for example libpgtcl.dll: All memory allocated inside a dll
> + * should be freed in the context of the same dll.
> + *
> + */
> + void
> + PQfreeNotify(PGnotify *notify)
> + {
> + free(notify);
> + }
> +
> + /*
> * PQgetline - gets a newline-terminated string from the backend.
> *
> * Chiefly here so that applications can use "COPY <rel> to stdout"
> Index: libpq/libpq-fe.h
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/libpq/libpq-fe.h,v
> retrieving revision 1.72
> diff -C3 -r1.72 libpq-fe.h
> *** libpq/libpq-fe.h 2001/08/21 20:39:54 1.72
> --- libpq/libpq-fe.h 2001/08/24 16:05:01
> ***************
> *** 254,259 ****
> --- 254,260 ----
> /* Simple synchronous query */
> extern PGresult *PQexec(PGconn *conn, const char *query);
> extern PGnotify *PQnotifies(PGconn *conn);
> + extern void PQfreeNotify(PGnotify *notify);
>
> /* Interface for multiple-result or asynchronous queries */
> extern int PQsendQuery(PGconn *conn, const char *query);
> Index: libpq/libpqdll.def
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/libpq/libpqdll.def,v
> retrieving revision 1.13
> diff -C3 -r1.13 libpqdll.def
> *** libpq/libpqdll.def 2001/06/07 00:10:18 1.13
> --- libpq/libpqdll.def 2001/08/24 16:05:01
> ***************
> *** 87,90 ****
> PQresetStart @ 84
> PQsetClientEncoding @ 85
> PQsetnonblocking @ 86
> !
> --- 87,90 ----
> PQresetStart @ 84
> PQsetClientEncoding @ 85
> PQsetnonblocking @ 86
> ! PQfreeNotify @ 87
> ;libpgtcl.def
> ; The LIBRARY entry must be same as the name of your DLL, the name of
> ; our DLL is libpgtcl.dll
> LIBRARY libpgtcl
> EXPORTS
>
> Pgtcl_Init
> Pgtcl_SafeInit
> # Microsoft Developer Studio Generated NMAKE File, Based on libpgtcl_REL7_1_STABLE.dsp
> !IF "$(CFG)" == ""
> CFG=libpgtcl - Win32 Release
> !MESSAGE No configuration specified. Defaulting to libpgtcl - Win32 Release.
> !ENDIF
>
> !IF "$(CFG)" != "libpgtcl - Win32 Release" && "$(CFG)" != "libpgtcl - Win32 Debug"
> !MESSAGE Invalid configuration "$(CFG)" specified.
> !MESSAGE You can specify a configuration when running NMAKE
> !MESSAGE by defining the macro CFG on the command line. For example:
> !MESSAGE
> !MESSAGE NMAKE /f "libpgtcl.mak" CFG="libpgtcl - Win32 Debug"
> !MESSAGE
> !MESSAGE Possible choices for configuration are:
> !MESSAGE
> !MESSAGE "libpgtcl - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
> !MESSAGE "libpgtcl - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
> !MESSAGE
> !ERROR An invalid configuration is specified.
> !ENDIF
>
> !IF "$(OS)" == "Windows_NT"
> NULL=
> !ELSE
> NULL=nul
> !ENDIF
>
> CPP=cl.exe
> MTL=midl.exe
> RSC=rc.exe
>
> TCLBASE=\usr\local\tcltk833
> PGINCLUDE=/I ..\..\include /I ..\libpq /I $(TCLBASE)\include
>
> !IF "$(CFG)" == "libpgtcl - Win32 Release"
>
> OUTDIR=.\Release
> INTDIR=.\Release
> # Begin Custom Macros
> OutDir=.\Release
> # End Custom Macros
>
> ALL : "$(OUTDIR)\libpgtcl.dll" "$(OUTDIR)\libpgtcl.bsc"
>
>
> CLEAN :
> -@erase "$(INTDIR)\pgtcl.obj"
> -@erase "$(INTDIR)\pgtcl.sbr"
> -@erase "$(INTDIR)\pgtclCmds.obj"
> -@erase "$(INTDIR)\pgtclCmds.sbr"
> -@erase "$(INTDIR)\pgtclId.obj"
> -@erase "$(INTDIR)\pgtclId.sbr"
> -@erase "$(INTDIR)\vc60.idb"
> -@erase "$(OUTDIR)\libpgtcl.dll"
> -@erase "$(OUTDIR)\libpgtcl.exp"
> -@erase "$(OUTDIR)\libpgtcl.lib"
> -@erase "$(OUTDIR)\libpgtcl.bsc"
>
> "$(OUTDIR)" :
> if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
>
> CPP_PROJ=/nologo /MT /W3 /GX /O2 $(PGINCLUDE) /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL"
/FR"$(INTDIR)\\"/Fp"$(INTDIR)\libpgtcl.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
> MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
> BSC32=bscmake.exe
> BSC32_FLAGS=/nologo /o"$(OUTDIR)\libpgtcl.bsc"
> BSC32_SBRS= \
> "$(INTDIR)\pgtcl.sbr" \
> "$(INTDIR)\pgtclCmds.sbr" \
> "$(INTDIR)\pgtclId.sbr"
>
> "$(OUTDIR)\libpgtcl.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
> $(BSC32) @<<
> $(BSC32_FLAGS) $(BSC32_SBRS)
> <<
>
> LINK32=link.exe
> LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib
oleaut32.libuuid.lib odbc32.lib odbccp32.lib tcl83.lib libpq.lib /nologo /dll /incremental:no
/pdb:"$(OUTDIR)\libpgtcl.pdb"/machine:I386 /def:".\libpgtcl.def" /out:"$(OUTDIR)\libpgtcl.dll"
/implib:"$(OUTDIR)\libpgtcl.lib"/libpath:"$(TCLBASE)\lib" /libpath:"..\libpq\Release"
> DEF_FILE= \
> ".\libpgtcl.def"
> LINK32_OBJS= \
> "$(INTDIR)\pgtcl.obj" \
> "$(INTDIR)\pgtclCmds.obj" \
> "$(INTDIR)\pgtclId.obj"
>
> "$(OUTDIR)\libpgtcl.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
> $(LINK32) @<<
> $(LINK32_FLAGS) $(LINK32_OBJS)
> <<
>
> !ELSEIF "$(CFG)" == "libpgtcl - Win32 Debug"
>
> OUTDIR=.\Debug
> INTDIR=.\Debug
> # Begin Custom Macros
> OutDir=.\Debug
> # End Custom Macros
>
> ALL : "$(OUTDIR)\libpgtcl.dll" "$(OUTDIR)\libpgtcl.bsc"
>
>
> CLEAN :
> -@erase "$(INTDIR)\pgtcl.obj"
> -@erase "$(INTDIR)\pgtcl.sbr"
> -@erase "$(INTDIR)\pgtclCmds.obj"
> -@erase "$(INTDIR)\pgtclCmds.sbr"
> -@erase "$(INTDIR)\pgtclId.obj"
> -@erase "$(INTDIR)\pgtclId.sbr"
> -@erase "$(INTDIR)\vc60.idb"
> -@erase "$(INTDIR)\vc60.pdb"
> -@erase "$(OUTDIR)\libpgtcl.dll"
> -@erase "$(OUTDIR)\libpgtcl.exp"
> -@erase "$(OUTDIR)\libpgtcl.ilk"
> -@erase "$(OUTDIR)\libpgtcl.lib"
> -@erase "$(OUTDIR)\libpgtcl.pdb"
> -@erase "$(OUTDIR)\libpgtcl.bsc"
>
> "$(OUTDIR)" :
> if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
>
> CPP_PROJ=/nologo /MTd /W3 /Gm /GX /ZI /Od $(PGINCLUDE) /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL"
/FR"$(INTDIR)\\"/Fp"$(INTDIR)\libpgtcl.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
> MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
> BSC32=bscmake.exe
> BSC32_FLAGS=/nologo /o"$(OUTDIR)\libpgtcl.bsc"
> BSC32_SBRS= \
> "$(INTDIR)\pgtcl.sbr" \
> "$(INTDIR)\pgtclCmds.sbr" \
> "$(INTDIR)\pgtclId.sbr"
>
> "$(OUTDIR)\libpgtcl.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
> $(BSC32) @<<
> $(BSC32_FLAGS) $(BSC32_SBRS)
> <<
>
> LINK32=link.exe
> LINK32_FLAGS=tcl83.lib libpq.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib
ole32.liboleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\libpgtcl.pdb"
/debug/machine:I386 /def:".\libpgtcl.def" /out:"$(OUTDIR)\libpgtcl.dll" /implib:"$(OUTDIR)\libpgtcl.lib" /pdbtype:sept
/libpath:"$(TCLBASE)\lib"/libpath:"..\libpq\Debug"
> DEF_FILE= \
> ".\libpgtcl.def"
> LINK32_OBJS= \
> "$(INTDIR)\pgtcl.obj" \
> "$(INTDIR)\pgtclCmds.obj" \
> "$(INTDIR)\pgtclId.obj"
>
> "$(OUTDIR)\libpgtcl.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
> $(LINK32) @<<
> $(LINK32_FLAGS) $(LINK32_OBJS)
> <<
>
> !ENDIF
>
> .c{$(INTDIR)}.obj::
> $(CPP) @<<
> $(CPP_PROJ) $<
> <<
>
> .cpp{$(INTDIR)}.obj::
> $(CPP) @<<
> $(CPP_PROJ) $<
> <<
>
> .cxx{$(INTDIR)}.obj::
> $(CPP) @<<
> $(CPP_PROJ) $<
> <<
>
> .c{$(INTDIR)}.sbr::
> $(CPP) @<<
> $(CPP_PROJ) $<
> <<
>
> .cpp{$(INTDIR)}.sbr::
> $(CPP) @<<
> $(CPP_PROJ) $<
> <<
>
> .cxx{$(INTDIR)}.sbr::
> $(CPP) @<<
> $(CPP_PROJ) $<
> <<
>
> !IF "$(CFG)" == "libpgtcl - Win32 Release" || "$(CFG)" == "libpgtcl - Win32 Debug"
> SOURCE=pgtcl.c
>
> "$(INTDIR)\pgtcl.obj" "$(INTDIR)\pgtcl.sbr" : $(SOURCE) "$(INTDIR)"
> $(CPP) $(CPP_PROJ) $(SOURCE)
>
>
> SOURCE=pgtclCmds.c
>
> "$(INTDIR)\pgtclCmds.obj" "$(INTDIR)\pgtclCmds.sbr" : $(SOURCE) "$(INTDIR)"
> $(CPP) $(CPP_PROJ) $(SOURCE)
>
>
> SOURCE=pgtclId.c
>
> "$(INTDIR)\pgtclId.obj" "$(INTDIR)\pgtclId.sbr" : $(SOURCE) "$(INTDIR)"
> $(CPP) $(CPP_PROJ) $(SOURCE)
>
>
>
> !ENDIF
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/users-lounge/docs/faq.html
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026
Patch applied. Thanks.
> Hi,
>
> Below is the patch against current cvs for libpgtcl and
> two additional files win32.mak and libpgtcl.def.
> This patch allows to compile libpgtcl.dll on Windows
> with tcl > 8.0. I've tested it on WinNT (VC6.0), SUSE Linux (7.0)
> and Solaris 2.6 with tcl 8.3.3.
>
> Regards,
> Mikhail Terekhov
> Index: libpgtcl/pgtclCmds.c
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/libpgtcl/pgtclCmds.c,v
> retrieving revision 1.56
> diff -C3 -r1.56 pgtclCmds.c
> *** libpgtcl/pgtclCmds.c 2001/08/10 22:50:10 1.56
> --- libpgtcl/pgtclCmds.c 2001/08/24 16:05:01
> ***************
> *** 403,408 ****
> --- 403,410 ----
> int
> Pg_disconnect(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
> {
> + Pg_ConnectionId *connid;
> + PGconn *conn;
> Tcl_Channel conn_chan;
>
> if (argc != 2)
> ***************
> *** 418,423 ****
> --- 420,431 ----
> Tcl_AppendResult(interp, argv[1], " is not a valid connection\n", 0);
> return TCL_ERROR;
> }
> +
> + #if TCL_MAJOR_VERSION >= 8
> + conn = PgGetConnectionId(interp, argv[1], &connid);
> + if (connid->notifier_channel != NULL)
> + Tcl_UnregisterChannel(interp, connid->notifier_channel);
> + #endif
>
> return Tcl_UnregisterChannel(interp, conn_chan);
> }
> Index: libpgtcl/pgtclCmds.h
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/libpgtcl/pgtclCmds.h,v
> retrieving revision 1.21
> diff -C3 -r1.21 pgtclCmds.h
> *** libpgtcl/pgtclCmds.h 2001/03/22 04:01:24 1.21
> --- libpgtcl/pgtclCmds.h 2001/08/24 16:05:01
> ***************
> *** 64,70 ****
> --- 64,74 ----
>
> Pg_TclNotifies *notify_list;/* head of list of notify info */
> int notifier_running; /* notify event source is live */
> + #if TCL_MAJOR_VERSION >= 8
> + Tcl_Channel notifier_channel;/* Tcl_Channel on which notifier is listening */
> + #else
> int notifier_socket;/* PQsocket on which notifier is listening */
> + #endif
> } Pg_ConnectionId;
>
> /* Values of res_copyStatus */
> Index: libpgtcl/pgtclId.c
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/libpgtcl/pgtclId.c,v
> retrieving revision 1.25
> diff -C3 -r1.25 pgtclId.c
> *** libpgtcl/pgtclId.c 2001/02/10 02:31:29 1.25
> --- libpgtcl/pgtclId.c 2001/08/24 16:05:01
> ***************
> *** 174,183 ****
> connid->results[i] = NULL;
> connid->notify_list = NULL;
> connid->notifier_running = 0;
> - connid->notifier_socket = -1;
>
> sprintf(connid->id, "pgsql%d", PQsocket(conn));
>
> #if TCL_MAJOR_VERSION == 7 && TCL_MINOR_VERSION == 5
> /* Original signature (only seen in Tcl 7.5) */
> conn_chan = Tcl_CreateChannel(&Pg_ConnType, connid->id, NULL, NULL, (ClientData) connid);
> --- 174,189 ----
> connid->results[i] = NULL;
> connid->notify_list = NULL;
> connid->notifier_running = 0;
>
> sprintf(connid->id, "pgsql%d", PQsocket(conn));
>
> + #if TCL_MAJOR_VERSION >= 8
> + connid->notifier_channel = Tcl_MakeTcpClientChannel((ClientData) PQsocket(conn));
> + Tcl_RegisterChannel(interp, connid->notifier_channel);
> + #else
> + connid->notifier_socket = -1;
> + #endif
> +
> #if TCL_MAJOR_VERSION == 7 && TCL_MINOR_VERSION == 5
> /* Original signature (only seen in Tcl 7.5) */
> conn_chan = Tcl_CreateChannel(&Pg_ConnType, connid->id, NULL, NULL, (ClientData) connid);
> ***************
> *** 581,587 ****
> event->info = *notify;
> event->connid = connid;
> Tcl_QueueEvent((Tcl_Event *) event, TCL_QUEUE_TAIL);
> ! free(notify);
> }
>
> /*
> --- 587,593 ----
> event->info = *notify;
> event->connid = connid;
> Tcl_QueueEvent((Tcl_Event *) event, TCL_QUEUE_TAIL);
> ! PQfreeNotify(notify);
> }
>
> /*
> ***************
> *** 688,705 ****
> if (pqsock >= 0)
> {
> #if TCL_MAJOR_VERSION >= 8
> ! /* In Tcl 8, Tcl_CreateFileHandler takes a socket directly. */
> ! Tcl_CreateFileHandler(pqsock, TCL_READABLE,
> ! Pg_Notify_FileHandler, (ClientData) connid);
> #else
> /* In Tcl 7.5 and 7.6, we need to gin up a Tcl_File. */
> Tcl_File tclfile = Tcl_GetFile((ClientData) pqsock, TCL_UNIX_FD);
>
> Tcl_CreateFileHandler(tclfile, TCL_READABLE,
> Pg_Notify_FileHandler, (ClientData) connid);
> #endif
> connid->notifier_running = 1;
> - connid->notifier_socket = pqsock;
> }
> }
> }
> --- 694,710 ----
> if (pqsock >= 0)
> {
> #if TCL_MAJOR_VERSION >= 8
> ! Tcl_CreateChannelHandler(connid->notifier_channel, TCL_READABLE,
> ! Pg_Notify_FileHandler, (ClientData) connid);
> #else
> /* In Tcl 7.5 and 7.6, we need to gin up a Tcl_File. */
> Tcl_File tclfile = Tcl_GetFile((ClientData) pqsock, TCL_UNIX_FD);
>
> Tcl_CreateFileHandler(tclfile, TCL_READABLE,
> Pg_Notify_FileHandler, (ClientData) connid);
> + connid->notifier_socket = pqsock;
> #endif
> connid->notifier_running = 1;
> }
> }
> }
> ***************
> *** 711,718 ****
> if (connid->notifier_running)
> {
> #if TCL_MAJOR_VERSION >= 8
> ! /* In Tcl 8, Tcl_DeleteFileHandler takes a socket directly. */
> ! Tcl_DeleteFileHandler(connid->notifier_socket);
> #else
> /* In Tcl 7.5 and 7.6, we need to gin up a Tcl_File. */
> Tcl_File tclfile = Tcl_GetFile((ClientData) connid->notifier_socket,
> --- 716,723 ----
> if (connid->notifier_running)
> {
> #if TCL_MAJOR_VERSION >= 8
> ! Tcl_DeleteChannelHandler(connid->notifier_channel,
> ! Pg_Notify_FileHandler, (ClientData) connid);
> #else
> /* In Tcl 7.5 and 7.6, we need to gin up a Tcl_File. */
> Tcl_File tclfile = Tcl_GetFile((ClientData) connid->notifier_socket,
> Index: libpq/fe-exec.c
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v
> retrieving revision 1.108
> diff -C3 -r1.108 fe-exec.c
> *** libpq/fe-exec.c 2001/08/21 20:39:53 1.108
> --- libpq/fe-exec.c 2001/08/24 16:05:01
> ***************
> *** 1346,1351 ****
> --- 1346,1365 ----
> }
>
> /*
> + * PQfreeNotify - free's the memory associated with a PGnotify
> + *
> + * This function is needed on Windows when using libpq.dll and
> + * for example libpgtcl.dll: All memory allocated inside a dll
> + * should be freed in the context of the same dll.
> + *
> + */
> + void
> + PQfreeNotify(PGnotify *notify)
> + {
> + free(notify);
> + }
> +
> + /*
> * PQgetline - gets a newline-terminated string from the backend.
> *
> * Chiefly here so that applications can use "COPY <rel> to stdout"
> Index: libpq/libpq-fe.h
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/libpq/libpq-fe.h,v
> retrieving revision 1.72
> diff -C3 -r1.72 libpq-fe.h
> *** libpq/libpq-fe.h 2001/08/21 20:39:54 1.72
> --- libpq/libpq-fe.h 2001/08/24 16:05:01
> ***************
> *** 254,259 ****
> --- 254,260 ----
> /* Simple synchronous query */
> extern PGresult *PQexec(PGconn *conn, const char *query);
> extern PGnotify *PQnotifies(PGconn *conn);
> + extern void PQfreeNotify(PGnotify *notify);
>
> /* Interface for multiple-result or asynchronous queries */
> extern int PQsendQuery(PGconn *conn, const char *query);
> Index: libpq/libpqdll.def
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/libpq/libpqdll.def,v
> retrieving revision 1.13
> diff -C3 -r1.13 libpqdll.def
> *** libpq/libpqdll.def 2001/06/07 00:10:18 1.13
> --- libpq/libpqdll.def 2001/08/24 16:05:01
> ***************
> *** 87,90 ****
> PQresetStart @ 84
> PQsetClientEncoding @ 85
> PQsetnonblocking @ 86
> !
> --- 87,90 ----
> PQresetStart @ 84
> PQsetClientEncoding @ 85
> PQsetnonblocking @ 86
> ! PQfreeNotify @ 87
> ;libpgtcl.def
> ; The LIBRARY entry must be same as the name of your DLL, the name of
> ; our DLL is libpgtcl.dll
> LIBRARY libpgtcl
> EXPORTS
>
> Pgtcl_Init
> Pgtcl_SafeInit
> # Microsoft Developer Studio Generated NMAKE File, Based on libpgtcl_REL7_1_STABLE.dsp
> !IF "$(CFG)" == ""
> CFG=libpgtcl - Win32 Release
> !MESSAGE No configuration specified. Defaulting to libpgtcl - Win32 Release.
> !ENDIF
>
> !IF "$(CFG)" != "libpgtcl - Win32 Release" && "$(CFG)" != "libpgtcl - Win32 Debug"
> !MESSAGE Invalid configuration "$(CFG)" specified.
> !MESSAGE You can specify a configuration when running NMAKE
> !MESSAGE by defining the macro CFG on the command line. For example:
> !MESSAGE
> !MESSAGE NMAKE /f "libpgtcl.mak" CFG="libpgtcl - Win32 Debug"
> !MESSAGE
> !MESSAGE Possible choices for configuration are:
> !MESSAGE
> !MESSAGE "libpgtcl - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
> !MESSAGE "libpgtcl - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
> !MESSAGE
> !ERROR An invalid configuration is specified.
> !ENDIF
>
> !IF "$(OS)" == "Windows_NT"
> NULL=
> !ELSE
> NULL=nul
> !ENDIF
>
> CPP=cl.exe
> MTL=midl.exe
> RSC=rc.exe
>
> TCLBASE=\usr\local\tcltk833
> PGINCLUDE=/I ..\..\include /I ..\libpq /I $(TCLBASE)\include
>
> !IF "$(CFG)" == "libpgtcl - Win32 Release"
>
> OUTDIR=.\Release
> INTDIR=.\Release
> # Begin Custom Macros
> OutDir=.\Release
> # End Custom Macros
>
> ALL : "$(OUTDIR)\libpgtcl.dll" "$(OUTDIR)\libpgtcl.bsc"
>
>
> CLEAN :
> -@erase "$(INTDIR)\pgtcl.obj"
> -@erase "$(INTDIR)\pgtcl.sbr"
> -@erase "$(INTDIR)\pgtclCmds.obj"
> -@erase "$(INTDIR)\pgtclCmds.sbr"
> -@erase "$(INTDIR)\pgtclId.obj"
> -@erase "$(INTDIR)\pgtclId.sbr"
> -@erase "$(INTDIR)\vc60.idb"
> -@erase "$(OUTDIR)\libpgtcl.dll"
> -@erase "$(OUTDIR)\libpgtcl.exp"
> -@erase "$(OUTDIR)\libpgtcl.lib"
> -@erase "$(OUTDIR)\libpgtcl.bsc"
>
> "$(OUTDIR)" :
> if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
>
> CPP_PROJ=/nologo /MT /W3 /GX /O2 $(PGINCLUDE) /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL"
/FR"$(INTDIR)\\"/Fp"$(INTDIR)\libpgtcl.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
> MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
> BSC32=bscmake.exe
> BSC32_FLAGS=/nologo /o"$(OUTDIR)\libpgtcl.bsc"
> BSC32_SBRS= \
> "$(INTDIR)\pgtcl.sbr" \
> "$(INTDIR)\pgtclCmds.sbr" \
> "$(INTDIR)\pgtclId.sbr"
>
> "$(OUTDIR)\libpgtcl.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
> $(BSC32) @<<
> $(BSC32_FLAGS) $(BSC32_SBRS)
> <<
>
> LINK32=link.exe
> LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib
oleaut32.libuuid.lib odbc32.lib odbccp32.lib tcl83.lib libpq.lib /nologo /dll /incremental:no
/pdb:"$(OUTDIR)\libpgtcl.pdb"/machine:I386 /def:".\libpgtcl.def" /out:"$(OUTDIR)\libpgtcl.dll"
/implib:"$(OUTDIR)\libpgtcl.lib"/libpath:"$(TCLBASE)\lib" /libpath:"..\libpq\Release"
> DEF_FILE= \
> ".\libpgtcl.def"
> LINK32_OBJS= \
> "$(INTDIR)\pgtcl.obj" \
> "$(INTDIR)\pgtclCmds.obj" \
> "$(INTDIR)\pgtclId.obj"
>
> "$(OUTDIR)\libpgtcl.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
> $(LINK32) @<<
> $(LINK32_FLAGS) $(LINK32_OBJS)
> <<
>
> !ELSEIF "$(CFG)" == "libpgtcl - Win32 Debug"
>
> OUTDIR=.\Debug
> INTDIR=.\Debug
> # Begin Custom Macros
> OutDir=.\Debug
> # End Custom Macros
>
> ALL : "$(OUTDIR)\libpgtcl.dll" "$(OUTDIR)\libpgtcl.bsc"
>
>
> CLEAN :
> -@erase "$(INTDIR)\pgtcl.obj"
> -@erase "$(INTDIR)\pgtcl.sbr"
> -@erase "$(INTDIR)\pgtclCmds.obj"
> -@erase "$(INTDIR)\pgtclCmds.sbr"
> -@erase "$(INTDIR)\pgtclId.obj"
> -@erase "$(INTDIR)\pgtclId.sbr"
> -@erase "$(INTDIR)\vc60.idb"
> -@erase "$(INTDIR)\vc60.pdb"
> -@erase "$(OUTDIR)\libpgtcl.dll"
> -@erase "$(OUTDIR)\libpgtcl.exp"
> -@erase "$(OUTDIR)\libpgtcl.ilk"
> -@erase "$(OUTDIR)\libpgtcl.lib"
> -@erase "$(OUTDIR)\libpgtcl.pdb"
> -@erase "$(OUTDIR)\libpgtcl.bsc"
>
> "$(OUTDIR)" :
> if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
>
> CPP_PROJ=/nologo /MTd /W3 /Gm /GX /ZI /Od $(PGINCLUDE) /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL"
/FR"$(INTDIR)\\"/Fp"$(INTDIR)\libpgtcl.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
> MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
> BSC32=bscmake.exe
> BSC32_FLAGS=/nologo /o"$(OUTDIR)\libpgtcl.bsc"
> BSC32_SBRS= \
> "$(INTDIR)\pgtcl.sbr" \
> "$(INTDIR)\pgtclCmds.sbr" \
> "$(INTDIR)\pgtclId.sbr"
>
> "$(OUTDIR)\libpgtcl.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
> $(BSC32) @<<
> $(BSC32_FLAGS) $(BSC32_SBRS)
> <<
>
> LINK32=link.exe
> LINK32_FLAGS=tcl83.lib libpq.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib
ole32.liboleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\libpgtcl.pdb"
/debug/machine:I386 /def:".\libpgtcl.def" /out:"$(OUTDIR)\libpgtcl.dll" /implib:"$(OUTDIR)\libpgtcl.lib" /pdbtype:sept
/libpath:"$(TCLBASE)\lib"/libpath:"..\libpq\Debug"
> DEF_FILE= \
> ".\libpgtcl.def"
> LINK32_OBJS= \
> "$(INTDIR)\pgtcl.obj" \
> "$(INTDIR)\pgtclCmds.obj" \
> "$(INTDIR)\pgtclId.obj"
>
> "$(OUTDIR)\libpgtcl.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
> $(LINK32) @<<
> $(LINK32_FLAGS) $(LINK32_OBJS)
> <<
>
> !ENDIF
>
> .c{$(INTDIR)}.obj::
> $(CPP) @<<
> $(CPP_PROJ) $<
> <<
>
> .cpp{$(INTDIR)}.obj::
> $(CPP) @<<
> $(CPP_PROJ) $<
> <<
>
> .cxx{$(INTDIR)}.obj::
> $(CPP) @<<
> $(CPP_PROJ) $<
> <<
>
> .c{$(INTDIR)}.sbr::
> $(CPP) @<<
> $(CPP_PROJ) $<
> <<
>
> .cpp{$(INTDIR)}.sbr::
> $(CPP) @<<
> $(CPP_PROJ) $<
> <<
>
> .cxx{$(INTDIR)}.sbr::
> $(CPP) @<<
> $(CPP_PROJ) $<
> <<
>
> !IF "$(CFG)" == "libpgtcl - Win32 Release" || "$(CFG)" == "libpgtcl - Win32 Debug"
> SOURCE=pgtcl.c
>
> "$(INTDIR)\pgtcl.obj" "$(INTDIR)\pgtcl.sbr" : $(SOURCE) "$(INTDIR)"
> $(CPP) $(CPP_PROJ) $(SOURCE)
>
>
> SOURCE=pgtclCmds.c
>
> "$(INTDIR)\pgtclCmds.obj" "$(INTDIR)\pgtclCmds.sbr" : $(SOURCE) "$(INTDIR)"
> $(CPP) $(CPP_PROJ) $(SOURCE)
>
>
> SOURCE=pgtclId.c
>
> "$(INTDIR)\pgtclId.obj" "$(INTDIR)\pgtclId.sbr" : $(SOURCE) "$(INTDIR)"
> $(CPP) $(CPP_PROJ) $(SOURCE)
>
>
>
> !ENDIF
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/users-lounge/docs/faq.html
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026
Bruce Momjian wrote: > > Patch applied. Thanks. > Hi, The win32.mak and libpgtcl.def files had been lost (patch doesn't handle new files). I'm attaching those two files below. Regards Mikhail Terekhov
Вложения
Sorry, I had them in the wrong directory. Fixed now. > > > Bruce Momjian wrote: > > > > Patch applied. Thanks. > > > > Hi, > > The win32.mak and libpgtcl.def files had been lost (patch doesn't handle > new files). I'm attaching those two files below. > > Regards > Mikhail Terekhov [ application/x-zip-compressed is not supported, skipping... ] -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026