php-src/ext/odbc/config.m4
Peter Kokot dfdec2d550
Autotools: Refactor PHP_TEST_BUILD checks (#15798)
- The libgd sanity check is there only to check whether all current
  linked libraries for the bundled libgd work together, otherwise it is
  probably even redundant a bit; this refactors it to a simpler
  AC_LINK_IFELSE check with default empty C program by Autoconf
- The IBM DB2 sanity check is simplified with AC_CHECK_FUNC instead
2024-09-08 21:05:30 +02:00

444 lines
14 KiB
Text

dnl
dnl PHP_ODBC_CHECK_HEADER(header)
dnl
dnl Check if required header file exists in the ODBC include directory.
dnl
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
PHP_ARG_WITH([odbcver],,
[AS_HELP_STRING([[--with-odbcver[=HEX]]],
[Force support for the passed ODBC version. A hex number is expected,
default 0x0350. Use the special value of 0 to prevent an explicit ODBCVER to
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],
[AS_HELP_STRING([[--with-ibm-db2[=DIR]]],
[Include IBM DB2 support [/home/db2inst1/sqllib]])])
AS_VAR_IF([PHP_IBM_DB2], [no], [], [
AS_VAR_IF([PHP_IBM_DB2], [yes], [
ODBC_INCDIR=/home/db2inst1/sqllib/include
ODBC_LIBDIR=/home/db2inst1/sqllib/lib
], [
ODBC_INCDIR=$PHP_IBM_DB2/include
ODBC_LIBDIR=$PHP_IBM_DB2/$PHP_LIBDIR
])
PHP_ODBC_CHECK_HEADER([sqlcli1.h])
ODBC_CFLAGS=-I$ODBC_INCDIR
ODBC_LFLAGS=-L$ODBC_LIBDIR
ODBC_TYPE=ibm-db2
ODBC_LIBS=-ldb2
dnl Sanity check.
old_LIBS=$LIBS
LIBS="$ODBC_LFLAGS $ODBC_LIBS $LIBS"
AC_CHECK_FUNC([SQLExecute],
[AC_DEFINE([HAVE_IBMDB2], [1],
[Define to 1 if the odbc extension uses the IBM DB2.])],
[AC_MSG_FAILURE([
ODBC build test failed. You need to source your DB2 environment before running
PHP configure:
# . \$IBM_DB2/db2profile
])])
LIBS=$old_LIBS
])
])
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],
[AS_HELP_STRING([[--with-custom-odbc[=DIR]]],
[Include user defined ODBC support. DIR is ODBC install base directory
[/usr/local]. Make sure to define CUSTOM_ODBC_LIBS and have some odbc.h in
your include dirs. For example, you should define following for Sybase SQL
Anywhere 5.5.00 on QNX, prior to running this configure script:
CPPFLAGS="-DODBC_QNX -DSQLANY_BUG" LDFLAGS=-lunix
CUSTOM_ODBC_LIBS="-ldblib -lodbc"])])
AS_VAR_IF([PHP_CUSTOM_ODBC], [no], [], [
AS_VAR_IF([PHP_CUSTOM_ODBC], [yes], [PHP_CUSTOM_ODBC=/usr/local])
ODBC_INCDIR=$PHP_CUSTOM_ODBC/include
ODBC_LIBDIR=$PHP_CUSTOM_ODBC/$PHP_LIBDIR
ODBC_LFLAGS=-L$ODBC_LIBDIR
ODBC_CFLAGS=-I$ODBC_INCDIR
ODBC_LIBS=$CUSTOM_ODBC_LIBS
ODBC_TYPE=custom-odbc
AC_DEFINE([HAVE_CODBC], [1],
[Define to 1 if the odbc extension uses custom ODBC installation.])
])
])
AS_VAR_IF([ODBC_TYPE],, [
PHP_ARG_WITH([iodbc],
[whether to build with iODBC support],
[AS_HELP_STRING([--with-iodbc],
[Include iODBC support])])
AS_VAR_IF([PHP_IODBC], [no], [], [
PKG_CHECK_MODULES([ODBC], [libiodbc])
PHP_EVAL_INCLINE([$ODBC_CFLAGS])
ODBC_TYPE=iodbc
AC_DEFINE([HAVE_IODBC], [1],
[Define to 1 if the odbc extension uses the 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],
[AS_HELP_STRING([[--with-unixODBC[=DIR]]],
[Include unixODBC support. Use PKG_CONFIG_PATH (or ODBC_CFLAGS and
ODBC_LIBS) environment variables, or alternatively the optional DIR argument
to customize where to look for the unixODBC library.])])
AS_VAR_IF([PHP_UNIXODBC], [no], [], [
AS_VAR_IF([PHP_UNIXODBC], [yes], [
PKG_CHECK_MODULES([ODBC], [odbc])
PHP_EVAL_INCLINE([$ODBC_CFLAGS])
], [
dnl keep old DIR way for old version without libodbc.pc
ODBC_INCDIR=$PHP_UNIXODBC/include
ODBC_LIBDIR=$PHP_UNIXODBC/$PHP_LIBDIR
ODBC_LFLAGS=-L$ODBC_LIBDIR
ODBC_CFLAGS=-I$ODBC_INCDIR
ODBC_LIBS=-lodbc
PHP_ODBC_CHECK_HEADER([sqlext.h])
AC_MSG_NOTICE([Using unixODBC in $PHP_UNIXODBC])
])
ODBC_TYPE=unixODBC
AC_DEFINE([HAVE_UNIXODBC], [1],
[Define to 1 if the odbc extension uses the 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])],
[AS_VAR_IF([PHP_ODBCVER], [0],,
[AC_DEFINE_UNQUOTED([ODBCVER], [$PHP_ODBCVER])])])
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.])])
])
AC_DEFINE([HAVE_UODBC], [1],
[Define to 1 if the PHP extension 'odbc' is available.])
PHP_SUBST([ODBC_SHARED_LIBADD])
AC_SUBST([ODBC_CFLAGS])
AC_SUBST([ODBC_LIBS])
AC_SUBST([ODBC_LFLAGS])
AC_SUBST([ODBC_TYPE])
PHP_NEW_EXTENSION([odbc],
[php_odbc.c odbc_utils.c],
[$ext_shared],,
[$ODBC_CFLAGS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1])
else
AC_MSG_CHECKING([for any ODBC driver support])
AC_MSG_RESULT([no])
fi