Skip to content

Remove driver specific support from ODBC #15727

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 7 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
296 changes: 1 addition & 295 deletions ext/odbc/config.m4
Original file line number Diff line number Diff line change
Expand Up @@ -7,101 +7,6 @@ AC_DEFUN([PHP_ODBC_CHECK_HEADER],
[AS_IF([test ! -f "$ODBC_INCDIR/$1"],
[AC_MSG_ERROR([ODBC header file '$ODBC_INCDIR/$1' not found!])])])

dnl
dnl PHP_ODBC_FIND_SOLID_LIBS(libdir)
dnl
dnl Figure out which library file to link with for the Solid support.
dnl
AC_DEFUN([PHP_ODBC_FIND_SOLID_LIBS],[
AC_MSG_CHECKING([Solid library file])
ac_solid_uname_r=$(uname -r 2>/dev/null)
ac_solid_uname_s=$(uname -s 2>/dev/null)
case $ac_solid_uname_s in
AIX) ac_solid_os=a3x;; # a4x for AIX4/ Solid 2.3/3.0 only
HP-UX) ac_solid_os=h9x;; # h1x for hpux11, h0x for hpux10
Linux)
if ldd -v /bin/sh | grep GLIBC > /dev/null; then
ac_solid_os=l2x
else
ac_solid_os=lux
fi
AC_DEFINE([SS_LINUX], [1],
[Define to 1 to be able to use the obsolete <sqlunix.h> header file on
some Linux systems.])
;;
SunOS)
ac_solid_os=ssx;; # should we deal with SunOS 4?
FreeBSD)
if test $(expr $ac_solid_uname_r : '\(.\)') -gt "2"; then
ac_solid_os=fex
else
ac_solid_os=fbx
fi
AC_DEFINE([SS_FBX], [1],
[Define to 1 to be able to use the wchar defs in the obsolete
<sqlunix.h> header file on some FreeBSD systems.])
;;
esac

if test -f $1/soc${ac_solid_os}35.a; then
ac_solid_version=35
ac_solid_prefix=soc
elif test -f $1/scl${ac_solid_os}30.a; then
ac_solid_version=30
ac_solid_prefix=scl
elif test -f $1/scl${ac_solid_os}23.a; then
ac_solid_version=23
ac_solid_prefix=scl
fi

dnl Check for the library files, and setup the ODBC_LIBS path.
if test ! -f $1/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.so && \
test ! -f $1/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.a; then
dnl we have an error and should bail out, as we can't find the libs!
echo ""
echo "*********************************************************************"
echo "* Unable to locate $1/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.so or $1/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.a"
echo "* Please correct this by creating the following links and reconfiguring:"
echo "* $1/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.a -> $1/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.a"
echo "* $1/${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.so -> $1/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.so"
echo "*********************************************************************"
else
ODBC_LFLAGS=-L$1
ODBC_LIBS=-l${ac_solid_prefix}${ac_solid_os}${ac_solid_version}
fi

AC_MSG_RESULT([$(echo $ODBC_LIBS | $SED -e 's!.*/!!')])
])

dnl
dnl PHP_ODBC_FIND_EMPRESS_LIBS(libdir)
dnl
dnl Figure out which library file to link with for the Empress support.
dnl
AC_DEFUN([PHP_ODBC_FIND_EMPRESS_LIBS],[
AC_MSG_CHECKING([Empress library file])
ODBC_LIBS=$(echo $1/libempodbccl.so | cut -d' ' -f1)
if test ! -f $ODBC_LIBS; then
ODBC_LIBS=$(echo $1/libempodbccl.so | cut -d' ' -f1)
fi
AC_MSG_RESULT([$(echo $ODBC_LIBS | $SED -e 's!.*/!!')])
])

