summaryrefslogtreecommitdiff
path: root/ext/oci8/config.m4
diff options
context:
space:
mode:
Diffstat (limited to 'ext/oci8/config.m4')
-rw-r--r--ext/oci8/config.m4144
1 files changed, 119 insertions, 25 deletions
diff --git a/ext/oci8/config.m4 b/ext/oci8/config.m4
index 39c037548a..49998d18f0 100644
--- a/ext/oci8/config.m4
+++ b/ext/oci8/config.m4
@@ -15,22 +15,6 @@ else
PHP_OCI8_TAIL1="tail -1"
fi
-AC_DEFUN([PHP_OCI_IF_DEFINED],[
- old_CPPFLAGS=$CPPFLAGS
- CPPFLAGS=$3
- AC_EGREP_CPP(yes,[
-#include <oci.h>
-#if defined($1)
- yes
-#endif
- ],[
- CPPFLAGS=$old_CPPFLAGS
- $2
- ],[
- CPPFLAGS=$old_CPPFLAGS
- ])
-])
-
AC_DEFUN([AC_OCI8_CHECK_LIB_DIR],[
AC_MSG_CHECKING([ORACLE_HOME library validity])
if test ! -d "$OCI8_DIR"; then
@@ -98,13 +82,99 @@ AC_DEFUN([AC_OCI8_ORACLE_VERSION],[
AC_MSG_RESULT($OCI8_ORACLE_VERSION)
])
+dnl
+dnl OCI8_INIT_DTRACE(providerdesc, header-file, sources)
+dnl This mimics PHP_INIT_DTRACE from PHP 5.4's acinclude.m4. It is
+dnl necessarily different from PHP_INIT_DTRACE which doesn't currently
+dnl support DTrace for extensions. Creating OCI8_INIT_DTRACE
+dnl independently instead of using a refactored PHP_INIT_DTRACE allows
+dnl OCI8 to be DTraced on versions of PHP where core PHP DTrace support
+dnl 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
+dnl The empty $ac_provsrc command stops an implicit circular dependency
+dnl in GNU Make which causes the .d file to be overwritten (Bug 61268)
+ cat>>Makefile.objects<<EOF
+
+PHP_EXT_SRCDIR([oci8])/$ac_provsrc:;
+
+$ac_bdir[$]ac_hdrobj: $ac_srcdir[$]ac_provsrc
+ CFLAGS="\$(CFLAGS_CLEAN)" dtrace -h -C -s $ac_srcdir[$]ac_provsrc -o \$[]@.bak && \$(SED) -e 's,PHP_,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 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 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)
+ 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,
-[ --with-oci8[=DIR] Include Oracle Database OCI8 support. DIR defaults to \$ORACLE_HOME.
- Use --with-oci8=instantclient,/path/to/instant/client/lib
+[ --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
@@ -140,12 +210,36 @@ if test "$PHP_OCI8" != "no"; then
if test "$oci8_php_version" -lt "4003009"; then
AC_MSG_ERROR([You need at least PHP 4.3.9 to be able to use this version of OCI8. PHP $php_version found])
- elif test "$oci8_php_version" -ge "6000000"; then
- AC_MSG_ERROR([This version of OCI8 is not compatible with PHP 6 or higher])
else
AC_MSG_RESULT([$php_version, ok])
fi
+ dnl Check whether --enable-dtrace was set.
+ dnl To use DTrace with a PECL install, extract the OCI8 archive, phpize it, and set
+ dnl PHP_DTRACE=yes before running 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 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 int, 4)
@@ -255,14 +349,14 @@ if test "$PHP_OCI8" != "no"; then
;;
*)
- AC_DEFINE(HAVE_OCI_LOB_READ2,1,[ ])
+ AC_DEFINE(HAVE_OCI_LOB_READ2,1,[Defined to 1 if OCI8 configuration located Oracle's OCILobRead2 function])
;;
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, $ext_shared)
- AC_DEFINE(HAVE_OCI8,1,[ ])
+ 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)
@@ -330,11 +424,11 @@ if test "$PHP_OCI8" != "no"; then
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,[ ])
- AC_DEFINE(HAVE_OCI_LOB_READ2,1,[ ])
+ AC_DEFINE(HAVE_OCI_INSTANT_CLIENT,1,[Defined to 1 if OCI8 configuration located Oracle's Instant Client libraries])
+ AC_DEFINE(HAVE_OCI_LOB_READ2,1,[Defined to 1 if OCI8 configuration located Oracle's OCILobRead2 function])
PHP_NEW_EXTENSION(oci8, oci8.c oci8_lob.c oci8_statement.c oci8_collection.c oci8_interface.c, $ext_shared)
- AC_DEFINE(HAVE_OCI8,1,[ ])
+ 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)