config.m4 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. dnl $Id$
  2. dnl config.m4 for extension pdo_oci
  3. dnl vim:et:sw=2:ts=2:
  4. SUPPORTED_LIB_VERS="9.0 10.1 11.1 12.1" # The lib vers are not bumped when the DB version is bumped
  5. AC_DEFUN([AC_PDO_OCI_VERSION],[
  6. AC_MSG_CHECKING([Oracle version])
  7. for OCI_VER in $SUPPORTED_LIB_VERS; do
  8. if test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.$OCI_VER; then
  9. PDO_OCI_VERSION="$OCI_VER"
  10. fi
  11. done
  12. if test -z "$PDO_OCI_VERSION"; then
  13. AC_MSG_ERROR([Oracle required OCI8 libraries not found under $PDO_OCI_DIR])
  14. fi
  15. AC_MSG_RESULT($PDO_OCI_VERSION)
  16. ])
  17. AC_DEFUN([AC_PDO_OCI_CHECK_LIB_DIR],[
  18. AC_CHECK_SIZEOF(long int, 4)
  19. AC_MSG_CHECKING([if we're on a 64-bit platform])
  20. if test "$ac_cv_sizeof_long_int" = "4" ; then
  21. AC_MSG_RESULT([no])
  22. TMP_PDO_OCI_LIB_DIR="$PDO_OCI_DIR/lib32"
  23. else
  24. AC_MSG_RESULT([yes])
  25. TMP_PDO_OCI_LIB_DIR="$PDO_OCI_DIR/lib"
  26. fi
  27. AC_MSG_CHECKING([OCI8 libraries dir])
  28. if test -d "$PDO_OCI_DIR/lib" && test ! -d "$PDO_OCI_DIR/lib32"; then
  29. PDO_OCI_LIB_DIR="$PDO_OCI_DIR/lib"
  30. elif test ! -d "$PDO_OCI_DIR/lib" && test -d "$PDO_OCI_DIR/lib32"; then
  31. PDO_OCI_LIB_DIR="$PDO_OCI_DIR/lib32"
  32. elif test -d "$PDO_OCI_DIR/lib" && test -d "$PDO_OCI_DIR/lib32"; then
  33. PDO_OCI_LIB_DIR=$TMP_PDO_OCI_LIB_DIR
  34. else
  35. AC_MSG_ERROR([Oracle required OCI8 libraries not found])
  36. fi
  37. AC_MSG_RESULT($PDO_OCI_LIB_DIR)
  38. ])
  39. PHP_ARG_WITH(pdo-oci, Oracle OCI support for PDO,
  40. [ --with-pdo-oci[=DIR] PDO: Oracle OCI support. DIR defaults to \$ORACLE_HOME.
  41. Use --with-pdo-oci=instantclient,prefix,version
  42. for an Oracle Instant Client SDK.
  43. For example on Linux with 11.2 RPMs use:
  44. --with-pdo-oci=instantclient,/usr,11.2
  45. With 10.2 RPMs use:
  46. --with-pdo-oci=instantclient,/usr,10.2.0.4])
  47. if test "$PHP_PDO_OCI" != "no"; then
  48. if test "$PHP_PDO" = "no" && test "$ext_shared" = "no"; then
  49. AC_MSG_ERROR([PDO is not enabled! Add --enable-pdo to your configure line.])
  50. fi
  51. AC_MSG_CHECKING([Oracle Install-Dir])
  52. if test "$PHP_PDO_OCI" = "yes" || test -z "$PHP_PDO_OCI"; then
  53. PDO_OCI_DIR=$ORACLE_HOME
  54. else
  55. PDO_OCI_DIR=$PHP_PDO_OCI
  56. fi
  57. AC_MSG_RESULT($PHP_PDO_OCI)
  58. AC_MSG_CHECKING([if that is sane])
  59. if test -z "$PDO_OCI_DIR"; then
  60. AC_MSG_ERROR([
  61. You need to tell me where to find your Oracle Instant Client SDK, or set ORACLE_HOME.
  62. ])
  63. else
  64. AC_MSG_RESULT([yes])
  65. fi
  66. if test "instantclient" = "`echo $PDO_OCI_DIR | cut -d, -f1`" ; then
  67. AC_CHECK_SIZEOF(long int, 4)
  68. if test "$ac_cv_sizeof_long_int" = "4" ; then
  69. PDO_OCI_CLIENT_DIR="client"
  70. else
  71. PDO_OCI_CLIENT_DIR="client64"
  72. fi
  73. PDO_OCI_IC_PREFIX="`echo $PDO_OCI_DIR | cut -d, -f2`"
  74. PDO_OCI_IC_VERS="`echo $PDO_OCI_DIR | cut -d, -f3`"
  75. if test -n "$PDO_OCI_IC_VERS"; then
  76. PDO_OCI_IC_MAJ_VER="`echo $PDO_OCI_IC_VERS | cut -d. -f1`"
  77. if test "$PDO_OCI_IC_MAJ_VER" -ge 11; then
  78. # From 11.1.0.7 the RPM path only has an X.Y component
  79. PDO_OCI_IC_VERS="`echo $PDO_OCI_IC_VERS | cut -d. -f1-2`"
  80. fi
  81. fi
  82. AC_MSG_CHECKING([for oci.h])
  83. if test -f $PDO_OCI_IC_PREFIX/include/oracle/$PDO_OCI_IC_VERS/$PDO_OCI_CLIENT_DIR/oci.h ; then
  84. PHP_ADD_INCLUDE($PDO_OCI_IC_PREFIX/include/oracle/$PDO_OCI_IC_VERS/$PDO_OCI_CLIENT_DIR)
  85. AC_MSG_RESULT($PDO_OCI_IC_PREFIX/include/oracle/$PDO_OCI_IC_VERS/$PDO_OCI_CLIENT_DIR)
  86. elif test -f $PDO_OCI_IC_PREFIX/lib/oracle/$PDO_OCI_IC_VERS/$PDO_OCI_CLIENT_DIR/include/oci.h ; then
  87. PHP_ADD_INCLUDE($PDO_OCI_IC_PREFIX/lib/oracle/$PDO_OCI_IC_VERS/$PDO_OCI_CLIENT_DIR/include)
  88. AC_MSG_RESULT($PDO_OCI_IC_PREFIX/lib/oracle/$PDO_OCI_IC_VERS/$PDO_OCI_CLIENT_DIR/include)
  89. elif test -f $PDO_OCI_IC_PREFIX/sdk/include/oci.h ; then
  90. PHP_ADD_INCLUDE($PDO_OCI_IC_PREFIX/sdk/include)
  91. AC_MSG_RESULT($PDO_OCI_IC_PREFIX/sdk/include)
  92. elif test -f $PDO_OCI_IC_PREFIX/$PDO_OCI_CLIENT_DIR/include/oci.h ; then
  93. PHP_ADD_INCLUDE($PDO_OCI_IC_PREFIX/$PDO_OCI_CLIENT_DIR/include)
  94. AC_MSG_RESULT($PDO_OCI_IC_PREFIX/$PDO_OCI_CLIENT_DIR/include)
  95. else
  96. AC_MSG_ERROR([I'm too dumb to figure out where the include dir is in your Instant Client install])
  97. fi
  98. if test -f "$PDO_OCI_IC_PREFIX/lib/oracle/$PDO_OCI_IC_VERS/$PDO_OCI_CLIENT_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME" ; then
  99. PDO_OCI_LIB_DIR="$PDO_OCI_IC_PREFIX/lib/oracle/$PDO_OCI_IC_VERS/$PDO_OCI_CLIENT_DIR/lib"
  100. elif test -f "$PDO_OCI_IC_PREFIX/$PDO_OCI_CLIENT_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME" ; then
  101. PDO_OCI_LIB_DIR="$PDO_OCI_IC_PREFIX/$PDO_OCI_CLIENT_DIR/lib"
  102. elif test -f "$PDO_OCI_IC_PREFIX/libclntsh.$SHLIB_SUFFIX_NAME" ; then
  103. PDO_OCI_LIB_DIR="$PDO_OCI_IC_PREFIX"
  104. else
  105. AC_MSG_ERROR([I'm too dumb to figure out where the libraries are in your Instant Client install])
  106. fi
  107. PDO_OCI_VERSION="`echo $PDO_OCI_IC_VERS | cut -d. -f1-2`"
  108. else
  109. AC_PDO_OCI_CHECK_LIB_DIR($PDO_OCI_DIR)
  110. if test -d "$PDO_OCI_DIR/rdbms/public"; then
  111. PHP_ADD_INCLUDE($PDO_OCI_DIR/rdbms/public)
  112. PDO_OCI_INCLUDES="$PDO_OCI_INCLUDES -I$PDO_OCI_DIR/rdbms/public"
  113. fi
  114. if test -d "$PDO_OCI_DIR/rdbms/demo"; then
  115. PHP_ADD_INCLUDE($PDO_OCI_DIR/rdbms/demo)
  116. PDO_OCI_INCLUDES="$PDO_OCI_INCLUDES -I$PDO_OCI_DIR/rdbms/demo"
  117. fi
  118. if test -d "$PDO_OCI_DIR/network/public"; then
  119. PHP_ADD_INCLUDE($PDO_OCI_DIR/network/public)
  120. PDO_OCI_INCLUDES="$PDO_OCI_INCLUDES -I$PDO_OCI_DIR/network/public"
  121. fi
  122. if test -d "$PDO_OCI_DIR/plsql/public"; then
  123. PHP_ADD_INCLUDE($PDO_OCI_DIR/plsql/public)
  124. PDO_OCI_INCLUDES="$PDO_OCI_INCLUDES -I$PDO_OCI_DIR/plsql/public"
  125. fi
  126. if test -d "$PDO_OCI_DIR/include"; then
  127. PHP_ADD_INCLUDE($PDO_OCI_DIR/include)
  128. PDO_OCI_INCLUDES="$PDO_OCI_INCLUDES -I$PDO_OCI_DIR/include"
  129. fi
  130. if test -f "$PDO_OCI_LIB_DIR/sysliblist"; then
  131. PHP_EVAL_LIBLINE(`cat $PDO_OCI_LIB_DIR/sysliblist`, PDO_OCI_SYSLIB)
  132. elif test -f "$PDO_OCI_DIR/rdbms/lib/sysliblist"; then
  133. PHP_EVAL_LIBLINE(`cat $PDO_OCI_DIR/rdbms/lib/sysliblist`, PDO_OCI_SYSLIB)
  134. fi
  135. AC_PDO_OCI_VERSION($PDO_OCI_DIR)
  136. fi
  137. case $PDO_OCI_VERSION in
  138. 9.0|10.1|10.2|11.1|11.2|12.1)
  139. PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
  140. ;;
  141. *)
  142. AC_MSG_ERROR(Unsupported Oracle version $PDO_OCI_VERSION)
  143. ;;
  144. esac
  145. PHP_ADD_LIBPATH($PDO_OCI_LIB_DIR, PDO_OCI_SHARED_LIBADD)
  146. PHP_CHECK_LIBRARY(clntsh, OCIEnvCreate,
  147. [
  148. AC_DEFINE(HAVE_OCIENVCREATE,1,[ ])
  149. ], [], [
  150. -L$PDO_OCI_LIB_DIR $PDO_OCI_SHARED_LIBADD
  151. ])
  152. PHP_CHECK_LIBRARY(clntsh, OCIEnvNlsCreate,
  153. [
  154. AC_DEFINE(HAVE_OCIENVNLSCREATE,1,[ ])
  155. ], [], [
  156. -L$PDO_OCI_LIB_DIR $PDO_OCI_SHARED_LIBADD
  157. ])
  158. dnl
  159. dnl Check if we need to add -locijdbc8
  160. dnl
  161. PHP_CHECK_LIBRARY(clntsh, OCILobIsTemporary,
  162. [
  163. AC_DEFINE(HAVE_OCILOBISTEMPORARY,1,[ ])
  164. ], [
  165. PHP_CHECK_LIBRARY(ocijdbc8, OCILobIsTemporary,
  166. [
  167. PHP_ADD_LIBRARY(ocijdbc8, 1, PDO_OCI_SHARED_LIBADD)
  168. AC_DEFINE(HAVE_OCILOBISTEMPORARY,1,[ ])
  169. ], [], [
  170. -L$PDO_OCI_LIB_DIR $PDO_OCI_SHARED_LIBADD
  171. ])
  172. ], [
  173. -L$PDO_OCI_LIB_DIR $PDO_OCI_SHARED_LIBADD
  174. ])
  175. dnl
  176. dnl Check if we have collections
  177. dnl
  178. PHP_CHECK_LIBRARY(clntsh, OCICollAssign,
  179. [
  180. AC_DEFINE(HAVE_OCICOLLASSIGN,1,[ ])
  181. ], [], [
  182. -L$PDO_OCI_LIB_DIR $PDO_OCI_SHARED_LIBADD
  183. ])
  184. dnl Scrollable cursors?
  185. PHP_CHECK_LIBRARY(clntsh, OCIStmtFetch2,
  186. [
  187. AC_DEFINE(HAVE_OCISTMTFETCH2,1,[ ])
  188. ], [], [
  189. -L$PDO_OCI_LIB_DIR $PDO_OCI_SHARED_LIBADD
  190. ])
  191. ifdef([PHP_CHECK_PDO_INCLUDES],
  192. [
  193. PHP_CHECK_PDO_INCLUDES
  194. ],[
  195. AC_MSG_CHECKING([for PDO includes])
  196. if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
  197. pdo_cv_inc_path=$abs_srcdir/ext
  198. elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
  199. pdo_cv_inc_path=$abs_srcdir/ext
  200. elif test -f $prefix/include/php/ext/pdo/php_pdo_driver.h; then
  201. pdo_cv_inc_path=$prefix/include/php/ext
  202. else
  203. AC_MSG_ERROR([Cannot find php_pdo_driver.h.])
  204. fi
  205. AC_MSG_RESULT($pdo_cv_inc_path)
  206. ])
  207. PHP_NEW_EXTENSION(pdo_oci, pdo_oci.c oci_driver.c oci_statement.c, $ext_shared,,-I$pdo_cv_inc_path)
  208. PHP_SUBST_OLD(PDO_OCI_SHARED_LIBADD)
  209. PHP_SUBST_OLD(PDO_OCI_DIR)
  210. PHP_SUBST_OLD(PDO_OCI_VERSION)
  211. ifdef([PHP_ADD_EXTENSION_DEP],
  212. [
  213. PHP_ADD_EXTENSION_DEP(pdo_oci, pdo)
  214. ])
  215. AC_DEFINE_UNQUOTED(PHP_PDO_OCI_CLIENT_VERSION, "$PDO_OCI_VERSION", [ ])
  216. fi