#31084 [Opn->Asn]: Suggested config.m4 changes to compile with Oracle OCI8 Instant Client
| From: | tony2001@php.net | Date: | Tue, 14 Dec 2004 12:05:51 +0000 |
| Subject: | #31084 [Opn->Asn]: Suggested config.m4 changes to compile with Oracle OCI8 Instant Client | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-70204@lists.php.net to get a copy of this message | ||
ID: 31084
Updated by: tony2001@php.net
Reported By: cjbj at hotmail dot com
-Status: Open
+Status: Assigned
Bug Type: OCI8 related
Operating System: Linux
PHP Version: 4.3.9
-Assigned To:
+Assigned To: tony2001
Previous Comments:
------------------------------------------------------------------------
[2004-12-14 09:28:36] cjbj at hotmail dot com
To see an unmunged copy of the diff, go to
http://forums.oracle.com/forums/thread.jsp?nav=false&forum=178&thread=279365
------------------------------------------------------------------------
[2004-12-14 09:16:28] cjbj at hotmail dot com
Description:
------------
This is a suggested enhancement for PHP's ext/oci8/config.m4 to enable
PHP to be built with the Oracle Instant Client 10.1 libraries and SDK.
This allows PHP to connect to an existing, remote Oracle DB without
needing a full install of Oracle.
The diff adds a new configuration parameter
--with-oci8-instant-client[=DIR]
that takes the directory of the Oracle Instant Client libraries. It
is the solution previously discussed with Antony.
The new "--with-oci8-instant-client" and existing "--with-oci8"
options are mutually exclusive.
Instructions:
Install the Instant Client "basic" and "SDK" packages from Oracle:
http://www.oracle.com/technology/tech/oci/instantclient/instantclient.html
Make sure a symbolic link exists from libclntsh.so pointing to
libclntsh.so.10.1. If the Linux RPMs were installed then this is
automatically created.
Backup and apply the diff listed below to ext/oci8/config.m4
cd php-4.3.9
rm -rf autom4te.cache config.cache
./buildconf --force
Run configure. These are the options I needed to use to install PHP
4.3.9 on
my local Apache under Redhat 3:
./configure \
--with-oci8-instant-client=/usr/lib/oracle/10.1.0.3/client/lib \
--prefix=$HOME/php --with-apxs=$HOME/apache/bin/apxs \
--enable-sigchild --with-config-file-path=$HOME/apache/conf
(Since I was on linux I could have used --with-oci8-instant-client
without giving a directory)
make install
You might need to set LD_LIBRARY_PATH to
/usr/lib/oracle/10.1.0.3/client/lib before starting Apache. If a
connection string is needed, also set TNS_ADMIN. For
Oracle-standard connection information see section 1.3 of
http://www.oracle.com/technology/docs/tech/sql_plus/10103/readme_ic.htm
Note: these changes have only been tested on Linux using the Oracle
Instant Client 10.1.0.3 release and PHP 4.3.9.
--- ext/oci8/config.m4.orig 2004-02-04 01:22:34.000000000 +1100
+++ ext/oci8/config.m4 2004-12-14 18:36:21.000000000 +1100
@@ -38,16 +38,46 @@
OCI8_VERSION=8.1
fi
else
- AC_MSG_ERROR(Oracle-OCI8 needed libraries not found)
+ AC_MSG_ERROR([Oracle (OCI8) required libraries not found])
fi
AC_MSG_RESULT($OCI8_VERSION)
])
-PHP_ARG_WITH(oci8, for Oracle-OCI8 support,
-[ --with-oci8[=DIR] Include Oracle-oci8 support. Default DIR is
ORACLE_HOME.])
+AC_DEFUN(AC_OCI8IC_VERSION,[
+ AC_MSG_CHECKING([Oracle Instant Client version])
+ if test -f $PHP_OCI8_INSTANT_CLIENT/libociei.$SHLIB_SUFFIX_NAME;
then
+ if test -f
$PHP_OCI8_INSTANT_CLIENT/libclntsh.$SHLIB_SUFFIX_NAME.10.1; then
+ if test ! -f
$PHP_OCI8_INSTANT_CLIENT/libclntsh.$SHLIB_SUFFIX_NAME; then
+ AC_MSG_ERROR([Link from
$PHP_OCI8_INSTANT_CLIENT/libclntsh.$SHLIB_SUFFIX_NAME to
libclntsh.$SHLIB_SUFFIX_NAME.10.1 not found])
+ fi
+ OCI8_VERSION=10.1
+ else
+ AC_MSG_ERROR([Oracle Instant Client library version not
supported])
+ fi
+ else
+ AC_MSG_ERROR([Oracle Instant Client libraries not found])
+ fi
+ AC_MSG_RESULT([$OCI8_VERSION])
+])
+
+PHP_ARG_WITH(oci8, for Oracle (OCI8) support using ORACLE_HOME
installation,
+[ --with-oci8[[=DIR]] Include Oracle (OCI8) support using an
ORACLE_HOME
+ install. The default DIR is ORACLE_HOME])
+
+PHP_ARG_WITH(oci8-instant-client, for Oracle (OCI8) support using
Oracle Instant Client,
+[ --with-oci8-instant-client[[=DIR]] Include Oracle (OCI8) support
using
+ Oracle Instant Client. DIR is the directory
with the
+ Instant Client libraries. On Linux it will
default to
+
/usr/lib/oracle/<most_recent_version>/client/lib
+ Other platforms will need to have it
explicitly specified.])
if test "$PHP_OCI8" != "no"; then
- AC_MSG_CHECKING([Oracle Install-Dir])
+
+ if test "$PHP_OCI8_INSTANT_CLIENT" != "no"; then
+ AC_MSG_ERROR([--with-oci8 and --with-oci8-instant-client are
mutually exclusive])
+ fi
+
+ AC_MSG_CHECKING([Oracle Install Directory])
if test "$PHP_OCI8" = "yes"; then
OCI8_DIR=$ORACLE_HOME
else
@@ -116,14 +146,18 @@
-L$OCI8_DIR/lib $OCI8_SHARED_LIBADD
])
;;
+
10.1)
PHP_ADD_LIBRARY(clntsh, 1, OCI8_SHARED_LIBADD)
PHP_ADD_LIBPATH($OCI8_DIR/lib, OCI8_SHARED_LIBADD)
AC_DEFINE(HAVE_OCI8_ATTR_STATEMENT,1,[ ])
AC_DEFINE(HAVE_OCI_9_2,1,[ ])
+ AC_DEFINE(HAVE_OCI8_TEMP_LOB,1,[ ])
+ AC_DEFINE(PHP_OCI8_HAVE_COLLECTIONS,1,[ ])
;;
+
*)
- AC_MSG_ERROR(Unsupported Oracle version!)
+ AC_MSG_ERROR([Unsupported Oracle version])
;;
esac
@@ -145,10 +179,88 @@
-L$OCI8_DIR/lib $OCI8_SHARED_LIBADD
])
+ dnl
+ dnl Check if we have collections
+ dnl
+ PHP_CHECK_LIBRARY(clntsh, OCICollAssign,
+ [
+ AC_DEFINE(PHP_OCI8_HAVE_COLLECTIONS,1,[ ])
+ ], [], [
+ -L$OCI8_DIR/lib $OCI8_SHARED_LIBADD
+ ])
+
+
PHP_NEW_EXTENSION(oci8, oci8.c, $ext_shared)
AC_DEFINE(HAVE_OCI8,1,[ ])
PHP_SUBST_OLD(OCI8_SHARED_LIBADD)
PHP_SUBST_OLD(OCI8_DIR)
PHP_SUBST_OLD(OCI8_VERSION)
+
+elif test "$PHP_OCI8_INSTANT_CLIENT" != "no"; then
+
+ AC_MSG_CHECKING([Oracle Instant Client directory])
+ if test "$PHP_OCI8_INSTANT_CLIENT" = "yes"; then
+dnl Generally the Instant Client can be anywhere so the user must pass
in the
+dnl directory to the libraries. But on Linux we default to the most
recent
+dnl version in /usr/lib
+ PHP_OCI8_INSTANT_CLIENT=`ls -d /usr/lib/oracle/*/client/lib 2>
/dev/null | tail -1`
+ if test -z "$PHP_OCI8_INSTANT_CLIENT"; then
+ AC_MSG_ERROR([Oracle Instant Client directory not found. Try
--with-oci8-instant-client=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" | sed -e
's!^/usr/lib/oracle/\(.*\)/client/lib[[/]]*$!/usr/include/oracle/\1/client!'`
+
+dnl Header directory for Instant Client SDK zip file install
+ OCISDKZIPINC=$PHP_OCI8_INSTANT_CLIENT/sdk/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
+ else
+ AC_MSG_ERROR([Oracle Instant Client SDK header files not found])
+ fi
+
+ OCISYSLIBLIST=`echo "$OCI8INCDIR" | 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_VERSION in
+ 10.1)
+ PHP_ADD_LIBRARY(clntsh, 1, OCI8_SHARED_LIBADD)
+ PHP_ADD_LIBPATH($PHP_OCI8_INSTANT_CLIENT, OCI8_SHARED_LIBADD)
+ ;;
+
+ *)
+ AC_MSG_ERROR([Unsupported Oracle Instant Client version])
+ ;;
+ esac
+
+ AC_DEFINE(HAVE_OCI8_ATTR_STATEMENT,1,[ ])
+ AC_DEFINE(HAVE_OCI_9_2,1,[ ])
+ AC_DEFINE(HAVE_OCI8_TEMP_LOB,1,[ ])
+ AC_DEFINE(PHP_OCI8_HAVE_COLLECTIONS,1,[ ])
+ AC_DEFINE(HAVE_OCI_INSTANT_CLIENT,1,[ ])
+
+ PHP_NEW_EXTENSION(oci8, oci8.c, $ext_shared)
+ AC_DEFINE(HAVE_OCI8,1,[ ])
+
+ PHP_SUBST_OLD(OCI8_SHARED_LIBADD)
+ PHP_SUBST_OLD(OCI8_DIR)
+ PHP_SUBST_OLD(OCI8_VERSION)
+
fi
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=31084&edit=1