config.m4 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. if test -z "$SED"; then
  2. PHP_PDO_OCI_SED="sed";
  3. else
  4. PHP_PDO_OCI_SED="$SED";
  5. fi
  6. PHP_PDO_OCI_TAIL1=`echo a | tail -n1 2>/dev/null`
  7. if test "$PHP_PDO_OCI_TAIL1" = "a"; then
  8. PHP_PDO_OCI_TAIL1="tail -n1"
  9. else
  10. PHP_PDO_OCI_TAIL1="tail -1"
  11. fi
  12. AC_DEFUN([AC_PDO_OCI_VERSION],[
  13. AC_MSG_CHECKING([Oracle version])
  14. PDO_OCI_LCS_BASE=$PDO_OCI_LIB_DIR/libclntsh.$SHLIB_SUFFIX_NAME
  15. dnl Oracle 10g, 11g, 12c etc
  16. PDO_OCI_LCS=`ls $PDO_OCI_LCS_BASE.*.1 2> /dev/null | $PHP_PDO_OCI_TAIL1`
  17. if test -f "$PDO_OCI_LCS"; then
  18. dnl Oracle 10g, 11g 12c etc. The x.2 version libraries are named x.1 for
  19. dnl drop in compatibility
  20. PDO_OCI_VERSION=`echo $PDO_OCI_LCS | $PHP_PDO_OCI_SED -e 's/.*\.\(.*\)\.1$/\1.1/'`
  21. elif test -f $PDO_OCI_LCS_BASE.9.0; then
  22. dnl There is no case for Oracle 9.2. Oracle 9.2 libraries have a 9.0 suffix
  23. dnl for drop-in compatibility with Oracle 9.0
  24. PDO_OCI_VERSION=9.0
  25. else
  26. AC_MSG_ERROR(Oracle libclntsh.$SHLIB_SUFFIX_NAME client library not found or its version is lower than 9)
  27. fi
  28. AC_MSG_RESULT($PDO_OCI_VERSION)
  29. ])
  30. AC_DEFUN([AC_PDO_OCI_CHECK_LIB_DIR],[
  31. AC_CHECK_SIZEOF([long])
  32. AC_MSG_CHECKING([if we're at 64-bit platform])
  33. AS_IF([test "$ac_cv_sizeof_long" -eq 4],[
  34. AC_MSG_RESULT([no])
  35. TMP_PDO_OCI_LIB_DIR="$PDO_OCI_DIR/lib32"
  36. ],[
  37. AC_MSG_RESULT([yes])
  38. TMP_PDO_OCI_LIB_DIR="$PDO_OCI_DIR/lib"
  39. ])
  40. AC_MSG_CHECKING([OCI8 libraries dir])
  41. if test -d "$PDO_OCI_DIR/lib" && test ! -d "$PDO_OCI_DIR/lib32"; then
  42. PDO_OCI_LIB_DIR="$PDO_OCI_DIR/lib"
  43. elif test ! -d "$PDO_OCI_DIR/lib" && test -d "$PDO_OCI_DIR/lib32"; then
  44. PDO_OCI_LIB_DIR="$PDO_OCI_DIR/lib32"
  45. elif test -d "$PDO_OCI_DIR/lib" && test -d "$PDO_OCI_DIR/lib32"; then
  46. PDO_OCI_LIB_DIR=$TMP_PDO_OCI_LIB_DIR
  47. else
  48. AC_MSG_ERROR([Oracle required OCI8 libraries not found])
  49. fi
  50. AC_MSG_RESULT($PDO_OCI_LIB_DIR)
  51. ])
  52. PHP_ARG_WITH([pdo-oci],
  53. [Oracle OCI support for PDO],
  54. [AS_HELP_STRING([[--with-pdo-oci[=DIR]]],
  55. [PDO: Oracle OCI support. DIR defaults to $ORACLE_HOME. Use
  56. --with-pdo-oci=instantclient,/path/to/instant/client/lib for an Oracle
  57. Instant Client installation.])])
  58. if test "$PHP_PDO_OCI" != "no"; then
  59. if test "$PHP_PDO" = "no" && test "$ext_shared" = "no"; then
  60. AC_MSG_ERROR([PDO is not enabled! Add --enable-pdo to your configure line.])
  61. fi
  62. AC_MSG_CHECKING([Oracle Install-Dir])
  63. if test "$PHP_PDO_OCI" = "yes" || test -z "$PHP_PDO_OCI"; then
  64. PDO_OCI_DIR=$ORACLE_HOME
  65. else
  66. PDO_OCI_DIR=$PHP_PDO_OCI
  67. fi
  68. AC_MSG_RESULT($PHP_PDO_OCI)
  69. AC_MSG_CHECKING([if that is sane])
  70. if test -z "$PDO_OCI_DIR"; then
  71. AC_MSG_ERROR([You need to tell me where to find your Oracle Instant Client SDK, or set ORACLE_HOME.])
  72. else
  73. AC_MSG_RESULT([yes])
  74. fi
  75. if test "instantclient" = "`echo $PDO_OCI_DIR | cut -d, -f1`" ; then
  76. AC_CHECK_SIZEOF([long])
  77. AC_MSG_CHECKING([if we're at 64-bit platform])
  78. AS_IF([test "$ac_cv_sizeof_long" -eq 4],[
  79. AC_MSG_RESULT([no])
  80. PDO_OCI_CLIENT_DIR="client"
  81. ],[
  82. AC_MSG_RESULT([yes])
  83. PDO_OCI_CLIENT_DIR="client64"
  84. ])
  85. PDO_OCI_LIB_DIR="`echo $PDO_OCI_DIR | cut -d, -f2`"
  86. AC_PDO_OCI_VERSION($PDO_OCI_LIB_DIR)
  87. AC_MSG_CHECKING([for oci.h])
  88. dnl Header directory for Instant Client SDK RPM install
  89. OCISDKRPMINC=`echo "$PDO_OCI_LIB_DIR" | $PHP_PDO_OCI_SED -e 's!^\(.*\)/lib/oracle/\(.*\)/\('${PDO_OCI_CLIENT_DIR}'\)/lib[/]*$!\1/include/oracle/\2/\3!'`
  90. dnl Header directory for manual installation
  91. OCISDKMANINC=`echo "$PDO_OCI_LIB_DIR" | $PHP_PDO_OCI_SED -e 's!^\(.*\)/lib[/]*$!\1/include!'`
  92. dnl Header directory for Instant Client SDK zip file install
  93. OCISDKZIPINC=$PDO_OCI_LIB_DIR/sdk/include
  94. if test -f "$OCISDKRPMINC/oci.h" ; then
  95. PHP_ADD_INCLUDE($OCISDKRPMINC)
  96. AC_MSG_RESULT($OCISDKRPMINC)
  97. elif test -f "$OCISDKMANINC/oci.h" ; then
  98. PHP_ADD_INCLUDE($OCISDKMANINC)
  99. AC_MSG_RESULT($OCISDKMANINC)
  100. elif test -f "$OCISDKZIPINC/oci.h" ; then
  101. PHP_ADD_INCLUDE($OCISDKZIPINC)
  102. AC_MSG_RESULT($OCISDKZIPINC)
  103. else
  104. AC_MSG_ERROR([I'm too dumb to figure out where the include dir is in your Instant Client install])
  105. fi
  106. else
  107. AC_PDO_OCI_CHECK_LIB_DIR($PDO_OCI_DIR)
  108. if test -d "$PDO_OCI_DIR/rdbms/public"; then
  109. PHP_ADD_INCLUDE($PDO_OCI_DIR/rdbms/public)
  110. PDO_OCI_INCLUDES="$PDO_OCI_INCLUDES -I$PDO_OCI_DIR/rdbms/public"
  111. fi
  112. if test -d "$PDO_OCI_DIR/rdbms/demo"; then
  113. PHP_ADD_INCLUDE($PDO_OCI_DIR/rdbms/demo)
  114. PDO_OCI_INCLUDES="$PDO_OCI_INCLUDES -I$PDO_OCI_DIR/rdbms/demo"
  115. fi
  116. if test -d "$PDO_OCI_DIR/network/public"; then
  117. PHP_ADD_INCLUDE($PDO_OCI_DIR/network/public)
  118. PDO_OCI_INCLUDES="$PDO_OCI_INCLUDES -I$PDO_OCI_DIR/network/public"
  119. fi
  120. if test -d "$PDO_OCI_DIR/plsql/public"; then
  121. PHP_ADD_INCLUDE($PDO_OCI_DIR/plsql/public)
  122. PDO_OCI_INCLUDES="$PDO_OCI_INCLUDES -I$PDO_OCI_DIR/plsql/public"
  123. fi
  124. if test -d "$PDO_OCI_DIR/include"; then
  125. PHP_ADD_INCLUDE($PDO_OCI_DIR/include)
  126. PDO_OCI_INCLUDES="$PDO_OCI_INCLUDES -I$PDO_OCI_DIR/include"
  127. fi
  128. if test -f "$PDO_OCI_LIB_DIR/sysliblist"; then
  129. PHP_EVAL_LIBLINE(`cat $PDO_OCI_LIB_DIR/sysliblist`, PDO_OCI_SYSLIB)
  130. elif test -f "$PDO_OCI_DIR/rdbms/lib/sysliblist"; then
  131. PHP_EVAL_LIBLINE(`cat $PDO_OCI_DIR/rdbms/lib/sysliblist`, PDO_OCI_SYSLIB)
  132. fi
  133. AC_PDO_OCI_VERSION($PDO_OCI_LIB_DIR)
  134. fi
  135. case $PDO_OCI_VERSION in
  136. 7.3|8.0|8.1)
  137. AC_MSG_ERROR([Oracle client libraries < 9 are not supported])
  138. ;;
  139. esac
  140. PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
  141. PHP_ADD_LIBPATH($PDO_OCI_LIB_DIR, PDO_OCI_SHARED_LIBADD)
  142. PHP_CHECK_LIBRARY(clntsh, OCIEnvCreate,
  143. [
  144. AC_DEFINE(HAVE_OCIENVCREATE,1,[ ])
  145. ], [], [
  146. -L$PDO_OCI_LIB_DIR $PDO_OCI_SHARED_LIBADD
  147. ])
  148. PHP_CHECK_LIBRARY(clntsh, OCIEnvNlsCreate,
  149. [
  150. AC_DEFINE(HAVE_OCIENVNLSCREATE,1,[ ])
  151. ], [], [
  152. -L$PDO_OCI_LIB_DIR $PDO_OCI_SHARED_LIBADD
  153. ])
  154. dnl Scrollable cursors?
  155. PHP_CHECK_LIBRARY(clntsh, OCIStmtFetch2,
  156. [
  157. AC_DEFINE(HAVE_OCISTMTFETCH2,1,[ ])
  158. ], [], [
  159. -L$PDO_OCI_LIB_DIR $PDO_OCI_SHARED_LIBADD
  160. ])
  161. PHP_CHECK_PDO_INCLUDES
  162. PHP_NEW_EXTENSION(pdo_oci, pdo_oci.c oci_driver.c oci_statement.c, $ext_shared,,-I$pdo_cv_inc_path)
  163. PHP_SUBST_OLD(PDO_OCI_SHARED_LIBADD)
  164. PHP_SUBST_OLD(PDO_OCI_DIR)
  165. PHP_SUBST_OLD(PDO_OCI_VERSION)
  166. PHP_ADD_EXTENSION_DEP(pdo_oci, pdo)
  167. AC_DEFINE_UNQUOTED(PHP_PDO_OCI_CLIENT_VERSION, "$PDO_OCI_VERSION", [ ])
  168. fi