Обсуждение: 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