dnl
dnl PHP_ODBC_FIND_EMPRESS_BCS_LIBS(libdir)
dnl
dnl Figure out which library file to link with for the Empress local access
dnl support.
dnl
AC_DEFUN([PHP_ODBC_FIND_EMPRESS_BCS_LIBS],[
AC_MSG_CHECKING([Empress local access library file])
ODBCBCS_LIBS=$(echo $1/libempodbcbcs.a | cut -d' ' -f1)
if test ! -f $ODBCBCS_LIBS; then
ODBCBCS_LIBS=$(echo $1/libempodbcbcs.a | cut -d' ' -f1)
fi
AC_MSG_RESULT([$(echo $ODBCBCS_LIBS | $SED -e 's!.*/!!')])
])

dnl
dnl configure options
dnl
Expand All @@ -113,73 +18,6 @@ PHP_ARG_WITH([odbcver],,
be defined.])],
[0x0350])

AS_VAR_IF([ODBC_TYPE],, [
PHP_ARG_WITH([adabas],
[for Adabas support],
[AS_HELP_STRING([[--with-adabas[=DIR]]],
[Include Adabas D support [/usr/local]])])

AS_VAR_IF([PHP_ADABAS], [no], [], [
AS_VAR_IF([PHP_ADABAS], [yes], [PHP_ADABAS=/usr/local])
PHP_ADD_INCLUDE([$PHP_ADABAS/incl])
PHP_ADD_LIBPATH([$PHP_ADABAS/$PHP_LIBDIR])
ODBC_OBJS="$PHP_ADABAS/$PHP_LIBDIR/odbclib.a"
ODBC_LIB="$abs_builddir/ext/odbc/libodbc_adabas.a"
$srcdir/build/shtool mkdir -f -p ext/odbc
rm -f "$ODBC_LIB"
cp "$ODBC_OBJS" "$ODBC_LIB"
PHP_ADD_LIBRARY([sqlptc])
PHP_ADD_LIBRARY([sqlrte])
PHP_ADD_LIBRARY_WITH_PATH([odbc_adabas], [$abs_builddir/ext/odbc])
ODBC_TYPE=adabas
ODBC_INCDIR=$PHP_ADABAS/incl
PHP_ODBC_CHECK_HEADER([sqlext.h])
AC_DEFINE([HAVE_ADABAS], [1],
[Define to 1 if the odbc extension uses the Adabas D.])
])
])

AS_VAR_IF([ODBC_TYPE],, [
PHP_ARG_WITH([sapdb],
[for SAP DB support],
[AS_HELP_STRING([[--with-sapdb[=DIR]]],
[Include SAP DB support [/usr/local]])])

AS_VAR_IF([PHP_SAPDB], [no], [], [
AS_VAR_IF([PHP_SAPDB], [yes], [PHP_SAPDB=/usr/local])
PHP_ADD_INCLUDE([$PHP_SAPDB/incl])
PHP_ADD_LIBPATH([$PHP_SAPDB/$PHP_LIBDIR])
PHP_ADD_LIBRARY([sqlod])
ODBC_TYPE=sapdb
AC_DEFINE([HAVE_SAPDB], [1],
[Define to 1 if the odbc extension uses the SAP DB.])
])
])

AS_VAR_IF([ODBC_TYPE],, [
PHP_ARG_WITH([solid],
[for Solid support],
[AS_HELP_STRING([[--with-solid[=DIR]]],
[Include Solid support [/usr/local/solid]])])

AS_VAR_IF([PHP_SOLID], [no], [], [
AS_VAR_IF([PHP_SOLID], [yes], [PHP_SOLID=/usr/local/solid])
ODBC_INCDIR=$PHP_SOLID/include
ODBC_LIBDIR=$PHP_SOLID/$PHP_LIBDIR
ODBC_CFLAGS=-I$ODBC_INCDIR
ODBC_TYPE=solid
if test -f $ODBC_LIBDIR/soc*35.a; then
AC_DEFINE([HAVE_SOLID_35], [1], [Define to 1 if Solid DB 3.5 is used.])
elif test -f $ODBC_LIBDIR/scl*30.a; then
AC_DEFINE([HAVE_SOLID_30], [1], [Define to 1 if Solid DB 3.0 is used.])
elif test -f $ODBC_LIBDIR/scl*23.a; then
AC_DEFINE([HAVE_SOLID], [1],
[Define to 1 if the odbc extension uses the Solid DB.])
fi
PHP_ODBC_FIND_SOLID_LIBS([$ODBC_LIBDIR])
])
])

