1dnl $Id$ 2dnl config.m4 for extension pdo_oci 3dnl vim:et:sw=2:ts=2: 4 5if test -z "$SED"; then 6 PHP_PDO_OCI_SED="sed"; 7else 8 PHP_PDO_OCI_SED="$SED"; 9fi 10 11PHP_PDO_OCI_TAIL1=`echo a | tail -n1 2>/dev/null` 12if test "$PHP_PDO_OCI_TAIL1" = "a"; then 13 PHP_PDO_OCI_TAIL1="tail -n1" 14else 15 PHP_PDO_OCI_TAIL1="tail -1" 16fi 17 18AC_DEFUN([AC_PDO_OCI_VERSION],[ 19 AC_MSG_CHECKING([Oracle version]) 20 PDO_OCI_LCS_BASE=$PDO_OCI_LIB_DIR/libclntsh.$SHLIB_SUFFIX_NAME 21 PDO_OCI_LCS=`ls $PDO_OCI_LCS_BASE.*.1 2> /dev/null | $PHP_PDO_OCI_TAIL1` # Oracle 10g, 11g, 12c etc 22 if test -f "$PDO_OCI_LCS"; then 23 dnl Oracle 10g, 11g 12c etc. The x.2 version libraries are named x.1 for drop in compatibility 24 PDO_OCI_VERSION=`echo $PDO_OCI_LCS | $PHP_PDO_OCI_SED -e 's/.*\.\(.*\)\.1$/\1.1/'` 25 elif test -f $PDO_OCI_LCS_BASE.9.0; then 26 dnl There is no case for Oracle 9.2. Oracle 9.2 libraries have a 9.0 suffix for drop-in compatibility with Oracle 9.0 27 PDO_OCI_VERSION=9.0 28 else 29 AC_MSG_ERROR(Oracle libclntsh.$SHLIB_SUFFIX_NAME client library not found or its version is lower than 9) 30 fi 31 AC_MSG_RESULT($PDO_OCI_VERSION) 32]) 33 34AC_DEFUN([AC_PDO_OCI_CHECK_LIB_DIR],[ 35 AC_CHECK_SIZEOF(long int, 4) 36 AC_MSG_CHECKING([if we're on a 64-bit platform]) 37 if test "$ac_cv_sizeof_long_int" = "4" ; then 38 AC_MSG_RESULT([no]) 39 TMP_PDO_OCI_LIB_DIR="$PDO_OCI_DIR/lib32" 40 else 41 AC_MSG_RESULT([yes]) 42 TMP_PDO_OCI_LIB_DIR="$PDO_OCI_DIR/lib" 43 fi 44 45 AC_MSG_CHECKING([OCI8 libraries dir]) 46 if test -d "$PDO_OCI_DIR/lib" && test ! -d "$PDO_OCI_DIR/lib32"; then 47 PDO_OCI_LIB_DIR="$PDO_OCI_DIR/lib" 48 elif test ! -d "$PDO_OCI_DIR/lib" && test -d "$PDO_OCI_DIR/lib32"; then 49 PDO_OCI_LIB_DIR="$PDO_OCI_DIR/lib32" 50 elif test -d "$PDO_OCI_DIR/lib" && test -d "$PDO_OCI_DIR/lib32"; then 51 PDO_OCI_LIB_DIR=$TMP_PDO_OCI_LIB_DIR 52 else 53 AC_MSG_ERROR([Oracle required OCI8 libraries not found]) 54 fi 55 AC_MSG_RESULT($PDO_OCI_LIB_DIR) 56]) 57 58PHP_ARG_WITH(pdo-oci, Oracle OCI support for PDO, 59[ --with-pdo-oci[=DIR] PDO: Oracle OCI support. DIR defaults to [$]ORACLE_HOME. 60 Use --with-pdo-oci=instantclient,/path/to/instant/client/lib 61 for an Oracle Instant Client installation.]) 62 63if test "$PHP_PDO_OCI" != "no"; then 64 65 if test "$PHP_PDO" = "no" && test "$ext_shared" = "no"; then 66 AC_MSG_ERROR([PDO is not enabled! Add --enable-pdo to your configure line.]) 67 fi 68 69 AC_MSG_CHECKING([Oracle Install-Dir]) 70 if test "$PHP_PDO_OCI" = "yes" || test -z "$PHP_PDO_OCI"; then 71 PDO_OCI_DIR=$ORACLE_HOME 72 else 73 PDO_OCI_DIR=$PHP_PDO_OCI 74 fi 75 AC_MSG_RESULT($PHP_PDO_OCI) 76 77 AC_MSG_CHECKING([if that is sane]) 78 if test -z "$PDO_OCI_DIR"; then 79 AC_MSG_ERROR([You need to tell me where to find your Oracle Instant Client SDK, or set ORACLE_HOME.]) 80 else 81 AC_MSG_RESULT([yes]) 82 fi 83 84 if test "instantclient" = "`echo $PDO_OCI_DIR | cut -d, -f1`" ; then 85 AC_CHECK_SIZEOF(long int, 4) 86 if test "$ac_cv_sizeof_long_int" = "4" ; then 87 PDO_OCI_CLIENT_DIR="client" 88 else 89 PDO_OCI_CLIENT_DIR="client64" 90 fi 91 PDO_OCI_LIB_DIR="`echo $PDO_OCI_DIR | cut -d, -f2`" 92 AC_PDO_OCI_VERSION($PDO_OCI_LIB_DIR) 93 94 AC_MSG_CHECKING([for oci.h]) 95 dnl Header directory for Instant Client SDK RPM install 96 OCISDKRPMINC=`echo "$PDO_OCI_LIB_DIR" | $PHP_PDO_OCI_SED -e 's!^\(.*\)/lib/oracle/\(.*\)/\('${PDO_OCI_CLIENT_DIR}'\)/lib[/]*$!\1/include/oracle/\2/\3!'` 97 98 dnl Header directory for manual installation 99 OCISDKMANINC=`echo "$PDO_OCI_LIB_DIR" | $PHP_PDO_OCI_SED -e 's!^\(.*\)/lib[/]*$!\1/include!'` 100 101 dnl Header directory for Instant Client SDK zip file install 102 OCISDKZIPINC=$PDO_OCI_LIB_DIR/sdk/include 103 104 105 if test -f "$OCISDKRPMINC/oci.h" ; then 106 PHP_ADD_INCLUDE($OCISDKRPMINC) 107 AC_MSG_RESULT($OCISDKRPMINC) 108 elif test -f "$OCISDKMANINC/oci.h" ; then 109 PHP_ADD_INCLUDE($OCISDKMANINC) 110 AC_MSG_RESULT($OCISDKMANINC) 111 elif test -f "$OCISDKZIPINC/oci.h" ; then 112 PHP_ADD_INCLUDE($OCISDKZIPINC) 113 AC_MSG_RESULT($OCISDKZIPINC) 114 else 115 AC_MSG_ERROR([I'm too dumb to figure out where the include dir is in your Instant Client install]) 116 fi 117 else 118 AC_PDO_OCI_CHECK_LIB_DIR($PDO_OCI_DIR) 119 120 if test -d "$PDO_OCI_DIR/rdbms/public"; then 121 PHP_ADD_INCLUDE($PDO_OCI_DIR/rdbms/public) 122 PDO_OCI_INCLUDES="$PDO_OCI_INCLUDES -I$PDO_OCI_DIR/rdbms/public" 123 fi 124 if test -d "$PDO_OCI_DIR/rdbms/demo"; then 125 PHP_ADD_INCLUDE($PDO_OCI_DIR/rdbms/demo) 126 PDO_OCI_INCLUDES="$PDO_OCI_INCLUDES -I$PDO_OCI_DIR/rdbms/demo" 127 fi 128 if test -d "$PDO_OCI_DIR/network/public"; then 129 PHP_ADD_INCLUDE($PDO_OCI_DIR/network/public) 130 PDO_OCI_INCLUDES="$PDO_OCI_INCLUDES -I$PDO_OCI_DIR/network/public" 131 fi 132 if test -d "$PDO_OCI_DIR/plsql/public"; then 133 PHP_ADD_INCLUDE($PDO_OCI_DIR/plsql/public) 134 PDO_OCI_INCLUDES="$PDO_OCI_INCLUDES -I$PDO_OCI_DIR/plsql/public" 135 fi 136 if test -d "$PDO_OCI_DIR/include"; then 137 PHP_ADD_INCLUDE($PDO_OCI_DIR/include) 138 PDO_OCI_INCLUDES="$PDO_OCI_INCLUDES -I$PDO_OCI_DIR/include" 139 fi 140 141 if test -f "$PDO_OCI_LIB_DIR/sysliblist"; then 142 PHP_EVAL_LIBLINE(`cat $PDO_OCI_LIB_DIR/sysliblist`, PDO_OCI_SYSLIB) 143 elif test -f "$PDO_OCI_DIR/rdbms/lib/sysliblist"; then 144 PHP_EVAL_LIBLINE(`cat $PDO_OCI_DIR/rdbms/lib/sysliblist`, PDO_OCI_SYSLIB) 145 fi 146 AC_PDO_OCI_VERSION($PDO_OCI_LIB_DIR) 147 fi 148 149 case $PDO_OCI_VERSION in 150 7.3|8.0|8.1) 151 AC_MSG_ERROR([Oracle client libraries < 9 are not supported]) 152 ;; 153 esac 154 155 PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD) 156 PHP_ADD_LIBPATH($PDO_OCI_LIB_DIR, PDO_OCI_SHARED_LIBADD) 157 158 PHP_CHECK_LIBRARY(clntsh, OCIEnvCreate, 159 [ 160 AC_DEFINE(HAVE_OCIENVCREATE,1,[ ]) 161 ], [], [ 162 -L$PDO_OCI_LIB_DIR $PDO_OCI_SHARED_LIBADD 163 ]) 164 165 PHP_CHECK_LIBRARY(clntsh, OCIEnvNlsCreate, 166 [ 167 AC_DEFINE(HAVE_OCIENVNLSCREATE,1,[ ]) 168 ], [], [ 169 -L$PDO_OCI_LIB_DIR $PDO_OCI_SHARED_LIBADD 170 ]) 171 172 dnl 173 dnl Check if we need to add -locijdbc8 174 dnl 175 PHP_CHECK_LIBRARY(clntsh, OCILobIsTemporary, 176 [ 177 AC_DEFINE(HAVE_OCILOBISTEMPORARY,1,[ ]) 178 ], [ 179 PHP_CHECK_LIBRARY(ocijdbc8, OCILobIsTemporary, 180 [ 181 PHP_ADD_LIBRARY(ocijdbc8, 1, PDO_OCI_SHARED_LIBADD) 182 AC_DEFINE(HAVE_OCILOBISTEMPORARY,1,[ ]) 183 ], [], [ 184 -L$PDO_OCI_LIB_DIR $PDO_OCI_SHARED_LIBADD 185 ]) 186 ], [ 187 -L$PDO_OCI_LIB_DIR $PDO_OCI_SHARED_LIBADD 188 ]) 189 190 dnl 191 dnl Check if we have collections 192 dnl 193 PHP_CHECK_LIBRARY(clntsh, OCICollAssign, 194 [ 195 AC_DEFINE(HAVE_OCICOLLASSIGN,1,[ ]) 196 ], [], [ 197 -L$PDO_OCI_LIB_DIR $PDO_OCI_SHARED_LIBADD 198 ]) 199 200 dnl Scrollable cursors? 201 PHP_CHECK_LIBRARY(clntsh, OCIStmtFetch2, 202 [ 203 AC_DEFINE(HAVE_OCISTMTFETCH2,1,[ ]) 204 ], [], [ 205 -L$PDO_OCI_LIB_DIR $PDO_OCI_SHARED_LIBADD 206 ]) 207 208 ifdef([PHP_CHECK_PDO_INCLUDES], 209 [ 210 PHP_CHECK_PDO_INCLUDES 211 ],[ 212 AC_MSG_CHECKING([for PDO includes]) 213 if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then 214 pdo_cv_inc_path=$abs_srcdir/ext 215 elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then 216 pdo_cv_inc_path=$abs_srcdir/ext 217 elif test -f $phpincludedir/ext/pdo/php_pdo_driver.h; then 218 pdo_cv_inc_path=$phpincludedir/ext 219 else 220 AC_MSG_ERROR([Cannot find php_pdo_driver.h.]) 221 fi 222 AC_MSG_RESULT($pdo_cv_inc_path) 223 ]) 224 225 PHP_NEW_EXTENSION(pdo_oci, pdo_oci.c oci_driver.c oci_statement.c, $ext_shared,,-I$pdo_cv_inc_path) 226 227 PHP_SUBST_OLD(PDO_OCI_SHARED_LIBADD) 228 PHP_SUBST_OLD(PDO_OCI_DIR) 229 PHP_SUBST_OLD(PDO_OCI_VERSION) 230 231 ifdef([PHP_ADD_EXTENSION_DEP], 232 [ 233 PHP_ADD_EXTENSION_DEP(pdo_oci, pdo) 234 ]) 235 236 AC_DEFINE_UNQUOTED(PHP_PDO_OCI_CLIENT_VERSION, "$PDO_OCI_VERSION", [ ]) 237fi 238