mirror of
https://github.com/php/php-src.git
synced 2026-03-28 10:12:18 +01:00
We are experiencing an issue when building PHP with DTrace enabled with SystemTap (see GH-11847).† The issue is caused by inappropriate use C preprocessor detected by GNU Autoconf in our “configure” script. C preprocessor configuration found by AC_PROG_CPP macro is portable only to run on files with “.c” extension.‡ However, statically-defined tracing is described by D programs with “.d” extension which causes the issue. We experience this even on typical Linux distribution with GNU Compiler Collection (GCC) unless we override the defaults detected by our “configure” script. Many major Linux distributions use SystemTap to provide “dtrace” utility. It relies on both external C preprocessor and external C compiler. C preprocessor can be customized via CPP environment variable. Similarly, C compiler can be customized via CC environment variable. It also allows customization of C compiler flags via CFLAGS environment variable. We have recently aligned both CPP and CC environment variable with C preprocessor and C compiler we use to build regular C source code as provided by our “configure” script (see GH-11643).* We wanted to allow cross-compilation on Linux for which this was the only blocker. C compiler flags from CFLAGS_CLEAN macro have already been in place since versions 5.4.20 and 5.5.4 from 2013-09-18. We had modified all “dtrace” invocations in the same way to make it look consistent. However, only the C compiler (CC environment variable) is necessary to for cross-compilation. There have never been any reported issue with the C preprocessor. We acknowledge it would be great to allow C preprocessor customization as well. However, the implementation would require a lot of effort to do correctly given the limitations of AC_PROG_CPP macro from GNU Autoconf. This would be further complicated by the fact that all DTrace implementations, not just SystemTap, allow C preprocessor customization but Oracle DTrace, Open DTrace, and their forks do it differently. Nevertheless, they all default to “cpp” utility and they all have or had been working fine. Therefore, we believe simply removing CPP stabilizes “dtrace” invocation on Linux systems with SystemTap and aligns it with other system configurations on other platforms, until someone comes with complete solution with custom “m4” and “make” macros, while our build system on Linux with SystemTap supports cross-compilation. Fixes GH-11847 Closes GH-12083 † https://github.com/php/php-src/issues/11847 ‡ https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.71/autoconf.html#index-AC_005fPROG_005fCPP-1 * https://github.com/php/php-src/issues/11643
435 lines
16 KiB
Plaintext
435 lines
16 KiB
Plaintext
if test -z "$SED"; then
|
|
PHP_OCI8_SED="sed";
|
|
else
|
|
PHP_OCI8_SED="$SED";
|
|
fi
|
|
|
|
PHP_OCI8_TAIL1=`echo a | tail -n1 2>/dev/null`
|
|
if test "$PHP_OCI8_TAIL1" = "a"; then
|
|
PHP_OCI8_TAIL1="tail -n1"
|
|
else
|
|
PHP_OCI8_TAIL1="tail -1"
|
|
fi
|
|
|
|
AC_DEFUN([AC_OCI8_CHECK_LIB_DIR],[
|
|
AC_MSG_CHECKING([ORACLE_HOME library validity])
|
|
if test ! -d "$OCI8_DIR"; then
|
|
AC_MSG_ERROR([${OCI8_DIR} is not a directory])
|
|
fi
|
|
if test -d "$OCI8_DIR/lib" && test ! -d "$OCI8_DIR/lib32"; then
|
|
OCI8_LIB_DIR=lib
|
|
elif test ! -d "$OCI8_DIR/lib" && test -d "$OCI8_DIR/lib32"; then
|
|
OCI8_LIB_DIR=lib32
|
|
elif test -d "$OCI8_DIR/lib" && test -d "$OCI8_DIR/lib32"; then
|
|
OCI8_LIB_DIR=$PHP_OCI8_OH_LIBDIR
|
|
else
|
|
dnl This isn't an ORACLE_HOME. Try heuristic examination of the dir to help
|
|
dnl the user.
|
|
if test -f "$OCI8_DIR/libociei.$SHLIB_SUFFIX_NAME"; then
|
|
AC_MSG_ERROR([Expected an ORACLE_HOME top level directory but ${OCI8_DIR} appears to be an Instant Client directory. Try --with-oci8=instantclient,${OCI8_DIR}])
|
|
else
|
|
AC_MSG_ERROR([Oracle library directory not found in ${OCI8_DIR}])
|
|
fi
|
|
fi
|
|
AC_MSG_RESULT($OCI8_LIB_DIR)
|
|
])
|
|
|
|
AC_DEFUN([AC_OCI8IC_VERSION],[
|
|
AC_MSG_CHECKING([Oracle Instant Client library version compatibility])
|
|
OCI8_LCS_BASE=$PHP_OCI8_INSTANT_CLIENT/libclntsh.$SHLIB_SUFFIX_NAME
|
|
dnl Oracle 10g, 11g etc
|
|
OCI8_LCS=`ls $OCI8_LCS_BASE.*.1 2> /dev/null | $PHP_OCI8_TAIL1`
|
|
OCI8_NNZ=`ls $PHP_OCI8_INSTANT_CLIENT/libnnz*.$SHLIB_SUFFIX_NAME 2> /dev/null | $PHP_OCI8_TAIL1`
|
|
if test -f "$OCI8_NNZ" && test -f "$OCI8_LCS"; then
|
|
if test ! -f "$OCI8_LCS_BASE"; then
|
|
AC_MSG_ERROR([Link from $OCI8_LCS_BASE to $OCI8_LCS_BASE.*.1 not found])
|
|
fi
|
|
OCI8_ORACLE_VERSION=`echo $OCI8_LCS | $PHP_OCI8_SED -e 's/.*\.\(.*\)\.1$/\1.1/'`
|
|
else
|
|
AC_MSG_ERROR([Oracle Instant Client libraries libnnz.$SHLIB_SUFFIX_NAME and libclntsh.$SHLIB_SUFFIX_NAME not found])
|
|
fi
|
|
AC_MSG_RESULT([$OCI8_ORACLE_VERSION])
|
|
])
|
|
|
|
AC_DEFUN([AC_OCI8_ORACLE_VERSION],[
|
|
AC_MSG_CHECKING([Oracle library version compatibility])
|
|
OCI8_LCS_BASE=$OCI8_DIR/$OCI8_LIB_DIR/libclntsh.$SHLIB_SUFFIX_NAME
|
|
dnl Oracle 10g, 11g etc
|
|
OCI8_LCS=`ls $OCI8_LCS_BASE.*.1 2> /dev/null | $PHP_OCI8_TAIL1`
|
|
if test -s "$OCI8_DIR/orainst/unix.rgs"; then
|
|
OCI8_ORACLE_VERSION=`grep '"ocommon"' $OCI8_DIR/orainst/unix.rgs | $PHP_OCI8_SED 's/[ ][ ]*/:/g' | cut -d: -f 6 | cut -c 2-4`
|
|
test -z "$OCI8_ORACLE_VERSION" && OCI8_ORACLE_VERSION=7.3
|
|
elif test -f "$OCI8_LCS"; then
|
|
dnl Oracle 10g, 11g etc. The x.2 version libraries are named x.1 for drop in
|
|
dnl compatibility
|
|
OCI8_ORACLE_VERSION=`echo $OCI8_LCS | $PHP_OCI8_SED -e 's/.*\.\(.*\)\.1$/\1.1/'`
|
|
elif test -f $OCI8_LCS_BASE.9.0; then
|
|
dnl There is no case for Oracle 9.2. Oracle 9.2 libraries have a 9.0 suffix
|
|
dnl for drop-in compatibility with Oracle 9.0
|
|
OCI8_ORACLE_VERSION=9.0
|
|
elif test -f $OCI8_LCS_BASE.8.0; then
|
|
OCI8_ORACLE_VERSION=8.1
|
|
elif test -f $OCI8_LCS_BASE.1.0; then
|
|
OCI8_ORACLE_VERSION=8.0
|
|
elif test -f $OCI8_DIR/$OCI8_LIB_DIR/libclntsh.a; then
|
|
if test -f $OCI8_DIR/$OCI8_LIB_DIR/libcore4.a; then
|
|
OCI8_ORACLE_VERSION=8.0
|
|
else
|
|
OCI8_ORACLE_VERSION=8.1
|
|
fi
|
|
else
|
|
AC_MSG_ERROR(Oracle libclntsh.$SHLIB_SUFFIX_NAME client library not found)
|
|
fi
|
|
AC_MSG_RESULT($OCI8_ORACLE_VERSION)
|
|
])
|
|
|
|
dnl
|
|
dnl OCI8_INIT_DTRACE(providerdesc, header-file, sources)
|
|
dnl This mimics PHP_INIT_DTRACE from build/php.m4. It is necessarily different
|
|
dnl from PHP_INIT_DTRACE which doesn't currently support DTrace for extensions.
|
|
dnl Creating OCI8_INIT_DTRACE independently instead of using a refactored
|
|
dnl PHP_INIT_DTRACE allows OCI8 to be DTraced on versions of PHP where core PHP
|
|
dnl DTrace support isn't available.
|
|
dnl
|
|
AC_DEFUN([OCI8_INIT_DTRACE],[
|
|
ac_srcdir=[]PHP_EXT_SRCDIR([oci8])/
|
|
ac_bdir=[]PHP_EXT_BUILDDIR([oci8])/
|
|
|
|
dnl providerdesc
|
|
ac_provsrc=$1
|
|
|
|
dnl header-file
|
|
ac_hdrobj=$2
|
|
|
|
dnl DTrace objects
|
|
old_IFS=[$]IFS
|
|
for ac_src in $3; do
|
|
IFS=.
|
|
set $ac_src
|
|
ac_obj=[$]1
|
|
IFS=$old_IFS
|
|
|
|
OCI8_DTRACE_OBJS="[$]OCI8_DTRACE_OBJS [$]ac_bdir[$]ac_obj.lo"
|
|
done;
|
|
|
|
for ac_lo in $OCI8_DTRACE_OBJS; do
|
|
dtrace_oci8_objs="[$]dtrace_oci8_objs `echo $ac_lo | $SED -e 's,\.lo$,.o,' -e 's#\(.*\)\/#\1\/.libs\/#'`"
|
|
done;
|
|
|
|
dnl Generate Makefile.objects entry. The empty $ac_provsrc command stops an
|
|
dnl implicit circular dependency in GNU Make which causes the .d file to be
|
|
dnl overwritten (Bug 61268).
|
|
cat>>Makefile.objects<<EOF
|
|
|
|
PHP_EXT_SRCDIR([oci8])/$ac_provsrc:;
|
|
|
|
$ac_bdir[$]ac_hdrobj: $ac_srcdir[$]ac_provsrc
|
|
CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -h -C -s $ac_srcdir[$]ac_provsrc -o \$[]@.bak && \$(SED) -e 's,PHPOCI_,DTRACE_,g' \$[]@.bak > \$[]@
|
|
|
|
\$(OCI8_DTRACE_OBJS): $ac_bdir[$]ac_hdrobj
|
|
|
|
EOF
|
|
|
|
case $host_alias in
|
|
*solaris*|*linux*)
|
|
dtrace_prov_name="`echo $ac_provsrc | $SED -e 's#\(.*\)\/##'`.o"
|
|
dtrace_lib_dir="`echo $ac_bdir[$]ac_provsrc | $SED -e 's#\(.*\)/[^/]*#\1#'`/.libs"
|
|
dtrace_d_obj="`echo $ac_bdir[$]ac_provsrc | $SED -e 's#\(.*\)/\([^/]*\)#\1/.libs/\2#'`.o"
|
|
dtrace_nolib_objs='$(OCI8_DTRACE_OBJS:.lo=.o)'
|
|
for ac_lo in $OCI8_DTRACE_OBJS; do
|
|
dtrace_oci8_lib_objs="[$]dtrace_oci8_lib_objs `echo $ac_lo | $SED -e 's,\.lo$,.o,' -e 's#\(.*\)\/#\1\/.libs\/#'`"
|
|
done;
|
|
|
|
dnl Always attempt to create both PIC and non-PIC DTrace objects (Bug 63692)
|
|
cat>>Makefile.objects<<EOF
|
|
$ac_bdir[$]ac_provsrc.lo: \$(OCI8_DTRACE_OBJS)
|
|
echo "[#] Generated by Makefile for libtool" > \$[]@
|
|
@test -d "$dtrace_lib_dir" || mkdir $dtrace_lib_dir
|
|
if CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $dtrace_d_obj -s $ac_srcdir[$]ac_provsrc $dtrace_oci8_lib_objs 2> /dev/null && test -f "$dtrace_d_obj"; then [\\]
|
|
echo "pic_object=['].libs/$dtrace_prov_name[']" >> \$[]@ [;\\]
|
|
else [\\]
|
|
echo "pic_object='none'" >> \$[]@ [;\\]
|
|
fi
|
|
if CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $ac_bdir[$]ac_provsrc.o -s $ac_srcdir[$]ac_provsrc $dtrace_nolib_objs 2> /dev/null && test -f "$ac_bdir[$]ac_provsrc.o"; then [\\]
|
|
echo "non_pic_object=[']$dtrace_prov_name[']" >> \$[]@ [;\\]
|
|
else [\\]
|
|
echo "non_pic_object='none'" >> \$[]@ [;\\]
|
|
fi
|
|
|
|
EOF
|
|
;;
|
|
*)
|
|
AC_MSG_WARN([OCI8 extension: OCI8 DTrace support is not confirmed on this platform])
|
|
cat>>Makefile.objects<<EOF
|
|
$ac_bdir[$]ac_provsrc.o: \$(OCI8_DTRACE_OBJS)
|
|
CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o \$[]@ -s $ac_srcdir[$]ac_provsrc $dtrace_oci8_objs
|
|
|
|
EOF
|
|
;;
|
|
esac
|
|
])
|
|
|
|
dnl --with-oci8=shared,instantclient,/path/to/client/dir/lib
|
|
dnl or
|
|
dnl --with-oci8=shared,/path/to/oracle/home
|
|
PHP_ARG_WITH([oci8],
|
|
[for Oracle Database OCI8 support],
|
|
[AS_HELP_STRING([[--with-oci8[=DIR]]],
|
|
[Include Oracle Database OCI8 support. DIR defaults to $ORACLE_HOME. Use
|
|
--with-oci8=instantclient,/path/to/instant/client/lib to use an Oracle
|
|
Instant Client installation])])
|
|
|
|
if test "$PHP_OCI8" != "no"; then
|
|
|
|
if test -z "$PHP_OCI8"; then
|
|
dnl --with-oci8=$ORACLE_HOME where ORACLE_HOME isn't set (or is mistyped)
|
|
dnl will match this case.
|
|
AC_MSG_ERROR([Empty parameter value passed to --with-oci8])
|
|
fi
|
|
|
|
dnl Check PHP version is compatible with this extension.
|
|
AC_MSG_CHECKING([PHP version])
|
|
|
|
tmp_version=$PHP_VERSION
|
|
if test -z "$tmp_version"; then
|
|
if test -z "$PHP_CONFIG"; then
|
|
AC_MSG_ERROR([php-config not found])
|
|
fi
|
|
php_version=`$PHP_CONFIG --version 2>/dev/null|head -n 1|$PHP_OCI8_SED -e 's#\([0-9]\.[0-9]*\.[0-9]*\)\(.*\)#\1#'`
|
|
else
|
|
php_version=`echo "$tmp_version"|$PHP_OCI8_SED -e 's#\([0-9]\.[0-9]*\.[0-9]*\)\(.*\)#\1#'`
|
|
fi
|
|
|
|
if test -z "$php_version"; then
|
|
AC_MSG_ERROR([failed to detect PHP version, please report])
|
|
fi
|
|
|
|
ac_IFS=$IFS
|
|
IFS="."
|
|
set $php_version
|
|
IFS=$ac_IFS
|
|
oci8_php_version=`expr [$]1 \* 1000000 + [$]2 \* 1000 + [$]3`
|
|
|
|
if test "$oci8_php_version" -lt "5002000"; then
|
|
AC_MSG_ERROR([You need at least PHP 8.1.0 to be able to use this version of OCI8. Use OCI8 1.4 for PHP $php_version])
|
|
elif test "$oci8_php_version" -lt "7000000"; then
|
|
AC_MSG_ERROR([You need at least PHP 8.1.0 to be able to use this version of OCI8. Use OCI8 2.0 for PHP $php_version])
|
|
elif test "$oci8_php_version" -lt "8000000"; then
|
|
AC_MSG_ERROR([You need at least PHP 8.1.0 to be able to use this version of OCI8. Use OCI8 2.2 for PHP $php_version])
|
|
elif test "$oci8_php_version" -lt "8001000"; then
|
|
AC_MSG_ERROR([You need at least PHP 8.1.0 to be able to use this version of OCI8. Use OCI8 3.0 for PHP $php_version])
|
|
else
|
|
AC_MSG_RESULT([$php_version, ok])
|
|
fi
|
|
|
|
dnl Check whether --enable-dtrace was set. To use DTrace with a PECL install,
|
|
dnl extract the OCI8 archive, phpize it, and set PHP_DTRACE=yes before running
|
|
dnl configure.
|
|
AC_MSG_CHECKING([OCI8 DTrace support])
|
|
oci8_do_dtrace="`echo $PHP_OCI8 | cut -d, -f3`"
|
|
if test "$PHP_DTRACE" = "yes" -o "$oci8_do_dtrace" = "dtrace" ; then
|
|
AC_MSG_RESULT([yes])
|
|
if test "$ext_shared" = "no"; then
|
|
AC_MSG_ERROR([For DTrace support OCI8 must be configured as a shared extension])
|
|
else
|
|
AC_CHECK_HEADERS([sys/sdt.h], [
|
|
OCI8_INIT_DTRACE([oci8_dtrace.d],[oci8_dtrace_gen.h],[oci8.c oci8_statement.c])
|
|
|
|
], [
|
|
AC_MSG_ERROR(
|
|
[Cannot find sys/sdt.h which is required for DTrace support])
|
|
])
|
|
PHP_SUBST(OCI8_DTRACE_OBJS)
|
|
AC_DEFINE(HAVE_OCI8_DTRACE,1,[Defined to 1 if PHP OCI8 DTrace support was enabled during configuration])
|
|
dnl Developer warning: hard coded extension is OK for the known supported
|
|
dnl environments.
|
|
shared_objects_oci8="$shared_objects_oci8 PHP_EXT_BUILDDIR(oci8)/oci8_dtrace.d.lo"
|
|
fi
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
|
|
dnl Set some port specific directory components for use later.
|
|
AC_CHECK_SIZEOF([long])
|
|
AC_MSG_CHECKING([if we're at 64-bit platform])
|
|
AS_IF([test "$ac_cv_sizeof_long" -eq 4],[
|
|
AC_MSG_RESULT([no])
|
|
PHP_OCI8_OH_LIBDIR=lib32
|
|
PHP_OCI8_IC_LIBDIR_SUFFIX=""
|
|
],[
|
|
AC_MSG_RESULT([yes])
|
|
PHP_OCI8_OH_LIBDIR=lib
|
|
PHP_OCI8_IC_LIBDIR_SUFFIX=64
|
|
])
|
|
|
|
dnl Determine if the user wants to use Oracle Instant Client libraries.
|
|
|
|
PHP_OCI8_INSTANT_CLIENT="no"
|
|
|
|
dnl PECL Bug 14268 (Allow "pecl install oci8" command to "autodetect" an
|
|
dnl Instant Client RPM install). This also has a benefit for non
|
|
dnl "pecl install" builds: if the user does --with-oci8 or --with-oci8=shared
|
|
dnl but the ORACLE_HOME environment variable is not actually set, the install
|
|
dnl tries to locate the Instant Client RPM.
|
|
if test "$PHP_OCI8" = "yes" && test -z "$ORACLE_HOME"; then
|
|
AC_MSG_WARN([OCI8 extension: ORACLE_HOME is not set, looking for default Oracle Instant Client instead])
|
|
PHP_OCI8=instantclient
|
|
fi
|
|
|
|
if test "`echo $PHP_OCI8`" = "instantclient"; then
|
|
PHP_OCI8_INSTANT_CLIENT="yes"
|
|
elif test "`echo $PHP_OCI8 | cut -d, -f2`" = "instantclient"; then
|
|
PHP_OCI8_INSTANT_CLIENT="`echo $PHP_OCI8 | cut -d, -f3`"
|
|
PHP_OCI8="`echo $PHP_OCI8 | cut -d, -f1,4`"
|
|
if test "$PHP_OCI8_INSTANT_CLIENT" = ""; then
|
|
PHP_OCI8_INSTANT_CLIENT="yes"
|
|
fi
|
|
if test -z "$PHP_OCI8"; then
|
|
PHP_OCI8=yes
|
|
fi
|
|
elif test "`echo $PHP_OCI8 | cut -d, -f1`" = "instantclient"; then
|
|
PHP_OCI8_INSTANT_CLIENT="`echo $PHP_OCI8 | cut -d, -f2`"
|
|
PHP_OCI8="`echo $PHP_OCI8 | cut -d, -f3,4`"
|
|
if test "$PHP_OCI8_INSTANT_CLIENT" = ""; then
|
|
PHP_OCI8_INSTANT_CLIENT="yes"
|
|
fi
|
|
if test -z "$PHP_OCI8"; then
|
|
PHP_OCI8=yes
|
|
fi
|
|
fi
|
|
|
|
if test "$PHP_OCI8_INSTANT_CLIENT" = "no"; then
|
|
dnl ***************************************
|
|
dnl Branch for using an ORACLE_HOME install
|
|
dnl ***************************************
|
|
|
|
AC_MSG_CHECKING([Oracle ORACLE_HOME install directory])
|
|
|
|
if test "$PHP_OCI8" = "yes"; then
|
|
OCI8_DIR=$ORACLE_HOME
|
|
else
|
|
OCI8_DIR=$PHP_OCI8
|
|
fi
|
|
AC_MSG_RESULT($OCI8_DIR)
|
|
|
|
AC_OCI8_CHECK_LIB_DIR($OCI8_DIR)
|
|
|
|
if test -d "$OCI8_DIR/rdbms/public"; then
|
|
PHP_ADD_INCLUDE($OCI8_DIR/rdbms/public)
|
|
OCI8_INCLUDES="$OCI8_INCLUDES -I$OCI8_DIR/rdbms/public"
|
|
fi
|
|
if test -d "$OCI8_DIR/rdbms/demo"; then
|
|
PHP_ADD_INCLUDE($OCI8_DIR/rdbms/demo)
|
|
OCI8_INCLUDES="$OCI8_INCLUDES -I$OCI8_DIR/rdbms/demo"
|
|
fi
|
|
if test -d "$OCI8_DIR/network/public"; then
|
|
PHP_ADD_INCLUDE($OCI8_DIR/network/public)
|
|
OCI8_INCLUDES="$OCI8_INCLUDES -I$OCI8_DIR/network/public"
|
|
fi
|
|
if test -d "$OCI8_DIR/plsql/public"; then
|
|
PHP_ADD_INCLUDE($OCI8_DIR/plsql/public)
|
|
OCI8_INCLUDES="$OCI8_INCLUDES -I$OCI8_DIR/plsql/public"
|
|
fi
|
|
|
|
if test -f "$OCI8_DIR/$OCI8_LIB_DIR/sysliblist"; then
|
|
PHP_EVAL_LIBLINE(`cat $OCI8_DIR/$OCI8_LIB_DIR/sysliblist`, OCI8_SYSLIB)
|
|
elif test -f "$OCI8_DIR/rdbms/$OCI8_LIB_DIR/sysliblist"; then
|
|
PHP_EVAL_LIBLINE(`cat $OCI8_DIR/rdbms/$OCI8_LIB_DIR/sysliblist`, OCI8_SYSLIB)
|
|
fi
|
|
|
|
AC_OCI8_ORACLE_VERSION($OCI8_DIR)
|
|
|
|
case $OCI8_ORACLE_VERSION in
|
|
7.3|8.0|8.1|9.0|10.1)
|
|
AC_MSG_ERROR([Oracle Client libraries < 11.2 are not supported])
|
|
;;
|
|
esac
|
|
|
|
PHP_ADD_LIBRARY(clntsh, 1, OCI8_SHARED_LIBADD)
|
|
PHP_ADD_LIBPATH($OCI8_DIR/$OCI8_LIB_DIR, OCI8_SHARED_LIBADD)
|
|
PHP_NEW_EXTENSION(oci8, oci8.c oci8_lob.c oci8_statement.c oci8_collection.c oci8_interface.c oci8_failover.c, $ext_shared)
|
|
AC_DEFINE(HAVE_OCI8,1,[Defined to 1 if the PHP OCI8 extension for Oracle Database is configured])
|
|
|
|
PHP_SUBST_OLD(OCI8_SHARED_LIBADD)
|
|
PHP_SUBST_OLD(OCI8_DIR)
|
|
PHP_SUBST_OLD(OCI8_ORACLE_VERSION)
|
|
|
|
dnl Fix Bug #46623
|
|
AC_DEFINE_UNQUOTED(PHP_OCI8_DEF_DIR, "$OCI8_DIR", [ ])
|
|
AC_DEFINE_UNQUOTED(PHP_OCI8_DEF_SHARED_LIBADD, "$OCI8_SHARED_LIBADD", [ ])
|
|
|
|
else
|
|
dnl ***************************************************
|
|
dnl Branch for using an Oracle Instant Client directory
|
|
dnl ***************************************************
|
|
|
|
AC_MSG_CHECKING([Oracle Instant Client directory])
|
|
|
|
if test "$PHP_OCI8_INSTANT_CLIENT" = "yes"; then
|
|
dnl Find the directory if user specified "instantclient" but did not give
|
|
dnl a dir. Generally the Instant Client can be anywhere so the user must
|
|
dnl pass in the library directory. But on Linux we default to the most
|
|
dnl recent version in /usr/lib which is where the Oracle Instant Client
|
|
dnl RPM gets installed.
|
|
PHP_OCI8_INSTANT_CLIENT=`ls -d /usr/lib/oracle/*/client${PHP_OCI8_IC_LIBDIR_SUFFIX}/lib/libclntsh.* 2> /dev/null | $PHP_OCI8_TAIL1 | $PHP_OCI8_SED -e 's#/libclntsh[^/]*##'`
|
|
if test -z "$PHP_OCI8_INSTANT_CLIENT"; then
|
|
AC_MSG_ERROR([Oracle Instant Client directory /usr/lib/oracle/.../client${PHP_OCI8_IC_LIBDIR_SUFFIX}/lib libraries not found. Try --with-oci8=instantclient,DIR])
|
|
fi
|
|
fi
|
|
AC_MSG_RESULT($PHP_OCI8_INSTANT_CLIENT)
|
|
|
|
OCI8_DIR=$PHP_OCI8_INSTANT_CLIENT
|
|
|
|
AC_MSG_CHECKING([Oracle Instant Client SDK header directory])
|
|
|
|
dnl Header directory for Instant Client SDK RPM install
|
|
OCISDKRPMINC=`echo "$PHP_OCI8_INSTANT_CLIENT" | $PHP_OCI8_SED -e 's!^/usr/lib/oracle/\(.*\)/client\('${PHP_OCI8_IC_LIBDIR_SUFFIX}'\)*/lib[/]*$!/usr/include/oracle/\1/client\2!'`
|
|
|
|
dnl Header directory for Instant Client SDK zip file install
|
|
OCISDKZIPINC=$PHP_OCI8_INSTANT_CLIENT/sdk/include
|
|
|
|
dnl Header directory for manual installation
|
|
OCISDKMANINC=`echo "$PHP_OCI8_INSTANT_CLIENT" | $PHP_OCI8_SED -e 's!\(.*\)/lib[/]*$!\1/include!'`
|
|
|
|
if test -f "$OCISDKRPMINC/oci.h"; then
|
|
AC_MSG_RESULT($OCISDKRPMINC)
|
|
PHP_ADD_INCLUDE($OCISDKRPMINC)
|
|
OCI8INCDIR=$OCISDKRPMINC
|
|
elif test -f "$OCISDKZIPINC/oci.h"; then
|
|
AC_MSG_RESULT($OCISDKZIPINC)
|
|
PHP_ADD_INCLUDE($OCISDKZIPINC)
|
|
OCI8INCDIR=$OCISDKZIPINC
|
|
elif test -f "$OCISDKMANINC/oci.h"; then
|
|
AC_MSG_RESULT($OCISDKMANINC)
|
|
PHP_ADD_INCLUDE($OCISDKMANINC)
|
|
OCI8INCDIR=$OCISDKMANINC
|
|
else
|
|
AC_MSG_ERROR([Oracle Instant Client SDK header files not found])
|
|
fi
|
|
|
|
OCISYSLIBLIST=`echo "$OCI8INCDIR" | $PHP_OCI8_SED -e 's!\(.*\)/include$!\1/demo/sysliblist!'`
|
|
if test -f "$OCISYSLIBLIST"; then
|
|
PHP_EVAL_LIBLINE(`cat $OCISYSLIBLIST`, OCI8_SYSLIB)
|
|
fi
|
|
|
|
AC_OCI8IC_VERSION($PHP_OCI8_INSTANT_CLIENT)
|
|
case $OCI8_ORACLE_VERSION in
|
|
10.1)
|
|
AC_MSG_ERROR([Oracle Client libraries < 11.2 are not supported])
|
|
;;
|
|
esac
|
|
PHP_ADD_LIBRARY(clntsh, 1, OCI8_SHARED_LIBADD)
|
|
PHP_ADD_LIBPATH($PHP_OCI8_INSTANT_CLIENT, OCI8_SHARED_LIBADD)
|
|
|
|
AC_DEFINE(HAVE_OCI_INSTANT_CLIENT,1,[Defined to 1 if OCI8 configuration located Oracle's Instant Client libraries])
|
|
|
|
PHP_NEW_EXTENSION(oci8, oci8.c oci8_lob.c oci8_statement.c oci8_collection.c oci8_interface.c oci8_failover.c, $ext_shared)
|
|
AC_DEFINE(HAVE_OCI8,1,[Defined to 1 if the PHP OCI8 extension for Oracle Database is configured])
|
|
|
|
PHP_SUBST_OLD(OCI8_SHARED_LIBADD)
|
|
PHP_SUBST_OLD(OCI8_DIR)
|
|
PHP_SUBST_OLD(OCI8_ORACLE_VERSION)
|
|
|
|
fi
|
|
fi
|