xref: /PHP-7.2/ext/pdo_oci/config.m4 (revision 60a69dae)
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