svn commit: r565518 - in head/lang/siod: . files
Mikhail Teterin
mi at FreeBSD.org
Wed Feb 17 16:39:28 UTC 2021
Author: mi
Date: Wed Feb 17 16:39:27 2021
New Revision: 565518
URL: https://svnweb.freebsd.org/changeset/ports/565518
Log:
Add the (optional) support for the Oracle-module. Untested beyond
"it loads", this is only available on i386 -- because the port of
databases/oracle8-client is i386 only.
Worse, because the oracle8-client only installs a static library
-- hacked from Oracle Linux binary -- further (minor) hackery is
required to link the shared sql_oracle.so with it...
Sponsored by: United Marsupials
Added:
head/lang/siod/files/patch-sql_oracle (contents, props changed)
Modified:
head/lang/siod/Makefile
head/lang/siod/files/BSDmakefile.module
head/lang/siod/pkg-plist
Modified: head/lang/siod/Makefile
==============================================================================
--- head/lang/siod/Makefile Wed Feb 17 16:35:44 2021 (r565517)
+++ head/lang/siod/Makefile Wed Feb 17 16:39:27 2021 (r565518)
@@ -19,6 +19,7 @@ USE_LDCONFIG= ${PREFIX}/lib ${PREFIX}/lib/siod
DOS2UNIX_FILES= sql_oracle.c ss.c
OPTIONS_DEFINE= SQL_SYBASE GD NDBM REGEX SS DOCS
+OPTIONS_DEFINE_i386=SQL_ORACLE # oracle-client port only available for i386
OPTIONS_DEFAULT=NDBM REGEX SS
SQL_SYBASE_DESC=Build Sybase (and MS-SQL) client-module (using FreeTDS)
SS_DESC= Sockets support - required for any network programs
@@ -38,6 +39,7 @@ SQL_SYBASE_LIB_DEPENDS= libct.so:databases/freetds # O
GD_LIB_DEPENDS= libgd.so:graphics/gd # Or ukrainian/gd
REGEX_LIB_DEPENDS= libgnuregex.so:devel/libgnuregex
OPTIONS_SUB= yes
+SQL_ORACLE_BUILD_DEPENDS=${LOCALBASE}/oracle8-client/lib/libclntsh.a:databases/oracle8-client
.if "${PREFIX}" != "/usr/local"
post-patch:
Modified: head/lang/siod/files/BSDmakefile.module
==============================================================================
--- head/lang/siod/files/BSDmakefile.module Wed Feb 17 16:35:44 2021 (r565517)
+++ head/lang/siod/files/BSDmakefile.module Wed Feb 17 16:39:27 2021 (r565518)
@@ -10,9 +10,14 @@ regex_CFLAGS= -isystem ${LOCALBASE}/include
regex_LDADD= -L${LOCALBASE}/lib -lgnuregex
sql_sybase_CFLAGS=-isystem ${LOCALBASE}/include
sql_sybase_LDADD=-L${LOCALBASE}/lib -lct
+sql_oracle_CFLAGS=-isystem ${LOCALBASE}/oracle8-client/rdbms/demo
+sql_oracle_LDADD=-L${LOCALBASE}/oracle8-client/lib -lclntsh
CFLAGS+= -DHAVE_SYS_PARAM_H ${%%MODULE%%_CFLAGS}
LDADD= ${%%MODULE%%_LDADD}
+.if "%%MODULE%%" == "sql_oracle"
+LD_FATAL_WARNINGS=no # Oracle client 8 only provides static library
+.endif
SRCS= %%MODULE%%.c
Added: head/lang/siod/files/patch-sql_oracle
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/lang/siod/files/patch-sql_oracle Wed Feb 17 16:39:27 2021 (r565518)
@@ -0,0 +1,299 @@
+--- sql_oracle.c 2014-03-25 04:10:42.000000000 -0400
++++ sql_oracle.c 2021-02-17 11:09:57.584010000 -0500
+@@ -48,4 +48,5 @@
+ #include <math.h>
+ #include <stdarg.h>
++#include <ociapr.h>
+
+ #include "siod.h"
+@@ -68,32 +69,4 @@
+ */
+
+-struct lda_def
+-{short v2_rc;
+- unsigned char fill1[10];
+- unsigned short rc;
+- unsigned char fill2[19];
+- unsigned int ose;
+- unsigned char chk;
+- unsigned char sysparm[26];};
+-
+-struct cda_def
+-{short v2_rc;
+- short ft;
+- unsigned long rpc;
+- short peo;
+- unsigned char fc;
+- unsigned char fill1;
+- unsigned short rc;
+- unsigned char wrn;
+- unsigned char flg;
+- unsigned int cn;
+- unsigned char rid[13];
+- unsigned int ose;
+- unsigned char chk;
+- unsigned char sysparm[26];};
+-
+-struct hda_def
+-{char fill[256];};
+-
+ #define ORACLE_ETYPE_CHAR 1
+ #define ORACLE_ITYPE_NUMBER 2
+@@ -130,6 +103,6 @@
+ in an association data structure returned by l_orlon */
+
+-static struct lda_def lda;
+-static struct hda_def hda;
++static Lda_Def lda; /* As shown in Oracle8 client demos */
++static ub4 hda[HDA_SIZE/sizeof(ub4)];
+
+ static long orlon_ok = 0;
+@@ -164,5 +137,5 @@
+ struct select *selects;};
+
+-static char *errmsg(long code)
++static const char *errmsg(long code)
+ {char *ptr;
+ if (errmsg_str0 == NULL)
+@@ -170,20 +143,19 @@
+ memset(errmsg_str0,0,ORACLE_MAX_STRING+1);}
+ oerhms(&lda,code,errmsg_str0,ORACLE_MAX_STRING);
+- if (ptr = strchr(errmsg_str0,'\n')) *ptr = 0;
++ if ((ptr = strchr(errmsg_str0,'\n')) == NULL) *ptr = '\0';
+ return(errmsg_str0);}
+
+-char *cda_errmsg(struct cda_def *cur)
++static const char *cda_errmsg(const struct cda_def *cur)
+ {return(errmsg(cur->rc));}
+
+-char *lda_errmsg()
++static const char *lda_errmsg()
+ {return(errmsg(lda.rc));}
+
+-LISP ferr(LISP obj,char *format, ...)
++static void ferr(LISP obj, const char *format, ...)
+ {va_list restargs;
+ if (errmsg_str1 == NULL)
+- {errmsg_str1 = (char *) malloc((ORACLE_MAX_STRING*3)+1);
+- memset(errmsg_str1,0,(ORACLE_MAX_STRING*3)+1);}
++ {errmsg_str1 = malloc((ORACLE_MAX_STRING*3)+1);}
+ va_start(restargs,format);
+- vsprintf(errmsg_str1,format,restargs);
++ vsnprintf(errmsg_str1, ORACLE_MAX_STRING * 3 + 1, format,restargs);
+ va_end(restargs);
+ err(errmsg_str1,obj);}
+@@ -201,5 +173,5 @@
+ return(s);}
+
+-struct cda_def *allocate_cursor(void)
++static struct cda_def *allocate_cursor(void)
+ {struct cda_def *cur;
+ unsigned short rc;
+@@ -213,5 +185,5 @@
+ return(cur);}
+
+-void free_cursor(struct cda_def *cur)
++static void free_cursor(struct cda_def *cur)
+ {long result;
+ unsigned short rc;
+@@ -221,9 +193,9 @@
+ if (result) ferr(NIL,"oclose: %s",errmsg(rc));}
+
+-LISP l_orlon(LISP username,LISP password)
++static LISP l_orlon(LISP username, LISP password)
+ {long retval,flag;
+- char *c_username,*c_password;
+- c_username = get_c_string(username);
+- c_password = NNULLP(password) ? get_c_string(password) : NULL;
++ char *c_username, *c_password; /* Cannot pass const char* to orlon() */
++ c_username = get_string_data(username);
++ c_password = NNULLP(password) ? get_string_data(password) : NULL;
+ if (orlon_ok)
+ /* calling orlon twice will corrupt your process badly. */
+@@ -231,5 +203,5 @@
+ else
+ {flag = no_interrupt(1);
+- retval = orlon(&lda,&hda,
++ retval = orlon(&lda, (void *)&hda,
+ c_username,strlen(c_username),
+ c_password,(c_password) ? strlen(c_password) : -1,
+@@ -242,5 +214,5 @@
+ return(NIL);}
+
+-LISP l_ologof(void)
++static LISP l_ologof(void)
+ {long flag;
+ flag = no_interrupt(1);
+@@ -254,25 +226,25 @@
+ return(NIL);}
+
+-void freeloc(void ** x)
++static void freeloc(void ** x)
+ {if (*x)
+ {free(*x);
+ *x = NULL;}}
+
+-void release_statement(struct cstatement *c)
++static void release_statement(struct cstatement *c)
+ {long j;
+ if (c->params)
+ {for(j = 1;j <= c->nparams;++j)
+- freeloc(&c->params[j-1].buf);
+- freeloc(&c->params);}
++ freeloc((void **)&c->params[j-1].buf);
++ freeloc((void **)&c->params);}
+ if (c->selects)
+ {for(j = 1; j <= c->nselects; ++j)
+- {freeloc(&c->selects[j-1].colnam);
+- freeloc(&c->selects[j-1].buf);}
+- freeloc(&c->selects);}
++ {freeloc((void **)&c->selects[j-1].colnam);
++ freeloc((void **)&c->selects[j-1].buf);}
++ freeloc((void **)&c->selects);}
+ if (c->cursor)
+ free_cursor(c->cursor);
+ c->cursor = NULL;}
+
+-void prepare_statement(char *sql_str,struct cstatement *c)
++static void prepare_statement(char *sql_str,struct cstatement *c)
+ /* assumptions:
+ nparams gives range of params from :1 to :nparams
+@@ -282,5 +254,5 @@
+ short colnamlen;
+ char colnam[ORACLE_MAX_STRING+1];
+- char *err;
++ const char *err;
+ c->cursor = allocate_cursor();
+ if (osql3(c->cursor,sql_str,-1))
+@@ -348,6 +320,6 @@
+ c->selects[j-1].etype = ORACLE_ETYPE_FLOAT;
+ c->selects[j-1].buflen = sizeof(double);
+- c->selects[j-1].buf = (double *) malloc(c->selects[j-1].buflen);
+- *((double *)c->selects[j-1].buf) = 0.0;
++ c->selects[j-1].buf = malloc(c->selects[j-1].buflen);
++ *((double *)(void *)c->selects[j-1].buf) = 0.0;
+ break;
+ case ORACLE_ETYPE_DATE:
+@@ -355,10 +327,10 @@
+ c->selects[j-1].etype = ORACLE_ETYPE_DATE;
+ c->selects[j-1].buflen = sizeof(struct oracle_date);
+- c->selects[j-1].buf = (char *) malloc(c->selects[j-1].buflen);
++ c->selects[j-1].buf = malloc(c->selects[j-1].buflen);
+ break;
+ default:
+ c->selects[j-1].etype = ORACLE_ETYPE_STRING;
+ c->selects[j-1].buflen = ORACLE_MAX_STRING;
+- c->selects[j-1].buf = (char *) malloc(c->selects[j-1].buflen+1);
++ c->selects[j-1].buf = malloc(c->selects[j-1].buflen+1);
+ c->selects[j-1].buf[0] = 0;}
+ if (odefin(c->cursor,j,
+@@ -379,5 +351,5 @@
+ c->selects = NULL;}
+
+-LISP oracle_sql_prepare(LISP str)
++static LISP oracle_sql_prepare(LISP str)
+ {long iflag;
+ LISP result;
+@@ -385,8 +357,8 @@
+ iflag = no_interrupt(1);
+ result = extcons(sizeof(struct cstatement),extra_tc_statement);
+- c = (struct cstatement *) result->storage_as.string.data;
++ c = (struct cstatement *)(void *)result->storage_as.string.data;
+ c->nparams = 0;
+ c->nselects = -1;
+- prepare_statement(get_c_string(str),c);
++ prepare_statement(get_string_data(str), c);
+ no_interrupt(iflag);
+ return(result);}
+@@ -397,10 +369,10 @@
+ (st->storage_as.string.dim != extra_tc_statement))
+ err("not a statement",st);
+- c = (struct cstatement *)st->storage_as.string.data;
++ c = (struct cstatement *)(void *)st->storage_as.string.data;
+ if (!c->cursor)
+ err("statement has been released",st);
+ return(c);}
+
+-LISP oracle_sql_release(LISP s)
++static LISP oracle_sql_release(LISP s)
+ {long iflag;
+ iflag = no_interrupt(1);
+@@ -409,5 +381,5 @@
+ return(NIL);}
+
+-LISP oracle_execute(LISP s)
++static LISP oracle_execute(LISP s)
+ {long iflag;
+ struct cstatement *c;
+@@ -419,8 +391,8 @@
+ return(NIL);}
+
+-LISP oracle_nselects(LISP s)
++static LISP oracle_nselects(LISP s)
+ {return(flocons((get_cstatement(s))->nselects));}
+
+-LISP oracle_select_column_name(LISP s,LISP n)
++static LISP oracle_select_column_name(LISP s,LISP n)
+ {long j;
+ struct cstatement *c;
+@@ -431,5 +403,5 @@
+ return(rintern(c->selects[j].colnam));}
+
+-char *oracle_date_to_string(struct oracle_date *d)
++static const char *oracle_date_to_string(const struct oracle_date *d)
+ /* make it look like the string returned by RDB SQL Services */
+ {static char buff[100];
+@@ -440,9 +412,9 @@
+ return(buff);}
+
+-LISP oracle_select_column_value(LISP s,LISP n)
++static LISP oracle_select_column_value(LISP s,LISP n)
+ {long j;
+ struct cstatement *c;
+ struct select *sel;
+- char *str;
++ const char *str;
+ j = get_c_long(n);
+ c = get_cstatement(s);
+@@ -454,7 +426,7 @@
+ switch(sel->etype)
+ {case ORACLE_ETYPE_FLOAT:
+- return(flocons(*((double *)sel->buf)));
++ return(flocons(*((double *)(void *)sel->buf)));
+ case ORACLE_ETYPE_DATE:
+- str = oracle_date_to_string(sel->buf);
++ str = oracle_date_to_string((void *)sel->buf);
+ return(strcons(strlen(str),str));
+ case ORACLE_ETYPE_STRING:
+@@ -463,5 +435,5 @@
+ return(errswitch());}}
+
+-LISP oracle_fetch(LISP s)
++static LISP oracle_fetch(LISP s)
+ {long iflag;
+ struct cstatement *c;
+@@ -478,5 +450,5 @@
+ static void extra_gc_free(LISP ptr)
+ {struct cstatement *c;
+- c = (struct cstatement *) ptr->storage_as.string.data;
++ c = (struct cstatement *)(void *)ptr->storage_as.string.data;
+ release_statement(c);
+ free(c);}
+@@ -487,8 +459,8 @@
+ switch(ptr->storage_as.string.dim)
+ {case extra_tc_statement:
+- c = (struct cstatement *) ptr->storage_as.string.data;
++ c = (struct cstatement *)(void *)ptr->storage_as.string.data;
+ if (c->cursor)
+ sprintf(buff,"#{SQL STATEMENT %p cursor %d}",
+- c,c->cursor->cn);
++ c,c->cursor->rcs3 /* Is rcs3 really the cursor ID? XXX */);
+ else
+ sprintf(buff,"#{SQL STATEMENT %p released}",c);
+@@ -498,4 +470,6 @@
+ errswitch();}}
+
++void init_sql_oracle(void); /* Our sole exported symbol */
++
+ void init_sql_oracle(void)
+ {long j;
Modified: head/lang/siod/pkg-plist
==============================================================================
--- head/lang/siod/pkg-plist Wed Feb 17 16:35:44 2021 (r565517)
+++ head/lang/siod/pkg-plist Wed Feb 17 16:39:27 2021 (r565518)
@@ -37,6 +37,7 @@ lib/siod/sql_msql.scm
%%NDBM%%lib/siod/ndbm.so
%%SS%%lib/siod/ss.so
lib/siod/tar.so
+%%SQL_ORACLE%%lib/siod/sql_oracle.so
%%SQL_SYBASE%%lib/siod/sql_sybase.so
%%REGEX%%lib/siod/regex.so
lib/siod/parser_pratt.so
More information about the svn-ports-all
mailing list