1AC_ARG_ENABLE([sasl],
2              [AS_HELP_STRING([--enable-sasl=@<:@auto/yes/no@:>@],
3                              [Use libsasl for Kerberos.])],
4              [],
5              [enable_sasl=auto])
6
7sasl_mode=no
8
9AS_IF([test "$enable_sasl" != "no"],[
10   AS_IF(
11      [test "$enable_sasl" = "gssapi"],
12      [
13         sasl_mode=gssapi
14         AS_IF(
15            [test "$os_darwin" = "yes"],
16            [SASL_LIBS="-framework GSS"],
17            [
18               AC_CHECK_HEADERS(
19                  [gssapi/gssapi.h],
20                  [have_gssapi_headers=yes],
21                  [have_gssapi_headers=no]
22               )
23               PKG_CHECK_MODULES(KRB5_GSSAPI,
24                  [krb5-gssapi],
25                  [have_krb5_gssapi=yes],
26                  [have_krb5_gssapi=no]
27               )
28               if test "$have_gssapi_headers" = "no" -o "$have_krb5_gssapi" = "no"; then
29                  AC_MSG_ERROR([You must install the krb5 libraries and development headers to enable GSSAPI support.])
30               fi
31               SASL_CFLAGS=$KRB5_GSSAPI_CFLAGS
32               SASL_LIBS=$KRB5_GSSAPI_LIBS
33            ]
34         )
35      ],
36      [
37         PKG_CHECK_MODULES(SASL,
38            [libsasl2],
39            [sasl_mode=sasl2],
40            [
41               AS_IF([test "$enable_sasl" != "no"],
42               [
43                  AC_CHECK_LIB([sasl2],[sasl_client_init],[have_sasl2_lib=yes],[have_sasl2_lib=no])
44                  AC_CHECK_LIB([sasl],[sasl_client_init],[have_sasl_lib=yes],[have_sasl_lib=no])
45                  if test "$have_sasl_lib" = "no" -a "$have_sasl2_lib" = "no" -a "$enable_sasl" = "yes" ; then
46                     AC_MSG_ERROR([You must install the Cyrus SASL libraries and development headers to enable SASL support.])
47                  fi
48
49                  old_CFLAGS=$CFLAGS
50                  CFLAGS=$SASL_CFLAGS
51                  AC_CHECK_HEADER([sasl/sasl.h],[have_sasl_headers=yes],[have_sasl_headers=no])
52                  if test "$have_sasl_headers" = "no" -a "$enable_sasl" = "yes" ; then
53                     AC_MSG_ERROR([You must install the Cyrus SASL development headers to enable SASL support.])
54                  fi
55                  CFLAGS=$old_CFLAGS
56
57                  if test "$have_sasl_headers" -a "$have_sasl2_lib" = "yes" ; then
58                     sasl_mode=sasl2
59                     SASL_LIBS=-lsasl2
60                  fi
61
62                  if test "$have_sasl_headers" -a "$have_sasl_lib" = "yes" ; then
63                     sasl_mode=sasl
64                     SASL_LIBS=-lsasl
65                  fi
66               ])
67            ]
68         )
69      ]
70   )
71])
72
73if test "$enable_sasl" = "auto" -a "$sasl_mode" != "no"; then
74  AC_CHECK_HEADERS([sasl/sasl.h],
75     [have_sasl_headers=yes],
76     [have_sasl_headers=no])
77  if test "$have_sasl_headers" = "no"; then
78     SASL_LIBS=""
79     enable_sasl=no
80     sasl_mode=no
81  fi
82fi
83
84AM_CONDITIONAL([ENABLE_SASL], [test "$sasl_mode" != "no"])
85AM_CONDITIONAL([ENABLE_SASL_GSSAPI], [test "$sasl_mode" = "gssapi"])
86AM_CONDITIONAL([ENABLE_SASL_CYRUS], [test "$sasl_mode" = "sasl" -o "$sasl_mode" = "sasl2"])
87AM_CONDITIONAL([ENABLE_SASL_SSPI], false)
88
89AC_SUBST(SASL_CFLAGS)
90AC_SUBST(SASL_LIBS)
91
92dnl Let mongoc-config.h.in know about SASL status.
93if test "$sasl_mode" != "no" ; then
94  AC_SUBST(MONGOC_ENABLE_SASL, 1)
95  AC_SUBST(MONGOC_ENABLE_SASL_SSPI, 0)
96  if test "$sasl_mode" = "gssapi" ; then
97    AC_SUBST(MONGOC_ENABLE_SASL_GSSAPI, 1)
98    AC_SUBST(MONGOC_ENABLE_SASL_CYRUS, 0)
99    AC_SUBST(MONGOC_HAVE_SASL_CLIENT_DONE, 0)
100  else
101    AC_SUBST(MONGOC_ENABLE_SASL_GSSAPI, 0)
102    AC_SUBST(MONGOC_ENABLE_SASL_CYRUS, 1)
103    AC_CHECK_LIB([sasl2],[sasl_client_done],
104                 [have_sasl_client_done=yes],
105                 [have_sasl_client_done=no])
106    if test "$have_sasl_client_done" = "yes" ; then
107      AC_SUBST(MONGOC_HAVE_SASL_CLIENT_DONE, 1)
108    else
109      AC_SUBST(MONGOC_HAVE_SASL_CLIENT_DONE, 0)
110    fi
111  fi
112
113else
114  AC_SUBST(MONGOC_ENABLE_SASL, 0)
115  AC_SUBST(MONGOC_ENABLE_SASL_CYRUS, 0)
116  AC_SUBST(MONGOC_ENABLE_SASL_GSSAPI, 0)
117  AC_SUBST(MONGOC_ENABLE_SASL_SSPI, 0)
118  AC_SUBST(MONGOC_HAVE_SASL_CLIENT_DONE, 0)
119fi
120