1dnl $Id$
2dnl
3dnl Find full path to program
4dnl
5AC_DEFUN([SFS_PATH_PROG],
6[AC_PATH_PROG(PATH_[]translit($1, [-a-z.], [_A-Z_]), $1,,
7$2[]ifelse($2,,,:)/usr/bin:/bin:/sbin:/usr/sbin:/usr/etc:/usr/libexec:/usr/ucb:/usr/bsd:/usr/5bin:$PATH:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin)
8if test "$PATH_[]translit($1, [-a-z.], [_A-Z_])"; then
9    AC_DEFINE_UNQUOTED(PATH_[]translit($1, [-a-z.], [_A-Z_]),
10		       "$PATH_[]translit($1, [-a-z.], [_A-Z_])",
11			Full path of $1 command)
12fi])
13dnl
14dnl File path to cpp
15dnl
16AC_DEFUN([SFS_PATH_CPP],
17[AC_PATH_PROG(_PATH_CPP, cpp,,
18/usr/ccs/bin:/usr/bin:/bin:/sbin:/usr/sbin:/usr/etc:/usr/libexec:/lib:/usr/lib:/usr/ucb:/usr/bsd:/usr/5bin:$PATH:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin)
19if test -z "$_PATH_CPP"; then
20    if test "$GCC" = yes; then
21	_PATH_CPP=`$CC -print-prog-name=cpp`
22    else
23	_PATH_CPP=`gcc -print-prog-name=cpp 2> /dev/null`
24    fi
25fi
26test -x "$_PATH_CPP" || unset _PATH_CPP
27if test -z "$_PATH_CPP"; then
28    AC_MSG_ERROR(Cannot find path for cpp)
29fi
30AC_DEFINE_UNQUOTED(PATH_CPP, "$_PATH_CPP",
31			Path for the C preprocessor command)
32])
33dnl
34dnl How to get BSD-like df output
35dnl
36AC_DEFUN([SFS_PATH_DF],
37[SFS_PATH_PROG(df, /usr/ucb:/usr/bsd:/usr/local/bin)
38AC_CACHE_CHECK(if [$PATH_DF] needs -k for BSD-formatted output,
39	sfs_cv_df_dash_k,
40sfs_cv_df_dash_k=no
41[test "`$PATH_DF . | sed -e '2,$d;/Mounted on/d'`" \
42	&& test "`$PATH_DF -k . | sed -ne '2,$d;/Mounted on/p'`" \
43	&& sfs_cv_df_dash_k=yes])
44if test $sfs_cv_df_dash_k = yes; then
45	AC_DEFINE(DF_NEEDS_DASH_K, 1,
46	  Define if you must run \"df -k\" to get BSD-formatted output)
47fi])
48dnl
49dnl Check for declarations
50dnl SFS_CHECK_DECL(symbol, headers-to-try, headers-to-include)
51dnl
52AC_DEFUN([SFS_CHECK_DECL],
53[AC_CACHE_CHECK(for a declaration of $1, sfs_cv_$1_decl,
54dnl    for hdr in [patsubst(builtin(shift, $@), [,], [ ])]; do
55    for hdr in $2; do
56	if test -z "${sfs_cv_$1_decl}"; then
57dnl	    AC_HEADER_EGREP($1, $hdr, sfs_cv_$1_decl=yes)
58	    AC_TRY_COMPILE(
59patsubst($3, [\([^ ]+\) *], [#include <\1>
60])[#include <$hdr>], &$1;, sfs_cv_$1_decl=yes)
61	fi
62    done
63    test -z "${sfs_cv_$1_decl+set}" && sfs_cv_$1_decl=no)
64if test "$sfs_cv_$1_decl" = no; then
65	AC_DEFINE_UNQUOTED(NEED_[]translit($1, [a-z], [A-Z])_DECL, 1,
66		Define if system headers do not declare $1.)
67fi])
68dnl
69dnl Check if lsof keeps a device cache
70dnl
71AC_DEFUN([SFS_LSOF_DEVCACHE],
72[if test "$PATH_LSOF"; then
73    AC_CACHE_CHECK(if lsof supports a device cache, sfs_cv_lsof_devcache,
74    if $PATH_LSOF -h 2>&1 | fgrep -e -D > /dev/null; then
75	sfs_cv_lsof_devcache=yes
76    else
77	sfs_cv_lsof_devcache=no
78    fi)
79    if test "$sfs_cv_lsof_devcache" = yes; then
80	AC_DEFINE(LSOF_DEVCACHE, 1,
81		Define is lsof supports the -D option)
82    fi
83fi])
84dnl
85dnl Posix time subroutine
86dnl
87AC_DEFUN([SFS_TIME_CHECK],
88[AC_CACHE_CHECK($3, sfs_cv_time_check_$1,
89AC_TRY_COMPILE([
90#ifdef TIME_WITH_SYS_TIME
91# include <sys/time.h>
92# include <time.h>
93#elif defined (HAVE_SYS_TIME_H)
94# include <sys/time.h>
95#else /* !TIME_WITH_SYS_TIME && !HAVE_SYS_TIME_H */
96# include <time.h>
97#endif /* !TIME_WITH_SYS_TIME && !HAVE_SYS_TIME_H */
98], $2, sfs_cv_time_check_$1=yes, sfs_cv_time_check_$1=no))
99if test "$sfs_cv_time_check_$1" = yes; then
100	AC_DEFINE($1, 1, $4)
101fi])
102dnl
103dnl Posix time stuff
104dnl
105AC_DEFUN([SFS_TIMESPEC],
106[AC_CHECK_HEADERS(sys/time.h)
107AC_HEADER_TIME
108AC_CHECK_FUNCS(clock_gettime)
109SFS_TIME_CHECK(HAVE_CLOCK_GETTIME_DECL,
110		int (*x) () = &clock_gettime;,
111		for a declaration of clock_gettime,
112		Define if system headers declare clock_gettime.)
113SFS_TIME_CHECK(HAVE_TIMESPEC,
114		int x = sizeof (struct timespec),
115		for struct timespec,
116		Define if sys/time.h defines a struct timespec.)
117dnl AC_EGREP_HEADER(clock_gettime, sys/time.h,
118dnl 	AC_DEFINE(HAVE_CLOCK_GETTIME_DECL, 1,
119dnl 	Define if system header files declare clock_gettime.))
120dnl AC_EGREP_HEADER(timespec, sys/time.h,
121dnl 	AC_DEFINE(HAVE_TIMESPEC, 1,
122dnl 		  Define if sys/time.h defines a struct timespec.))
123])
124dnl
125dnl Find the crypt function
126dnl
127AC_DEFUN([SFS_FIND_CRYPT],
128[AC_SUBST(LIBCRYPT)
129AC_CHECK_FUNC(crypt)
130if test $ac_cv_func_crypt = no; then
131	AC_CHECK_LIB(crypt, crypt, LIBCRYPT="-lcrypt")
132fi
133])
134dnl
135dnl Find the setusercontext function
136dnl
137AC_DEFUN([SFS_CHECK_SETUSERCONTEXT],
138[AC_SUBST(SETUSERCONTEXTLIB)
139AC_CHECK_FUNC(setusercontext)
140if test "$ac_cv_func_setusercontext" = no; then
141	AC_CHECK_LIB(setusercontext, util, SETUSERCONTEXTLIB="-lutil")
142fi
143if test "$ac_cv_func_setusercontext" = yes; then
144	AC_CHECK_HEADERS(login_cap.h)
145	AC_DEFINE(HAVE_SETUSERCONTEXT, 1,
146		Define if you have the setusercontext function)
147fi
148])
149dnl
150dnl Find pty functions
151dnl
152AC_DEFUN([SFS_PTYLIB],
153[AC_SUBST(PTYLIB)
154AC_CHECK_FUNCS(_getpty)
155AC_CHECK_FUNCS(openpty)
156if test $ac_cv_func_openpty = no; then
157	AC_CHECK_LIB(util, openpty, PTYLIB="-lutil"
158		AC_DEFINE(HAVE_OPENPTY, 1,
159			Define if you have the openpty function.))
160fi
161if test "$ac_cv_func_openpty" = yes -o "$ac_cv_lib_util_openpty" = yes; then
162	AC_CHECK_HEADERS(util.h libutil.h)
163fi
164AC_CHECK_HEADERS(pty.h)
165
166AC_CACHE_CHECK(for BSD-style utmp slots, ac_cv_have_ttyent,
167	AC_EGREP_HEADER(getttyent, ttyent.h,
168		ac_cv_have_ttyent=yes, ac_cv_have_ttyent=no))
169if test "$ac_cv_have_ttyent" = yes; then
170	AC_DEFINE(USE_TTYENT, 1,
171	    Define if utmp must be managed with BSD-style ttyent functions)
172fi
173
174AC_MSG_CHECKING(for pseudo ttys)
175if test -c /dev/ptmx && test -c /dev/pts/0
176then
177  AC_DEFINE(HAVE_DEV_PTMX, 1,
178	    Define if you have SYSV-style /dev/ptmx and /dev/pts/.)
179  AC_MSG_RESULT(streams ptys)
180else
181if test -c /dev/pts && test -c /dev/ptc
182then
183  AC_DEFINE(HAVE_DEV_PTS_AND_PTC, 1,
184	    Define if you have /dev/pts and /dev/ptc devices (as in AIX).)
185  AC_MSG_RESULT(/dev/pts and /dev/ptc)
186else
187  AC_MSG_RESULT(bsd-style ptys)
188fi
189fi])
190dnl
191dnl SFS_TRY_RESOLV_LIB(library)
192dnl   see if -llibrary is needed to get res_mkquery
193dnl
194AC_DEFUN([SFS_TRY_RESOLV_LIB],
195[reslib="$1"
196if test -z "$reslib"; then
197    resdesc="standard C library"
198else
199    resdesc="lib$reslib"
200fi
201AC_CACHE_CHECK(for resolver functions in [$resdesc],
202	sfs_cv_reslib_lib$1,
203[sfs_try_resolv_lib_save_LIBS="$LIBS"
204if test x"$reslib" != x; then
205    LIBS="$LIBS -l$reslib"
206fi
207AC_LINK_IFELSE([
208#include "confdefs.h"
209
210#include <sys/types.h>
211#include <sys/socket.h>
212#include <netinet/in.h>
213#include <arpa/inet.h>
214#if HAVE_ARPA_NAMESER_COMPAT_H
215#include <arpa/nameser_compat.h>
216#else /* !HAVE_ARPA_NAMESER_COMPAT_H */
217#include <arpa/nameser.h>
218#endif /* !HAVE_ARPA_NAMESER_COMPAT_H */
219#include <resolv.h>
220
221int
222main (int argc, char **argv)
223{
224  res_mkquery (0, 0, 0, 0, 0, 0, 0, 0, 0);
225  return 0;
226}], sfs_cv_reslib_lib$1=yes, sfs_cv_reslib_lib$1=no)
227LIBS="$sfs_try_resolv_lib_save_LIBS"])
228if test "$sfs_cv_reslib_lib$1" = yes -a "$reslib"; then
229    LIBS="$LIBS -l$reslib"
230fi
231])
232dnl
233dnl Use -lresolv only if we need it
234dnl
235AC_DEFUN([SFS_FIND_RESOLV],
236[AC_CHECK_HEADERS(arpa/nameser_compat.h)
237if test "$ac_cv_header_arpa_nameser_compat_h" = yes; then
238	nameser_header=arpa/nameser_compat.h
239else
240	nameser_header=arpa/nameser.h
241fi
242
243dnl AC_CHECK_FUNC(res_mkquery)
244dnl if test "$ac_cv_func_res_mkquery" != yes; then
245dnl 	AC_CHECK_LIB(resolv, res_mkquery)
246dnl 	if test "$ac_cv_lib_resolv_res_mkquery" = no; then
247dnl 		AC_CHECK_LIB(resolv, __res_mkquery)
248dnl 	fi
249dnl fi
250
251SFS_TRY_RESOLV_LIB([])
252if test "$sfs_cv_reslib_lib" = no; then
253    SFS_TRY_RESOLV_LIB(resolv)
254fi
255
256dnl See if the resolv functions are actually declared
257SFS_CHECK_DECL(res_init, resolv.h,
258	sys/types.h sys/socket.h netinet/in.h $nameser_header)
259SFS_CHECK_DECL(res_mkquery, resolv.h,
260	sys/types.h sys/socket.h netinet/in.h $nameser_header)
261SFS_CHECK_DECL(dn_skipname, resolv.h,
262	sys/types.h sys/socket.h netinet/in.h $nameser_header)
263SFS_CHECK_DECL(dn_expand, resolv.h,
264	sys/types.h sys/socket.h netinet/in.h $nameser_header)
265])
266dnl
267dnl Check if first element in grouplist is egid
268dnl
269AC_DEFUN([SFS_CHECK_EGID_IN_GROUPLIST],
270[AC_TYPE_GETGROUPS
271AC_CACHE_CHECK(if egid is first element of grouplist, sfs_cv_egid_in_grouplist,
272AC_TRY_RUN([changequote changequote([[,]])
273#include <sys/types.h>
274#include <unistd.h>
275#include <netinet/in.h>
276#include <rpc/rpc.h>
277
278#include "confdefs.h"
279
280static int
281getint (void *_p)
282{
283  unsigned char *p = _p;
284  return p[0]<<24 | p[1]<<16 | p[2]<<8 | p[3];
285}
286
287int
288main (int argc, char **argv)
289{
290  AUTH *a;
291  GETGROUPS_T gids[24];
292  int n, xn;
293  char buf[408];
294  char *p;
295  XDR x;
296
297  /* Must hard-code OSes with egid in grouplist *and* broken RPC lib */
298#if __FreeBSD__ || __APPLE__
299  return 0;
300#endif
301
302  n = getgroups (24, gids);
303  if (n <= 0)
304    return 1;
305
306  a = authunix_create_default ();
307  xdrmem_create (&x, buf, sizeof (buf), XDR_ENCODE);
308  if (!auth_marshall (a, &x))
309    return 1;
310
311  if (getint (buf) != AUTH_UNIX)
312    return 1;
313  p = buf + 12;			/* Skip auth flavor, length, timestamp */
314  p += getint (p) + 7 & ~3;	/* Skip machine name */
315  p += 8;			/* Skip uid & gid */
316
317  xn = getint (p);		/* Length of grouplist in auth_unix */
318
319  return n != xn + 1;
320}
321changequote([,])],
322	sfs_cv_egid_in_grouplist=yes, sfs_cv_egid_in_grouplist=no))
323if test $sfs_cv_egid_in_grouplist = yes; then
324	AC_DEFINE(HAVE_EGID_IN_GROUPLIST, 1,
325	  Define if the first element of a grouplist is the effective gid)
326fi])
327dnl
328dnl Check for struct passwd fields
329dnl
330AC_DEFUN([SFS_PASSWD_FIELD],
331[AC_CACHE_CHECK(for $1 in struct passwd, sfs_cv_passwd_$1,
332AC_TRY_COMPILE([
333#include <sys/types.h>
334#include <pwd.h>
335], [
336   struct passwd *pw;
337   pw->$1;
338], sfs_cv_passwd_$1=yes, sfs_cv_passwd_$1=no))
339if test "$sfs_cv_passwd_$1" = yes; then
340        AC_DEFINE(HAVE_PASSWD_[]translit($1, [a-z ], [A-Z_]), 1,
341		Define if struct passwd has $1 field)
342fi])
343dnl
344dnl Check if putenv copies arguments
345dnl
346AC_DEFUN([SFS_PUTENV_COPY],
347[AC_CACHE_CHECK(if putenv() copies its argument, sfs_cv_putenv_copy,
348AC_TRY_RUN([
349changequote`'changequote([[,]])
350#include <stdlib.h>
351
352char var[] = "V=0";
353
354int
355main (int argc, char **argv)
356{
357  char *v;
358
359  putenv (var);
360  var[2] = '1';
361  v = getenv ("V");
362  return *v != '0';
363}
364changequote([,])],
365	sfs_cv_putenv_copy=yes, sfs_cv_putenv_copy=no,
366	sfs_cv_putenv_copy=no)
367)
368if test $sfs_cv_putenv_copy = yes; then
369	AC_DEFINE(PUTENV_COPIES_ARGUMENT, 1,
370		  Define if putenv makes a copy of its argument)
371fi])
372dnl
373dnl Check for wide select
374dnl
375AC_DEFUN([SFS_CHECK_WIDE_SELECT],
376[AC_CACHE_CHECK(for wide select, sfs_cv_wideselect,
377fdlim_h=${srcdir}/fdlim.h
378test -f ${srcdir}/async/fdlim.h && fdlim_h=${srcdir}/async/fdlim.h
379test -f ${srcdir}/libasync/fdlim.h && fdlim_h=${srcdir}/libasync/fdlim.h
380AC_TRY_RUN([changequote changequote([[,]])
381#include <stdio.h>
382#include <fcntl.h>
383#include <stdlib.h>
384#include "${fdlim_h}"
385
386struct timeval ztv;
387
388int
389main ()
390{
391  int pfd[2];
392  int rfd, wfd;
393  int maxfd;
394  int i;
395  fd_set *rfdsp, *wfdsp;
396
397  maxfd = fdlim_get (1);
398  fdlim_set (maxfd, 1);
399  maxfd = fdlim_get (0);
400  if (maxfd <= FD_SETSIZE) {
401    printf ("[small fd limit anyway] ");
402    exit (1);
403  }
404  if (pipe (pfd) < 0)
405    exit (1);
406
407#ifdef F_DUPFD
408  if ((rfd = fcntl (pfd[0], F_DUPFD, maxfd - 2)) < 0)
409    exit (1);
410  if ((wfd = fcntl (pfd[1], F_DUPFD, maxfd - 1)) < 0)
411    exit (1);
412#else /* !F_DUPFD */
413  if ((rfd = dup2 (pfd[0], maxfd - 2)) < 0)
414    exit (1);
415  if ((wfd = dup2 (pfd[1], maxfd - 1)) < 0)
416    exit (1);
417#endif /* !F_DUPFD */
418
419  rfdsp = malloc (1 + (maxfd/8));
420  for (i = 0; i < 1 + (maxfd/8); i++)
421    ((char *) rfdsp)[i] = '\0';
422  wfdsp = malloc (1 + (maxfd/8));
423  for (i = 0; i < 1 + (maxfd/8); i++)
424    ((char *) wfdsp)[i] = '\0';
425
426  FD_SET (rfd, rfdsp);
427  FD_SET (wfd, wfdsp);
428  if (select (maxfd, rfdsp, wfdsp, NULL, &ztv) < 0)
429    exit (1);
430
431  if (FD_ISSET (wfd, wfdsp) && !FD_ISSET (rfd, rfdsp))
432    exit (0);
433  else
434    exit (1);
435}
436changequote([,])],
437sfs_cv_wideselect=yes, sfs_cv_wideselect=no, sfs_cv_wideselect=no))
438if test $sfs_cv_wideselect = yes; then
439	AC_DEFINE(HAVE_WIDE_SELECT, 1,
440		  Define if select can take file descriptors >= FD_SETSIZE)
441fi])
442dnl
443dnl Check for 64-bit off_t
444dnl
445AC_DEFUN([SFS_CHECK_OFF_T_64],
446[AC_CACHE_CHECK(for 64-bit off_t, sfs_cv_off_t_64,
447AC_TRY_COMPILE([
448#include <unistd.h>
449#include <sys/types.h>
450],[
451switch (0) case 0: case (sizeof (off_t) <= 4):;
452], sfs_cv_off_t_64=no, sfs_cv_off_t_64=yes))
453if test $sfs_cv_off_t_64 = yes; then
454	AC_DEFINE(HAVE_OFF_T_64, 1, Define if off_t is 64 bits wide.)
455fi])
456dnl
457dnl Check for type
458dnl
459AC_DEFUN([SFS_CHECK_TYPE],
460[AC_CACHE_CHECK(for $1, sfs_cv_type_[]translit($1, [ ], [_]),
461AC_TRY_COMPILE([
462#include <stddef.h>
463#include <stdlib.h>
464#include <sys/types.h>
465#include <sys/socket.h>
466#ifdef HAVE_RPC_RPC_H
467#include <rpc/rpc.h>
468#endif
469$2
470],[
471sizeof($1);
472], sfs_cv_type_[]translit($1, [ ], [_])=yes, sfs_cv_type_[]translit($1, [ ], [_])=no))
473if test $sfs_cv_type_[]translit($1, [ ], [_]) = yes; then
474        AC_DEFINE(HAVE_[]translit($1, [a-z ], [A-Z_]), 1,
475		  Define if system headers declare a $1 type.)
476fi])
477dnl
478dnl Check if system defines u_int64_t as an unsigned long long
479dnl
480AC_DEFUN([SFS_CHECK_U_INT64],
481[AC_CHECK_SIZEOF(long, 4)
482AC_CHECK_SIZEOF(long long, 0)
483SFS_CHECK_TYPE(u_int64_t)
484AC_CACHE_CHECK(whether u_int64_t is an unsigned long long,
485	sfs_cv_u_int64_t_is_long_long,
486if test 8 -gt "$ac_cv_sizeof_long"; then
487    sfs_cv_u_int64_t_is_long_long=yes
488elif test yes != "$sfs_cv_type_u_int64_t"; then
489    sfs_cv_u_int64_t_is_long_long=yes
490else
491    AC_COMPILE_IFELSE([
492#include <stddef.h>
493#include <stdlib.h>
494#include <sys/types.h>
495#include <sys/socket.h>
496#ifdef HAVE_RPC_RPC_H
497#include <rpc/rpc.h>
498#endif
499
500void f (u_int64_t val);
501void
502f (unsigned long long val)
503{
504}
505], sfs_cv_u_int64_t_is_long_long=yes, sfs_cv_u_int64_t_is_long_long=no)
506fi)
507if test yes = "$sfs_cv_u_int64_t_is_long_long"; then
508AC_DEFINE(U_INT64_T_IS_LONG_LONG, 1,
509    Define if system header files typedef u_int64_t as unsigned long long)
510fi])
511dnl
512dnl Check for struct cmsghdr (for passing file descriptors)
513dnl
514AC_DEFUN([SFS_CHECK_FDPASS],
515[
516AC_CACHE_CHECK(for fd passing with msg_accrights in msghdr,
517		sfs_cv_accrights,
518AC_TRY_COMPILE([
519#include <sys/types.h>
520#include <sys/socket.h>
521],[
522struct msghdr mh;
523mh.msg_accrights = 0;
524], sfs_cv_accrights=yes, sfs_cv_accrights=no))
525
526AC_CACHE_CHECK(for fd passing with struct cmsghdr, sfs_cv_cmsghdr,
527if test "$sfs_cv_accrights" != "yes"; then
528AC_TRY_COMPILE([
529#include <sys/types.h>
530#include <sys/socket.h>
531],[
532struct msghdr mh;
533struct cmsghdr cmh;
534mh.msg_control = (void *) &cmh;
535], sfs_cv_cmsghdr=yes, sfs_cv_cmsghdr=no)
536else
537	sfs_cv_cmsghdr=no
538fi)
539
540if test $sfs_cv_accrights = yes; then
541	AC_DEFINE(HAVE_ACCRIGHTS, 1,
542	Define if msghdr has msg_accrights field for passing file descriptors.)
543fi
544if test $sfs_cv_cmsghdr = yes; then
545	AC_DEFINE(HAVE_CMSGHDR, 1,
546	Define if system has cmsghdr structure for passing file descriptors.)
547fi])
548dnl
549dnl Check for sa_len in struct sockaddrs
550dnl
551AC_DEFUN([SFS_CHECK_SA_LEN],
552[AC_CACHE_CHECK(for sa_len in struct sockaddr, sfs_cv_sa_len,
553AC_TRY_COMPILE([
554#include <sys/types.h>
555#include <sys/socket.h>
556],[
557struct sockaddr sa;
558sa.sa_len = 0;
559], sfs_cv_sa_len=yes, sfs_cv_sa_len=no))
560if test $sfs_cv_sa_len = yes; then
561	AC_DEFINE(HAVE_SA_LEN, 1,
562	Define if struct sockaddr has sa_len field.)
563fi])
564dnl
565dnl Check for sockaddr_storage
566dnl
567AC_DEFUN([SFS_CHECK_SOCKADDR_STORAGE],
568[SFS_CHECK_TYPE(struct sockaddr_storage)
569AC_CACHE_CHECK(for __ss_len in sockaddr_storage, sfs_cv_ss_len_underscores,
570AC_TRY_COMPILE([
571#include <sys/types.h>
572#include <sys/socket.h>
573],[
574struct sockaddr_storage ss;
575ss.__ss_len = 0;
576], sfs_cv_ss_len_underscores=yes, sfs_cv_ss_len_underscores=no))
577if test $sfs_cv_ss_len_underscores = yes; then
578	AC_DEFINE(HAVE_SS_LEN_UNDERSCORES, 1,
579	Define if struct sockaddr_storage has __ss_len field, not ss_len)
580fi])
581dnl
582dnl Check something about the nfs_args field
583dnl
584AC_DEFUN([SFS_TRY_NFSARG_FIELD],
585[AC_TRY_COMPILE([
586#include "${srcdir}/nfsconf.h"
587],[
588struct nfs_args na;
589$1;
590], $2, $3)])
591dnl
592dnl Check a particular field in nfs_args
593dnl
594AC_DEFUN([SFS_CHECK_NFSMNT_FIELD],
595[AC_CACHE_CHECK(for $1 in nfs_args structure, sfs_cv_nfsmnt_$1,
596SFS_TRY_NFSARG_FIELD(na.$1, sfs_cv_nfsmnt_$1=yes, sfs_cv_nfsmnt_$1=no))
597if test $sfs_cv_nfsmnt_$1 = yes; then
598  AC_DEFINE(HAVE_NFSMNT_[]translit($1, [a-z], [A-Z]), 1,
599	    Define if the nfs_args structure has a $1 field.)
600fi])
601dnl
602dnl Check if nfs_args hostname field is an array
603dnl
604AC_DEFUN([SFS_CHECK_NFSARG_HOSTNAME_ARRAY],
605[AC_CACHE_CHECK(if nfs_args hostname field is an array, sfs_cv_nfs_hostarray,
606	SFS_TRY_NFSARG_FIELD(na.hostname = 0,
607		sfs_cv_nfs_hostarray=no, sfs_cv_nfs_hostarray=yes))
608if test $sfs_cv_nfs_hostarray = yes; then
609  AC_DEFINE(HAVE_NFSARG_HOSTNAME_ARRAY, 1,
610	[The hostname field of nfs_arg is an array])
611fi])
612dnl
613dnl Check if addr field is a pointer or not
614dnl
615AC_DEFUN([SFS_CHECK_NFSARG_ADDR_PTR],
616[AC_CHECK_HEADERS(tiuser.h)
617AC_CACHE_CHECK(if nfs_args addr field is a pointer, sfs_cv_nfsmnt_addr_ptr,
618	SFS_TRY_NFSARG_FIELD(na.addr = (void *) 0, sfs_cv_nfsmnt_addr_ptr=yes,
619				sfs_cv_nfsmnt_addr_ptr=no))
620if test $sfs_cv_nfsmnt_addr_ptr = yes; then
621  AC_DEFINE(HAVE_NFSARG_ADDR_PTR, 1,
622	[The addr field of nfs_arg is a pointer])
623  AC_CACHE_CHECK(if nfs_args addr is a netbuf *, sfs_cv_nfsmnt_addr_netbuf,
624	SFS_TRY_NFSARG_FIELD(struct netbuf nb; *na.addr = nb,
625	  sfs_cv_nfsmnt_addr_netbuf=yes, sfs_cv_nfsmnt_addr_netbuf=no))
626  if test $sfs_cv_nfsmnt_addr_netbuf = yes; then
627    AC_DEFINE(HAVE_NFSARG_ADDR_NETBUF, 1,
628	[If the nfs_arg addr field is a netbuf pointer])
629  fi
630fi])
631dnl
632dnl Check for SVR4-like nfs_fh3 structure
633dnl
634AC_DEFUN([SFS_CHECK_FH3_SVR4],
635[if test "$sfs_cv_nfsmnt_fhsize" != yes; then
636  AC_CACHE_CHECK(for SVR4-like struct nfs_fh3, sfs_cv_fh3_svr4,
637  AC_TRY_COMPILE([#include "${srcdir}/nfsconf.h"],
638                 [ struct nfs_fh3 fh;
639                   switch (0) case 0: case sizeof (fh.fh3_u.data) == 64:; ],
640                 sfs_cv_fh3_svr4=yes, sfs_cv_fh3_svr4=no))
641  if test $sfs_cv_fh3_svr4 = yes; then
642    AC_DEFINE(HAVE_SVR4_FH3, 1,
643	[The the fh field of the nfs_arg structure points to an SVR4 nfs_fh3])
644  fi
645fi])
646dnl
647dnl Check for 2 argument unmount
648dnl
649AC_DEFUN([SFS_CHECK_UNMOUNT_FLAGS],
650[AC_CACHE_CHECK(for a 2 argument unmount, sfs_cv_umount_flags,
651AC_TRY_COMPILE([
652#include <sys/param.h>
653#include <sys/mount.h>
654],[
655#ifdef HAVE_UNMOUNT
656unmount
657#else /* !HAVE_UNMOUNT */
658umount
659#endif /* !HAVE_UNMOUNT */
660	(0);
661], sfs_cv_umount_flags=no, sfs_cv_umount_flags=yes))
662if test $sfs_cv_umount_flags = yes; then
663	AC_DEFINE(UNMOUNT_FLAGS, 1,
664		  Define if the unmount system call has 2 arguments.)
665else
666	AC_CHECK_FUNCS(umount2)
667fi])
668dnl
669dnl Check if we can find the nfs_args structure
670dnl
671AC_DEFUN([SFS_CHECK_NFSMNT],
672[AC_CHECK_FUNCS(vfsmount unmount)
673AC_CHECK_HEADERS(nfs/nfsproto.h, [], [],
674[#include <sys/types.h>
675#include <sys/param.h>
676#include <sys/mount.h>])
677need_nfs_nfs_h=no
678AC_EGREP_HEADER(nfs_args, sys/mount.h,,
679	AC_EGREP_HEADER(nfs_args, nfs/mount.h,
680		AC_DEFINE(NEED_NFS_MOUNT_H, 1,
681			[The nfs_args structure is in <nfs/nfsmount.h>]))
682	AC_EGREP_HEADER(nfs_args, nfs/nfsmount.h,
683		AC_DEFINE(NEED_NFS_NFSMOUNT_H, 1,
684			[The nfs_args structure is in <nfs/nfsmount.h]))
685	AC_EGREP_HEADER(nfs_args, nfsclient/nfs.h,
686		AC_DEFINE(NEED_NFSCLIENT_NFS_H, 1,
687			[The nfs_args structure is in <nfsclient/nfs.h>]))
688	AC_EGREP_HEADER(nfs_args, nfs/nfs.h,
689		AC_DEFINE(NEED_NFS_NFS_H, 1,
690			[The nfs_args structure is in <nfs/nfs.h>])
691		need_nfs_nfs_h=yes))
692AC_CACHE_CHECK(for nfs_args mount structure, sfs_cv_nfsmnt_ok,
693	SFS_TRY_NFSARG_FIELD(, sfs_cv_nfsmnt_ok=yes, sfs_cv_nfsmnt_ok=no))
694if test $sfs_cv_nfsmnt_ok = no; then
695	AC_MSG_ERROR([Could not find NFS mount argument structure!])
696fi
697if test "$need_nfs_nfs_h" = no; then
698	AC_EGREP_HEADER(nfs_fh3, nfs/nfs.h,
699		AC_DEFINE(NEED_NFS_NFS_H, 1,
700			[The nfs_args structure is in <nfs/nfs.h>])
701			need_nfs_nfs_h=yes)
702fi
703AC_CHECK_HEADERS(linux/nfs2.h)
704SFS_CHECK_NFSMNT_FIELD(addrlen)
705SFS_CHECK_NFSMNT_FIELD(sotype)
706SFS_CHECK_NFSMNT_FIELD(proto)
707SFS_CHECK_NFSMNT_FIELD(fhsize)
708SFS_CHECK_NFSMNT_FIELD(fd)
709
710dnl Check whether we have Linux 2.2 NFS V3 mount structure
711SFS_CHECK_NFSMNT_FIELD(old_root)
712
713dnl Check whether file handle is named "root" or "fh"
714SFS_CHECK_NFSMNT_FIELD(root)
715SFS_CHECK_NFSMNT_FIELD(fh)
716dnl ksh apparently cannot handle this as a compound test.
717if test "$sfs_cv_nfsmnt_root" = "no"; then
718  if test "$sfs_cv_nfsmnt_fh" = "no"; then
719    AC_MSG_ERROR([Could not find the nfs_args file handle field!])
720  fi
721fi
722AC_CHECK_HEADERS(sys/mntent.h)
723SFS_CHECK_FH3_SVR4
724if test "$sfs_cv_nfsmnt_fh" = yes; then
725  if test "$sfs_cv_fh3_svr4" = yes -o "$sfs_cv_nfsmnt_fhsize" = yes; then
726    AC_DEFINE(HAVE_NFS_V3, 1, [If the system supports NFS 3])
727  fi
728elif test "$sfs_cv_nfsmnt_old_root" = yes; then
729  AC_DEFINE(HAVE_NFS_V3, 1, [If the system supports NFS 3])
730fi
731
732SFS_CHECK_NFSARG_HOSTNAME_ARRAY
733SFS_CHECK_NFSARG_ADDR_PTR
734SFS_CHECK_UNMOUNT_FLAGS])
735dnl
736dnl Use -ldb only if we need it.
737dnl
738AC_DEFUN([SFS_FIND_DB],
739[AC_CHECK_FUNC(dbopen)
740if test $ac_cv_func_dbopen = no; then
741	AC_CHECK_LIB(db, dbopen)
742	if test $ac_cv_lib_db_dbopen = no; then
743	  AC_MSG_ERROR([Could not find library for dbopen!])
744	fi
745fi
746])
747dnl
748dnl Check something about the stat structure
749dnl
750AC_DEFUN([SFS_TRY_STAT_FIELD],
751[AC_TRY_COMPILE([
752#include <sys/stat.h>
753],[
754struct stat s;
755$1;
756], $2, $3)])
757dnl
758dnl Check for a particular field in stat
759dnl
760AC_DEFUN([SFS_CHECK_STAT_FIELD],
761[AC_CACHE_CHECK(for $1 in stat structure, sfs_cv_stat_$1,
762SFS_TRY_STAT_FIELD(s.$1, sfs_cv_stat_$1=yes, sfs_cv_stat_$1=no))
763if test $sfs_cv_stat_$1 = yes; then
764  AC_DEFINE(SFS_HAVE_STAT_[]translit($1, [a-z], [A-Z]), 1,
765	    Define if the stat structure has a $1 field.)
766fi])
767
768dnl
769dnl  Check whether we can get away with large socket buffers.
770dnl
771AC_DEFUN([SFS_CHECK_SOCK_BUF],
772[AC_CACHE_CHECK(whether socket buffers > 64k are allowed,
773 		sfs_cv_large_sock_buf, AC_TRY_RUN([
774#include <sys/types.h>
775#include <sys/socket.h>
776
777int
778main()
779{
780  int bigbuf = 0x11000;
781  int s = socket(AF_INET, SOCK_STREAM, 0);
782  if (setsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *)&bigbuf, sizeof(bigbuf))<0)
783    exit(1);
784  exit(0);
785}
786], sfs_cv_large_sock_buf=yes,
787   sfs_cv_large_sock_buf=no,
788   sfs_cv_large_sock_buf=no))
789if test $sfs_cv_large_sock_buf = yes; then
790	AC_DEFINE(SFS_ALLOW_LARGE_BUFFER, 1,
791		  Define if SO_SNDBUF/SO_RCVBUF can exceed 64K.)
792fi])
793dnl
794dnl  Test to see if we can bind a port with SO_REUSEADDR when
795dnl  there is a connected TCP socket using the same port number,
796dnl  but the connected socket does not have SO_REUSEADDR set.
797dnl
798AC_DEFUN([SFS_CHECK_BSD_REUSEADDR],
799[AC_CACHE_CHECK(for BSD SO_REUSEADDR semantics, sfs_cv_bsd_reuseaddr,
800[AC_RUN_IFELSE([changequote changequote([[,]])[[
801#include <stdio.h>
802#include <errno.h>
803#include <string.h>
804#include <unistd.h>
805#include <stdlib.h>
806#include <fcntl.h>
807#include <sys/types.h>
808#include <sys/socket.h>
809#include <netinet/in.h>
810
811#include "confdefs.h"
812
813#ifndef HAVE_SOCKLEN_T
814# define socklen_t int
815#endif /* !HAVE_SOCKLEN_T */
816
817#ifndef bzero
818# define bzero(a,b)   memset((a), 0, (b))
819#endif /* !bzero */
820
821int
822inetsocket (unsigned long addr, int port, int *portp)
823{
824  int s;
825  struct sockaddr_in sin;
826  int n = 1;
827
828  bzero (&sin, sizeof (sin));
829  sin.sin_family = AF_INET;
830  sin.sin_port = htons (port);
831  sin.sin_addr.s_addr = htonl (addr);
832
833  s = socket (AF_INET, SOCK_STREAM, 0);
834  if (s < 0) {
835    perror ("socket");
836    exit (2);
837  }
838  if (port && setsockopt (s,SOL_SOCKET, SO_REUSEADDR, &n, sizeof n) < 0) {
839    perror ("SO_REUSEADDR");
840    exit (2);
841  }
842  if (bind (s, (struct sockaddr *) &sin, sizeof (sin)) < 0)
843    return -1;
844  if (portp) {
845    socklen_t sinlen = sizeof (sin);
846    getsockname (s, (struct sockaddr *) &sin, &sinlen);
847    *portp = ntohs (sin.sin_port);
848  }
849
850  return s;
851}
852
853int
854connectlocal (int s, int dport)
855{
856  struct sockaddr_in sin;
857
858  bzero (&sin, sizeof (sin));
859  sin.sin_family = AF_INET;
860  sin.sin_port = htons (dport);
861  sin.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
862  return connect (s, (struct sockaddr *) &sin, sizeof (sin));
863}
864
865void
866make_async (int s)
867{
868  int n;
869  if ((n = fcntl (s, F_GETFL)) < 0
870      || fcntl (s, F_SETFL, n | O_NONBLOCK) < 0) {
871    perror ("fcntl");
872    exit (2);
873  }
874}
875
876int
877main (int argc, char **argv)
878{
879  int s1, s1p;
880  int c1, c1p;
881  int c2;
882
883  s1 = inetsocket (INADDR_LOOPBACK, 0, &s1p);
884  listen (s1, 5);
885
886  c1 = inetsocket (INADDR_LOOPBACK, 0, &c1p);
887  make_async (c1);
888  if (connectlocal (c1, s1p) < 0) {
889    if (errno == EINPROGRESS) {
890      struct sockaddr_in sin;
891      socklen_t sinlen = sizeof (sin);
892      sin.sin_family = AF_INET;
893      accept (s1, (struct sockaddr *) &sin, &sinlen);
894    }
895    else {
896      perror ("connect");
897      exit (2);
898    }
899  }
900
901  c2 = inetsocket (INADDR_ANY, c1p, NULL);
902  exit (c2 < 0);
903}
904]]changequote([,])],
905	sfs_cv_bsd_reuseaddr=yes, sfs_cv_bsd_reuseaddr=no,
906	sfs_cv_bsd_reuseaddr=no)])
907if test "$sfs_cv_bsd_reuseaddr" = yes; then
908    AC_DEFINE(HAVE_BSD_REUSEADDR, 1,
909      Define if SO_REUSEADDR allows same user to bind non-SO_REUSEADDR port)
910fi])
911dnl
912dnl Find pthreads
913dnl
914AC_DEFUN([SFS_FIND_PTHREADS],
915[AC_ARG_WITH(pthreads,
916--with-pthreads=DIR       Specify location of pthreads)
917ac_save_CFLAGS=$CFLAGS
918ac_save_LIBS=$LIBS
919dirs="$with_pthreads ${prefix} ${prefix}/pthreads"
920dirs="$dirs /usr/local /usr/local/pthreads"
921AC_CACHE_CHECK(for pthread.h, sfs_cv_pthread_h,
922[for dir in " " $dirs; do
923    iflags="-I${dir}/include"
924    CFLAGS="${ac_save_CFLAGS} $iflags"
925    AC_TRY_COMPILE([#include <pthread.h>], 0,
926	sfs_cv_pthread_h="${iflags}"; break)
927done])
928if test -z "${sfs_cv_pthread_h+set}"; then
929    AC_MSG_ERROR("Can\'t find pthread.h anywhere")
930fi
931AC_CACHE_CHECK(for libpthread, sfs_cv_libpthread,
932[for dir in "" " " $dirs; do
933    case $dir in
934	"") lflags=" " ;;
935	" ") lflags="-lpthread" ;;
936	*) lflags="-L${dir}/lib -lpthread" ;;
937    esac
938    LIBS="$ac_save_LIBS $lflags"
939    AC_TRY_LINK([#include <pthread.h>],
940	pthread_create (0, 0, 0, 0);,
941	sfs_cv_libpthread=$lflags; break)
942done])
943if test -z ${sfs_cv_libpthread+set}; then
944    AC_MSG_ERROR("Can\'t find libpthread anywhere")
945fi
946CFLAGS=$ac_save_CFLAGS
947CPPFLAGS="$CPPFLAGS $sfs_cv_pthread_h"
948LIBS="$ac_save_LIBS $sfs_cv_libpthread"])
949dnl
950dnl Find GMP
951dnl
952AC_DEFUN([SFS_GMP],
953[AC_ARG_WITH(gmp,
954--with-gmp[[[=/usr/local]]]   specify path for gmp)
955AC_SUBST(GMP_DIR)
956AC_SUBST(LIBGMP)
957AC_MSG_CHECKING([for GMP library])
958test "$with_gmp" = "no" && unset with_gmp
959if test -z "$with_gmp"; then
960    if test -z "$GMP_DIR"; then
961	for dir in `cd $srcdir && echo gmp*`; do
962	    if test -d "$srcdir/$dir"; then
963		GMP_DIR=$dir
964		break
965	    fi
966	done
967    fi
968    if test "${with_gmp+set}" != set \
969		-a "$GMP_DIR" -a -d "$srcdir/$GMP_DIR"; then
970	GMP_DIR=`echo $GMP_DIR | sed -e 's!/$!!'`
971	if test -f "$srcdir/$GMP_DIR/gmp-h.in"; then
972	    CPPFLAGS="$CPPFLAGS "'-I$(top_builddir)/'"$GMP_DIR"
973	else
974	    CPPFLAGS="$CPPFLAGS "'-I$(top_srcdir)/'"$GMP_DIR"
975	fi
976	#LDFLAGS="$LDFLAGS "'-L$(top_builddir)/'"$GMP_DIR"
977    else
978	GMP_DIR=
979	for dir in "$prefix" /usr/local /usr; do
980	    if test \( -f $dir/lib/libgmp.a -o -f $dir/lib/libgmp.la \) \
981		-a \( -f $dir/include/gmp.h -o -f $dir/include/gmp3/gmp.h \
982			-o -f $dir/include/gmp2/gmp.h \); then
983		    with_gmp=$dir
984		    break
985	    fi
986	done
987	if test -z "$with_gmp"; then
988	    AC_MSG_ERROR([Could not find GMP library])
989	fi
990	test "$with_gmp" = /usr -a -f /usr/include/gmp.h && unset with_gmp
991    fi
992fi
993if test "$with_gmp"; then
994    unset GMP_DIR
995    if test -f ${with_gmp}/include/gmp.h; then
996	test "${with_gmp}" = /usr \
997	    || CPPFLAGS="$CPPFLAGS -I${with_gmp}/include"
998    elif test -f ${with_gmp}/include/gmp3/gmp.h; then
999	CPPFLAGS="$CPPFLAGS -I${with_gmp}/include/gmp3"
1000    elif test -f ${with_gmp}/include/gmp2/gmp.h; then
1001	CPPFLAGS="$CPPFLAGS -I${with_gmp}/include/gmp2"
1002    else
1003	AC_MSG_ERROR([Could not find gmp.h header])
1004    fi
1005
1006    #LDFLAGS="$LDFLAGS -L${with_gmp}/lib"
1007    #LIBGMP=-lgmp
1008    if test -f "${with_gmp}/lib/libgmp.la"; then
1009	LIBGMP="${with_gmp}/lib/libgmp.la"
1010    else
1011	LIBGMP="${with_gmp}/lib/libgmp.a"
1012    fi
1013    AC_MSG_RESULT([$LIBGMP])
1014elif test "$GMP_DIR"; then
1015    export GMP_DIR
1016    AC_MSG_RESULT([using distribution in $GMP_DIR subdirectory])
1017    LIBGMP='$(top_builddir)/'"$GMP_DIR/libgmp.la"
1018else
1019    AC_MSG_RESULT(yes)
1020    if test -f /usr/lib/libgmp.la; then
1021	LIBGMP=/usr/lib/libgmp.la
1022    elif test -f /usr/lib/libgmp.a; then
1023	# FreeBSD (among others) has a broken gmp shared library
1024	LIBGMP=/usr/lib/libgmp.a
1025    else
1026	LIBGMP=-lgmp
1027    fi
1028fi
1029
1030AC_CONFIG_SUBDIRS($GMP_DIR)
1031
1032ac_save_CFLAGS="$CFLAGS"
1033if test "$GMP_DIR"; then
1034    if test -f "${srcdir}/${GMP_DIR}"/gmp-h.in; then
1035	CFLAGS="$CFLAGS -I${srcdir}/${GMP_DIR}"
1036    else
1037	CFLAGS="$CFLAGS -I${builddir}/${GMP_DIR}"
1038    fi
1039fi
1040
1041AC_CACHE_CHECK(for overloaded C++ operators in gmp.h, sfs_cv_gmp_cxx_ops,
1042    if test -f "${srcdir}/${GMP_DIR}"/gmp-h.in; then
1043	# More recent versions of GMP all have this
1044	sfs_cv_gmp_cxx_ops=yes
1045    else
1046	AC_EGREP_CPP(operator<<,
1047[#define __cplusplus 1
1048#include <gmp.h>
1049],
1050		sfs_cv_gmp_cxx_ops=yes, sfs_cv_gmp_cxx_ops=no)
1051    fi)
1052test "$sfs_cv_gmp_cxx_ops" = "yes" && AC_DEFINE([HAVE_GMP_CXX_OPS], 1,
1053	[Define if gmp.h overloads C++ operators])
1054
1055AC_CACHE_CHECK(for mpz_xor, sfs_cv_have_mpz_xor,
1056unset sfs_cv_have_mpz_xor
1057if test "$GMP_DIR"; then
1058	sfs_cv_have_mpz_xor=yes
1059else
1060	AC_EGREP_HEADER(mpz_xor, [gmp.h], sfs_cv_have_mpz_xor=yes)
1061fi)
1062test "$sfs_cv_have_mpz_xor" && AC_DEFINE([HAVE_MPZ_XOR], 1,
1063	[Define if you have mpz_xor in your GMP library.])
1064
1065AC_CACHE_CHECK(size of GMP mp_limb_t, sfs_cv_mp_limb_t_size,
1066sfs_cv_mp_limb_t_size=no
1067for size in 2 4 8; do
1068    AC_TRY_COMPILE([#include <gmp.h>],
1069    [switch (0) case 0: case (sizeof (mp_limb_t) == $size):;],
1070    sfs_cv_mp_limb_t_size=$size; break)
1071done)
1072
1073CFLAGS="$ac_save_CFLAGS"
1074
1075test "$sfs_cv_mp_limb_t_size" = no \
1076    && AC_MSG_ERROR(Could not determine size of mp_limb_t.)
1077AC_DEFINE_UNQUOTED(GMP_LIMB_SIZE, $sfs_cv_mp_limb_t_size,
1078		   Define to be the size of GMP's mp_limb_t type.)])
1079
1080dnl dnl
1081dnl dnl Find BekeleyDB 3
1082dnl dnl
1083dnl ac_defun(SFS_DB3,
1084dnl [AC_ARG_WITH(db3,
1085dnl --with-db3[[=/usr/local]]   specify path for BerkeleyDB-3)
1086dnl AC_SUBST(DB3_DIR)
1087dnl AC_CONFIG_SUBDIRS($DB3_DIR)
1088dnl AC_SUBST(DB3_LIB)
1089dnl unset DB3_LIB
1090dnl
1091dnl DB3_DIR=`cd $srcdir && echo db-3.*/dist/`
1092dnl if test -d "$srcdir/$DB3_DIR"; then
1093dnl     DB3_DIR=`echo $DB3_DIR | sed -e 's!/$!!'`
1094dnl else
1095dnl     unset DB3_DIR
1096dnl fi
1097dnl
1098dnl if test ! "${with_db3+set}"; then
1099dnl     if test "$DB3_DIR"; then
1100dnl 	with_db3=yes
1101dnl     else
1102dnl 	with_db3=no
1103dnl     fi
1104dnl fi
1105dnl
1106dnl if test "$with_db3" != no; then
1107dnl     AC_MSG_CHECKING([for DB3 library])
1108dnl     if test "$DB3_DIR" -a "$with_db3" = yes; then
1109dnl 	CPPFLAGS="$CPPFLAGS "'-I$(top_builddir)/'"$DB3_DIR"
1110dnl 	DB3_LIB='-L$(top_builddir)/'"$DB3_DIR -ldb"
1111dnl 	AC_MSG_RESULT([using distribution in $DB3_DIR subdirectory])
1112dnl     else
1113dnl 	libdbrx='^libdb-?([[3.-]].*)?.(la|so|a)$'
1114dnl 	libdbrxla='^libdb-?([[3.-]].*)?.la$'
1115dnl 	libdbrxso='^libdb-?([[3.-]].*)?.so$'
1116dnl 	libdbrxa='^libdb-?([[3.-]].*)?.a$'
1117dnl 	if test "$with_db3" = yes; then
1118dnl 	    for dir in "$prefix/BerkeleyDB.3.1" /usr/local/BerkeleyDB.3.1 \
1119dnl 		    "$prefix/BerkeleyDB.3.0" /usr/local/BerkeleyDB.3.0 \
1120dnl 		    /usr "$prefix" /usr/local; do
1121dnl 		test -f $dir/include/db.h -o -f $dir/include/db3.h \
1122dnl 			-o -f $dir/include/db3/db.h || continue
1123dnl 		if test -f $dir/lib/libdb.a \
1124dnl 			|| ls $dir/lib | egrep "$libdbrx" >/dev/null 2>&1; then
1125dnl 		    with_db3="$dir"
1126dnl 		    break
1127dnl 		fi
1128dnl 	    done
1129dnl 	fi
1130dnl
1131dnl 	if test -f $with_db3/include/db3.h; then
1132dnl 	    AC_DEFINE(HAVE_DB3_H, 1, [Define if BerkeleyDB header is db3.h.])
1133dnl    	    if test "$with_db3" != /usr; then
1134dnl 	      CPPFLAGS="$CPPFLAGS -I${with_db3}/include"
1135dnl 	    fi
1136dnl 	elif test -f $with_db3/include/db3/db.h; then
1137dnl    	    if test "$with_db3" != /usr; then
1138dnl 	      CPPFLAGS="$CPPFLAGS -I${with_db3}/include/db3"
1139dnl 	    fi
1140dnl 	elif test -f $with_db3/include/db.h; then
1141dnl 	    if test "$with_db3" != /usr; then
1142dnl 	      CPPFLAGS="$CPPFLAGS -I${with_db3}/include"
1143dnl 	    fi
1144dnl 	else
1145dnl 	    AC_MSG_ERROR([Could not find BerkeleyDB library version 3])
1146dnl 	fi
1147dnl
1148dnl 	DB3_LIB=`ls $with_db3/lib | egrep "$libdbrxla" | tail -1`
1149dnl 	test ! -f "$with_db3/lib/$DB3_LIB" \
1150dnl 	    && DB3_LIB=`ls $with_db3/lib | egrep "$libdbrxso" | tail -1`
1151dnl 	test ! -f "$with_db3/lib/$DB3_LIB" \
1152dnl 	    && DB3_LIB=`ls $with_db3/lib | egrep "$libdbrxa" | tail -1`
1153dnl 	if test -f "$with_db3/lib/$DB3_LIB"; then
1154dnl 	    DB3_LIB="$with_db3/lib/$DB3_LIB"
1155dnl 	elif test "$with_db3" = /usr; then
1156dnl 	    with_db3=yes
1157dnl 	    DB3_LIB="-ldb"
1158dnl 	else
1159dnl 	    DB3_LIB="-L${with_db3}/lib -ldb"
1160dnl 	fi
1161dnl 	AC_MSG_RESULT([$with_db3])
1162dnl     fi
1163dnl fi
1164dnl
1165dnl AM_CONDITIONAL(USE_DB3, test "${with_db3}" != no)
1166dnl ])
1167
1168
1169dnl pushdef([arglist], [ifelse($#, 0, , $#, 1, [[$1]],
1170dnl 		    [[$1] arglist(shift($@))])])dnl
1171
1172dnl
1173dnl SFS_TRY_SLEEPYCAT_VERSION(vers, dir)
1174dnl
1175AC_DEFUN([SFS_TRY_SLEEPYCAT_VERSION],
1176[vers=$1
1177dir=$2
1178majvers=`echo $vers | sed -e 's/\..*//'`
1179minvers=`echo $vers | sed -e 's/[^.]*\.//' -e 's/\..*//'`
1180escvers=`echo $vers | sed -e 's/\./\\./g'`
1181catvers=`echo $vers | sed -e 's/\.//g'`
1182: sfs_try_sleepycat_version $vers $dir $majvers $minvers $escvers $catvers
1183
1184unset db_header
1185unset db_library
1186
1187for header in \
1188	$dir/include/db$vers/db.h $dir/include/db$catvers/db.h \
1189	$dir/include/db$majvers/db.h \
1190	$dir/include/db$catvers.h $dir/include/db$majvers.h \
1191	$dir/include/db.h
1192do
1193    test -f $header || continue
1194    AC_EGREP_CPP(^db_version_is $majvers *\. *$minvers *\$,
1195[#include "$header"
1196db_version_is DB_VERSION_MAJOR.DB_VERSION_MINOR
1197], db_header=$header; break)
1198done
1199
1200if test "$db_header"; then
1201    for vdir in "$dir/lib/db$catvers" "$dir/lib/db$majvers" \
1202		"$dir/lib/db" "$dir/lib" "$dir/lib64" \
1203		"$dir/lib/${host_cpu}-${host_os}" \
1204		"$dir/"`basename "$libdir"`
1205    do
1206        for library in $vdir/libdb-$vers.la $vdir/libdb$catvers.la \
1207	    $vdir/libdb.la $vdir/libdb-$vers.a $vdir/libdb$catvers.a \
1208	    $vdir/libdb-$vers.so
1209        do
1210    	if test -f $library; then
1211    	    db_library=$library
1212    	    break 2;
1213    	fi
1214        done
1215    done
1216    if test -z "$db_library"; then
1217	case $db_header in
1218	*/db.h)
1219	    test -f $dir/lib/libdb.a && db_library=$dir/lib/libdb.a
1220	    ;;
1221	esac
1222    fi
1223    if test "$db_library"; then
1224	case $db_header in
1225	*/db.h)
1226	    CPPFLAGS="$CPPFLAGS -I"`dirname $db_header`
1227	    ;;
1228	*)
1229	    ln -s $db_header db.h
1230	    ;;
1231	esac
1232	case $db_library in
1233	*.la)
1234	    DB_LIB=$db_library
1235	    ;;
1236	*.a)
1237	    minusl=`echo $db_library | sed -e 's/^.*\/lib\(.*\)\.a$/-l\1/'`
1238	    DB_LIB=-L`dirname $db_library`" $minusl"
1239	    ;;
1240	*/lib*.so.*)
1241	    minusl=`echo $db_library | sed -e 's/^.*\/lib\(.*\)\.so\..*/-l\1/'`
1242	    DB_LIB=-L`dirname $db_library`" $minusl"
1243	    ;;
1244	*/lib*.so)
1245	    minusl=`echo $db_library | sed -e 's/^.*\/lib\(.*\)\.so$/-l\1/'`
1246	    DB_LIB=-L`dirname $db_library`" $minusl"
1247	    ;;
1248	esac
1249    fi
1250fi])
1251
1252dnl
1253dnl SFS_SLEEPYCAT(v1 v2 v3 ..., required)
1254dnl
1255dnl   Find BekeleyDB version v1, v2, or v3...
1256dnl      required can be "no" if DB is not required
1257dnl
1258AC_DEFUN([SFS_SLEEPYCAT],
1259[AC_ARG_WITH(db,
1260--with-db[[[=/usr/local]]]    specify path for BerkeleyDB (from sleepycat.com))
1261AC_SUBST(DB_DIR)
1262AC_CONFIG_SUBDIRS($DB_DIR)
1263AC_SUBST(DB_LIB)
1264unset DB_LIB
1265
1266rm -f db.h
1267
1268for vers in $1; do
1269    DB_DIR=`cd $srcdir && echo db-$vers.*/dist/`
1270    if test -d "$srcdir/$DB_DIR"; then
1271        DB_DIR=`echo $DB_DIR | sed -e 's!/$!!'`
1272	break
1273    else
1274	unset DB_DIR
1275    fi
1276done
1277
1278test -z "${with_db+set}" && with_db=yes
1279
1280AC_MSG_CHECKING(for BerkeleyDB library)
1281if test "$DB_DIR" -a "$with_db" = yes; then
1282    CPPFLAGS="$CPPFLAGS "'-I$(top_builddir)/'"$DB_DIR/dist"
1283    DB_LIB='$(top_builddir)/'"$DB_DIR/dist/.libs/libdb-*.a"
1284    AC_MSG_RESULT([using distribution in $DB_DIR subdirectory])
1285elif test x"$with_db" != xno; then
1286    if test "$with_db" = yes; then
1287	for vers in $1; do
1288	    for dir in "$prefix/BerkeleyDB.$vers" \
1289			"/usr/BerkeleyDB.$vers" \
1290			"/usr/local/BerkeleyDB.$vers" \
1291			$prefix /usr /usr/local; do
1292		SFS_TRY_SLEEPYCAT_VERSION($vers, $dir)
1293		test -z "$DB_LIB" || break 2
1294	    done
1295	done
1296    else
1297	for vers in $1; do
1298	    SFS_TRY_SLEEPYCAT_VERSION($vers, $with_db)
1299	    test -z "$DB_LIB" || break
1300	done
1301	test -z "$DB_LIB" && AC_MSG_ERROR(Cannot find BerkeleyDB in $with_db)
1302    fi
1303fi
1304
1305if test x"$DB_LIB" != x; then
1306    AC_MSG_RESULT($DB_LIB)
1307    USE_DB=yes
1308else
1309    AC_MSG_RESULT(no)
1310    USE_DB=no
1311    if test "$2" != "no"; then
1312        AC_MSG_ERROR(Cannot find BerkeleyDB)
1313    fi
1314fi
1315
1316AM_CONDITIONAL(USE_DB, test "$USE_DB" = yes)
1317])
1318
1319
1320
1321dnl
1322dnl Find OpenSSL
1323dnl
1324AC_DEFUN([SFS_OPENSSL],
1325[AC_SUBST(OPENSSL_DIR)
1326AC_ARG_WITH(openssl,
1327--with-openssl[[=/usr/local/openssl]]   Find OpenSSL libraries
1328				      (DANGER--FOR BENCHMARKING ONLY))
1329AC_MSG_CHECKING([for OpenSSL])
1330test "$with_openssl" = "yes" && unset with_openssl
1331unset OPENSSL_DIR
1332if test -z "$with_openssl"; then
1333    with_openssl=no
1334    for dir in /usr/local/openssl/ /usr/local/ssl/ \
1335		`ls -1d /usr/local/openssl-*/ 2>/dev/null | sed -ne '$p'`; do
1336	if test -f $dir/lib/libssl.a -a -f $dir/include/openssl/ssl.h; then
1337	    with_openssl=`echo $dir | sed -e 's/\/$//'`
1338	    break
1339	fi
1340    done
1341fi
1342OPENSSL_DIR="$with_openssl"
1343AC_MSG_RESULT([$with_openssl])
1344if test "$with_openssl" = no; then
1345dnl    if test -z "$with_openssl"; then
1346dnl	AC_MSG_ERROR([Could not find OpenSSL libraries])
1347dnl    fi
1348    unset OPENSSL_DIR
1349fi])
1350
1351
1352dnl
1353dnl Use dmalloc if requested
1354dnl
1355AC_DEFUN([SFS_DMALLOC],
1356[
1357dnl AC_ARG_WITH(small-limits,
1358dnl --with-small-limits       Try to trigger memory allocation bugs,
1359dnl CPPFLAGS="$CPPFLAGS -DSMALL_LIMITS"
1360dnl test "${with_dmalloc+set}" = set || with_dmalloc=yes
1361dnl )
1362AC_CHECK_HEADERS(memory.h)
1363AC_ARG_WITH(dmalloc,
1364--with-dmalloc            use debugging malloc from www.dmalloc.com
1365			  (set MAX_FILE_LEN to 1024 when installing),
1366pref=$prefix
1367test "$pref" = NONE && pref=$ac_default_prefix
1368test "$withval" = yes && withval="${pref}"
1369test "$withval" || withval="${pref}"
1370using_dmalloc=no
1371if test "$withval" != no; then
1372	AC_DEFINE(DMALLOC, 1, Define if compiling with dmalloc. )
1373dnl	CPPFLAGS="$CPPFLAGS -DDMALLOC"
1374	CPPFLAGS="$CPPFLAGS -I${withval}/include"
1375	LIBS="$LIBS -L${withval}/lib -ldmalloc"
1376	using_dmalloc=yes
1377fi)
1378AM_CONDITIONAL(DMALLOC, test "$using_dmalloc" = yes)
1379])
1380dnl
1381dnl Find perl
1382dnl
1383AC_DEFUN([SFS_PERLINFO],
1384[AC_ARG_WITH(perl,
1385--with-perl=PATH          Specify perl executable to use,
1386[case "$withval" in
1387	yes|no|"") ;;
1388	*) PERL="$withval" ;;
1389esac])
1390if test -z "$PERL" || test ! -x "$PERL"; then
1391	AC_PATH_PROGS(PERL, perl5 perl)
1392fi
1393if test -x "$PERL" && $PERL -e 'require 5.004'; then :; else
1394	AC_MSG_ERROR("Can\'t find perl 5.004 or later")
1395fi
1396AC_CACHE_CHECK(for perl includes, sfs_cv_perl_ccopts,
1397	sfs_cv_perl_ccopts=`$PERL -MExtUtils::Embed -e ccopts`
1398	sfs_cv_perl_ccopts=`echo $sfs_cv_perl_ccopts`
1399)
1400AC_CACHE_CHECK(for perl libraries, sfs_cv_perl_ldopts,
1401	sfs_cv_perl_ldopts=`$PERL -MExtUtils::Embed -e ldopts -- -std`
1402	sfs_cv_perl_ldopts=`echo $sfs_cv_perl_ldopts`
1403)
1404AC_CACHE_CHECK(for perl xsubpp, sfs_cv_perl_xsubpp,
1405	sfs_cv_perl_xsubpp="$PERL "`$PERL -MConfig -e 'print qq(\
1406	-I$Config{"installarchlib"} -I$Config{"installprivlib"}\
1407	$Config{"installprivlib"}/ExtUtils/xsubpp\
1408	-typemap $Config{"installprivlib"}/ExtUtils/typemap)'`
1409	sfs_cv_perl_xsubpp=`echo $sfs_cv_perl_xsubpp`
1410)
1411XSUBPP="$sfs_cv_perl_xsubpp"
1412PERL_INC="$sfs_cv_perl_ccopts"
1413PERL_LIB="$sfs_cv_perl_ldopts"
1414PERL_XSI="$PERL -MExtUtils::Embed -e xsinit -- -std"
1415AC_SUBST(PERL)
1416AC_SUBST(PERL_INC)
1417AC_SUBST(PERL_LIB)
1418AC_SUBST(PERL_XSI)
1419AC_SUBST(XSUBPP)
1420])
1421dnl
1422dnl Check for perl and for Pod::Man for generating man pages
1423dnl
1424AC_DEFUN([SFS_PERL_POD],
1425[
1426if test -z "$PERL" || text ! -x "$PERL"; then
1427	AC_PATH_PROGS(PERL, perl5 perl)
1428fi
1429AC_PATH_PROGS(POD2MAN, pod2man, pod2man,
1430              [$PATH$PATH_SEPARATOR/usr/bin/core_perl])
1431if test "$PERL"; then
1432	AC_CACHE_CHECK(for Pod::Man, sfs_cv_perl_pod_man,
1433		$PERL -e '{ require Pod::Man }' >/dev/null 2>&1
1434		if test $? = 0; then
1435			sfs_cv_perl_pod_man="yes"
1436		else
1437			sfs_cv_perl_pod_man="no"
1438		fi
1439	)
1440	PERL_POD_MAN="$sfs_cv_perl_pod_man"
1441fi
1442AC_SUBST(PERL_POD_MAN)
1443])
1444dnl'
1445dnl Various warning flags for gcc.  This must go at the very top,
1446dnl right after AC_PROG_CC and AC_PROG_CXX.
1447dnl
1448AC_DEFUN([SFS_WFLAGS],
1449[AC_SUBST(NW)
1450AC_SUBST(WFLAGS)
1451AC_SUBST(CXXWFLAGS)
1452AC_SUBST(DEBUG)
1453AC_SUBST(CXXDEBUG)
1454AC_SUBST(ECFLAGS)
1455AC_SUBST(ECXXFLAGS)
1456AC_SUBST(CXXNOERR)
1457test -z "${CXXWFLAGS+set}" -a "${WFLAGS+set}" && CXXWFLAGS="$WFLAGS"
1458test -z "${CXXDEBUG+set}" -a "${DEBUG+set}" && CXXDEBUG="$DEBUG"
1459test "${DEBUG+set}" || DEBUG="$CFLAGS"
1460export DEBUG
1461test "${CXXDEBUG+set}" || CXXDEBUG="$CXXFLAGS"
1462export CXXDEBUG
1463case $host_os in
1464    openbsd*)
1465	sfs_gnu_WFLAGS="-ansi -Wall -Wsign-compare -Wchar-subscripts"
1466	sfs_gnu_CXXWFLAGS="$sfs_gnu_WFLAGS"
1467	;;
1468    linux*|freebsd*)
1469	sfs_gnu_WFLAGS="-Wall"
1470	sfs_gnu_CXXWFLAGS="$sfs_gnu_WFLAGS"
1471	;;
1472    *)
1473	sfs_gnu_WFLAGS="-Wall"
1474	sfs_gnu_CXXWFLAGS="$sfs_gnu_WFLAGS"
1475	;;
1476esac
1477expr "x$DEBUG" : '.*-O' > /dev/null \
1478    || sfs_gnu_WFLAGS="$sfs_gnu_WFLAGS -Wno-unused"
1479expr "x$CXXDEBUG" : '.*-O' > /dev/null \
1480    || sfs_gnu_CXXWFLAGS="$sfs_gnu_CXXWFLAGS -Wno-unused"
1481NW='-w'
1482test "$GCC" = yes -a -z "${WFLAGS+set}" && WFLAGS="$sfs_gnu_WFLAGS"
1483test "$GXX" = yes -a -z "${CXXWFLAGS+set}" && CXXWFLAGS="$sfs_gnu_CXXWFLAGS"
1484CXXNOERR=
1485test "$GXX" = yes && CXXNOERR='-Wno-error'
1486# Temporarily set CFLAGS to ansi so tests for things like __inline go correctly
1487if expr "x$DEBUG $WFLAGS $ECFLAGS" : '.*-ansi' > /dev/null; then
1488	CFLAGS="$CFLAGS -ansi"
1489	ac_cpp="$ac_cpp -ansi"
1490fi
1491expr "x$CXXDEBUG $CXXWFLAGS $ECXXFLAGS" : '.*-ansi' > /dev/null \
1492    && CXXFLAGS="$CXXFLAGS -ansi"
1493])
1494dnl
1495dnl SFS_CFLAGS puts the effects of SFS_WFLAGS into place.
1496dnl This must be called after all tests have been run.
1497dnl
1498AC_DEFUN([SFS_CFLAGS],
1499[unset CFLAGS
1500unset CXXFLAGS
1501CFLAGS='$(DEBUG) $(WFLAGS) $(ECFLAGS)'
1502CXXFLAGS='$(CXXDEBUG) $(CXXWFLAGS) $(ECXXFLAGS)'])
1503dnl
1504dnl Check for xdr_u_intNN_t, etc
1505dnl
1506AC_DEFUN([SFS_CHECK_XDR],
1507[
1508dnl AC_CACHE_CHECK([for a broken <rpc/xdr.h>], sfs_cv_xdr_broken,
1509dnl AC_EGREP_HEADER(xdr_u_int32_t, [rpc/xdr.h],
1510dnl                 sfs_cv_xdr_broken=no, sfs_cv_xdr_broken=yes))
1511dnl if test "$sfs_cv_xdr_broken" = "yes"; then
1512dnl     AC_DEFINE(SFS_XDR_BROKEN)
1513dnl     dnl We need to know the following in order to fix rpc/xdr.h:
1514dnl     AC_CHECK_SIZEOF(short)
1515dnl     AC_CHECK_SIZEOF(int)
1516dnl     AC_CHECK_SIZEOF(long)
1517dnl fi
1518SFS_CHECK_DECL(xdr_callmsg, rpc/rpc.h)
1519AC_CACHE_CHECK(what second xdr_getlong arg points to, sfs_cv_xdrlong_t,
1520AC_EGREP_HEADER(\*x_getlong.* long *\*, [rpc/rpc.h],
1521                sfs_cv_xdrlong_t=long)
1522if test -z "$sfs_cv_xdrlong_t"; then
1523    AC_EGREP_HEADER(\*x_getlong.* int *\*, [rpc/rpc.h],
1524                    sfs_cv_xdrlong_t=int)
1525fi
1526if test -z "$sfs_cv_xdrlong_t"; then
1527    sfs_cv_xdrlong_t=u_int32_t
1528fi)
1529AC_DEFINE_UNQUOTED(xdrlong_t, $sfs_cv_xdrlong_t,
1530		   What the second argument of xdr_getlong points to)
1531])
1532dnl
1533dnl Check for random device
1534dnl
1535AC_DEFUN([SFS_DEV_RANDOM],
1536[AC_CACHE_CHECK([for kernel random number generator], sfs_cv_dev_random,
1537for dev in /dev/urandom /dev/srandom /dev/random /dev/srnd /dev/rnd; do
1538    if test -c "$dev"; then
1539	sfs_cv_dev_random=$dev
1540	break
1541    fi
1542    test "$sfs_cv_dev_random" || sfs_cv_dev_random=no
1543done)
1544if test "$sfs_cv_dev_random" != no; then
1545pushdef([SFS_DEV_RANDOM], [[SFS_DEV_RANDOM]])
1546    AC_DEFINE_UNQUOTED([SFS_DEV_RANDOM], "$sfs_cv_dev_random",
1547		       [Path to the strongest random number device, if any.])
1548popdef([SFS_DEV_RANDOM])
1549fi
1550])
1551dnl
1552dnl Check for getgrouplist function
1553dnl
1554AC_DEFUN([SFS_GETGROUPLIST_TRYGID], [
1555if test "$sfs_cv_grouplist_t" != gid_t; then
1556    AC_TRY_COMPILE([
1557#include <sys/types.h>
1558#include <unistd.h>
1559#include <grp.h>
1560int getgrouplist ([$*]);
1561		    ], 0, sfs_cv_grouplist_t=gid_t)
1562fi
1563])
1564AC_DEFUN([SFS_GETGROUPLIST],
1565[AC_CHECK_FUNCS(getgrouplist)
1566AC_CACHE_CHECK([whether getgrouplist uses int or gid_t], sfs_cv_grouplist_t,
1567    if test "$ac_cv_func_getgrouplist" = yes; then
1568	sfs_cv_grouplist_t=int
1569	AC_EGREP_HEADER(getgrouplist.*gid_t *\*, unistd.h,
1570			sfs_cv_grouplist_t=gid_t)
1571	if test "$sfs_cv_grouplist_t" != gid_t; then
1572	    AC_EGREP_HEADER(getgrouplist.*gid_t *\*, grp.h,
1573			    sfs_cv_grouplist_t=gid_t)
1574	fi
1575
1576	SFS_GETGROUPLIST_TRYGID(const char *, gid_t, gid_t *, int *)
1577	SFS_GETGROUPLIST_TRYGID(const char *, int , gid_t *, int *)
1578	SFS_GETGROUPLIST_TRYGID(char *, gid_t, gid_t *, int *)
1579	SFS_GETGROUPLIST_TRYGID(char *, int, gid_t *, int *)
1580    else
1581	sfs_cv_grouplist_t=gid_t
1582    fi)
1583AC_DEFINE_UNQUOTED([GROUPLIST_T], $sfs_cv_grouplist_t,
1584	[Type pointed to by 3rd argument of getgrouplist.])])
1585dnl
1586dnl Check if <grp.h> is needed for setgroups declaration (linux)
1587dnl
1588AC_DEFUN([SFS_SETGROUPS],
1589[AC_CACHE_CHECK([for setgroups declaration in grp.h],
1590	sfs_cv_setgroups_grp_h,
1591	AC_EGREP_HEADER(setgroups, grp.h,
1592		sfs_cv_setgroups_grp_h=yes, sfs_cv_setgroups_grp_h=no))
1593if test "$sfs_cv_setgroups_grp_h" = yes; then
1594AC_DEFINE([SETGROUPS_NEEDS_GRP_H], 1,
1595	[Define if setgroups is declared in <grp.h>.])
1596fi])
1597dnl
1598dnl Check if authunix_create is broken and takes a gid_t *
1599dnl
1600AC_DEFUN([SFS_AUTHUNIX_GROUP_T],
1601[AC_CACHE_CHECK([what last authunix_create arg points to],
1602	sfs_cv_authunix_group_t,
1603AC_EGREP_HEADER([(authunix|authsys)_create.*(uid_t|gid_t)], rpc/rpc.h,
1604	sfs_cv_authunix_group_t=gid_t, sfs_cv_authunix_group_t=int))
1605if test "$sfs_cv_authunix_group_t" = gid_t; then
1606    AC_DEFINE_UNQUOTED(AUTHUNIX_GID_T, 1,
1607	[Define if last argument of authunix_create is a gid_t *.])
1608fi])
1609dnl
1610dnl Check the type of the x_ops field in XDR
1611dnl
1612AC_DEFUN([SFS_XDR_OPS_T],
1613[AC_CACHE_CHECK([type of XDR::x_ops], sfs_cv_xdr_ops_t,
1614AC_EGREP_HEADER([xdr_ops *\* *x_ops;], rpc/xdr.h,
1615	sfs_cv_xdr_ops_t=xdr_ops, sfs_cv_xdr_ops_t=XDR::xdr_ops))
1616AC_DEFINE_UNQUOTED(xdr_ops_t, $sfs_cv_xdr_ops_t,
1617	[The C++ type name of the x_ops field in struct XDR.])])
1618dnl
1619dnl Find installed SFS libraries
1620dnl This is not for SFS, but for other packages that use SFS.
1621dnl
1622AC_DEFUN([SFS_SFS],
1623[AC_ARG_WITH(sfs,
1624--with-sfs[[=PATH]]         specify location of SFS libraries)
1625if test "$with_sfs" = yes -o "$with_sfs" = ""; then
1626    for dir in "$prefix" /usr/local /usr; do
1627	if test -f $dir/lib/sfs/libasync.la; then
1628	    with_sfs=$dir
1629	    break
1630	fi
1631    done
1632fi
1633case "$with_sfs" in
1634    /*) ;;
1635    *) with_sfs="$PWD/$with_sfs" ;;
1636esac
1637
1638if test -f ${with_sfs}/Makefile -a -f ${with_sfs}/autoconf.h; then
1639    if egrep '#define DMALLOC' ${with_sfs}/autoconf.h > /dev/null 2>&1; then
1640	test -z "$with_dmalloc" -o "$with_dmalloc" = no && with_dmalloc=yes
1641    elif test "$with_dmalloc" -a "$with_dmalloc" != no; then
1642	AC_MSG_ERROR("SFS libraries not compiled with dmalloc")
1643    fi
1644    sfssrcdir=`sed -ne 's/^srcdir *= *//p' ${with_sfs}/Makefile`
1645    case "$sfssrcdir" in
1646	/*) ;;
1647	*) sfssrcdir="${with_sfs}/${sfssrcdir}" ;;
1648    esac
1649
1650    CPPFLAGS="$CPPFLAGS -I${with_sfs}"
1651    for lib in async arpc crypt sfsmisc; do
1652	CPPFLAGS="$CPPFLAGS -I${sfssrcdir}/$lib"
1653    done
1654    CPPFLAGS="$CPPFLAGS -I${with_sfs}/svc"
1655    LIBASYNC=${with_sfs}/async/libasync.la
1656    LIBARPC=${with_sfs}/arpc/libarpc.la
1657    LIBSFSCRYPT=${with_sfs}/crypt/libsfscrypt.la
1658    LIBSFSMISC=${with_sfs}/sfsmisc/libsfsmisc.la
1659    LIBSVC=${with_sfs}/svc/libsvc.la
1660    LIBSFS=${with_sfs}/libsfs/libsfs.la
1661    MALLOCK=${with_sfs}/sfsmisc/mallock.o
1662    RPCC=${with_sfs}/rpcc/rpcc
1663elif test -f ${with_sfs}/include/sfs/autoconf.h \
1664	-a -f ${with_sfs}/lib/sfs/libasync.la; then
1665    sfsincludedir="${with_sfs}/include/sfs"
1666    sfslibdir=${with_sfs}/lib/sfs
1667    if egrep '#define DMALLOC' ${sfsincludedir}/autoconf.h > /dev/null; then
1668	test -z "$with_dmalloc" -o "$with_dmalloc" = no && with_dmalloc=yes
1669    else
1670	with_dmalloc=no
1671    fi
1672    CPPFLAGS="$CPPFLAGS -I${sfsincludedir}"
1673    LIBASYNC=${sfslibdir}/libasync.la
1674    LIBARPC=${sfslibdir}/libarpc.la
1675    LIBSFSCRYPT=${sfslibdir}/libsfscrypt.la
1676    LIBSFSMISC=${sfslibdir}/libsfsmisc.la
1677    LIBSVC=${sfslibdir}/libsvc.la
1678    LIBSFS=${with_sfs}/lib/libsfs.a
1679    MALLOCK=${sfslibdir}/mallock.o
1680    RPCC=${with_sfs}/bin/rpcc
1681else
1682    AC_MSG_ERROR("Can\'t find SFS libraries")
1683fi
1684
1685if test "$enable_static" = yes -a -z "${NOPAGING+set}"; then
1686    case "$host_os" in
1687	openbsd*)
1688	    test "$ac_cv_prog_gcc" = yes && NOPAGING="-Wl,-Bstatic,-N"
1689	    MALLOCK=		# mallock.o panics the OpenBSD kernel
1690	;;
1691	freebsd*)
1692	    test "$ac_cv_prog_gcc" = yes && NOPAGING="-Wl,-Bstatic"
1693	;;
1694    esac
1695fi
1696
1697sfslibdir='$(libdir)/sfs'
1698sfsincludedir='$(libdir)/include'
1699AC_SUBST(sfslibdir)
1700AC_SUBST(sfsincludedir)
1701
1702AC_SUBST(LIBASYNC)
1703AC_SUBST(LIBARPC)
1704AC_SUBST(LIBSFSCRYPT)
1705AC_SUBST(LIBSFSMISC)
1706AC_SUBST(LIBSVC)
1707AC_SUBST(LIBSFS)
1708AC_SUBST(RPCC)
1709AC_SUBST(MALLOCK)
1710AC_SUBST(NOPAGING)
1711
1712SFS_GMP
1713SFS_DMALLOC
1714
1715LDEPS='$(LIBSFSMISC) $(LIBSVC) $(LIBSFSCRYPT) $(LIBARPC) $(LIBASYNC)'
1716LDADD="$LDEPS "'$(LIBGMP)'
1717AC_SUBST(LDEPS)
1718AC_SUBST(LDADD)
1719])
1720