1 dnl Find the compiler and linker flags for GSS-API.
3 dnl Finds the compiler and linker flags for linking with GSS-API libraries.
4 dnl Provides the --with-gssapi, --with-gssapi-include, and --with-gssapi-lib
5 dnl configure option to specify a non-standard path to the GSS-API libraries.
6 dnl Uses krb5-config where available unless reduced dependencies is requested.
8 dnl Provides the macro RRA_LIB_GSSAPI and sets the substitution variables
9 dnl GSSAPI_CPPFLAGS, GSSAPI_LDFLAGS, and GSSAPI_LIBS. Also provides
10 dnl RRA_LIB_GSSAPI_SWITCH to set CPPFLAGS, LDFLAGS, and LIBS to include the
11 dnl GSS-API libraries, saving the ecurrent values, and RRA_LIB_GSSAPI_RESTORE
12 dnl to restore those settings to before the last RRA_LIB_GSSAPI_SWITCH.
14 dnl Depends on RRA_ENABLE_REDUCED_DEPENDS and RRA_SET_LDFLAGS.
16 dnl Written by Russ Allbery <rra@stanford.edu>
17 dnl Copyright 2005, 2006, 2007, 2008, 2009
18 dnl Board of Trustees, Leland Stanford Jr. University
20 dnl See LICENSE for licensing terms.
22 dnl Save the current CPPFLAGS, LDFLAGS, and LIBS settings and switch to
23 dnl versions that include the GSS-API flags. Used as a wrapper, with
24 dnl RRA_LIB_GSSAPI_RESTORE, around tests.
25 AC_DEFUN([RRA_LIB_GSSAPI_SWITCH],
26 [rra_gssapi_save_CPPFLAGS="$CPPFLAGS"
27 rra_gssapi_save_LDFLAGS="$LDFLAGS"
28 rra_gssapi_save_LIBS="$LIBS"
29 CPPFLAGS="$GSSAPI_CPPFLAGS $CPPFLAGS"
30 LDFLAGS="$GSSAPI_LDFLAGS $LDFLAGS"
31 LIBS="$GSSAPI_LIBS $LIBS"])
33 dnl Restore CPPFLAGS, LDFLAGS, and LIBS to their previous values (before
34 dnl RRA_LIB_GSSAPI_SWITCH was called).
35 AC_DEFUN([RRA_LIB_GSSAPI_RESTORE],
36 [CPPFLAGS="$rra_gssapi_save_CPPFLAGS"
37 LDFLAGS="$rra_gssapi_save_LDFLAGS"
38 LIBS="$rra_gssapi_save_LIBS"])
40 dnl Set GSSAPI_CPPFLAGS and GSSAPI_LDFLAGS based on rra_gssapi_root,
41 dnl rra_gssapi_libdir, and rra_gssapi_includedir.
42 AC_DEFUN([_RRA_LIB_GSSAPI_PATHS],
43 [AS_IF([test x"$rra_gssapi_libdir" != x],
44 [GSSAPI_LDFLAGS="-L$rra_gssapi_libdir"],
45 [AS_IF([test x"$rra_gssapi_root" != x],
46 [RRA_SET_LDFLAGS([GSSAPI_LDFLAGS], [$rra_gssapi_root])])])
47 AS_IF([test x"$rra_gssapi_includedir" != x],
48 [GSSAPI_CPPFLAGS="-I$rra_gssapi_includedir"],
49 [AS_IF([test x"$rra_gssapi_root" != x],
50 [AS_IF([test x"$rra_gssapi_root" != x/usr],
51 [GSSAPI_CPPFLAGS="-I${rra_gssapi_root}/include"])])])])
53 dnl Does the appropriate library checks for reduced-dependency GSS-API
55 AC_DEFUN([_RRA_LIB_GSSAPI_REDUCED],
56 [RRA_LIB_GSSAPI_SWITCH
57 AC_CHECK_LIB([gssapi_krb5], [gss_import_name], [GSSAPI_LIBS="-lgssapi_krb5"],
58 [AC_CHECK_LIB([gssapi], [gss_import_name], [GSSAPI_LIBS="-lgssapi"],
59 [AC_CHECK_LIB([gss], [gss_import_name], [GSSAPI_LIBS="-lgss"],
60 [AC_MSG_ERROR([cannot find usable GSS-API library])])])])
61 RRA_LIB_GSSAPI_RESTORE])
63 dnl Does the appropriate library checks for GSS-API linkage when we don't
64 dnl have krb5-config or reduced dependencies. libgss is used as a last
65 dnl resort, since it may be a non-functional mech-independent wrapper, but
66 dnl it's the right choice on Solaris 10.
67 AC_DEFUN([_RRA_LIB_GSSAPI_MANUAL],
68 [RRA_LIB_GSSAPI_SWITCH
71 AC_SEARCH_LIBS([res_search], [resolv], ,
72 [AC_SEARCH_LIBS([__res_search], [resolv])])
73 AC_SEARCH_LIBS([gethostbyname], [nsl])
74 AC_SEARCH_LIBS([socket], [socket], ,
75 [AC_CHECK_LIB([nsl], [socket], [LIBS="-lnsl -lsocket $LIBS"], ,
77 AC_SEARCH_LIBS([crypt], [crypt])
78 rra_gssapi_extra="$LIBS"
79 LIBS="$rra_gssapi_save_LIBS"
80 AC_CHECK_LIB([gssapi], [gss_import_name],
81 [GSSAPI_LIBS="-lgssapi -lkrb5 -lasn1 -lroken -lcrypto -lcom_err"
82 GSSAPI_LIBS="$GSSAPI_LIBS $rra_gssapi_extra"],
83 [AC_CHECK_LIB([krb5support], [krb5int_getspecific],
84 [rra_gssapi_extra="-lkrb5support $rra_gssapi_extra"],
85 [AC_CHECK_LIB([pthreads], [pthread_setspecific],
86 [rra_gssapi_pthread="-lpthreads"],
87 [AC_CHECK_LIB([pthread], [pthread_setspecific],
88 [rra_gssapi_pthread="-lpthread"])])
89 AC_CHECK_LIB([krb5support], [krb5int_setspecific],
90 [rra_gssapi_extra="-lkrb5support $rra_gssapi_extra"
91 rra_gssapi_extra="$rra_gssapi_extra $rra_gssapi_pthread"], ,
92 [$rra_gssapi_pthread])])
93 AC_CHECK_LIB([com_err], [error_message],
94 [rra_gssapi_extra="-lcom_err $rra_gssapi_extra"])
95 AC_CHECK_LIB([k5crypto], [krb5int_hash_md5],
96 [rra_gssapi_extra="-lk5crypto $rra_gssapi_extra"])
97 rra_gssapi_extra="-lkrb5 $rra_gssapi_extra"
98 AC_CHECK_LIB([gssapi_krb5], [gss_import_name],
99 [GSSAPI_LIBS="-lgssapi_krb5 $rra_gssapi_extra"],
100 [AC_CHECK_LIB([gss], [gss_import_name],
101 [GSSAPI_LIBS="-lgss"],
102 [AC_MSG_ERROR([cannot find usable GSS-API library])])],
103 [$rra_gssapi_extra])],
104 [-lkrb5 -lasn1 -lroken -lcrypto -lcom_err $rra_gssapi_extra])
105 RRA_LIB_GSSAPI_RESTORE])
107 dnl Sanity-check the results of krb5-config and be sure we can really link a
108 dnl GSS-API program. If not, fall back on the manual check.
109 AC_DEFUN([_RRA_LIB_GSSAPI_CHECK],
110 [RRA_LIB_GSSAPI_SWITCH
111 AC_CHECK_FUNC([gss_import_name],
112 [RRA_LIB_GSSAPI_RESTORE],
113 [RRA_LIB_GSSAPI_RESTORE
116 _RRA_LIB_GSSAPI_PATHS
117 _RRA_LIB_GSSAPI_MANUAL])])
120 AC_DEFUN([RRA_LIB_GSSAPI],
121 [AC_REQUIRE([RRA_ENABLE_REDUCED_DEPENDS])
124 rra_gssapi_includedir=
128 AC_SUBST([GSSAPI_CPPFLAGS])
129 AC_SUBST([GSSAPI_LDFLAGS])
130 AC_SUBST([GSSAPI_LIBS])
132 AC_ARG_WITH([gssapi],
133 [AS_HELP_STRING([--with-gssapi=DIR],
134 [Location of GSS-API headers and libraries])],
135 [AS_IF([test x"$withval" != xyes && test x"$withval" != xno],
136 [rra_gssapi_root="$withval"])])
137 AC_ARG_WITH([gssapi-include],
138 [AS_HELP_STRING([--with-gssapi-include=DIR],
139 [Location of GSS-API headers])],
140 [AS_IF([test x"$withval" != xyes && test x"$withval" != xno],
141 [rra_gssapi_includedir="$withval"])])
142 AC_ARG_WITH([gssapi-lib],
143 [AS_HELP_STRING([--with-gssapi-lib=DIR],
144 [Location of GSS-API libraries])],
145 [AS_IF([test x"$withval" != xyes && test x"$withval" != xno],
146 [rra_gssapi_libdir="$withval"])])
148 AS_IF([test x"$rra_reduced_depends" = xtrue],
149 [_RRA_LIB_GSSAPI_PATHS
150 _RRA_LIB_GSSAPI_REDUCED],
151 [AC_ARG_VAR([KRB5_CONFIG], [Path to krb5-config])
152 AS_IF([test x"$rra_gssapi_root" != x && test -z "$KRB5_CONFIG"],
153 [AS_IF([test -x "${rra_gssapi_root}/bin/krb5-config"],
154 [KRB5_CONFIG="${rra_gssapi_root}/bin/krb5-config"])],
155 [AC_PATH_PROG([KRB5_CONFIG], [krb5-config])])
156 AS_IF([test x"$KRB5_CONFIG" != x && test -x "$KRB5_CONFIG"],
157 [AC_CACHE_CHECK([for gssapi support in krb5-config],
158 [rra_cv_lib_gssapi_config],
159 [AS_IF(["$KRB5_CONFIG" 2>&1 | grep gssapi >/dev/null 2>&1],
160 [rra_cv_lib_gssapi_config=yes],
161 [rra_cv_lib_gssapi_config=no])])
162 AS_IF([test "$rra_cv_lib_gssapi_config" = yes],
163 [GSSAPI_CPPFLAGS=`"$KRB5_CONFIG" --cflags gssapi 2>/dev/null`
164 GSSAPI_LIBS=`"$KRB5_CONFIG" --libs gssapi 2>/dev/null`],
165 [GSSAPI_CPPFLAGS=`"$KRB5_CONFIG" --cflags 2>/dev/null`
166 GSSAPI_LIBS=`"$KRB5_CONFIG" --libs 2>/dev/null`])
167 GSSAPI_CPPFLAGS=`echo "$GSSAPI_CPPFLAGS" \
168 | sed 's%-I/usr/include ?%%'`
169 _RRA_LIB_GSSAPI_CHECK],
170 [_RRA_LIB_GSSAPI_PATHS
171 _RRA_LIB_GSSAPI_MANUAL])])])