AS_VAR_IF([ODBC_TYPE],, [
PHP_ARG_WITH([ibm-db2],
[for IBM DB2 support],
Expand Down Expand Up @@ -214,70 +52,6 @@ PHP configure:
])
])

AS_VAR_IF([ODBC_TYPE],, [
PHP_ARG_WITH([empress],
[for Empress support],
[AS_HELP_STRING([[--with-empress[=DIR]]],
[Include Empress support $EMPRESSPATH (Empress Version >= 8.60
required)])])

AS_VAR_IF([PHP_EMPRESS], [no], [], [
AS_VAR_IF([PHP_EMPRESS], [yes], [
ODBC_INCDIR=$EMPRESSPATH/include/odbc
ODBC_LIBDIR=$EMPRESSPATH/shlib
], [
ODBC_INCDIR=$PHP_EMPRESS/include/odbc
ODBC_LIBDIR=$PHP_EMPRESS/shlib
])
ODBC_CFLAGS=-I$ODBC_INCDIR
ODBC_LFLAGS=-L$ODBC_LIBDIR
ODBC_TYPE=empress
AC_DEFINE([HAVE_EMPRESS], [1],
[Define to 1 if the odbc extension uses the Empress.])
PHP_ODBC_FIND_EMPRESS_LIBS([$ODBC_LIBDIR])
])
])

