1# sasl2.m4--sasl2 libraries and includes
2# Rob Siemborski
3
4# SASL2_CRYPT_CHK
5# ---------------
6AC_DEFUN([SASL_GSSAPI_CHK],
7[AC_REQUIRE([SASL2_CRYPT_CHK])
8AC_REQUIRE([CMU_SOCKETS])
9AC_ARG_ENABLE([gssapi],
10              [AC_HELP_STRING([--enable-gssapi=<DIR>],
11                              [enable GSSAPI authentication [yes]])],
12              [gssapi=$enableval],
13              [gssapi=yes])
14AC_ARG_WITH([gss_impl],
15            [AC_HELP_STRING([--with-gss_impl={heimdal|mit|cybersafe|seam|auto}],
16                            [choose specific GSSAPI implementation [[auto]]])],
17            [gss_impl=$withval],
18            [gss_impl=auto])
19
20gs2="no"
21if test "$gssapi" != no; then
22  platform=
23  case "${host}" in
24    *-*-linux*)
25      platform=__linux
26      ;;
27    *-*-hpux*)
28      platform=__hpux
29      ;;
30    *-*-irix*)
31      platform=__irix
32      ;;
33    *-*-solaris2*)
34# When should we use __sunos?
35      platform=__solaris
36      ;;
37    *-*-aix*)
38###_AIX
39      platform=__aix
40      ;;
41    *-*-darwin*)
42      platform=__darwin
43      ;;
44    *)
45      AC_WARN([The system type is not recognized. If you believe that CyberSafe GSSAPI works on this platform, please update the configure script])
46      if test "$gss_impl" = "cybersafe"; then
47        AC_MSG_ERROR([CyberSafe was forced, cannot continue as platform is not supported])
48      fi
49      ;;
50  esac
51
52  cmu_saved_CPPFLAGS=$CPPFLAGS
53
54  if test -d ${gssapi}; then
55    CPPFLAGS="$CPPFLAGS -I$gssapi/include"
56# We want to keep -I in our CPPFLAGS, but only if we succeed
57    cmu_saved_CPPFLAGS=$CPPFLAGS
58### I am not sure how useful is this (and whether this is required at all
59### especially when we have to provide two -L flags for new CyberSafe
60    LDFLAGS="$LDFLAGS -L$gssapi/lib"
61
62    if test -n "$platform"; then
63      if test "$gss_impl" = "auto" -o "$gss_impl" = "cybersafe"; then
64        CPPFLAGS="$CPPFLAGS -D$platform"
65        if test -d "${gssapi}/appsec-sdk/include"; then
66          CPPFLAGS="$CPPFLAGS -I${gssapi}/appsec-sdk/include"
67        fi
68      fi
69    fi
70  fi
71  AC_CHECK_HEADER([gssapi.h],,
72                  [AC_CHECK_HEADER([gssapi/gssapi.h],, [gssapi=no])])
73  AC_CHECK_HEADERS(gssapi/gssapi_ext.h)
74  CPPFLAGS=$cmu_saved_CPPFLAGS
75
76fi
77
78if test "$gssapi" != no; then
79  if test "$ac_cv_header_gssapi_h" = "yes"; then
80    AC_DEFINE(HAVE_GSSAPI_H,,[Define if you have the gssapi.h header file])
81  elif test "$ac_cv_header_gssapi_gssapi_h" = "yes"; then
82    AC_DEFINE(HAVE_GSSAPI_GSSAPI_H,,[Define if you have the gssapi/gssapi.h header file])
83  fi
84
85  # We need to find out which gssapi implementation we are
86  # using. Supported alternatives are: MIT Kerberos 5,
87  # Heimdal Kerberos 5 (http://www.pdc.kth.se/heimdal),
88  # CyberSafe Kerberos 5 (http://www.cybersafe.com/)
89  # and Sun SEAM (http://wwws.sun.com/software/security/kerberos/)
90  #
91  # The choice is reflected in GSSAPIBASE_LIBS
92
93  AC_CHECK_LIB(resolv,res_search)
94  if test -d ${gssapi}; then
95     gssapi_dir="${gssapi}/lib"
96     GSSAPIBASE_LIBS="-L$gssapi_dir"
97     GSSAPIBASE_STATIC_LIBS="-L$gssapi_dir"
98  else
99     # FIXME: This is only used for building cyrus, and then only as
100     # a real hack.  it needs to be fixed.
101     gssapi_dir="/usr/local/lib"
102  fi
103
104  # Check a full link against the Heimdal libraries.
105  # If this fails, check a full link against the MIT libraries.
106  # If this fails, check a full link against the CyberSafe libraries.
107  # If this fails, check a full link against the Solaris 8 and up libgss.
108
109  if test "$gss_impl" = "auto" -o "$gss_impl" = "heimdal"; then
110    gss_failed=0
111    AC_CHECK_LIB(gssapi,gss_unwrap,gss_impl="heimdal",gss_failed=1,
112                 ${GSSAPIBASE_LIBS} -lgssapi -lkrb5 -lasn1 -lroken ${LIB_CRYPT} ${LIB_DES} -lcom_err ${LIB_SOCKET})
113    if test "$gss_impl" != "auto" -a "$gss_failed" = "1"; then
114      gss_impl="failed"
115    fi
116  fi
117
118  if test "$gss_impl" = "auto" -o "$gss_impl" = "mit"; then
119    gss_failed=0
120    AC_CHECK_LIB(gssapi_krb5,gss_unwrap,gss_impl="mit",gss_failed=1,
121                 ${GSSAPIBASE_LIBS} -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err ${LIB_SOCKET})
122    if test "$gss_impl" != "auto" -a "$gss_failed" = "1"; then
123      gss_impl="failed"
124    fi
125  fi
126
127  # For Cybersafe one has to set a platform define in order to make compilation work
128  if test "$gss_impl" = "auto" -o "$gss_impl" = "cybersafe"; then
129
130    cmu_saved_CPPFLAGS=$CPPFLAGS
131    cmu_saved_GSSAPIBASE_LIBS=$GSSAPIBASE_LIBS
132# FIXME - Note that the libraries are in .../lib64 for 64bit kernels
133    if test -d "${gssapi}/appsec-rt/lib"; then
134      GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -L${gssapi}/appsec-rt/lib"
135    fi
136    CPPFLAGS="$CPPFLAGS -D$platform"
137    if test -d "${gssapi}/appsec-sdk/include"; then
138      CPPFLAGS="$CPPFLAGS -I${gssapi}/appsec-sdk/include"
139    fi
140
141    gss_failed=0
142
143# Check for CyberSafe with two libraries first, than fall back to a single
144# library (older CyberSafe)
145
146    unset ac_cv_lib_gss_csf_gss_acq_user
147    AC_CHECK_LIB(gss,csf_gss_acq_user,gss_impl="cybersafe03",
148                 [unset ac_cv_lib_gss_csf_gss_acq_user;
149                  AC_CHECK_LIB(gss,csf_gss_acq_user,gss_impl="cybersafe",
150                               gss_failed=1,$GSSAPIBASE_LIBS -lgss)],
151                 [${GSSAPIBASE_LIBS} -lgss -lcstbk5])
152
153    if test "$gss_failed" = "1"; then
154# Restore variables
155      GSSAPIBASE_LIBS=$cmu_saved_GSSAPIBASE_LIBS
156      CPPFLAGS=$cmu_saved_CPPFLAGS
157
158      if test "$gss_impl" != "auto"; then
159        gss_impl="failed"
160      fi
161    fi
162  fi
163
164  if test "$gss_impl" = "auto" -o "$gss_impl" = "seam"; then
165    gss_failed=0
166    AC_CHECK_LIB(gss,gss_unwrap,gss_impl="seam",gss_failed=1,-lgss)
167    if test "$gss_impl" != "auto" -a "$gss_failed" = "1"; then
168      gss_impl="failed"
169    fi
170  fi
171
172  if test "$gss_impl" = "mit"; then
173    GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err"
174    GSSAPIBASE_STATIC_LIBS="$GSSAPIBASE_LIBS $gssapi_dir/libgssapi_krb5.a $gssapi_dir/libkrb5.a $gssapi_dir/libk5crypto.a $gssapi_dir/libcom_err.a"
175  elif test "$gss_impl" = "heimdal"; then
176    CPPFLAGS="$CPPFLAGS"
177    GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lgssapi -lkrb5 -lasn1 -lroken ${LIB_CRYPT} ${LIB_DES} -lcom_err"
178    GSSAPIBASE_STATIC_LIBS="$GSSAPIBASE_STATIC_LIBS $gssapi_dir/libgssapi.a $gssapi_dir/libkrb5.a $gssapi_dir/libasn1.a $gssapi_dir/libroken.a $gssapi_dir/libcom_err.a ${LIB_CRYPT}"
179  elif test "$gss_impl" = "cybersafe03"; then
180# Version of CyberSafe with two libraries
181    CPPFLAGS="$CPPFLAGS -D$platform -I${gssapi}/appsec-sdk/include"
182    GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lgss -lcstbk5"
183    # there is no static libgss for CyberSafe
184    GSSAPIBASE_STATIC_LIBS=none
185  elif test "$gss_impl" = "cybersafe"; then
186    CPPFLAGS="$CPPFLAGS -D$platform -I${gssapi}/appsec-sdk/include"
187    GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lgss"
188    # there is no static libgss for CyberSafe
189    GSSAPIBASE_STATIC_LIBS=none
190  elif test "$gss_impl" = "seam"; then
191    GSSAPIBASE_LIBS=-lgss
192    # there is no static libgss on Solaris 8 and up
193    GSSAPIBASE_STATIC_LIBS=none
194  elif test "$gss_impl" = "failed"; then
195    gssapi="no"
196    GSSAPIBASE_LIBS=
197    GSSAPIBASE_STATIC_LIBS=
198    AC_WARN([Disabling GSSAPI - specified library not found])
199  else
200    gssapi="no"
201    GSSAPIBASE_LIBS=
202    GSSAPIBASE_STATIC_LIBS=
203    AC_WARN([Disabling GSSAPI - no library])
204  fi
205fi
206
207#
208# Cybersafe defines both GSS_C_NT_HOSTBASED_SERVICE and GSS_C_NT_USER_NAME
209# in gssapi\rfckrb5.h
210#
211if test "$gssapi" != "no"; then
212  if test "$gss_impl" = "cybersafe" -o "$gss_impl" = "cybersafe03"; then
213    AC_EGREP_CPP(hostbased_service_gss_nt_yes,
214                 [#include <gssapi/gssapi.h>
215                  #ifdef GSS_C_NT_HOSTBASED_SERVICE
216                    hostbased_service_gss_nt_yes
217                  #endif],
218                 [AC_DEFINE(HAVE_GSS_C_NT_HOSTBASED_SERVICE,,
219                            [Define if your GSSAPI implementation defines GSS_C_NT_HOSTBASED_SERVICE])],
220                 [AC_WARN([Cybersafe define not found])])
221
222  elif test "$ac_cv_header_gssapi_h" = "yes"; then
223    AC_EGREP_HEADER(GSS_C_NT_HOSTBASED_SERVICE, gssapi.h,
224                    [AC_DEFINE(HAVE_GSS_C_NT_HOSTBASED_SERVICE,,
225                               [Define if your GSSAPI implementation defines GSS_C_NT_HOSTBASED_SERVICE])])
226  elif test "$ac_cv_header_gssapi_gssapi_h"; then
227    AC_EGREP_HEADER(GSS_C_NT_HOSTBASED_SERVICE, gssapi/gssapi.h,
228                    [AC_DEFINE(HAVE_GSS_C_NT_HOSTBASED_SERVICE,,
229                               [Define if your GSSAPI implementation defines GSS_C_NT_HOSTBASED_SERVICE])])
230  fi
231
232  if test "$gss_impl" = "cybersafe" -o "$gss_impl" = "cybersafe03"; then
233    AC_EGREP_CPP(user_name_yes_gss_nt,
234                 [#include <gssapi/gssapi.h>
235                  #ifdef GSS_C_NT_USER_NAME
236                   user_name_yes_gss_nt
237                  #endif],
238                 [AC_DEFINE(HAVE_GSS_C_NT_USER_NAME,,
239                            [Define if your GSSAPI implementation defines GSS_C_NT_USER_NAME])],
240                 [AC_WARN([Cybersafe define not found])])
241  elif test "$ac_cv_header_gssapi_h" = "yes"; then
242    AC_EGREP_HEADER(GSS_C_NT_USER_NAME, gssapi.h,
243                    [AC_DEFINE(HAVE_GSS_C_NT_USER_NAME,,
244                               [Define if your GSSAPI implementation defines GSS_C_NT_USER_NAME])])
245    AC_EGREP_HEADER(gss_inquire_attrs_for_mech, gssapi.h, rfc5587=yes)
246    AC_EGREP_HEADER(gss_inquire_mech_for_saslname, gssapi.h, rfc5801=yes)
247  elif test "$ac_cv_header_gssapi_gssapi_h"; then
248    AC_EGREP_HEADER(GSS_C_NT_USER_NAME, gssapi/gssapi.h,
249                    [AC_DEFINE(HAVE_GSS_C_NT_USER_NAME,,
250                               [Define if your GSSAPI implementation defines GSS_C_NT_USER_NAME])])
251    AC_EGREP_HEADER(gss_inquire_attrs_for_mech, gssapi/gssapi.h, rfc5587=yes)
252    AC_EGREP_HEADER(gss_inquire_mech_for_saslname, gssapi.h, rfc5801=yes)
253  fi
254fi
255
256AC_MSG_CHECKING([GSSAPI])
257if test "$gssapi" != no; then
258  AC_MSG_RESULT([with implementation ${gss_impl}])
259  AC_CHECK_LIB(resolv,res_search,GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lresolv")
260  SASL_MECHS="$SASL_MECHS libgssapiv2.la"
261  SASL_STATIC_OBJS="$SASL_STATIC_OBJS gssapi.o"
262  SASL_STATIC_SRCS="$SASL_STATIC_SRCS \$(top_srcdir)/plugins/gssapi.c"
263  if test "$rfc5587" = "yes" -a "$rfc5801" = "yes"; then
264    gs2="yes"
265    SASL_MECHS="$SASL_MECHS libgs2.la"
266    SASL_STATIC_OBJS="$SASL_STATIC_OBJS gs2.o"
267    SASL_STATIC_SRCS="$SASL_STATIC_SRCS \$(top_srcdir)/plugins/gs2.c"
268  fi
269
270  cmu_save_LIBS="$LIBS"
271  LIBS="$LIBS $GSSAPIBASE_LIBS"
272  AC_CHECK_FUNCS(gsskrb5_register_acceptor_identity)
273  if test "$ac_cv_func_gsskrb5_register_acceptor_identity" = no ; then
274    AC_CHECK_HEADERS(gssapi/gssapi_krb5.h)
275    if test "$ac_cv_header_gssapi_gssapi_krb5_h" = "yes"; then
276      AC_CHECK_DECL(gsskrb5_register_acceptor_identity,
277                    [AC_DEFINE(HAVE_GSSKRB5_REGISTER_ACCEPTOR_IDENTITY,1,
278                               [Define if your GSSAPI implementation defines gsskrb5_register_acceptor_identity])],,
279                    [
280                    AC_INCLUDES_DEFAULT
281                    #include <gssapi/gssapi_krb5.h>
282                    ])
283    fi
284  fi
285  AC_CHECK_FUNCS(gss_decapsulate_token)
286  AC_CHECK_FUNCS(gss_encapsulate_token)
287  AC_CHECK_FUNCS(gss_oid_equal)
288  LIBS="$cmu_save_LIBS"
289
290  cmu_save_LIBS="$LIBS"
291  LIBS="$LIBS $GSSAPIBASE_LIBS"
292  AC_CHECK_FUNCS(gss_get_name_attribute)
293  LIBS="$cmu_save_LIBS"
294
295  cmu_save_LIBS="$LIBS"
296  LIBS="$LIBS $GSSAPIBASE_LIBS"
297  AC_CHECK_FUNCS(gss_inquire_sec_context_by_oid)
298  if test "$ac_cv_func_gss_inquire_sec_context_by_oid" = no ; then
299    if test "$ac_cv_header_gssapi_gssapi_ext_h" = "yes"; then
300      AC_CHECK_DECL(gss_inquire_sec_context_by_oid,
301                    [AC_DEFINE(HAVE_GSS_INQUIRE_SEC_CONTEXT_BY_OID,1,
302                               [Define if your GSSAPI implementation defines gss_inquire_sec_context_by_oid])],,
303                    [
304                    AC_INCLUDES_DEFAULT
305                    #include <gssapi/gssapi_ext.h>
306                    ])
307    fi
308  fi
309  if test "$ac_cv_header_gssapi_gssapi_ext_h" = "yes"; then
310    AC_EGREP_HEADER(GSS_C_SEC_CONTEXT_SASL_SSF, gssapi/gssapi_ext.h,
311                    [AC_DEFINE(HAVE_GSS_C_SEC_CONTEXT_SASL_SSF,,
312                               [Define if your GSSAPI implementation defines GSS_C_SEC_CONTEXT_SASL_SSF])])
313  fi
314  LIBS="$cmu_save_LIBS"
315
316  AC_CACHE_CHECK([for SPNEGO support in GSSAPI libraries],[ac_cv_gssapi_supports_spnego],[
317    cmu_save_LIBS="$LIBS"
318    LIBS="$LIBS $GSSAPIBASE_LIBS"
319    AC_TRY_RUN([
320#ifdef HAVE_GSSAPI_H
321#include <gssapi.h>
322#else
323#include <gssapi/gssapi.h>
324#endif
325
326int main(void)
327{
328    gss_OID_desc spnego_oid = { 6, (void *) "\x2b\x06\x01\x05\x05\x02" };
329    gss_OID_set mech_set;
330    OM_uint32 min_stat;
331    int have_spnego = 0;
332
333    if (gss_indicate_mechs(&min_stat, &mech_set) == GSS_S_COMPLETE) {
334	gss_test_oid_set_member(&min_stat, &spnego_oid, mech_set, &have_spnego);
335	gss_release_oid_set(&min_stat, &mech_set);
336    }
337
338    return (!have_spnego);  // 0 = success, 1 = failure
339}
340],[ac_cv_gssapi_supports_spnego=yes],[ac_cv_gssapi_supports_spnego=no])
341    LIBS="$cmu_save_LIBS"
342  ])
343  AS_IF([test "$ac_cv_gssapi_supports_spnego" = yes],[
344    AC_DEFINE(HAVE_GSS_SPNEGO,,[Define if your GSSAPI implementation supports SPNEGO])
345  ])
346
347else
348  AC_MSG_RESULT([disabled])
349fi
350AC_SUBST(GSSAPIBASE_LIBS)
351])# SASL_GSSAPI_CHK
352
353
354# SASL_SET_GSSAPI_LIBS
355# --------------------
356AC_DEFUN([SASL_SET_GSSAPI_LIBS],
357[SASL_GSSAPI_LIBS_SET="yes"
358])
359
360
361# CMU_SASL2
362# ---------
363# What we want to do here is setup LIB_SASL with what one would
364# generally want to have (e.g. if static is requested, make it that,
365# otherwise make it dynamic.
366#
367# We also want to create LIB_DYN_SASL and DYNSASLFLAGS.
368#
369# Also sets using_static_sasl to "no" "static" or "staticonly"
370#
371AC_DEFUN([CMU_SASL2],
372[AC_REQUIRE([SASL_GSSAPI_CHK])
373
374AC_ARG_WITH(sasl,
375            [AC_HELP_STRING([--with-sasl=DIR],[Compile with libsasl2 in <DIR>])],
376            with_sasl="$withval",
377            with_sasl="yes")
378
379AC_ARG_WITH(staticsasl,
380            [AC_HELP_STRING([--with-staticsasl=DIR],
381                            [Compile with staticly linked libsasl2 in <DIR>])],
382            [with_staticsasl="$withval";
383             if test $with_staticsasl != "no"; then
384               using_static_sasl="static"
385             fi],
386            [with_staticsasl="no"; using_static_sasl="no"])
387
388SASLFLAGS=""
389LIB_SASL=""
390
391cmu_saved_CPPFLAGS=$CPPFLAGS
392cmu_saved_LDFLAGS=$LDFLAGS
393cmu_saved_LIBS=$LIBS
394
395if test ${with_staticsasl} != "no"; then
396  if test -d ${with_staticsasl}; then
397    if test -d ${with_staticsasl}/lib64 ; then
398      ac_cv_sasl_where_lib=${with_staticsasl}/lib64
399    else
400      ac_cv_sasl_where_lib=${with_staticsasl}/lib
401    fi
402    ac_cv_sasl_where_lib=${with_staticsasl}/lib
403    ac_cv_sasl_where_inc=${with_staticsasl}/include
404
405    SASLFLAGS="-I$ac_cv_sasl_where_inc"
406    LIB_SASL="-L$ac_cv_sasl_where_lib"
407    CPPFLAGS="${cmu_saved_CPPFLAGS} -I${ac_cv_sasl_where_inc}"
408    LDFLAGS="${cmu_saved_LDFLAGS} -L${ac_cv_sasl_where_lib}"
409  else
410    with_staticsasl="/usr"
411  fi
412
413  AC_CHECK_HEADER(sasl/sasl.h,
414                  [AC_CHECK_HEADER(sasl/saslutil.h,
415                                   [for i42 in lib64 lib; do
416                                      if test -r ${with_staticsasl}/$i42/libsasl2.a; then
417                                        ac_cv_found_sasl=yes
418                                        AC_MSG_CHECKING([for static libsasl])
419                                        LIB_SASL="$LIB_SASL ${with_staticsasl}/$i42/libsasl2.a"
420                                      fi
421                                    done
422                                    AC_CHECK_FUNC(dlopen,,[AC_CHECK_LIB(dl, dlopen, [LIB_SASL+="$LIB_SASL -ldl"])])
423                                    if test ! "$ac_cv_found_sasl" = "yes"; then
424                                      AC_MSG_CHECKING([for static libsasl])
425                                      AC_MSG_ERROR([Could not find ${with_staticsasl}/lib*/libsasl2.a])
426                                    fi])])
427
428  AC_MSG_RESULT([found])
429
430  if test "x$SASL_GSSAPI_LIBS_SET" = "x"; then
431    LIB_SASL="$LIB_SASL $GSSAPIBASE_STATIC_LIBS"
432  else
433    SASL_GSSAPI_LIBS_SET=""
434    cmu_saved_LIBS="$GSSAPIBASE_STATIC_LIBS $cmu_saved_LIBS"
435  fi
436fi
437
438if test -d ${with_sasl}; then
439  ac_cv_sasl_where_lib=${with_sasl}/lib
440  ac_cv_sasl_where_inc=${with_sasl}/include
441
442  DYNSASLFLAGS="-I$ac_cv_sasl_where_inc"
443  if test "$ac_cv_sasl_where_lib" != ""; then
444    CMU_ADD_LIBPATH_TO($ac_cv_sasl_where_lib, LIB_DYN_SASL)
445  fi
446  LIB_DYN_SASL="$LIB_DYN_SASL -lsasl2"
447  CPPFLAGS="${cmu_saved_CPPFLAGS} -I${ac_cv_sasl_where_inc}"
448  LDFLAGS="${cmu_saved_LDFLAGS} -L${ac_cv_sasl_where_lib}"
449fi
450
451# be sure to check for a SASLv2 specific function
452AC_CHECK_HEADER(sasl/sasl.h,
453                [AC_CHECK_HEADER(sasl/saslutil.h,
454                                 [AC_CHECK_LIB(sasl2, prop_get,
455                                               ac_cv_found_sasl=yes,
456                                               ac_cv_found_sasl=no)],
457                                 ac_cv_found_sasl=no)],
458                ac_cv_found_sasl=no)
459
460if test "$ac_cv_found_sasl" = "yes"; then
461  if test "$ac_cv_sasl_where_lib" != ""; then
462    CMU_ADD_LIBPATH_TO($ac_cv_sasl_where_lib, DYNLIB_SASL)
463  fi
464  DYNLIB_SASL="$DYNLIB_SASL -lsasl2"
465  if test "$using_static_sasl" != "static"; then
466    LIB_SASL=$DYNLIB_SASL
467    SASLFLAGS=$DYNSASLFLAGS
468  fi
469else
470  DYNLIB_SASL=""
471  DYNSASLFLAGS=""
472  using_static_sasl="staticonly"
473fi
474
475if test "x$SASL_GSSAPI_LIBS_SET" != "x"; then
476  SASL_GSSAPI_LIBS_SET=""
477  cmu_saved_LIBS="$GSSAPIBASE_LIBS $cmu_saved_LIBS"
478fi
479
480LIBS="$cmu_saved_LIBS"
481LDFLAGS="$cmu_saved_LDFLAGS"
482CPPFLAGS="$cmu_saved_CPPFLAGS"
483
484AC_SUBST(LIB_DYN_SASL)
485AC_SUBST(DYNSASLFLAGS)
486AC_SUBST(LIB_SASL)
487AC_SUBST(SASLFLAGS)
488])# CMU_SASL2
489
490
491# CMU_SASL2_REQUIRED
492# ------------------
493AC_DEFUN([CMU_SASL2_REQUIRED],
494[AC_REQUIRE([CMU_SASL2])
495if test "$ac_cv_found_sasl" != "yes"; then
496  AC_MSG_ERROR([Cannot continue without libsasl2.
497Get it from ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/.])
498fi])
499
500
501# CMU_SASL2_REQUIRE_VER
502# ---------------------
503AC_DEFUN([CMU_SASL2_REQUIRE_VER],
504[AC_REQUIRE([CMU_SASL2_REQUIRED])
505
506cmu_saved_CPPFLAGS=$CPPFLAGS
507CPPFLAGS="$CPPFLAGS $SASLFLAGS"
508
509AC_TRY_CPP([
510#include <sasl/sasl.h>
511
512#ifndef SASL_VERSION_MAJOR
513#error SASL_VERSION_MAJOR not defined
514#endif
515#ifndef SASL_VERSION_MINOR
516#error SASL_VERSION_MINOR not defined
517#endif
518#ifndef SASL_VERSION_STEP
519#error SASL_VERSION_STEP not defined
520#endif
521
522#if SASL_VERSION_MAJOR < $1 || SASL_VERSION_MINOR < $2 || SASL_VERSION_STEP < $3
523#error SASL version is less than $1.$2.$3
524#endif
525],,
526           [AC_MSG_ERROR([Incorrect SASL headers found.  This package requires SASL $1.$2.$3 or newer.])])
527
528CPPFLAGS=$cmu_saved_CPPFLAGS
529])# CMU_SASL2_REQUIRE_VER
530
531
532# CMU_SASL2_CHECKAPOP_REQUIRED
533# ----------------------------
534AC_DEFUN([CMU_SASL2_CHECKAPOP_REQUIRED],
535[AC_REQUIRE([CMU_SASL2_REQUIRED])
536
537cmu_saved_LDFLAGS=$LDFLAGS
538
539LDFLAGS="$LDFLAGS $LIB_SASL"
540
541AC_CHECK_LIB(sasl2, sasl_checkapop,
542             [AC_DEFINE(HAVE_APOP,[],[Does SASL support APOP?])],
543             [AC_MSG_ERROR([libsasl2 without working sasl_checkapop.  Cannot continue.])])
544
545LDFLAGS=$cmu_saved_LDFLAGS
546])# CMU_SASL2_CHECKAPOP_REQUIRED
547
548
549# SASL2_CRYPT_CHK
550# ---------------
551AC_DEFUN([SASL2_CRYPT_CHK],
552[AC_CHECK_FUNC(crypt, cmu_have_crypt=yes,
553               [AC_CHECK_LIB(crypt, crypt,
554                             LIB_CRYPT="-lcrypt"; cmu_have_crypt=yes,
555                             cmu_have_crypt=no)])
556AC_SUBST(LIB_CRYPT)
557])# SASL2_CRYPT_CHK
558