GSS_S_PROMPTING_NEEDED is a bit
[cyrus-sasl.git] / cmulocal / afs.m4
1 dnl afs.m4--AFS libraries, includes, and dependencies
2 dnl $Id: afs.m4,v 1.29 2005/04/26 19:14:07 shadow Exp $
3 dnl Chaskiel Grundman
4 dnl based on kerberos_v4.m4
5 dnl Derrick Brashear
6 dnl from KTH krb and Arla
7
8 AC_DEFUN([CMU_AFS_INC_WHERE1], [
9 cmu_save_CPPFLAGS=$CPPFLAGS
10 CPPFLAGS="$cmu_save_CPPFLAGS -I$1"
11 AC_TRY_COMPILE([#include <afs/param.h>],
12 [#ifndef SYS_NAME
13 choke me
14 #endif
15 int foo;],
16 ac_cv_found_afs_inc=yes,
17 ac_cv_found_afs_inc=no)
18 CPPFLAGS=$cmu_save_CPPFLAGS
19 ])
20
21 AC_DEFUN([CMU_AFS_LIB_WHERE1], [
22 save_LIBS="$LIBS"
23 save_LDFLAGS="$LDFLAGS"
24
25 LIBS="-lauth $1/afs/util.a $LIB_SOCKET $LIBS"
26 LDFLAGS="-L$1 -L$1/afs $LDFLAGS"
27 dnl suppress caching
28 AC_TRY_LINK([],[afsconf_Open();], ac_cv_found_afs_lib=yes, ac_cv_found_afs_lib=no)
29 LIBS="$save_LIBS"
30 LDFLAGS="$save_LDFLAGS"
31 ])
32
33 AC_DEFUN([CMU_AFS_WHERE], [
34 AC_REQUIRE([CMU_FIND_LIB_SUBDIR])
35    for i in $1; do
36       AC_MSG_CHECKING(for AFS in $i)
37       CMU_AFS_INC_WHERE1("$i/include")
38       ac_cv_found_lwp_inc=$ac_cv_found_afs_inc
39       CMU_TEST_INCPATH($i/include, lwp) 
40       ac_cv_found_afs_inc=$ac_cv_found_lwp_inc
41       if test "$ac_cv_found_afs_inc" = "yes"; then
42         CMU_AFS_LIB_WHERE1("$i/$CMU_LIB_SUBDIR")
43         if test "$ac_cv_found_afs_lib" = "yes"; then
44           ac_cv_afs_where=$i
45           AC_MSG_RESULT(found)
46           break
47         else
48           AC_MSG_RESULT(not found)
49         fi
50       else
51         AC_MSG_RESULT(not found)
52       fi
53     done
54 ])
55
56 AC_DEFUN([CMU_AFS], [
57 AC_REQUIRE([CMU_FIND_LIB_SUBDIR])
58 AC_REQUIRE([CMU_SOCKETS])
59 AC_REQUIRE([CMU_LIBSSL])
60 AC_ARG_WITH(AFS,
61         [  --with-afs=PREFIX      Compile with AFS support],
62         [if test "X$with_AFS" = "X"; then
63                 with_AFS=yes
64         fi])
65
66         if test "X$with_AFS" != "X"; then
67           ac_cv_afs_where=$with_AFS
68         fi
69         if test "X$ac_cv_afs_where" = "X"; then
70           CMU_AFS_WHERE(/usr/afsws /usr/local /usr/athena /Library/OpenAFS/Tools)
71         fi
72
73         AC_MSG_CHECKING(whether to include AFS)
74         if test "X$ac_cv_afs_where" = "Xno" -o "X$ac_cv_afs_where" = "X"; then
75           ac_cv_found_afs=no
76           AC_MSG_RESULT(no)
77         else
78           ac_cv_found_afs=yes
79           AC_MSG_RESULT(yes)
80           AFS_INC_DIR="$ac_cv_afs_where/include"
81           AFS_LIB_DIR="$ac_cv_afs_where/$CMU_LIB_SUBDIR"
82           AFS_TOP_DIR="$ac_cv_afs_where"
83           AFS_INC_FLAGS="-I${AFS_INC_DIR}"
84           AFS_LIB_FLAGS="-L${AFS_LIB_DIR} -L${AFS_LIB_DIR}/afs"
85           cmu_save_LIBS="$LIBS"
86           cmu_save_CPPFLAGS="$CPPFLAGS"
87           CPPFLAGS="$CPPFLAGS ${AFS_INC_FLAGS}"
88           cmu_save_LDFLAGS="$LDFLAGS"
89           LDFLAGS="$cmu_save_LDFLAGS ${AFS_LIB_FLAGS}"
90                         
91           AC_CHECK_HEADERS(afs/stds.h)
92
93           AC_MSG_CHECKING([if libdes is needed])
94           AC_TRY_LINK([],[des_quad_cksum();],AFS_DES_LIB="",AFS_DES_LIB="maybe")
95           if test "X$AFS_DES_LIB" != "X"; then
96               LIBS="$cmu_save_LIBS -ldes"
97               AC_TRY_LINK([], [des_quad_cksum();],AFS_DES_LIB="yes")
98               if test "X$AFS_DES_LIB" = "Xyes"; then
99                   AC_MSG_RESULT([yes])
100                   AFS_LIBDES="-ldes"
101                   AFS_LIBDESA="${AFS_LIB_DIR}/libdes.a"
102               else
103                   LIBS="$cmu_save_LIBS $LIBSSL_LIB_FLAGS"
104                   AC_TRY_LINK([],
105                   [des_quad_cksum();],AFS_DES_LIB="libcrypto")
106                   if test "X$AFS_DES_LIB" = "Xlibcrypto"; then
107                       AC_MSG_RESULT([libcrypto])
108                       AFS_LIBDES="$LIBSSL_LIB_FLAGS"
109                       AFS_LIBDESA="$LIBSSL_LIB_FLAGS"
110                   else
111                       LIBS="$cmu_save_LIBS -L$LIBSSL_LIB_DIR -ldescompat $LIBSSL_LIB_FLAGS"
112                       AC_TRY_LINK([],
113                       [des_quad_cksum();],AFS_DES_LIB="libcrypto+descompat")
114                       if test "X$AFS_DES_LIB" = "Xlibcrypto+descompat"; then
115                           AC_MSG_RESULT([libcrypto+descompat])
116                           AFS_LIBDES="-L$LIBSSL_LIB_DIR -ldescompat $LIBSSL_LIB_FLAGS"
117                           AFS_LIBDESA="-L$LIBSSL_LIB_DIR -ldescompat $LIBSSL_LIB_FLAGS"
118                       else
119                           AC_MSG_RESULT([unknown])
120                           AC_MSG_ERROR([Could not use -ldes])
121                       fi 
122                   fi 
123               fi 
124           else
125              AC_MSG_RESULT([no])
126           fi
127
128
129           AFS_CLIENT_LIBS_STATIC="${AFS_LIB_DIR}/afs/libvolser.a ${AFS_LIB_DIR}/afs/libvldb.a ${AFS_LIB_DIR}/afs/libkauth.a ${AFS_LIB_DIR}/afs/libprot.a ${AFS_LIB_DIR}/libubik.a ${AFS_LIB_DIR}/afs/libauth.a ${AFS_LIB_DIR}/librxkad.a ${AFS_LIB_DIR}/librx.a ${AFS_LIB_DIR}/afs/libsys.a ${AFS_LIB_DIR}/librx.a ${AFS_LIB_DIR}/liblwp.a ${AFS_LIBDESA} ${AFS_LIB_DIR}/afs/libcmd.a ${AFS_LIB_DIR}/afs/libcom_err.a ${AFS_LIB_DIR}/afs/util.a"
130           AFS_KTC_LIBS_STATIC="${AFS_LIB_DIR}/afs/libauth.a ${AFS_LIB_DIR}/afs/libsys.a ${AFS_LIB_DIR}/librx.a ${AFS_LIB_DIR}/liblwp.a ${AFS_LIBDESA} ${AFS_LIB_DIR}/afs/libcom_err.a ${AFS_LIB_DIR}/afs/util.a"
131           AFS_CLIENT_LIBS="-lvolser -lvldb -lkauth -lprot -lubik -lauth -lrxkad -lrx ${AFS_LIB_DIR}/afs/libsys.a -lrx -llwp ${AFS_LIBDES} -lcmd -lcom_err ${AFS_LIB_DIR}/afs/util.a"
132           AFS_RX_LIBS="-lauth -lrxkad -lrx ${AFS_LIB_DIR}/afs/libsys.a -lrx -llwp ${AFS_LIBDES} -lcmd -lcom_err ${AFS_LIB_DIR}/afs/util.a"
133           AFS_KTC_LIBS="-lauth ${AFS_LIB_DIR}/afs/libsys.a -lrx -llwp ${AFS_LIBDES} -lcom_err ${AFS_LIB_DIR}/afs/util.a"
134
135           LIBS="$cmu_save_LIBS $AFS_CLIENT_LIBS ${LIB_SOCKET}"
136           AC_CHECK_FUNC(des_pcbc_init)
137           if test "X$ac_cv_func_des_pcbc_init" != "Xyes"; then
138            AC_CHECK_LIB(descompat, des_pcbc_init, AFS_DESCOMPAT_LIB="-ldescompat")
139            if test "X$AFS_DESCOMPAT_LIB" != "X" ; then
140                 AFS_CLIENT_LIBS_STATIC="$AFS_CLIENT_LIBS_STATIC $AFS_DESCOMPAT_LIB"
141                 AFS_KTC_LIBS_STATIC="$AFS_KTC_LIBS_STATIC $AFS_DESCOMPAT_LIB"
142                 AFS_CLIENT_LIBS="$AFS_CLIENT_LIBS $AFS_DESCOMPAT_LIB"
143                 AFS_KTC_LIBS="$AFS_KTC_LIBS $AFS_DESCOMPAT_LIB"
144            else
145
146            AC_MSG_CHECKING([if rxkad needs des_pcbc_init])
147            AC_TRY_LINK(,[tkt_DecodeTicket();],RXKAD_PROBLEM=no,RXKAD_PROBLEM=maybe)
148             if test "$RXKAD_PROBLEM" = "maybe"; then
149               AC_TRY_LINK([int des_pcbc_init() { return 0;}],
150               [tkt_DecodeTicket();],RXKAD_PROBLEM=yes,RXKAD_PROBLEM=error)
151               if test "$RXKAD_PROBLEM" = "yes"; then
152                     AC_MSG_RESULT([yes])
153                     AC_MSG_ERROR([cannot use rxkad])
154               else
155                     AC_MSG_RESULT([unknown])        
156                     AC_MSG_ERROR([Unknown error testing rxkad])
157               fi
158             else
159               AC_MSG_RESULT([no])
160             fi
161            fi
162           fi
163
164           LIBS="$cmu_save_LIBS"
165           AC_CHECK_FUNC(flock)
166           LIBS="$cmu_save_LIBS ${AFS_CLIENT_LIBS} ${LIB_SOCKET}"
167           if test "X$ac_cv_func_flock" != "Xyes"; then
168              AC_MSG_CHECKING([if AFS needs flock])
169              AC_TRY_LINK([#include <afs/param.h>
170 #ifdef HAVE_AFS_STDS_H
171 #include <afs/stds.h>
172 #endif
173 #include <ubik.h>
174 #include <afs/cellconfig.h>
175 #include <afs/auth.h>
176 #include <afs/volser.h>
177 struct ubik_client * cstruct;
178 int sigvec() {return 0;}
179 extern int UV_SetSecurity();],
180              [vsu_ClientInit(1,"","",0,
181                              &cstruct,UV_SetSecurity)],
182              AFS_FLOCK=no,AFS_FLOCK=yes)
183              if test $AFS_FLOCK = "no"; then
184                 AC_MSG_RESULT([no])
185              else
186                AC_MSG_RESULT([yes])
187                LDFLAGS="$LDFLAGS -L/usr/ucblib"
188                AC_CHECK_LIB(ucb, flock,:, [AC_CHECK_LIB(BSD, flock)])
189              fi
190           fi
191           LIBS="$cmu_save_LIBS"
192           AC_CHECK_FUNC(sigvec)
193           LIBS="$cmu_save_LIBS ${AFS_CLIENT_LIBS} ${LIB_SOCKET}"
194           if test "X$ac_cv_func_sigvec" != "Xyes"; then
195              AC_MSG_CHECKING([if AFS needs sigvec])
196              AC_TRY_LINK([#include <afs/param.h>
197 #ifdef HAVE_AFS_STDS_H
198 #include <afs/stds.h>
199 #endif
200 #include <ubik.h>
201 #include <afs/cellconfig.h>
202 #include <afs/auth.h>
203 #include <afs/volser.h>
204 struct ubik_client * cstruct;
205 int flock() {return 0;}
206 extern int UV_SetSecurity();],
207              [vsu_ClientInit(1,"","",0,
208                              &cstruct,UV_SetSecurity)],
209              AFS_SIGVEC=no,AFS_SIGVEC=yes)
210              if test $AFS_SIGVEC = "no"; then
211                 AC_MSG_RESULT([no])
212              else
213                AC_MSG_RESULT([yes])
214                LDFLAGS="$LDFLAGS -L/usr/ucblib"
215                AC_CHECK_LIB(ucb, sigvec,:,[AC_CHECK_LIB(BSD, sigvec)])
216              fi
217           fi
218           if test "$ac_cv_lib_ucb_flock" = "yes" -o "$ac_cv_lib_ucb_sigvec" = "yes"; then
219              AFS_LIB_FLAGS="${AFS_LIB_FLAGS} -L/usr/ucblib -R/usr/ucblib"
220           fi
221           if test "$ac_cv_lib_ucb_flock" = "yes" -o "$ac_cv_lib_ucb_sigvec" = "yes"; then
222              AFS_BSD_LIB="-lucb"
223           elif test "$ac_cv_lib_BSD_flock" = "yes" -o "$ac_cv_lib_BSD_sigvec" = "yes"; then
224              AFS_BSD_LIB="-lBSD"
225           fi
226           if test "X$AFS_BSD_LIB" != "X" ; then
227                 AFS_CLIENT_LIBS_STATIC="$AFS_CLIENT_LIBS_STATIC $AFS_BSD_LIB"
228                 AFS_KTC_LIBS_STATIC="$AFS_KTC_LIBS_STATIC $AFS_BSD_LIB"
229                 AFS_CLIENT_LIBS="$AFS_CLIENT_LIBS $AFS_BSD_LIB"
230                 AFS_RX_LIBS="$AFS_CLIENT_LIBS $AFS_BSD_LIB"
231                 AFS_KTC_LIBS="$AFS_KTC_LIBS $AFS_BSD_LIB"
232           fi
233
234           AC_MSG_CHECKING([if libaudit is needed])
235           AFS_LIBAUDIT=""
236           LIBS="$cmu_save_LIBS $AFS_CLIENT_LIBS ${LIB_SOCKET}"
237           AC_TRY_LINK([#include <afs/param.h>
238 #ifdef HAVE_AFS_STDS_H
239 #include <afs/stds.h>
240 #endif
241 #include <afs/cellconfig.h>
242 #include <afs/auth.h>],
243           [afsconf_SuperUser();],AFS_AUDIT_LIB="",AFS_AUDIT_LIB="maybe")
244           if test "X$AFS_AUDIT_LIB" != "X"; then
245           LIBS="$cmu_save_LIBS -lvolser -lvldb -lkauth -lprot -lubik -lauth -laudit -lrxkad -lrx ${AFS_LIB_DIR}/afs/libsys.a -lrx -llwp ${AFS_LIBDES} -lcmd -lcom_err ${AFS_LIB_DIR}/afs/util.a $AFS_BSD_LIB $AFS_DESCOMPAT_LIB $LIB_SOCKET"
246              AC_TRY_LINK([#include <afs/param.h>
247 #ifdef HAVE_AFS_STDS_H
248 #include <afs/stds.h>
249 #endif
250 #include <afs/cellconfig.h>
251 #include <afs/auth.h>],
252              [afsconf_SuperUser();],AFS_AUDIT_LIB="yes")
253              if test "X$AFS_AUDIT_LIB" = "Xyes"; then
254                  AC_MSG_RESULT([yes])
255                  AFS_LIBAUDIT="-laudit"
256                  AFS_CLIENT_LIBS_STATIC="${AFS_LIB_DIR}/afs/libvolser.a ${AFS_LIB_DIR}/afs/libvldb.a ${AFS_LIB_DIR}/afs/libkauth.a ${AFS_LIB_DIR}/afs/libprot.a ${AFS_LIB_DIR}/libubik.a ${AFS_LIB_DIR}/afs/libauth.a ${AFS_LIB_DIR}/afs/libaudit.a ${AFS_LIB_DIR}/librxkad.a ${AFS_LIB_DIR}/librx.a ${AFS_LIB_DIR}/afs/libsys.a ${AFS_LIB_DIR}/librx.a ${AFS_LIB_DIR}/liblwp.a ${AFS_LIBDESA} ${AFS_LIB_DIR}/afs/libcmd.a ${AFS_LIB_DIR}/afs/libcom_err.a ${AFS_LIB_DIR}/afs/util.a"
257                  AFS_CLIENT_LIBS="-lvolser -lvldb -lkauth -lprot -lubik -lauth -laudit -lrxkad -lrx ${AFS_LIB_DIR}/afs/libsys.a -lrx -llwp ${AFS_LIBDES} -lcmd -lcom_err ${AFS_LIB_DIR}/afs/util.a $AFS_BSD_LIB $AFS_DESCOMPAT_LIB"
258                  AFS_RX_LIBS="-lauth -laudit -lrxkad -lrx ${AFS_LIB_DIR}/afs/libsys.a -lrx -llwp ${AFS_LIBDES} -lcmd -lcom_err ${AFS_LIB_DIR}/afs/util.a $AFS_BSD_LIB $AFS_DESCOMPAT_LIB"
259              else
260                  AC_MSG_RESULT([unknown])
261                  AC_MSG_ERROR([Could not use -lauth while testing for -laudit])
262              fi 
263           else
264              AC_MSG_RESULT([no])
265           fi
266
267           AC_CHECK_FUNCS(VL_ProbeServer)
268           AC_MSG_CHECKING([if new-style afs_ integer types are defined])
269           AC_CACHE_VAL(ac_cv_afs_int32,
270 dnl The next few lines contain a quoted argument to egrep
271 dnl It is critical that there be no leading or trailing whitespace
272 dnl or newlines
273 [AC_EGREP_CPP(dnl
274 changequote(<<,>>)dnl
275 <<(^|[^a-zA-Z_0-9])afs_int32[^a-zA-Z_0-9]>>dnl
276 changequote([,]), [#include <afs/param.h>
277 #ifdef HAVE_AFS_STDS_H
278 #include <afs/stds.h>
279 #endif],
280 ac_cv_afs_int32=yes, ac_cv_afs_int32=no)])
281           AC_MSG_RESULT($ac_cv_afs_int32)
282           if test $ac_cv_afs_int32 = yes ; then
283             AC_DEFINE(HAVE_AFS_INT32,, [AFS provides new "unambiguous" type names])
284           else
285             AC_DEFINE(afs_int16, int16, [it's a type definition])
286             AC_DEFINE(afs_int32, int32, [it's a type definition])
287             AC_DEFINE(afs_uint16, u_int16, [it's a type definition])
288             AC_DEFINE(afs_uint32, u_int32, [it's a type definition])
289           fi
290
291           CPPFLAGS="${cmu_save_CPPFLAGS}"
292           LDFLAGS="${cmu_save_LDFLAGS}"
293           LIBS="${cmu_save_LIBS}"
294           AC_DEFINE(AFS_ENV,, [Use AFS. (find what needs this and nuke it)])
295           AC_DEFINE(AFS,, [Use AFS. (find what needs this and nuke it)])
296           AC_SUBST(AFS_CLIENT_LIBS_STATIC)
297           AC_SUBST(AFS_KTC_LIBS_STATIC)
298           AC_SUBST(AFS_CLIENT_LIBS)
299           AC_SUBST(AFS_RX_LIBS)
300           AC_SUBST(AFS_KTC_LIBS)
301           AC_SUBST(AFS_INC_FLAGS)
302           AC_SUBST(AFS_LIB_FLAGS)
303           AC_SUBST(AFS_TOP_DIR)
304           AC_SUBST(AFS_LIBAUDIT)
305           AC_SUBST(AFS_LIBDES)
306           AC_SUBST(AFS_LIBDESA)
307         fi
308         ])
309
310 AC_DEFUN([CMU_NEEDS_AFS],
311 [AC_REQUIRE([CMU_AFS])
312 if test "$ac_cv_found_afs" != "yes"; then
313         AC_ERROR([Cannot continue without AFS])
314 fi])