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