summaryrefslogtreecommitdiff
path: root/ext/pdo_odbc/config.m4
blob: 94acaf46d05dbdd85aec0274db16f752a106c77c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
dnl $Id$
dnl config.m4 for extension pdo_odbc
dnl vim:et:sw=2:ts=2:

if test "$PHP_PDO" != "no"; then

define([PDO_ODBC_HELP_TEXT],[[
                            include and lib dirs are looked under 'dir'.
                            'flavour' can be one of:  ibm-db2, unixODBC, generic
                            If ',dir' part is omitted, default for the flavour 
                            you have selected will used. e.g.:
                              --with-pdo-odbc=unixODBC
                            will check for unixODBC under /usr/local. You may attempt 
                            to use an otherwise unsupported driver using the \"generic\" 
                            flavour.  The syntax for generic ODBC support is:
                              --with-pdo-odbc=generic,dir,ldflags,cflags
                            This extension will always be created as a shared extension
                            named pdo_odbc.so]])

PHP_ARG_WITH(pdo-odbc, for ODBC v3 support for PDO,
[  --with-pdo-odbc=flavour,dir
                            PDO: Support for 'flavour' ODBC driver.]PDO_ODBC_HELP_TEXT)

AC_DEFUN([PDO_ODBC_CHECK_HEADER],[
  if test -f $PDO_ODBC_INCDIR/$1 ; then
    AC_DEFINE([HAVE_]translit($1,a-z_.-,A-Z___), 1, [ ])
  fi
])
                                  
if test "$PHP_PDO_ODBC" != "no"; then
  AC_MSG_CHECKING([for selected PDO ODBC flavour])

  pdo_odbc_flavour="`echo $PHP_PDO_ODBC | cut -d, -f1`"
  pdo_odbc_dir="`echo $PHP_PDO_ODBC | cut -d, -f2`"

  if test "$pdo_odbc_dir" = "$PHP_PDO_ODBC" ; then
    pdo_odbc_dir=
  fi

  case $pdo_odbc_flavour in
    ibm-db2)
        pdo_odbc_def_libdir=/home/db2inst1/sqllib/lib
        pdo_odbc_def_incdir=/home/db2inst1/sqllib/include
        pdo_odbc_def_lib=-ldb2
        ;;

    unixODBC|unixodbc)
        pdo_odbc_def_libdir=/usr/local/lib
        pdo_odbc_def_incdir=/usr/local/include
        pdo_odbc_def_lib=-lodbc
        ;;

    ODBCRouter|odbcrouter)
        pdo_odbc_def_libdir=/usr/lib
        pdo_odbc_def_incdir=/usr/include
        pdo_odbc_def_lib=-lodbcsdk
        ;;

    generic)
        pdo_odbc_def_lib="`echo $PHP_PDO_ODBC | cut -d, -f3`"
        pdo_odbc_def_cflags="`echo $PHP_PDO_ODBC | cut -d, -f4`"
        pdo_odbc_flavour="$pdo_odbc_flavour ($pdo_odbc_def_lib)"
        ;;

      *)
        AC_MSG_ERROR([Unknown ODBC flavour $pdo_odbc_flavour]PDO_ODBC_HELP_TEXT)
        ;;
  esac

  if test -n "$pdo_odbc_dir"; then
    PDO_ODBC_INCDIR="$pdo_odbc_dir/include"
    PDO_ODBC_LIBDIR="$pdo_odbc_dir/lib"
  else
    PDO_ODBC_INCDIR="$pdo_odbc_def_incdir"
    PDO_ODBC_LIBDIR="$pdo_odbc_def_libdir"
  fi
  
  AC_MSG_RESULT([$pdo_odbc_flavour
          libs       $PDO_ODBC_LIBDIR,
          headers    $PDO_ODBC_INCDIR])

  if ! test -d "$PDO_ODBC_LIBDIR" ; then
    AC_MSG_WARN([library dir $PDO_ODBC_LIBDIR does not exist])
  fi

  dnl yick time
  PDO_ODBC_CHECK_HEADER(odbc.h)
  PDO_ODBC_CHECK_HEADER(odbcsdk.h)
  PDO_ODBC_CHECK_HEADER(iodbc.h)
  PDO_ODBC_CHECK_HEADER(sqlunix.h)
  PDO_ODBC_CHECK_HEADER(sqltypes.h)
  PDO_ODBC_CHECK_HEADER(sqlucode.h)
  PDO_ODBC_CHECK_HEADER(sql.h)
  PDO_ODBC_CHECK_HEADER(isql.h)
  PDO_ODBC_CHECK_HEADER(sqlext.h)
  PDO_ODBC_CHECK_HEADER(isqlext.h)
  PDO_ODBC_CHECK_HEADER(udbcext.h)
  PDO_ODBC_CHECK_HEADER(sqlcli1.h)
  PDO_ODBC_CHECK_HEADER(LibraryManager.h)
  PDO_ODBC_CHECK_HEADER(cli0core.h)
  PDO_ODBC_CHECK_HEADER(cli0ext.h)
  PDO_ODBC_CHECK_HEADER(cli0cli.h)
  PDO_ODBC_CHECK_HEADER(cli0defs.h)
  PDO_ODBC_CHECK_HEADER(cli0env.h)

  PDO_ODBC_INCLUDE="$pdo_odbc_def_cflags -I$PDO_ODBC_INCDIR -DPDO_ODBC_TYPE=\\\"$pdo_odbc_flavour\\\""
  PDO_ODBC_LFLAGS="-L$PDO_ODBC_LIBDIR"
  PDO_ODBC_LIBS="$pdo_odbc_def_lib"

  save_old_LDFLAGS="$LDFLAGS"
  LDFLAGS="$PDO_ODBC_LFLAGS $PDO_ODBC_LIBS -lm -ldl"
  dnl Check for an ODBC 1.0 function to assert that the libraries work
  AC_TRY_LINK_FUNC([SQLBindCol],[],[
    AC_MSG_ERROR([[Your ODBC library does not exist]])
  ])
  dnl And now check for an ODBC 3.0 function to assert that they're
  dnl *good* libraries.
  AC_TRY_LINK_FUNC([SQLAllocHandle],[],[
    AC_MSG_ERROR([[
Your ODBC library does not appear to be ODBC 3 compatible.
You should consider using unixODBC instead, and loading your
libraries as a driver in that environment; it will emulate the
functions required for PDO support.
]])
  ])
  LDFLAGS=$save_old_LDFLAGS
  PHP_EVAL_LIBLINE($PDO_ODBC_LIBS $PDO_ODBC_LFLAGS, [PDO_ODBC_SHARED_LIBADD])
  PHP_SUBST(PDO_ODBC_SHARED_LIBADD)

  PHP_CHECK_PDO_INCLUDES

  PHP_NEW_EXTENSION(pdo_odbc, pdo_odbc.c odbc_driver.c odbc_stmt.c, $ext_shared,,-I$pdo_inc_path $PDO_ODBC_INCLUDE)
  PHP_ADD_EXTENSION_DEP(pdo_odbc, pdo)
fi

fi