AS_VAR_IF([ODBC_TYPE],, [
PHP_ARG_WITH([empress-bcs],
[for Empress local access support],
[AS_HELP_STRING([[--with-empress-bcs[=DIR]]],
[Include Empress Local Access support $EMPRESSPATH (Empress Version >=
8.60 required)])])

AS_VAR_IF([PHP_EMPRESS_BCS], [no], [], [
AS_VAR_IF([PHP_EMPRESS_BCS], [yes], [
ODBC_INCDIR=$EMPRESSPATH/include/odbc
ODBC_LIBDIR=$EMPRESSPATH/shlib
], [
ODBC_INCDIR=$PHP_EMPRESS_BCS/include/odbc
ODBC_LIBDIR=$PHP_EMPRESS_BCS/shlib
])
CC="empocc -bcs";export CC;
LD="empocc -bcs";export LD;
ODBC_CFLAGS=-I$ODBC_INCDIR
ODBC_LFLAGS=-L$ODBC_LIBDIR
LIST=$(empocc -listlines -bcs -o a a.c)

NEWLIST=
for I in $LIST
do
case $I in
$EMPRESSPATH/odbccl/lib/* | \
$EMPRESSPATH/rdbms/lib/* | \
$EMPRESSPATH/common/lib/*)
NEWLIST="$NEWLIST $I"
;;
esac
done
ODBC_LIBS="-lempphpbcs -lms -lmscfg -lbasic -lbasic_os -lnlscstab -lnlsmsgtab -lm -ldl -lcrypt"
ODBC_TYPE=empress-bcs
AC_DEFINE([HAVE_EMPRESS], [1],
[Define to 1 if the odbc extension uses the Empress.])
PHP_ODBC_FIND_EMPRESS_BCS_LIBS([$ODBC_LIBDIR])
])
])

AS_VAR_IF([ODBC_TYPE],, [
PHP_ARG_WITH([custom-odbc],
[for a custom ODBC support],
Expand Down Expand Up @@ -317,25 +91,6 @@ PHP_ARG_WITH([iodbc],
])
])

AS_VAR_IF([ODBC_TYPE],, [
PHP_ARG_WITH([esoob],
[for Easysoft ODBC-ODBC Bridge support],
[AS_HELP_STRING([[--with-esoob[=DIR]]],
[Include Easysoft OOB support [/usr/local/easysoft/oob/client]])])

AS_VAR_IF([PHP_ESOOB], [no], [], [
AS_VAR_IF([PHP_ESOOB], [yes], [PHP_ESOOB=/usr/local/easysoft/oob/client])
ODBC_INCDIR=$PHP_ESOOB/include
ODBC_LIBDIR=$PHP_ESOOB/$PHP_LIBDIR
ODBC_LFLAGS=-L$ODBC_LIBDIR
ODBC_CFLAGS=-I$ODBC_INCDIR
ODBC_LIBS=-lesoobclient
ODBC_TYPE=esoob
AC_DEFINE([HAVE_ESOOB], [1],
[Define to 1 if the odbc extension uses the Easysoft OOB.])
])
])

AS_VAR_IF([ODBC_TYPE],, [
PHP_ARG_WITH([unixODBC],
[whether to build with unixODBC support],
Expand Down Expand Up @@ -364,49 +119,6 @@ PHP_ARG_WITH([unixODBC],
])
])

AS_VAR_IF([ODBC_TYPE],, [
PHP_ARG_WITH([dbmaker],
[for DBMaker support],
[AS_HELP_STRING([[--with-dbmaker[=DIR]]],
[Include DBMaker support])])

AS_VAR_IF([PHP_DBMAKER], [no], [], [
AS_VAR_IF([PHP_DBMAKER], [yes], [
dnl Find dbmaker home directory
DBMAKER_HOME=$(grep "^dbmaker:" /etc/passwd | $AWK -F: '{print $6}')

dnl check DBMaker version (from 5.0 to 2.0)
DBMAKER_VERSION=5.0

while test ! -d $DBMAKER_HOME/$DBMAKER_VERSION && test "$DBMAKER_VERSION" != "2.9"; do
DM_VER=$(echo $DBMAKER_VERSION | $SED -e 's/\.//' | $AWK '{ print $1-1;}')
MAJOR_V=$(echo $DM_VER | $AWK '{ print $1/10; }' | $AWK -F. '{ print $1; }')
MINOR_V=$(echo $DM_VER | $AWK '{ print $1%10; }')
DBMAKER_VERSION=$MAJOR_V.$MINOR_V
done

AS_VAR_IF([DBMAKER_VERSION], [2.9],
[PHP_DBMAKER=$DBMAKER_HOME],
[PHP_DBMAKER=$DBMAKER_HOME/$DBMAKER_VERSION])
])

ODBC_INCDIR=$PHP_DBMAKER/include
ODBC_LIBDIR=$PHP_DBMAKER/$PHP_LIBDIR
ODBC_CFLAGS=-I$ODBC_INCDIR
ODBC_LFLAGS=-L$ODBC_LIBDIR
ODBC_LIBS="-ldmapic -lc"
ODBC_TYPE=dbmaker

AC_DEFINE([HAVE_DBMAKER], [1],
[Define to 1 if the odbc extension uses the DBMaker.])

AS_VAR_IF([ext_shared], [yes], [ODBC_LIBS="-ldmapic -lc -lm"], [
PHP_ADD_LIBRARY_WITH_PATH([dmapic], [$ODBC_LIBDIR])
PHP_ADD_INCLUDE([$ODBC_INCDIR])
])
])
])

AH_TEMPLATE([ODBCVER], [The highest supported ODBC version.])
AS_VAR_IF([PHP_ODBCVER], [no],
[AC_DEFINE([ODBCVER], [0x0350])],
Expand All @@ -415,13 +127,7 @@ AS_VAR_IF([PHP_ODBCVER], [no],

dnl Extension setup
if test -n "$ODBC_TYPE"; then
AS_VAR_IF([ODBC_TYPE], [dbmaker],, [
PHP_EVAL_LIBLINE([$ODBC_LFLAGS $ODBC_LIBS], [ODBC_SHARED_LIBADD])
AS_VAR_IF([ODBC_TYPE], [solid],,
[AC_DEFINE([HAVE_SQLDATASOURCES], [1],
[Define to 1 if ODBC library has 'SQLDataSources', as a function or
macro.])])
])
PHP_EVAL_LIBLINE([$ODBC_LFLAGS $ODBC_LIBS], [ODBC_SHARED_LIBADD])

AC_DEFINE([HAVE_UODBC], [1],
[Define to 1 if the PHP extension 'odbc' is available.])
Expand Down
1 change: 0 additions & 1 deletion ext/odbc/config.w32
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ if (PHP_ODBC == "yes") {
&& CHECK_HEADER_ADD_INCLUDE("sqlext.h", "CFLAGS_ODBC")) {
EXTENSION("odbc", "php_odbc.c odbc_utils.c", PHP_ODBC_SHARED, "/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1");
AC_DEFINE("HAVE_UODBC", 1, "Define to 1 if the PHP extension 'odbc' is available.");
AC_DEFINE("HAVE_SQLDATASOURCES", 1, "Define to 1 if ODBC library has 'SQLDataSources', as a function or macro.");
if ("no" == PHP_ODBCVER) {
AC_DEFINE("ODBCVER", "0x0350", "The highest supported ODBC version.", false);
} else if ("0" != PHP_ODBCVER) {
Expand Down
8 changes: 0 additions & 8 deletions ext/odbc/odbc.stub.php
Original file line number Diff line number Diff line change
Expand Up @@ -341,9 +341,7 @@ function odbc_execute(Odbc\Result $statement, array $params = []): bool {}

function odbc_cursor(Odbc\Result $statement): string|false {}

#ifdef HAVE_SQLDATASOURCES
function odbc_data_source(Odbc\Connection $odbc, int $fetch_type): array|null|false {}
#endif

function odbc_exec(Odbc\Connection $odbc, string $query): Odbc\Result|false {}

Expand Down Expand Up @@ -381,9 +379,7 @@ function odbc_close(Odbc\Connection $odbc): void {}

function odbc_num_rows(Odbc\Result $statement): int {}

#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30)
function odbc_next_result(Odbc\Result $statement): bool {}
#endif

function odbc_num_fields(Odbc\Result $statement): int {}

Expand Down Expand Up @@ -420,23 +416,19 @@ function odbc_gettypeinfo(Odbc\Connection $odbc, int $data_type = 0): Odbc\Resul

function odbc_primarykeys(Odbc\Connection $odbc, ?string $catalog, string $schema, string $table): Odbc\Result|false {}

#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35)
function odbc_procedurecolumns(Odbc\Connection $odbc, ?string $catalog = null, ?string $schema = null, ?string $procedure = null, ?string $column = null): Odbc\Result|false {}

function odbc_procedures(Odbc\Connection $odbc, ?string $catalog = null, ?string $schema = null, ?string $procedure = null): Odbc\Result|false {}

function odbc_foreignkeys(Odbc\Connection $odbc, ?string $pk_catalog, string $pk_schema, string $pk_table, string $fk_catalog, string $fk_schema, string $fk_table): Odbc\Result|false {}
#endif

function odbc_specialcolumns(Odbc\Connection $odbc, int $type, ?string $catalog, string $schema, string $table, int $scope, int $nullable): Odbc\Result|false {}

function odbc_statistics(Odbc\Connection $odbc, ?string $catalog, string $schema, string $table, int $unique, int $accuracy): Odbc\Result|false {}

#if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) &&!defined(HAVE_SOLID_35)
function odbc_tableprivileges(Odbc\Connection $odbc, ?string $catalog, string $schema, string $table): Odbc\Result|false {}

function odbc_columnprivileges(Odbc\Connection $odbc, ?string $catalog, string $schema, string $table, string $column): Odbc\Result|false {}
#endif

/* odbc_utils.c */

Expand Down
Loading