From a623e2d6cfb51533d21b18a5163fcabc450ff442 Mon Sep 17 00:00:00 2001 From: Mikhail Teterin Date: Tue, 30 Mar 2004 00:02:11 +0000 Subject: [PATCH] This is Sybtcl -- a dynamicly loadable TCL extension, which provides your interpreter with connectivity to a Sybase server. Althghough it was written to work with Sybase's own client libraries (not available for FreeBSD), this port patches it enough to make it work with FreeTDS. WWW: http://sybtcl.sourceforge.net/ --- databases/Makefile | 1 + databases/sybtcl/Makefile | 35 +++++++++ databases/sybtcl/distinfo | 1 + databases/sybtcl/files/Makefile.bsd | 45 ++++++++++++ databases/sybtcl/files/patch-aa | 105 +++++++++++++++++++++++++++ databases/sybtcl/files/patch-man | 78 ++++++++++++++++++++ databases/sybtcl/files/patch-sign_on | 16 ++++ databases/sybtcl/files/patch-sp_who | 15 ++++ databases/sybtcl/pkg-descr | 6 ++ databases/sybtcl/pkg-plist | 6 ++ 10 files changed, 308 insertions(+) create mode 100644 databases/sybtcl/Makefile create mode 100644 databases/sybtcl/distinfo create mode 100644 databases/sybtcl/files/Makefile.bsd create mode 100644 databases/sybtcl/files/patch-aa create mode 100644 databases/sybtcl/files/patch-man create mode 100644 databases/sybtcl/files/patch-sign_on create mode 100644 databases/sybtcl/files/patch-sp_who create mode 100644 databases/sybtcl/pkg-descr create mode 100644 databases/sybtcl/pkg-plist diff --git a/databases/Makefile b/databases/Makefile index d94bd19e2cb4..9968876259bb 100644 --- a/databases/Makefile +++ b/databases/Makefile @@ -260,6 +260,7 @@ SUBDIR += sqlrelay SUBDIR += sqsh SUBDIR += sybase-ocsd + SUBDIR += sybtcl SUBDIR += tcl-Mysql SUBDIR += tdb SUBDIR += tinycdb diff --git a/databases/sybtcl/Makefile b/databases/sybtcl/Makefile new file mode 100644 index 000000000000..aa30a55f52b1 --- /dev/null +++ b/databases/sybtcl/Makefile @@ -0,0 +1,35 @@ +# New ports collection makefile for: sybtcl +# Date created: Jul 30, 2002 +# Whom: mi +# +# $FreeBSD$ +# + +PORTNAME= sybtcl +PORTVERSION= 3.0rc2 +CATEGORIES= databases devel +MASTER_SITES= ${MASTER_SITE_SOURCEFORGE} +MASTER_SITE_SUBDIR= ${PORTNAME} + +MAINTAINER= mi@aldan.algebra.com +COMMENT= TCL extension to connect to Sybase servers + +LIB_DEPENDS= tcl${TCL_DVER}:${PORTSDIR}/lang/tcl${TCL_DVER} \ + sybdb:${PORTSDIR}/databases/freetds + +TCL_VER?= 8.4 +TCL_DVER= ${TCL_VER:S/.//} +MAKEFILE= ${FILESDIR}/Makefile.bsd +MAKE_ARGS+= TCL_VER=${TCL_VER} + +MANN= ${PORTNAME}.n + +post-install: + ####### + # This port installs two of the vendor-supplied sample programs, + # which have general-purpose utility. If you'd like to browse + # through other examples, do ``make patch'' and look inside the + # ${WRKSRC}/samples + ####### + +.include diff --git a/databases/sybtcl/distinfo b/databases/sybtcl/distinfo new file mode 100644 index 000000000000..e86809b64c1b --- /dev/null +++ b/databases/sybtcl/distinfo @@ -0,0 +1 @@ +MD5 (sybtcl-3.0rc2.tar.gz) = 1b357dd7b7081f8083b87849e8c9f4e3 diff --git a/databases/sybtcl/files/Makefile.bsd b/databases/sybtcl/files/Makefile.bsd new file mode 100644 index 000000000000..7c9564f9c5e5 --- /dev/null +++ b/databases/sybtcl/files/Makefile.bsd @@ -0,0 +1,45 @@ +# $FreeBSD$ + +.PATH: ${.CURDIR}/generic + +SRCS= sybtcl.c +LOCALBASE?= /usr/local +PREFIX?= ${LOCALBASE} +TCL_VER?= 8.4 +TCL_DVER= ${TCL_VER:S/.//} + +CFLAGS+= -I${LOCALBASE}/include -I${LOCALBASE}/include/tcl${TCL_VER} +LDADD= -L${LOCALBASE}/lib -lsybdb # -ltcl${TCL_DVER} + +SHLIB_NAME= libSybtcl.so.3 +LIBDIR= ${PREFIX}/lib +PKGDIR= ${LIBDIR}/Sybtcl +SCRIPTS= sp_who wisqlite + +all: ${SHLIB_NAME} pkgIndex.tcl ${SCRIPTS} + +pkgIndex.tcl: pkgIndex.tcl.in + echo 'package ifneeded Sybtcl 3.0 "load $$dir/../${SHLIB_NAME}; \ + set auto_index(getSignOn) \"source $$dir/sign_on.tcl\""' \ + > pkgIndex.tcl + +.for s in ${SCRIPTS} +$s: ${.CURDIR}/samples/$s + sed -e 's,#!/usr/local/bin/wishx,#!${LOCALBASE}/bin/wish${TCL_VER},'\ + -e 's,#!/usr/local/bin/wish8.0,#!${LOCALBASE}/bin/wish${TCL_VER},'\ + < ${.CURDIR}/samples/$s > $s +.endfor + +sp_who wisqlite: ${.CURDIR} + +${PKGDIR}: + mkdir -p ${PKGDIR} + +beforeinstall: ${PKGDIR} + ${BSD_INSTALL_DATA} pkgIndex.tcl ${.CURDIR}/samples/sign_on.tcl \ + ${PKGDIR} + ${BSD_INSTALL_SCRIPT} ${SCRIPTS} ${PREFIX}/bin/ + ${BSD_INSTALL_MAN} ${.CURDIR}/doc/sybtcl.man \ + ${LOCALBASE}/man/mann/sybtcl.n + +.include diff --git a/databases/sybtcl/files/patch-aa b/databases/sybtcl/files/patch-aa new file mode 100644 index 000000000000..fa393f6c5559 --- /dev/null +++ b/databases/sybtcl/files/patch-aa @@ -0,0 +1,105 @@ +--- generic/sybtcl.c Wed Aug 30 20:24:18 2000 ++++ generic/sybtcl.c Mon Mar 29 16:18:01 2004 +@@ -279,4 +279,12 @@ + #endif + ++#ifndef CS_INTERNAL ++#define CS_INTERNAL /* Not defined by FreeTDS */ ++#endif ++ ++#ifndef TDS_DEF_CHARSET ++#define TDS_DEF_CHARSET NULL /* Not defined by Sybase */ ++#endif ++ + typedef struct SybTclProcs { /* struct for handle entries */ + int in_use; /* if this entry is opened */ +@@ -393,5 +401,5 @@ + #else + +-extern void * malloc(); ++#include + + #endif +@@ -461,7 +469,9 @@ + Tcl_Interp *interp)); + ++#ifdef POLLED_EVENTS + static int dbEventProc _ANSI_ARGS_((Tcl_Event *evPtr, int flags)); + static void dbSetupProc _ANSI_ARGS_((ClientData cd_hand, int flags)); + static void dbCheckProc _ANSI_ARGS_((ClientData cd_hand, int flags)); ++#endif + void Sybtcl_Kill _ANSI_ARGS_((ClientData clientData)); + static int CS_INTERNAL syb_tcl_err_handler _ANSI_ARGS_(( +@@ -496,4 +506,5 @@ + + ++#ifdef POLLED_EVENTS /* { */ + /* + *---------------------------------------------------------------------- +@@ -566,5 +577,5 @@ + } + } +- ++#endif /* POLLED_EVENTS } */ + + +@@ -1669,6 +1680,8 @@ + + +-#ifdef DBVERSION_100 ++#ifdef SYBBOUNDARY + case SYBBOUNDARY: ++#endif ++#ifdef SYBSENSITIVITY + case SYBSENSITIVITY: + #endif +@@ -2556,5 +2569,7 @@ + + DBSETLUSER(login,Tcl_GetStringFromObj(objv[1],NULL)); +- DBSETLPWD(login, Tcl_GetStringFromObj(objv[2],NULL)); ++ server_str = Tcl_GetStringFromObj(objv[2],&len); ++ if (len > 0) ++ DBSETLPWD(login, server_str); + + /* check for server optional parameter */ +@@ -2594,8 +2609,8 @@ + DBSETLCHARSET(login, charset_str); + } else { +- DBSETLCHARSET(login, NULL); ++ DBSETLCHARSET(login, TDS_DEF_CHARSET); + } + } else { +- DBSETLCHARSET(login, NULL); ++ DBSETLCHARSET(login, TDS_DEF_CHARSET); + } + +@@ -2607,5 +2622,6 @@ + if (SybProcs[hand].dbproc == NULL) { + Sybtcl_AppendObjResult (interp, CMD_STR, +- ": sybconnect failed in dbopen", (char *) NULL); ++ ": sybconnect to ", server_str ? server_str : "(DEFAULT)", ++ " failed in dbopen", (char *) NULL); + return TCL_ERROR; + } +@@ -2909,5 +2925,5 @@ + if (SybProcs[hand].last_text != SybOptions[i].maxtext) { + SybProcs[hand].last_text = SybOptions[i].maxtext; +- sprintf(conv_buf,"%d",SybOptions[i].maxtext); ++ sprintf(conv_buf,"%ld",SybOptions[i].maxtext); + dbsetopt(SybProcs[hand].dbproc, DBTEXTSIZE, conv_buf, -1); + dbsqlexec(SybProcs[hand].dbproc); /* execute dbsetopt() */ +@@ -4190,5 +4206,5 @@ + int obj_parm; + int isvar = 0; +- Tcl_Channel fd; ++ Tcl_Channel fd = NULL; + #ifndef MAC_TCL + struct stat stat_buf; +@@ -4305,5 +4321,6 @@ + txtptr = dbtxptr(SybProcs[hand].dbproc,col); + if (txtptr == NULL) { +- Tcl_Close (NULL,fd); ++ if (fd != NULL) ++ Tcl_Close (NULL,fd); + Sybtcl_AppendObjResult (interp, CMD_STR, + ": dbtxptr failed ", (char *) NULL); diff --git a/databases/sybtcl/files/patch-man b/databases/sybtcl/files/patch-man new file mode 100644 index 000000000000..7a3f40b9289d --- /dev/null +++ b/databases/sybtcl/files/patch-man @@ -0,0 +1,78 @@ +The supplied man-page provides comprehensive documentation, but contains +an amazing amount of spelling typos. I ran it through ispell, but, quite +possibly, some remain. Please, let me know if you find something, I missed. + + -mi + +--- doc/sybtcl.man Thu Dec 28 18:25:29 2000 ++++ doc/sybtcl.man Mon Mar 29 17:28:33 2004 +@@ -9,3 +9,3 @@ + Sybase Open Client (a.k.a. DB-Library) library functions. +-Programmers using Sybtcl should be familar with basic concepts of ++Programmers using Sybtcl should be familiar with basic concepts of + DB-Library programming. +@@ -23,5 +23,5 @@ + value is passed to the server to display during a process list. +-If \fIifile\fR is specified, that file is used to resovle server addresses; ++If \fIifile\fR is specified, that file is used to resolve server addresses; + if not specified, the normal $SYBASE/interfaces file is used. +-If \fIcharset\fR is specified, the charset should reference a vaild ++If \fIcharset\fR is specified, the charset should reference a valid + character set available on your Sybase installation. +@@ -31,4 +31,4 @@ + \fILogin-name\fR and \fIpassword\fR are required parameters. All other +-parameters are optional postitional parameters. For example, to specify +-the \fIifile\fR paramater, \fIserver\fR and \fIappname\fR must ++parameters are optional positional parameters. For example, to specify ++the \fIifile\fR parameter, \fIserver\fR and \fIappname\fR must + also be specified. Optional parameters may be a null string, in which +@@ -141,3 +141,3 @@ + .I line +-The line numer of the procedure generating the message, if any. ++The line number of the procedure generating the message, if any. + .RE +@@ -177,3 +177,3 @@ + called to determine if result rows were generated. If \fB-async\fR is omitted, +-then sybsql will wait until the server has responed. ++then sybsql will wait until the server has responded. + Sybsql will return "REG_ROW" if +@@ -415,3 +415,3 @@ + be opened or a failure in internal DB-Library routines. Common failures +-are specifing \fB-nolog\fR when the database does not support nolog; ++are specifying \fB-nolog\fR when the database does not support nolog; + unable to access a valid text pointer +@@ -516,3 +516,3 @@ + The dateformat string can contain substitution values or literals. +-Substitions are made from the list below; other literals are copied ++Substitutions are made from the list below; other literals are copied + verbatim. The default value is null, which will format dates a default format. +@@ -603,3 +603,3 @@ + causes the polling loop to execute more frequently, which may cause +-higer CPU usage. ++higher CPU usage. + .sp +@@ -618,3 +618,3 @@ + indicates the handle of the last sybtcl command. Handle is set on every +-sybtcl command (execpt where an invalid handle is used.) ++sybtcl command (except where an invalid handle is used.) + .sp +@@ -706,3 +706,3 @@ + Since each sybtcl command +-may invoke several DB-Lib routines, there is a possiblity that ++may invoke several DB-Lib routines, there is a possibility that + several messages may be received from the server. Sybtcl will +@@ -714,3 +714,3 @@ + the message text associated with msgno. Since each sybtcl command +-may invoke several DB-Lib routines, there is a possiblity that ++may invoke several DB-Lib routines, there is a possibility that + several messages may be received from the server. Sybtcl will +@@ -718,3 +718,3 @@ + separating individual messages by newlines. +-Output from Transact-SQL PRINT statments are collected in msgtext. ++Output from Transact-SQL PRINT statements are collected in msgtext. + .TP +@@ -766,3 +766,3 @@ + values are: "system10" if linked with Sybase System 10 DB-Libs or higher, +-"ctcompt" if compiled with the CT-Lib compatiblity library. ++"ctcompt" if compiled with the CT-Lib compatibility library. + .sp diff --git a/databases/sybtcl/files/patch-sign_on b/databases/sybtcl/files/patch-sign_on new file mode 100644 index 000000000000..1dac4dd412a6 --- /dev/null +++ b/databases/sybtcl/files/patch-sign_on @@ -0,0 +1,16 @@ +--- samples/sign_on.tcl Fri Jun 2 02:35:54 2000 ++++ samples/sign_on.tcl Mon Mar 29 18:16:50 2004 +@@ -19,5 +19,5 @@ + #upvar 1 $p password + #upvar 1 $s server +- global env mainwindow ++ global env mainwindow tcl_platform + + # get valid servers from interfaces file +@@ -91,5 +91,5 @@ + frame $mainwindow.s.p + entry $mainwindow.s.p.pw -relief sunken -width 10 \ +- -font -*-symbol-*-r-*--20-*-*-*-*-*-*-* ++ -show * -exportselection false + label $mainwindow.s.p.p -text " Password" -anchor e + diff --git a/databases/sybtcl/files/patch-sp_who b/databases/sybtcl/files/patch-sp_who new file mode 100644 index 000000000000..d8605e75eba6 --- /dev/null +++ b/databases/sybtcl/files/patch-sp_who @@ -0,0 +1,15 @@ +--- samples/sp_who Fri Jun 2 02:35:54 2000 ++++ samples/sp_who Mon Mar 29 18:10:59 2004 +@@ -22,12 +22,4 @@ + package require Sybtcl + +-if {[file isfile sign_on.tcl]} { +- source sign_on.tcl +-} elseif {[file isfile [file join [file dirname [info script]] sign_on.tcl]]} { +- source [file join [file dirname [info script]] sign_on.tcl] +-} elseif {[file isfile [file join [file dirname [info nameofexecutable]] sign_on.tcl]]} { +- source [file join [file dirname [info nameofexecutable]] sign_on.tcl] +-} +- + global server interval now intervalid env secorsecs user password sybhandle + global opened WhoIsThere order_by_orders order_by order_by_stmnt order_by_text diff --git a/databases/sybtcl/pkg-descr b/databases/sybtcl/pkg-descr new file mode 100644 index 000000000000..5b8b5aeb8dc3 --- /dev/null +++ b/databases/sybtcl/pkg-descr @@ -0,0 +1,6 @@ +This is Sybtcl -- a dynamicly loadable TCL extension, which provides +your interpreter with connectivity to a Sybase server. Althghough it was +written to work with Sybase's own client libraries (not available for +FreeBSD), this port patches it enough to make it work with FreeTDS. + +WWW: http://sybtcl.sourceforge.net/ diff --git a/databases/sybtcl/pkg-plist b/databases/sybtcl/pkg-plist new file mode 100644 index 000000000000..faddcde3b85b --- /dev/null +++ b/databases/sybtcl/pkg-plist @@ -0,0 +1,6 @@ +bin/sp_who +bin/wisqlite +lib/libSybtcl.so.3.0 +lib/Sybtcl/pkgIndex.tcl +lib/Sybtcl/sign_on.tcl +@dirrm lib/Sybtcl