remove duplicate smbspool link on SWAT's front page; bug 541
[samba.git] / source3 / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2
3 dnl We must use autotools 2.53 or above
4 AC_PREREQ(2.53)
5 AC_INIT(include/includes.h)
6 AC_CONFIG_HEADER(include/config.h)
7
8 AC_DISABLE_STATIC
9 AC_ENABLE_SHARED
10
11 #################################################
12 # Directory handling stuff to support both the
13 # legacy SAMBA directories and FHS compliant
14 # ones...
15 AC_PREFIX_DEFAULT(/usr/local/samba)
16
17 AC_ARG_WITH(fhs, 
18 [  --with-fhs              Use FHS-compliant paths (default=no)],
19     configdir="${sysconfdir}/samba"
20     lockdir="\${VARDIR}/cache/samba"
21     piddir="\${VARDIR}/run/samba"
22     logfilebase="\${VARDIR}/log/samba"
23     privatedir="\${CONFIGDIR}/private"
24     libdir="\${prefix}/lib/samba"
25     swatdir="\${DATADIR}/samba/swat",
26     configdir="\${LIBDIR}"
27     logfilebase="\${VARDIR}"
28     lockdir="\${VARDIR}/locks"
29     piddir="\${VARDIR}/locks"
30     privatedir="\${prefix}/private"
31     swatdir="\${prefix}/swat")
32
33 #################################################
34 # set private directory location
35 AC_ARG_WITH(privatedir,
36 [  --with-privatedir=DIR   Where to put smbpasswd ($ac_default_prefix/private)],
37 [ case "$withval" in
38   yes|no)
39   #
40   # Just in case anybody calls it without argument
41   #
42     AC_MSG_WARN([--with-privatedir called without argument - will use default])
43   ;;
44   * )
45     privatedir="$withval"
46     ;;
47   esac])
48
49 #################################################
50 # set lock directory location
51 AC_ARG_WITH(lockdir,
52 [  --with-lockdir=DIR      Where to put lock files ($ac_default_prefix/var/locks)],
53 [ case "$withval" in
54   yes|no)
55   #
56   # Just in case anybody calls it without argument
57   #
58     AC_MSG_WARN([--with-lockdir called without argument - will use default])
59   ;;
60   * )
61     lockdir="$withval"
62     ;;
63   esac])
64
65 #################################################
66 # set pid directory location
67 AC_ARG_WITH(piddir,
68 [  --with-piddir=DIR       Where to put pid files ($ac_default_prefix/var/locks)],
69 [ case "$withval" in
70   yes|no)
71   #
72   # Just in case anybody calls it without argument
73   #
74     AC_MSG_WARN([--with-piddir called without argument - will use default])
75   ;;
76   * )
77     piddir="$withval"
78     ;;
79   esac])
80
81 #################################################
82 # set SWAT directory location
83 AC_ARG_WITH(swatdir,
84 [  --with-swatdir=DIR      Where to put SWAT files ($ac_default_prefix/swat)],
85 [ case "$withval" in
86   yes|no)
87   #
88   # Just in case anybody does it
89   #
90     AC_MSG_WARN([--with-swatdir called without argument - will use default])
91   ;;
92   * )
93     swatdir="$withval"
94     ;;
95   esac])
96
97 #################################################
98 # set configuration directory location
99 AC_ARG_WITH(configdir,
100 [  --with-configdir=DIR    Where to put configuration files (\$libdir)],
101 [ case "$withval" in
102   yes|no)
103   #
104   # Just in case anybody does it
105   #
106     AC_MSG_WARN([--with-configdir called without argument - will use default])
107   ;;
108   * )
109     configdir="$withval"
110     ;;
111   esac])
112
113 #################################################
114 # set log directory location
115 AC_ARG_WITH(logfilebase,
116 [  --with-logfilebase=DIR  Where to put log files (\$(VARDIR))],
117 [ case "$withval" in
118   yes|no)
119   #
120   # Just in case anybody does it
121   #
122     AC_MSG_WARN([--with-logfilebase called without argument - will use default])
123   ;;
124   * )
125     logfilebase="$withval"
126     ;;
127   esac])
128
129 AC_SUBST(configdir)
130 AC_SUBST(lockdir)
131 AC_SUBST(piddir)
132 AC_SUBST(logfilebase)
133 AC_SUBST(privatedir)
134 AC_SUBST(swatdir)
135 AC_SUBST(bindir)
136 AC_SUBST(sbindir)
137
138 dnl Unique-to-Samba variables we'll be playing with.
139 AC_SUBST(SHELL)
140 AC_SUBST(LDSHFLAGS)
141 AC_SUBST(SONAMEFLAG)
142 AC_SUBST(SHLD)
143 AC_SUBST(HOST_OS)
144 AC_SUBST(PICFLAG)
145 AC_SUBST(PICSUFFIX)
146 AC_SUBST(POBAD_CC)
147 AC_SUBST(SHLIBEXT)
148 AC_SUBST(INSTALLCLIENT)
149 AC_SUBST(INSTALLCLIENTCMD_SH)
150 AC_SUBST(INSTALLCLIENTCMD_A)
151 AC_SUBST(LIBSMBCLIENT_SHARED)
152 AC_SUBST(LIBSMBCLIENT)
153 AC_SUBST(PRINT_LIBS)
154 AC_SUBST(AUTH_LIBS)
155 AC_SUBST(ACL_LIBS)
156 AC_SUBST(PASSDB_LIBS)
157 AC_SUBST(IDMAP_LIBS)
158 AC_SUBST(KRB5_LIBS)
159 AC_SUBST(LDAP_LIBS)
160 AC_SUBST(SHLIB_PROGS)
161 AC_SUBST(SMBWRAPPER)
162 AC_SUBST(EXTRA_BIN_PROGS)
163 AC_SUBST(EXTRA_SBIN_PROGS)
164 AC_SUBST(EXTRA_ALL_TARGETS)
165
166 AC_ARG_ENABLE(debug, 
167 [  --enable-debug          Turn on compiler debugging information (default=no)],
168     [if eval "test x$enable_debug = xyes"; then
169         CFLAGS="${CFLAGS} -g"
170     fi])
171
172 AC_ARG_ENABLE(developer, [  --enable-developer      Turn on developer warnings and debugging (default=no)],
173     [if eval "test x$enable_developer = xyes"; then
174         developer=yes
175         CFLAGS="${CFLAGS} -gstabs -Wall -Wshadow -Wstrict-prototypes -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
176     fi])
177
178 AC_ARG_ENABLE(krb5developer, [  --enable-krb5developer  Turn on developer warnings and debugging, except -Wstrict-prototypes (default=no)],
179     [if eval "test x$enable_krb5developer = xyes"; then
180         developer=yes
181         CFLAGS="${CFLAGS} -gstabs -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
182     fi])
183
184 AC_ARG_ENABLE(dmalloc, [  --enable-dmalloc        Enable heap debugging [default=no]])
185
186 if test "x$enable_dmalloc" = xyes
187 then
188         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
189         AC_DEFINE(DMALLOC_FUNC_CHECK, 1, 
190                   [Define to check invariants around some common functions])
191         LIBS="$LIBS -ldmalloc"  
192 fi
193
194 dnl Checks for programs.
195 AC_PROG_CC
196 AC_PROG_INSTALL
197 AC_PROG_AWK
198 AC_PATH_PROG(PERL, perl)
199
200 # compile with optimization and without debugging by default, but
201 # allow people to set their own preference.
202 if test "x$CFLAGS" = x
203 then
204   CFLAGS="-O ${CFLAGS}"
205 fi
206
207 dnl Check if we use GNU ld
208 LD=ld
209 AC_PROG_LD_GNU
210
211 dnl needed before AC_TRY_COMPILE
212 AC_ISC_POSIX
213
214 dnl look for executable suffix
215 AC_EXEEXT
216
217 dnl Check if C compiler understands -c and -o at the same time
218 AC_PROG_CC_C_O
219 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
220       BROKEN_CC=
221 else
222       BROKEN_CC=#
223 fi
224 AC_SUBST(BROKEN_CC)
225
226 dnl Check if the C compiler understands -Werror
227 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
228  AC_TRY_RUN_STRICT([
229   int main(void)
230   {
231         return 0;
232   }],[-Werror],[$CPPFLAGS],[$LDFLAGS],
233   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
234 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
235    Werror_FLAGS="-Werror"
236 else 
237 dnl Check if the C compiler understands -w2
238 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
239  AC_TRY_RUN_STRICT([
240   int main(void)
241   {
242         return 0;
243   }],[-w2],[$CPPFLAGS],[$LDFLAGS],
244   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
245 if test x"$samba_cv_HAVE_w2" = x"yes"; then
246    Werror_FLAGS="-w2"
247 fi
248 fi
249
250 dnl Check if the C compiler understands volatile (it should, being ANSI).
251 AC_CACHE_CHECK([that the C compiler understands volatile],samba_cv_volatile, [
252     AC_TRY_COMPILE([#include <sys/types.h>],[volatile int i = 0],
253         samba_cv_volatile=yes,samba_cv_volatile=no)])
254 if test x"$samba_cv_volatile" = x"yes"; then
255    AC_DEFINE(HAVE_VOLATILE, 1, [Whether the C compiler understands volatile])
256 fi
257
258 UNAME_S=`uname -s`
259 AC_MSG_CHECKING(uname -s)
260 AC_MSG_RESULT(${UNAME_S})
261
262 UNAME_R=`uname -r`
263 AC_MSG_CHECKING(uname -r)
264 AC_MSG_RESULT(${UNAME_R})
265
266 UNAME_M=`uname -m`
267 AC_MSG_CHECKING(uname -m)
268 AC_MSG_RESULT(${UNAME_M})
269
270 UNAME_P=`uname -p`
271 AC_MSG_CHECKING(uname -p)
272 AC_MSG_RESULT(${UNAME_P})
273
274 AC_CANONICAL_SYSTEM
275
276 dnl Add #include for broken IRIX header files
277   case "$host_os" in
278         *irix6*) AC_ADD_INCLUDE(<standards.h>)
279         ;;
280 esac
281
282 AC_VALIDATE_CACHE_SYSTEM_TYPE
283
284 DYNEXP=
285
286 dnl Add modules that have to be built by default here
287 dnl These have to be built static:
288 default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsa rpc_samr rpc_reg rpc_lsa_ds rpc_wks rpc_net rpc_dfs rpc_srv rpc_spoolss auth_rhosts auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin"
289
290 dnl These are preferably build shared, and static if dlopen() is not available
291 default_shared_modules="vfs_recycle vfs_audit vfs_extd_audit vfs_netatalk vfs_fake_perms vfs_default_quota vfs_readonly vfs_cap charset_CP850 charset_CP437"
292
293 if test "x$developer" = xyes; then
294    default_static_modules="$default_static_modules rpc_echo"
295    default_shared_modules="$default_shared_modules charset_weird"
296 fi
297
298 #
299 # Config CPPFLAG settings for strange OS's that must be set
300 # before other tests.
301 #
302 case "$host_os" in
303 # Try to work out if this is the native HPUX compiler that uses the -Ae flag.
304     *hpux*)
305     
306       AC_PROG_CC_FLAG(Ae)
307       # mmap on HPUX is completely broken...
308       AC_DEFINE(MMAP_BLACKLIST, 1, [Whether MMAP is broken])
309       if test $ac_cv_prog_cc_Ae = yes; then
310         CPPFLAGS="$CPPFLAGS -Ae"
311       fi
312 #
313 # Defines needed for HPUX support.
314 # HPUX has bigcrypt but (sometimes?) doesn't use it for
315 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
316 #
317       case `uname -r` in
318                         *9*|*10*)
319                                 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4 -DMAX_POSITIVE_LOCK_OFFSET=0x1ffffffffffLL"
320                                 AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
321                                 AC_DEFINE(_HPUX_SOURCE, 1, [Whether to use HPUX extensions])
322                                 AC_DEFINE(_POSIX_SOURCE, 1, [Whether to use POSIX compatible functions])
323                                 AC_DEFINE(_ALIGNMENT_REQUIRED,1,[Required alignment])
324                                 AC_DEFINE(_MAX_ALIGNMENT,4,[Maximum alignment])
325                                 ;;
326                         *11*)
327                                 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_LARGEFILE64_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4 -DMAX_POSITIVE_LOCK_OFFSET=0x1ffffffffffLL"
328                                 AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
329                                 AC_DEFINE(_HPUX_SOURCE, 1, [Whether to use HPUX extensions])
330                                 AC_DEFINE(_POSIX_SOURCE, 1, [Whether to use POSIX compatible functions])
331                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to use large file support])
332                                 AC_DEFINE(_ALIGNMENT_REQUIRED, 1, [Required alignment])
333                                 AC_DEFINE(_MAX_ALIGNMENT, 4, [Maximum alignment])
334                                 ;;
335       esac
336       DYNEXP="-Wl,-E"
337       ;;
338
339 #
340 # CRAY Unicos has broken const handling
341        *unicos*)
342           AC_MSG_RESULT([disabling const])
343           CPPFLAGS="$CPPFLAGS -Dconst="
344           ;;
345         
346 #
347 # AIX4.x doesn't even admit to having large
348 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
349 #
350     *aix4*)
351           AC_MSG_RESULT([enabling large file support])
352       CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
353           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
354       ;;    
355 #
356 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
357 # to the existance of large files..
358 # Note that -D_LARGEFILE64_SOURCE is different from the Sun
359 # recommendations on large file support, however it makes the
360 # compile work using gcc 2.7 and 2.8, whereas using the Sun
361 # recommendation makes the compile fail on gcc2.7. JRA.
362 #
363 # Solaris uses SYSV printing.  Make sure to set that here.  --jerry
364 #
365         *solaris*)
366                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
367                 case `uname -r` in
368                         5.0*|5.1*|5.2*|5.3*|5.5*)
369                                 AC_MSG_RESULT([no large file support])
370                                 ;;
371                         5.*)
372                         AC_MSG_RESULT([enabling large file support])
373                         if test "$ac_cv_prog_gcc" = yes; then
374                                 ${CC-cc} -v >conftest.c 2>&1
375                                 ac_cv_gcc_compiler_version_number=`grep 'gcc version' conftest.c`
376                                 rm -fr conftest.c
377                                 case "$ac_cv_gcc_compiler_version_number" in
378                                         *"gcc version 2.6"*|*"gcc version 2.7"*)
379                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE"
380                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
381                                                 ;;
382                                         *)
383                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
384                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
385                                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
386                                                 ;;
387                                 esac
388                         else
389                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
390                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
391                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
392                         fi
393                         ;;
394                 esac
395                 ;;
396 #
397 # IRIX uses SYSV printing.  Make sure to set that here
398 #
399         *irix*)
400                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
401                 ;;
402         *freebsd*)
403                 AC_DEFINE(FREEBSD, 1, [Whether the host os is FreeBSD])
404                 ;;
405 #
406 # VOS may need to have POSIX support and System V compatibility enabled.
407 #
408     *vos*)
409     case "$CPPFLAGS" in
410           *-D_POSIX_C_SOURCE*)
411                 ;;
412           *)
413                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=199506L"
414                 AC_DEFINE(_POSIX_C_SOURCE, 199506L, [Whether to enable POSIX support])
415                 ;;
416     esac
417     case "$CPPFLAGS" in
418           *-D_SYSV*|*-D_SVID_SOURCE*)
419                 ;;
420           *)
421                 CPPFLAGS="$CPPFLAGS -D_SYSV"
422                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
423    esac
424     ;;
425 #
426 # Tests needed for SINIX large file support.
427 #
428     *sysv4*)
429       if test $host = mips-sni-sysv4 ; then
430         AC_MSG_CHECKING([for LFS support])
431         old_CPPFLAGS="$CPPFLAGS"
432         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
433         AC_TRY_RUN([
434 #include <unistd.h>
435 main () {
436 #if _LFS64_LARGEFILE == 1
437 exit(0);
438 #else
439 exit(1);
440 #endif
441 }], [SINIX_LFS_SUPPORT=yes], [SINIX_LFS_SUPPORT=no], [SINIX_LFS_SUPPORT=cross])
442         CPPFLAGS="$old_CPPFLAGS"
443         if test x$SINIX_LFS_SUPPORT = xyes ; then
444           CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
445                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
446           CFLAGS="`getconf LFS64_CFLAGS` $CFLAGS"
447           LDFLAGS="`getconf LFS64_LDFLAGS` $LDFLAGS"
448           LIBS="`getconf LFS64_LIBS` $LIBS"
449         fi
450       AC_MSG_RESULT([$SINIX_LFS_SUPPORT])
451       fi
452     ;;
453
454 # Tests for linux LFS support. Need kernel 2.4 and glibc2.2 or greater support.
455 #
456     *linux*)
457         AC_MSG_CHECKING([for LFS support])
458         old_CPPFLAGS="$CPPFLAGS"
459         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
460        AC_TRY_RUN([
461 #include <unistd.h>
462 #include <sys/utsname.h>
463 main() {
464 #if _LFS64_LARGEFILE == 1
465        struct utsname uts;
466        char *release;
467        int major, minor;
468
469        /* Ensure this is glibc 2.2 or higher */
470 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
471        int libc_major = __GLIBC__;
472        int libc_minor = __GLIBC_MINOR__;
473
474        if (libc_major < 2)
475               exit(1);
476        if (libc_minor < 2)
477               exit(1);
478 #endif
479
480        /* Ensure this is kernel 2.4 or higher */
481
482        uname(&uts);
483        release = strdup(uts.release);
484        major = atoi(strsep(&release, "."));
485        minor = atoi(strsep(&release, "."));
486
487        if (major > 2 || (major == 2 && minor > 3))
488                exit(0);
489        exit(1);
490 #else
491        exit(1);
492 #endif
493 }
494 ], [LINUX_LFS_SUPPORT=yes], [LINUX_LFS_SUPPORT=no], [LINUX_LFS_SUPPORT=cross])
495         CPPFLAGS="$old_CPPFLAGS"
496         if test x$LINUX_LFS_SUPPORT = xyes ; then
497           CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
498                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
499           AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
500           AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
501         fi
502        AC_MSG_RESULT([$LINUX_LFS_SUPPORT])
503                 ;;
504
505 #
506 # MacOS X is the *only* system that uses compose character in utf8. This
507 # is so horribly broken....
508 #
509     *darwin*)
510                 AC_DEFINE(BROKEN_UNICODE_COMPOSE_CHARACTERS, 1, [Does this system use unicode compose characters])
511 # Add Fink directories for various packages, like dlcompat.
512 # Note: iconv does that explicitly below, but other packages
513 # don't.
514                 CPPFLAGS="$CPPFLAGS -I/sw/include"
515                 LDFLAGS="$LDFLAGS -L/sw/lib"
516
517 # If we have dlsym_prepend_underscore (from Fink's dlcompat),
518 # use that instead of plain dlsym.
519
520                 AC_CHECK_LIB(dl,dlopen)
521                 AC_CHECK_FUNCS(dlsym_prepend_underscore,
522                 [CPPFLAGS="$CPPFLAGS -Ddlsym=dlsym_prepend_underscore"])
523
524                 ;;   
525     *hurd*)
526         AC_MSG_CHECKING([for LFS support])
527         old_CPPFLAGS="$CPPFLAGS"
528         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
529         AC_TRY_RUN([
530 #include <unistd.h>
531 main () {
532 #if _LFS64_LARGEFILE == 1
533 exit(0);
534 #else
535 exit(1);
536 #endif
537 }], [GLIBC_LFS_SUPPORT=yes], [GLIBC_LFS_SUPPORT=no], [GLIBC_LFS_SUPPORT=cross])
538         CPPFLAGS="$old_CPPFLAGS"
539         if test x$GLIBC_LFS_SUPPORT = xyes ; then
540           CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
541                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
542           AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
543         fi
544       AC_MSG_RESULT([$GLIBC_LFS_SUPPORT])
545     ;;
546
547 esac
548
549 AC_INLINE
550 AC_HEADER_STDC
551 AC_HEADER_DIRENT
552 AC_HEADER_TIME
553 AC_HEADER_SYS_WAIT
554 AC_CHECK_HEADERS(arpa/inet.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h)
555 AC_CHECK_HEADERS(unistd.h utime.h grp.h sys/id.h limits.h memory.h net/if.h)
556 AC_CHECK_HEADERS(compat.h rpc/rpc.h rpcsvc/nis.h rpcsvc/yp_prot.h rpcsvc/ypclnt.h)
557 AC_CHECK_HEADERS(sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h sys/mode.h)
558 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h sys/socket.h)
559 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
560 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/sockio.h)
561 AC_CHECK_HEADERS(security/pam_modules.h security/_pam_macros.h dlfcn.h)
562 AC_CHECK_HEADERS(sys/syslog.h syslog.h execinfo.h)
563 AC_CHECK_HEADERS(langinfo.h locale.h)
564
565 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
566 # subdirectory of headers.
567 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
568
569 #
570 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
571 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
572 #
573 case "$host_os" in
574     *hpux*)
575                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
576                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
577                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
578                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
579                 fi
580         ;;
581 esac
582 AC_CHECK_HEADERS(shadow.h netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ip.h)
583 AC_CHECK_HEADERS(nss.h nss_common.h ns_api.h sys/security.h security/pam_appl.h security/pam_modules.h)
584 AC_CHECK_HEADERS(stropts.h poll.h)
585 AC_CHECK_HEADERS(sys/capability.h syscall.h sys/syscall.h)
586 AC_CHECK_HEADERS(sys/acl.h sys/attributes.h attr/xattr.h sys/cdefs.h glob.h)
587
588 # For experimental utmp support (lastlog on some BSD-like systems)
589 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
590  
591 AC_CHECK_SIZEOF(int,cross)
592 AC_CHECK_SIZEOF(long,cross)
593 AC_CHECK_SIZEOF(short,cross)
594
595 AC_C_CONST
596 AC_C_INLINE
597 AC_C_BIGENDIAN
598 AC_C_CHAR_UNSIGNED
599
600 AC_TYPE_SIGNAL
601 AC_TYPE_UID_T
602 AC_TYPE_MODE_T
603 AC_TYPE_OFF_T
604 AC_TYPE_SIZE_T
605 AC_TYPE_PID_T
606 AC_STRUCT_ST_RDEV
607 AC_DIRENT_D_OFF
608 AC_CHECK_TYPE(ino_t,unsigned)
609 AC_CHECK_TYPE(loff_t,off_t)
610 AC_CHECK_TYPE(offset_t,loff_t)
611 AC_CHECK_TYPE(ssize_t, int)
612 AC_CHECK_TYPE(wchar_t, unsigned short)
613
614 ############################################
615 # for cups support we need libcups, and a handful of header files
616
617 AC_ARG_ENABLE(cups,
618 [  --enable-cups           Turn on CUPS support (default=auto)])
619
620 if test x$enable_cups != xno; then
621         AC_PATH_PROG(CUPS_CONFIG, cups-config)
622
623         if test "x$CUPS_CONFIG" != x; then
624                         AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
625                 CFLAGS="$CFLAGS `$CUPS_CONFIG --cflags`"
626                 LDFLAGS="$LDFLAGS `$CUPS_CONFIG --ldflags`"
627                 PRINT_LIBS="$PRINT_LIBS `$CUPS_CONFIG --libs`"
628         fi
629 fi
630
631 ############################################
632 # we need dlopen/dlclose/dlsym/dlerror for PAM, the password database plugins and the plugin loading code
633 AC_SEARCH_LIBS(dlopen, [dl])
634 # dlopen/dlclose/dlsym/dlerror will be checked again later and defines will be set then
635
636 ############################################
637 # check if the compiler can do immediate structures
638 AC_CACHE_CHECK([for immediate structures],samba_cv_immediate_structures, [
639     AC_TRY_COMPILE([
640 #include <stdio.h>],
641 [
642    typedef struct {unsigned x;} FOOBAR;
643    #define X_FOOBAR(x) ((FOOBAR) { x })
644    #define FOO_ONE X_FOOBAR(1)
645    FOOBAR f = FOO_ONE;   
646    static struct {
647         FOOBAR y; 
648         } f2[] = {
649                 {FOO_ONE}
650         };   
651 ],
652         samba_cv_immediate_structures=yes,samba_cv_immediate_structures=no)])
653 if test x"$samba_cv_immediate_structures" = x"yes"; then
654    AC_DEFINE(HAVE_IMMEDIATE_STRUCTURES,1,[Whether the compiler supports immediate structures])
655 fi
656
657 ############################################
658 # check if the compiler can do immediate structures
659 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
660     AC_TRY_LINK([
661 #include <stdio.h>],
662 [
663                 if (0) {
664                    this_function_does_not_exist();
665                 } else {
666                   return 1;
667                 }
668
669 ],
670         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
671 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
672    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
673 fi
674
675 ############################################
676 # check for unix domain sockets
677 AC_CACHE_CHECK([for unix domain sockets],samba_cv_unixsocket, [
678     AC_TRY_COMPILE([
679 #include <sys/types.h>
680 #include <stdlib.h>
681 #include <stddef.h>
682 #include <sys/socket.h>
683 #include <sys/un.h>],
684 [
685   struct sockaddr_un sunaddr; 
686   sunaddr.sun_family = AF_UNIX;
687 ],
688         samba_cv_unixsocket=yes,samba_cv_unixsocket=no)])
689 if test x"$samba_cv_unixsocket" = x"yes"; then
690    AC_DEFINE(HAVE_UNIXSOCKET,1,[If we need to build with unixscoket support])
691 fi
692
693
694 AC_CACHE_CHECK([for socklen_t type],samba_cv_socklen_t, [
695     AC_TRY_COMPILE([
696 #include <sys/types.h>
697 #if STDC_HEADERS
698 #include <stdlib.h>
699 #include <stddef.h>
700 #endif
701 #include <sys/socket.h>],[socklen_t i = 0],
702         samba_cv_socklen_t=yes,samba_cv_socklen_t=no)])
703 if test x"$samba_cv_socklen_t" = x"yes"; then
704    AC_DEFINE(HAVE_SOCKLEN_T_TYPE,1,[Whether we have the variable type socklen_t])
705 fi
706
707 AC_CACHE_CHECK([for sig_atomic_t type],samba_cv_sig_atomic_t, [
708     AC_TRY_COMPILE([
709 #include <sys/types.h>
710 #if STDC_HEADERS
711 #include <stdlib.h>
712 #include <stddef.h>
713 #endif
714 #include <signal.h>],[sig_atomic_t i = 0],
715         samba_cv_sig_atomic_t=yes,samba_cv_sig_atomic_t=no)])
716 if test x"$samba_cv_sig_atomic_t" = x"yes"; then
717    AC_DEFINE(HAVE_SIG_ATOMIC_T_TYPE,1,[Whether we have the atomic_t variable type])
718 fi
719
720 # stupid headers have the functions but no declaration. grrrr.
721 AC_HAVE_DECL(errno, [#include <errno.h>])
722 AC_HAVE_DECL(setresuid, [#include <unistd.h>])
723 AC_HAVE_DECL(setresgid, [#include <unistd.h>])
724 AC_HAVE_DECL(asprintf, [#include <stdio.h>])
725 AC_HAVE_DECL(vasprintf, [#include <stdio.h>])
726 AC_HAVE_DECL(vsnprintf, [#include <stdio.h>])
727 AC_HAVE_DECL(snprintf, [#include <stdio.h>])
728
729 # and glibc has setresuid under linux but the function does
730 # nothing until kernel 2.1.44! very dumb.
731 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
732     AC_TRY_RUN([#include <errno.h>
733 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
734         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
735 if test x"$samba_cv_have_setresuid" = x"yes"; then
736     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
737 fi
738
739 # Do the same check for setresguid...
740 #
741 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
742     AC_TRY_RUN([#include <unistd.h>
743 #include <errno.h>
744 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
745         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
746 if test x"$samba_cv_have_setresgid" = x"yes"; then
747     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
748 fi
749
750 AC_FUNC_MEMCMP
751
752 ###############################################
753 # Readline included by default unless explicitly asked not to
754 test "${with_readline+set}" != "set" && with_readline=yes
755
756 # test for where we get readline() from
757 AC_MSG_CHECKING(whether to use readline)
758 AC_ARG_WITH(readline,
759 [  --with-readline[=DIR]     Look for readline include/libs in DIR (default=auto) ],
760 [  case "$with_readline" in
761   yes)
762     AC_MSG_RESULT(yes)
763
764     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
765     AC_CHECK_HEADERS(readline/history.h)
766
767     AC_CHECK_HEADERS(readline.h readline/readline.h,[
768       for termlib in ncurses curses termcap terminfo termlib tinfo; do
769        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
770       done
771       AC_CHECK_LIB(readline, rl_callback_handler_install,
772        [TERMLIBS="-lreadline $TERMLIBS"
773        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
774        break], [TERMLIBS=], $TERMLIBS)])
775     ;;
776   no)
777     AC_MSG_RESULT(no)
778     ;;
779   *)
780     AC_MSG_RESULT(yes)
781
782     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
783     # alternate readline path
784     _ldflags=${LDFLAGS}
785     _cppflags=${CPPFLAGS}
786
787     # Add additional search path
788     LDFLAGS="-L$with_readline/lib $LDFLAGS"
789     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
790
791     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
792     AC_CHECK_HEADERS(readline/history.h)
793
794     AC_CHECK_HEADERS(readline.h readline/readline.h,[
795       for termlib in ncurses curses termcap terminfo termlib; do
796        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
797       done
798       AC_CHECK_LIB(readline, rl_callback_handler_install,
799        [TERMLDFLAGS="-L$with_readline/lib"
800        TERMCPPFLAGS="-I$with_readline/include"
801        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
802        TERMLIBS="-lreadline $TERMLIBS"
803        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
804        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
805
806     LDFLAGS=$_ldflags
807     ;;
808   esac],
809   AC_MSG_RESULT(no)
810 )
811 AC_SUBST(TERMLIBS)
812 AC_SUBST(TERMLDFLAGS)
813
814 # The readline API changed slightly from readline3 to readline4, so
815 # code will generate warnings on one of them unless we have a few
816 # special cases.
817 AC_CHECK_LIB(readline, rl_completion_matches,
818              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1, 
819                         [Do we have rl_completion_matches?])],
820              [],
821              [$TERMLIBS])
822
823 # The following test taken from the cvs sources
824 # If we can't find connect, try looking in -lsocket, -lnsl, and -linet.
825 # The Irix 5 libc.so has connect and gethostbyname, but Irix 5 also has
826 # libsocket.so which has a bad implementation of gethostbyname (it
827 # only looks in /etc/hosts), so we only look for -lsocket if we need
828 # it.
829 AC_CHECK_FUNCS(connect)
830 if test x"$ac_cv_func_connect" = x"no"; then
831     case "$LIBS" in
832     *-lnsl*) ;;
833     *) AC_CHECK_LIB(nsl_s, printf) ;;
834     esac
835     case "$LIBS" in
836     *-lnsl*) ;;
837     *) AC_CHECK_LIB(nsl, printf) ;;
838     esac
839     case "$LIBS" in
840     *-lsocket*) ;;
841     *) AC_CHECK_LIB(socket, connect) ;;
842     esac
843     case "$LIBS" in
844     *-linet*) ;;
845     *) AC_CHECK_LIB(inet, connect) ;;
846     esac
847     dnl We can't just call AC_CHECK_FUNCS(connect) here, because the value
848     dnl has been cached.
849     if test x"$ac_cv_lib_socket_connect" = x"yes" || 
850        test x"$ac_cv_lib_inet_connect" = x"yes"; then
851         # ac_cv_func_connect=yes
852         # don't!  it would cause AC_CHECK_FUNC to succeed next time configure is run
853         AC_DEFINE(HAVE_CONNECT,1,[Whether the system has connect()])
854     fi
855 fi
856
857 ###############################################
858 # test for where we get yp_get_default_domain() from
859 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
860 AC_CHECK_FUNCS(yp_get_default_domain)
861
862 # Check if we have execl, if not we need to compile smbrun.
863 AC_CHECK_FUNCS(execl)
864 if test x"$ac_cv_func_execl" = x"no"; then
865     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
866 fi
867
868 AC_CHECK_FUNCS(dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64)
869 AC_CHECK_FUNCS(fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid)
870 AC_CHECK_FUNCS(memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid)
871 AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
872 AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf realpath)
873 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64)
874 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64)
875 AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf)
876 AC_CHECK_FUNCS(srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink)
877 AC_CHECK_FUNCS(syslog vsyslog timegm)
878 AC_CHECK_FUNCS(setlocale nl_langinfo)
879 # setbuffer, shmget, shm_open are needed for smbtorture
880 AC_CHECK_FUNCS(setbuffer shmget shm_open backtrace_symbols)
881
882 # syscall() is needed for smbwrapper.
883 AC_CHECK_FUNCS(syscall)
884
885 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
886 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
887 AC_CHECK_FUNCS(__getcwd _getcwd)
888 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
889 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
890 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
891 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
892 AC_CHECK_FUNCS(getdents _getdents __getdents _lseek __lseek _read __read)
893 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
894 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
895 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
896 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
897 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
898 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
899
900 #
901
902 #
903 case "$host_os" in
904     *linux*)
905        # glibc <= 2.3.2 has a broken getgrouplist
906        AC_TRY_RUN([
907 #include <unistd.h>
908 #include <sys/utsname.h>
909 main() {
910        /* glibc up to 2.3 has a broken getgrouplist */
911 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
912        int libc_major = __GLIBC__;
913        int libc_minor = __GLIBC_MINOR__;
914
915        if (libc_major < 2)
916               exit(1);
917        if ((libc_major == 2) && (libc_minor <= 3))
918               exit(1);
919 #endif
920        exit(0);
921 }
922 ], [linux_getgrouplist_ok=yes], [linux_getgrouplist_ok=no])
923        if test x"$linux_getgrouplist_ok" = x"yes"; then
924           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
925        fi
926        ;;
927     *)
928        AC_CHECK_FUNCS(getgrouplist)
929        ;;
930 esac
931
932 #
933 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
934 #
935
936 if test x$ac_cv_func_stat64 = xno ; then
937   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
938   AC_TRY_LINK([
939 #if defined(HAVE_UNISTD_H)
940 #include <unistd.h>
941 #endif
942 #include <sys/stat.h>
943 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
944   AC_MSG_RESULT([$ac_cv_func_stat64])
945   if test x$ac_cv_func_stat64 = xyes ; then
946     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
947   fi
948 fi
949
950 if test x$ac_cv_func_lstat64 = xno ; then
951   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
952   AC_TRY_LINK([
953 #if defined(HAVE_UNISTD_H)
954 #include <unistd.h>
955 #endif
956 #include <sys/stat.h>
957 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
958   AC_MSG_RESULT([$ac_cv_func_lstat64])
959   if test x$ac_cv_func_lstat64 = xyes ; then
960     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
961   fi
962 fi
963
964 if test x$ac_cv_func_fstat64 = xno ; then
965   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
966   AC_TRY_LINK([
967 #if defined(HAVE_UNISTD_H)
968 #include <unistd.h>
969 #endif
970 #include <sys/stat.h>
971 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
972   AC_MSG_RESULT([$ac_cv_func_fstat64])
973   if test x$ac_cv_func_fstat64 = xyes ; then
974     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
975   fi
976 fi
977
978 #####################################
979 # we might need the resolv library on some systems
980 AC_CHECK_LIB(resolv, dn_expand)
981
982 #
983 # Check for the functions putprpwnam, set_auth_parameters,
984 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
985 # Needed for OSF1 and HPUX.
986 #
987
988 AC_LIBTESTFUNC(security, putprpwnam)
989 AC_LIBTESTFUNC(sec, putprpwnam)
990
991 AC_LIBTESTFUNC(security, set_auth_parameters)
992 AC_LIBTESTFUNC(sec, set_auth_parameters)
993
994 # UnixWare 7.x has its getspnam in -lgen
995 AC_LIBTESTFUNC(gen, getspnam)
996
997 AC_LIBTESTFUNC(security, getspnam)
998 AC_LIBTESTFUNC(sec, getspnam)
999
1000 AC_LIBTESTFUNC(security, bigcrypt)
1001 AC_LIBTESTFUNC(sec, bigcrypt)
1002
1003 AC_LIBTESTFUNC(security, getprpwnam)
1004 AC_LIBTESTFUNC(sec, getprpwnam)
1005
1006 ############################################
1007 # Check if we have libattr
1008 AC_SEARCH_LIBS(getxattr, [attr])
1009 AC_CHECK_FUNCS(getxattr lgetxattr fgetxattr listxattr llistxattr)
1010 AC_CHECK_FUNCS(flistxattr removexattr lremovexattr fremovexattr)
1011 AC_CHECK_FUNCS(setxattr lsetxattr fsetxattr)
1012 AC_CHECK_FUNCS(attr_get attr_list attr_set attr_remove)
1013 AC_CHECK_FUNCS(attr_getf attr_listf attr_setf attr_removef)
1014
1015 # Assume non-shared by default and override below
1016 BLDSHARED="false"
1017
1018 # these are the defaults, good for lots of systems
1019 HOST_OS="$host_os"
1020 LDSHFLAGS="-shared"
1021 SONAMEFLAG="#"
1022 SHLD="\${CC} \${CFLAGS}"
1023 PICFLAG=""
1024 PICSUFFIX="po"
1025 POBAD_CC="#"
1026 SHLIBEXT="so"
1027
1028 if test "$enable_shared" = "yes"; then
1029   # this bit needs to be modified for each OS that is suported by
1030   # smbwrapper. You need to specify how to created a shared library and
1031   # how to compile C code to produce PIC object files
1032
1033   AC_MSG_CHECKING([ability to build shared libraries])
1034
1035   # and these are for particular systems
1036   case "$host_os" in
1037                 *linux*)   AC_DEFINE(LINUX,1,[Whether the host os is linux])
1038                         BLDSHARED="true"
1039                         LDSHFLAGS="-shared" 
1040                         DYNEXP="-Wl,--export-dynamic"
1041                         PICFLAG="-fPIC"
1042                         SONAMEFLAG="-Wl,-soname="
1043                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1044                         ;;
1045                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1046                         BLDSHARED="true"
1047                         LDSHFLAGS="-G"
1048                         SONAMEFLAG="-h "
1049                         if test "${GCC}" = "yes"; then
1050                                 PICFLAG="-fPIC"
1051                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1052                                         DYNEXP="-Wl,-E"
1053                                 fi
1054                         else
1055                                 PICFLAG="-KPIC"
1056                                 ## ${CFLAGS} added for building 64-bit shared 
1057                                 ## libs using Sun's Compiler
1058                                 LDSHFLAGS="-G \${CFLAGS}"
1059                                 POBAD_CC=""
1060                                 PICSUFFIX="po.o"
1061                         fi
1062                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1063                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1064                         ;;
1065                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1066                         BLDSHARED="true"
1067                         LDSHFLAGS="-G"
1068                         SONAMEFLAG="-Wl,-h,"
1069                         PICFLAG="-KPIC"   # Is this correct for SunOS
1070                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1071                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1072                         ;;
1073                 *netbsd* | *freebsd*)  BLDSHARED="true"
1074                         LDSHFLAGS="-shared"
1075                         DYNEXP="-Wl,--export-dynamic"
1076                         SONAMEFLAG="-Wl,-soname,"
1077                         PICFLAG="-fPIC -DPIC"
1078                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1079                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1080                         ;;
1081                 *openbsd*)  BLDSHARED="true"
1082                         LDSHFLAGS="-shared"
1083                         DYNEXP="-Wl,-Bdynamic"
1084                         SONAMEFLAG="-Wl,-soname,"
1085                         PICFLAG="-fPIC"
1086                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1087                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1088                         ;;
1089                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1090                         case "$host_os" in
1091                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1092                         ;;
1093                         esac
1094                         BLDSHARED="true"
1095                         LDSHFLAGS="-set_version sgi1.0 -shared"
1096                         SONAMEFLAG="-soname "
1097                         SHLD="\${LD}"
1098                         if test "${GCC}" = "yes"; then
1099                                 PICFLAG="-fPIC"
1100                         else 
1101                                 PICFLAG="-KPIC"
1102                         fi
1103                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1104                         ;;
1105                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1106                         BLDSHARED="true"
1107                         LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-bnoentry,-berok"
1108                         DYNEXP="-Wl,-brtl,-bexpall"
1109                         PICFLAG="-O2"
1110                         if test "${GCC}" != "yes"; then
1111                                 ## for funky AIX compiler using strncpy()
1112                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
1113                         fi
1114
1115                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1116                         ;;
1117                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1118                         SHLIBEXT="sl"
1119                         # Use special PIC flags for the native HP-UX compiler.
1120                         if test $ac_cv_prog_cc_Ae = yes; then
1121                                 BLDSHARED="true"
1122                                 SHLD="/usr/bin/ld"
1123                                 LDSHFLAGS="-B symbolic -b -z"
1124                                 SONAMEFLAG="+h "
1125                                 PICFLAG="+z"
1126                         elif test "${GCC}" = "yes"; then
1127                                 PICFLAG="-fPIC"
1128                         fi
1129                         DYNEXP="-Wl,-E"
1130                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1131                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1132                         ;;
1133                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
1134                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1135                         ;;
1136                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1137                         BLDSHARED="true"
1138                         LDSHFLAGS="-shared"
1139                         SONAMEFLAG="-Wl,-soname,"
1140                         PICFLAG="-fPIC"
1141                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1142                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1143                         ;;
1144                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1145                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1146                         ;;
1147                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1148                         BLDSHARED="true"
1149                         LDSHFLAGS="-shared"
1150                         SONAMEFLAG="-Wl,-soname,"
1151                         PICFLAG="-KPIC"
1152                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1153                         ;;
1154                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1155                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1156                         ;;
1157                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1158                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1159                         ;;
1160                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1161                         case "$host" in
1162                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1163                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1164                                         fi
1165                                         LDSHFLAGS="-G"
1166                                         DYNEXP="-Bexport"
1167                                 ;;
1168                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1169                         esac
1170                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1171                         ;;
1172
1173                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1174                         if [ test "$GCC" != yes ]; then
1175                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1176                         fi
1177                         LDSHFLAGS="-G"
1178                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1179                         ;;
1180                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1181                         BLDSHARED="false"
1182                         LDSHFLAGS=""
1183                         ;;
1184
1185                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1186                         BLDSHARED="true"
1187                         LDSHFLAGS="-bundle -flat_namespace -undefined suppress"
1188                         SHLIBEXT="dylib"
1189                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1190                         ;;
1191
1192                 *)
1193                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1194                         ;;
1195   esac
1196   AC_SUBST(DYNEXP)
1197   AC_MSG_RESULT($BLDSHARED)
1198   AC_MSG_CHECKING([linker flags for shared libraries])
1199   AC_MSG_RESULT([$LDSHFLAGS])
1200   AC_MSG_CHECKING([compiler flags for position-independent code])
1201   AC_MSG_RESULT([$PICFLAGS])
1202 fi
1203
1204 #######################################################
1205 # test whether building a shared library actually works
1206 if test $BLDSHARED = true; then
1207 AC_CACHE_CHECK([whether building shared libraries actually works], 
1208                [ac_cv_shlib_works],[
1209    ac_cv_shlib_works=no
1210    # try building a trivial shared library
1211    if test "$PICSUFFIX" = "po"; then
1212      $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o shlib.po ${srcdir-.}/tests/shlib.c &&
1213        $CC $CPPFLAGS $CFLAGS `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" shlib.po &&
1214        ac_cv_shlib_works=yes
1215    else
1216      $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o shlib.$PICSUFFIX ${srcdir-.}/tests/shlib.c &&
1217        mv shlib.$PICSUFFIX shlib.po &&
1218        $CC $CPPFLAGS $CFLAGS `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" shlib.po &&
1219        ac_cv_shlib_works=yes
1220    fi
1221    rm -f "shlib.$SHLIBEXT" shlib.po
1222 ])
1223 if test $ac_cv_shlib_works = no; then
1224    BLDSHARED=false
1225 fi
1226 fi
1227
1228 ################
1229
1230 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
1231 AC_TRY_RUN([#include <stdio.h>
1232 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
1233 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
1234 if test x"$samba_cv_have_longlong" = x"yes"; then
1235     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
1236 fi
1237
1238 #
1239 # Check if the compiler supports the LL prefix on long long integers.
1240 # AIX needs this.
1241
1242 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
1243     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
1244         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
1245 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
1246    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
1247 fi
1248
1249   
1250 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
1251 AC_TRY_RUN([#include <stdio.h>
1252 #include <sys/stat.h>
1253 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
1254 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
1255 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
1256     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
1257 fi
1258
1259 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
1260 AC_TRY_RUN([
1261 #if defined(HAVE_UNISTD_H)
1262 #include <unistd.h>
1263 #endif
1264 #include <stdio.h>
1265 #include <sys/stat.h>
1266 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1267 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
1268 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
1269     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
1270 fi
1271
1272 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
1273 AC_TRY_RUN([#include <stdio.h>
1274 #include <sys/stat.h>
1275 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
1276 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
1277 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
1278     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
1279 fi
1280
1281 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
1282 AC_TRY_RUN([
1283 #if defined(HAVE_UNISTD_H)
1284 #include <unistd.h>
1285 #endif
1286 #include <stdio.h>
1287 #include <sys/stat.h>
1288 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1289 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
1290 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
1291     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
1292 fi
1293
1294 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
1295 AC_TRY_RUN([
1296 #if defined(HAVE_UNISTD_H)
1297 #include <unistd.h>
1298 #endif
1299 #include <stdio.h>
1300 #include <sys/stat.h>
1301 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1302 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
1303 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
1304     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
1305 fi
1306
1307 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
1308 AC_TRY_COMPILE([
1309 #if defined(HAVE_UNISTD_H)
1310 #include <unistd.h>
1311 #endif
1312 #include <sys/types.h>
1313 #include <dirent.h>],
1314 [struct dirent64 de;],
1315 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
1316 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
1317     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
1318 fi
1319
1320 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
1321 AC_TRY_RUN([
1322 #if defined(HAVE_UNISTD_H)
1323 #include <unistd.h>
1324 #endif
1325 #include <sys/types.h>
1326 main() { dev_t dev; int i = major(dev); return 0; }],
1327 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
1328 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
1329     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
1330 fi
1331
1332 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
1333 AC_TRY_RUN([
1334 #if defined(HAVE_UNISTD_H)
1335 #include <unistd.h>
1336 #endif
1337 #include <sys/types.h>
1338 main() { dev_t dev; int i = minor(dev); return 0; }],
1339 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
1340 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
1341     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
1342 fi
1343
1344 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
1345 AC_TRY_RUN([#include <stdio.h>
1346 main() { char c; c=250; exit((c > 0)?0:1); }],
1347 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
1348 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
1349     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
1350 fi
1351
1352 AC_CACHE_CHECK([for sin_len in sock],samba_cv_HAVE_SOCK_SIN_LEN,[
1353 AC_TRY_COMPILE([#include <sys/types.h>
1354 #include <sys/socket.h>
1355 #include <netinet/in.h>],
1356 [struct sockaddr_in sock; sock.sin_len = sizeof(sock);],
1357 samba_cv_HAVE_SOCK_SIN_LEN=yes,samba_cv_HAVE_SOCK_SIN_LEN=no)])
1358 if test x"$samba_cv_HAVE_SOCK_SIN_LEN" = x"yes"; then
1359     AC_DEFINE(HAVE_SOCK_SIN_LEN,1,[Whether the sockaddr_in struct has a sin_len property])
1360 fi
1361
1362 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
1363 AC_TRY_COMPILE([#include <sys/types.h>
1364 #include <dirent.h>
1365 void seekdir(DIR *d, long loc) { return; }],[return 0;],
1366 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
1367 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
1368     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
1369 fi
1370
1371 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
1372 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
1373 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
1374 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
1375     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
1376 fi
1377
1378 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
1379 AC_TRY_RUN([
1380 #include <sys/time.h>
1381 #include <unistd.h>
1382 main() { struct timeval tv; exit(gettimeofday(&tv, NULL));}],
1383            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,samba_cv_HAVE_GETTIMEOFDAY_TZ=no,samba_cv_HAVE_GETTIMEOFDAY_TZ=cross)])
1384 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
1385     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday() is available])
1386 fi
1387
1388 AC_CACHE_CHECK([for __va_copy],samba_cv_HAVE_VA_COPY,[
1389 AC_TRY_LINK([#include <stdarg.h>
1390 va_list ap1,ap2;], [__va_copy(ap1,ap2);],
1391 samba_cv_HAVE_VA_COPY=yes,samba_cv_HAVE_VA_COPY=no)])
1392 if test x"$samba_cv_HAVE_VA_COPY" = x"yes"; then
1393     AC_DEFINE(HAVE_VA_COPY,1,[Whether __va_copy() is available])
1394 fi
1395
1396 AC_CACHE_CHECK([for C99 vsnprintf],samba_cv_HAVE_C99_VSNPRINTF,[
1397 AC_TRY_RUN([
1398 #include <sys/types.h>
1399 #include <stdarg.h>
1400 void foo(const char *format, ...) { 
1401        va_list ap;
1402        int len;
1403        char buf[5];
1404
1405        va_start(ap, format);
1406        len = vsnprintf(buf, 0, format, ap);
1407        va_end(ap);
1408        if (len != 5) exit(1);
1409
1410        va_start(ap, format);
1411        len = vsnprintf(0, 0, format, ap);
1412        va_end(ap);
1413        if (len != 5) exit(1);
1414
1415        if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
1416
1417        exit(0);
1418 }
1419 main() { foo("hello"); }
1420 ],
1421 samba_cv_HAVE_C99_VSNPRINTF=yes,samba_cv_HAVE_C99_VSNPRINTF=no,samba_cv_HAVE_C99_VSNPRINTF=cross)])
1422 if test x"$samba_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
1423     AC_DEFINE(HAVE_C99_VSNPRINTF,1,[Whether there is a C99 compliant vsnprintf])
1424 fi
1425
1426 AC_CACHE_CHECK([for broken readdir],samba_cv_HAVE_BROKEN_READDIR,[
1427 AC_TRY_RUN([#include <sys/types.h>
1428 #include <dirent.h>
1429 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
1430 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
1431 di->d_name[0] == 0) exit(0); exit(1);} ],
1432 samba_cv_HAVE_BROKEN_READDIR=yes,samba_cv_HAVE_BROKEN_READDIR=no,samba_cv_HAVE_BROKEN_READDIR=cross)])
1433 if test x"$samba_cv_HAVE_BROKEN_READDIR" = x"yes"; then
1434     AC_DEFINE(HAVE_BROKEN_READDIR,1,[Whether readdir() is broken])
1435 fi
1436
1437 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
1438 AC_TRY_COMPILE([#include <sys/types.h>
1439 #include <utime.h>],
1440 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
1441 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
1442 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
1443     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
1444 fi
1445
1446 ##############
1447 # Check utmp details, but only if our OS offers utmp.h
1448 if test x"$ac_cv_header_utmp_h" = x"yes"; then
1449 dnl  utmp and utmpx come in many flavours
1450 dnl  We need to check for many of them
1451 dnl  But we don't need to do each and every one, because our code uses
1452 dnl  mostly just the utmp (not utmpx) fields.
1453
1454 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
1455
1456 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
1457 AC_TRY_COMPILE([#include <sys/types.h>
1458 #include <utmp.h>],
1459 [struct utmp ut;  ut.ut_name[0] = 'a';],
1460 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
1461 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
1462     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
1463 fi 
1464
1465 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
1466 AC_TRY_COMPILE([#include <sys/types.h>
1467 #include <utmp.h>],
1468 [struct utmp ut;  ut.ut_user[0] = 'a';],
1469 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
1470 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
1471     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
1472 fi 
1473
1474 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
1475 AC_TRY_COMPILE([#include <sys/types.h>
1476 #include <utmp.h>],
1477 [struct utmp ut;  ut.ut_id[0] = 'a';],
1478 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
1479 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
1480     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
1481 fi 
1482
1483 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
1484 AC_TRY_COMPILE([#include <sys/types.h>
1485 #include <utmp.h>],
1486 [struct utmp ut;  ut.ut_host[0] = 'a';],
1487 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
1488 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
1489     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
1490 fi 
1491
1492 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
1493 AC_TRY_COMPILE([#include <sys/types.h>
1494 #include <utmp.h>],
1495 [struct utmp ut;  time_t t; ut.ut_time = t;],
1496 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
1497 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
1498     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
1499 fi 
1500
1501 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
1502 AC_TRY_COMPILE([#include <sys/types.h>
1503 #include <utmp.h>],
1504 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
1505 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
1506 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
1507     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
1508 fi 
1509
1510 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
1511 AC_TRY_COMPILE([#include <sys/types.h>
1512 #include <utmp.h>],
1513 [struct utmp ut;  ut.ut_type = 0;],
1514 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
1515 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
1516     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
1517 fi 
1518
1519 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
1520 AC_TRY_COMPILE([#include <sys/types.h>
1521 #include <utmp.h>],
1522 [struct utmp ut;  ut.ut_pid = 0;],
1523 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
1524 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
1525     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
1526 fi 
1527
1528 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
1529 AC_TRY_COMPILE([#include <sys/types.h>
1530 #include <utmp.h>],
1531 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
1532 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
1533 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
1534     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
1535 fi 
1536
1537 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
1538 AC_TRY_COMPILE([#include <sys/types.h>
1539 #include <utmp.h>],
1540 [struct utmp ut;  ut.ut_addr = 0;],
1541 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
1542 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
1543     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
1544 fi 
1545
1546 if test x$ac_cv_func_pututline = xyes ; then
1547   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
1548   AC_TRY_COMPILE([#include <sys/types.h>
1549 #include <utmp.h>],
1550   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
1551   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
1552   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
1553       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
1554   fi
1555 fi
1556
1557 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
1558 AC_TRY_COMPILE([#include <sys/types.h>
1559 #include <utmpx.h>],
1560 [struct utmpx ux;  ux.ut_syslen = 0;],
1561 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
1562 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
1563     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
1564 fi 
1565
1566 fi
1567 # end utmp details
1568
1569
1570 ICONV_LOCATION=standard
1571 LOOK_DIRS="/usr /usr/local /sw"
1572 AC_ARG_WITH(libiconv,
1573 [  --with-libiconv=BASEDIR Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto) ],
1574 [
1575   if test "$withval" = "no" ; then
1576     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
1577   else
1578      if test "$withval" != "yes" ; then
1579         ICONV_PATH_SPEC=yes
1580         LOOK_DIRS="$withval"
1581      fi
1582   fi
1583 ])
1584
1585 ICONV_FOUND="no"
1586 for i in $LOOK_DIRS ; do
1587     save_LIBS=$LIBS
1588     save_LDFLAGS=$LDFLAGS
1589     save_CPPFLAGS=$CPPFLAGS
1590     CPPFLAGS="$CPPFLAGS -I$i/include"
1591 dnl This is here to handle -withval stuff for --with-libiconv
1592     if test x"$ICONV_PATH_SPEC" = "xyes" ; then
1593        LDFLAGS="-L$i/lib"
1594     fi
1595     LIBS=
1596     export LDFLAGS LIBS CPPFLAGS
1597 dnl Try to find iconv(3)
1598     jm_ICONV($i)
1599
1600     if test "$ICONV_FOUND" = yes; then
1601         LIB_ADD_DIR(LDFLAGS, "$i/lib")
1602         CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
1603         LIBS="$save_LIBS $LIBS"
1604         ICONV_LOCATION=$i
1605         export LDFLAGS LIBS CPPFLAGS
1606 dnl Now, check for a working iconv ... we want to do it here because
1607 dnl there might be a working iconv further down the list of LOOK_DIRS
1608
1609         ############
1610         # check for iconv in libc
1611         ic_save_LIBS="$LIBS"
1612         if test x"$ICONV_PATH_SPEC" = "xyes" ; then
1613            LIBS="$LIBS -L$ICONV_LOCATION/lib"
1614         fi
1615 dnl        AC_CACHE_CHECK([for working iconv],samba_cv_HAVE_NATIVE_ICONV,[
1616         default_dos_charset=no
1617         default_display_charset=no
1618         default_unix_charset=no
1619         echo
1620
1621         # check for default dos charset name
1622         for j in CP850 IBM850 ; do
1623             rjs_CHARSET($j)
1624             if test x"$ICONV_CHARSET" = x"$j"; then
1625                 default_dos_charset="\"$j\""
1626                 break
1627             fi
1628         done
1629         # check for default display charset name
1630         for j in ASCII 646 ; do
1631             rjs_CHARSET($j)
1632             if test x"$ICONV_CHARSET" = x"$j"; then
1633                 default_display_charset="\"$j\""
1634                 break
1635             fi
1636         done
1637         # check for default unix charset name
1638         for j in UTF-8 UTF8 ; do
1639             rjs_CHARSET($j)
1640             if test x"$ICONV_CHARSET" = x"$j"; then
1641                 default_unix_charset="\"$j\""
1642                 break
1643             fi
1644         done
1645         
1646         if test "$default_dos_charset" != "no" -a \
1647                 "$default_dos_charset" != "cross" -a \
1648                 "$default_display_charset" != "no" -a \ 
1649                 "$default_display_charset" != "cross" -a \
1650                 "$default_unix_charset" != "no" -a \
1651                 "$default_unix_charset" != "cross"
1652         then
1653                 samba_cv_HAVE_NATIVE_ICONV=yes
1654         else if test "$default_dos_charset" = "cross" -o \
1655                      "$default_display_charset" = "cross" -o \
1656                      "$default_unix_charset" = "cross"
1657         then
1658                 samba_cv_HAVE_NATIVE_ICONV=cross
1659         else
1660                 samba_cv_HAVE_NATIVE_ICONV=no
1661         fi
1662         fi
1663 dnl ])
1664
1665         LIBS="$ic_save_LIBS"
1666         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes"; then
1667                 CPPFLAGS=$save_CPPFLAGS
1668                 CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
1669                 export CPPFLAGS
1670            AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
1671            AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
1672            AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
1673            AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
1674            break
1675         fi
1676 dnl We didn't find a working iconv, so keep going
1677     fi
1678 dnl We only need to clean these up here for the next pass through the loop
1679     CPPFLAGS=$save_CPPFLAGS
1680     LDFLAGS=$save_LDFLAGS
1681     LIBS=$save_LIBS
1682     export LDFLAGS LIBS CPPFLAGS
1683 done
1684
1685
1686 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
1687     AC_MSG_WARN([Sufficient support for iconv function was not found. 
1688     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
1689    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"CP850",[Default dos charset name])
1690    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
1691    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
1692 fi
1693
1694
1695 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
1696 AC_TRY_RUN([
1697 #include <sys/types.h>
1698 #include <fcntl.h>
1699 #ifndef F_GETLEASE
1700 #define F_GETLEASE      1025
1701 #endif
1702 main() {
1703        int fd = open("/dev/null", O_RDONLY);
1704        return fcntl(fd, F_GETLEASE, 0) == -1;
1705 }
1706 ],
1707 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
1708 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
1709     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
1710 fi
1711
1712 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
1713 AC_TRY_RUN([
1714 #include <sys/types.h>
1715 #include <fcntl.h>
1716 #include <signal.h>
1717 #ifndef F_NOTIFY
1718 #define F_NOTIFY 1026
1719 #endif
1720 main() {
1721         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
1722 }
1723 ],
1724 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
1725 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
1726     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
1727 fi
1728
1729 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
1730 AC_TRY_RUN([
1731 #include <sys/types.h>
1732 #include <fcntl.h>
1733 #include <signal.h>
1734 #include <sys/file.h>
1735 #ifndef LOCK_MAND
1736 #define LOCK_MAND       32
1737 #define LOCK_READ       64
1738 #endif
1739 main() {
1740         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
1741 }
1742 ],
1743 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
1744 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
1745     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
1746 fi
1747
1748
1749
1750
1751 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
1752 AC_TRY_COMPILE([#include <sys/types.h>
1753 #include <fcntl.h>],
1754 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
1755 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
1756 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
1757     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
1758 fi
1759
1760 AC_CACHE_CHECK([for irix specific capabilities],samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES,[
1761 AC_TRY_RUN([#include <sys/types.h>
1762 #include <sys/capability.h>
1763 main() {
1764  cap_t cap;
1765  if ((cap = cap_get_proc()) == NULL)
1766    exit(1);
1767  cap->cap_effective |= CAP_NETWORK_MGT;
1768  cap->cap_inheritable |= CAP_NETWORK_MGT;
1769  cap_set_proc(cap);
1770  exit(0);
1771 }
1772 ],
1773 samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes,samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=no,samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross)])
1774 if test x"$samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES" = x"yes"; then
1775     AC_DEFINE(HAVE_IRIX_SPECIFIC_CAPABILITIES,1,[Whether IRIX specific capabilities are available])
1776 fi
1777
1778 #
1779 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
1780 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
1781 #
1782
1783 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
1784 AC_TRY_COMPILE([#include <sys/types.h>
1785 #if defined(HAVE_RPC_RPC_H)
1786 #include <rpc/rpc.h>
1787 #endif],
1788 [int16 testvar;],
1789 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
1790 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
1791     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
1792 fi
1793
1794 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
1795 AC_TRY_COMPILE([#include <sys/types.h>
1796 #if defined(HAVE_RPC_RPC_H)
1797 #include <rpc/rpc.h>
1798 #endif],
1799 [uint16 testvar;],
1800 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
1801 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
1802     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
1803 fi
1804
1805 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
1806 AC_TRY_COMPILE([#include <sys/types.h>
1807 #if defined(HAVE_RPC_RPC_H)
1808 #include <rpc/rpc.h>
1809 #endif],
1810 [int32 testvar;],
1811 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
1812 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
1813     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
1814 fi
1815
1816 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
1817 AC_TRY_COMPILE([#include <sys/types.h>
1818 #if defined(HAVE_RPC_RPC_H)
1819 #include <rpc/rpc.h>
1820 #endif],
1821 [uint32 testvar;],
1822 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
1823 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
1824     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
1825 fi
1826
1827 dnl
1828 dnl Some systems (SCO) have a problem including
1829 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
1830 dnl as a #define in <prot.h> and as part of an enum
1831 dnl in <rpc/rpc.h>.
1832 dnl
1833
1834 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
1835 AC_TRY_COMPILE([#include <sys/types.h>
1836 #ifdef HAVE_SYS_SECURITY_H
1837 #include <sys/security.h>
1838 #include <prot.h>
1839 #endif  /* HAVE_SYS_SECURITY_H */
1840 #if defined(HAVE_RPC_RPC_H)
1841 #include <rpc/rpc.h>
1842 #endif],
1843 [int testvar;],
1844 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
1845 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
1846     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
1847 fi
1848
1849 AC_MSG_CHECKING([for test routines])
1850 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
1851            AC_MSG_RESULT(yes),
1852            AC_MSG_ERROR([cant find test code. Aborting config]),
1853            AC_MSG_WARN([cannot run when cross-compiling]))
1854
1855 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
1856 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
1857            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
1858 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
1859     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
1860 fi
1861
1862 AC_CACHE_CHECK([for AF_LOCAL socket support], samba_cv_HAVE_WORKING_AF_LOCAL, [
1863 AC_TRY_RUN([#include "${srcdir-.}/tests/unixsock.c"],
1864            samba_cv_HAVE_WORKING_AF_LOCAL=yes,
1865            samba_cv_HAVE_WORKING_AF_LOCAL=no,
1866            samba_cv_HAVE_WORKING_AF_LOCAL=cross)])
1867 if test x"$samba_cv_HAVE_WORKING_AF_LOCAL" != xno
1868 then
1869     AC_DEFINE(HAVE_WORKING_AF_LOCAL, 1, [Define if you have working AF_LOCAL sockets])
1870 fi
1871
1872 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
1873 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
1874            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
1875 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
1876     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
1877 fi
1878
1879 AC_CACHE_CHECK([whether getpass should be replaced],samba_cv_REPLACE_GETPASS,[
1880 SAVE_CPPFLAGS="$CPPFLAGS"
1881 CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt  -I${srcdir-.}/smbwrapper"
1882 AC_TRY_COMPILE([
1883 #define REPLACE_GETPASS 1
1884 #define NO_PROTO_H 1
1885 #define NO_CONFIG_H 1
1886 #define main dont_declare_main
1887 #include "${srcdir-.}/lib/getsmbpass.c"
1888 #undef main
1889 ],[],samba_cv_REPLACE_GETPASS=yes,samba_cv_REPLACE_GETPASS=no)
1890 CPPFLAGS="$SAVE_CPPFLAGS"
1891 ])
1892 if test x"$samba_cv_REPLACE_GETPASS" = x"yes"; then
1893         AC_DEFINE(REPLACE_GETPASS,1,[Whether getpass should be replaced])
1894 fi
1895
1896 AC_CACHE_CHECK([for broken inet_ntoa],samba_cv_REPLACE_INET_NTOA,[
1897 AC_TRY_RUN([
1898 #include <stdio.h>
1899 #include <sys/types.h>
1900 #include <netinet/in.h>
1901 #ifdef HAVE_ARPA_INET_H
1902 #include <arpa/inet.h>
1903 #endif
1904 main() { struct in_addr ip; ip.s_addr = 0x12345678;
1905 if (strcmp(inet_ntoa(ip),"18.52.86.120") &&
1906     strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } 
1907 exit(1);}],
1908            samba_cv_REPLACE_INET_NTOA=yes,samba_cv_REPLACE_INET_NTOA=no,samba_cv_REPLACE_INET_NTOA=cross)])
1909 if test x"$samba_cv_REPLACE_INET_NTOA" = x"yes"; then
1910     AC_DEFINE(REPLACE_INET_NTOA,1,[Whether inet_ntoa should be replaced])
1911 fi
1912
1913 AC_CACHE_CHECK([for secure mkstemp],samba_cv_HAVE_SECURE_MKSTEMP,[
1914 AC_TRY_RUN([#include <stdlib.h>
1915 #include <sys/types.h>
1916 #include <sys/stat.h>
1917 #include <unistd.h>
1918 main() { 
1919   struct stat st;
1920   char tpl[20]="/tmp/test.XXXXXX"; 
1921   int fd = mkstemp(tpl); 
1922   if (fd == -1) exit(1);
1923   unlink(tpl);
1924   if (fstat(fd, &st) != 0) exit(1);
1925   if ((st.st_mode & 0777) != 0600) exit(1);
1926   exit(0);
1927 }],
1928 samba_cv_HAVE_SECURE_MKSTEMP=yes,
1929 samba_cv_HAVE_SECURE_MKSTEMP=no,
1930 samba_cv_HAVE_SECURE_MKSTEMP=cross)])
1931 if test x"$samba_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
1932     AC_DEFINE(HAVE_SECURE_MKSTEMP,1,[Whether mkstemp is secure])
1933 fi
1934
1935 AC_CACHE_CHECK([for sysconf(_SC_NGROUPS_MAX)],samba_cv_SYSCONF_SC_NGROUPS_MAX,[
1936 AC_TRY_RUN([#include <unistd.h>
1937 main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); }],
1938 samba_cv_SYSCONF_SC_NGROUPS_MAX=yes,samba_cv_SYSCONF_SC_NGROUPS_MAX=no,samba_cv_SYSCONF_SC_NGROUPS_MAX=cross)])
1939 if test x"$samba_cv_SYSCONF_SC_NGROUPS_MAX" = x"yes"; then
1940     AC_DEFINE(SYSCONF_SC_NGROUPS_MAX,1,[Whether sysconf(_SC_NGROUPS_MAX) is available])
1941 fi
1942
1943 AC_CACHE_CHECK([for root],samba_cv_HAVE_ROOT,[
1944 AC_TRY_RUN([main() { exit(getuid() != 0); }],
1945            samba_cv_HAVE_ROOT=yes,samba_cv_HAVE_ROOT=no,samba_cv_HAVE_ROOT=cross)])
1946 if test x"$samba_cv_HAVE_ROOT" = x"yes"; then
1947     AC_DEFINE(HAVE_ROOT,1,[Whether current user is root])
1948 else
1949     AC_MSG_WARN(running as non-root will disable some tests)
1950 fi
1951
1952 ##################
1953 # look for a method of finding the list of network interfaces
1954 iface=no;
1955 AC_CACHE_CHECK([for iface AIX],samba_cv_HAVE_IFACE_AIX,[
1956 AC_TRY_RUN([
1957 #define HAVE_IFACE_AIX 1
1958 #define AUTOCONF_TEST 1
1959 #include "confdefs.h"
1960 #include "${srcdir-.}/lib/interfaces.c"],
1961            samba_cv_HAVE_IFACE_AIX=yes,samba_cv_HAVE_IFACE_AIX=no,samba_cv_HAVE_IFACE_AIX=cross)])
1962 if test x"$samba_cv_HAVE_IFACE_AIX" = x"yes"; then
1963     iface=yes;AC_DEFINE(HAVE_IFACE_AIX,1,[Whether iface AIX is available])
1964 fi
1965
1966 if test $iface = no; then
1967 AC_CACHE_CHECK([for iface ifconf],samba_cv_HAVE_IFACE_IFCONF,[
1968 AC_TRY_RUN([
1969 #define HAVE_IFACE_IFCONF 1
1970 #define AUTOCONF_TEST 1
1971 #include "confdefs.h"
1972 #include "${srcdir-.}/lib/interfaces.c"],
1973            samba_cv_HAVE_IFACE_IFCONF=yes,samba_cv_HAVE_IFACE_IFCONF=no,samba_cv_HAVE_IFACE_IFCONF=cross)])
1974 if test x"$samba_cv_HAVE_IFACE_IFCONF" = x"yes"; then
1975     iface=yes;AC_DEFINE(HAVE_IFACE_IFCONF,1,[Whether iface ifconf is available])
1976 fi
1977 fi
1978
1979 if test $iface = no; then
1980 AC_CACHE_CHECK([for iface ifreq],samba_cv_HAVE_IFACE_IFREQ,[
1981 AC_TRY_RUN([
1982 #define HAVE_IFACE_IFREQ 1
1983 #define AUTOCONF_TEST 1
1984 #include "confdefs.h"
1985 #include "${srcdir-.}/lib/interfaces.c"],
1986            samba_cv_HAVE_IFACE_IFREQ=yes,samba_cv_HAVE_IFACE_IFREQ=no,samba_cv_HAVE_IFACE_IFREQ=cross)])
1987 if test x"$samba_cv_HAVE_IFACE_IFREQ" = x"yes"; then
1988     iface=yes;AC_DEFINE(HAVE_IFACE_IFREQ,1,[Whether iface ifreq is available])
1989 fi
1990 fi
1991
1992
1993 ################################################
1994 # look for a method of setting the effective uid
1995 seteuid=no;
1996 if test $seteuid = no; then
1997 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
1998 AC_TRY_RUN([
1999 #define AUTOCONF_TEST 1
2000 #define USE_SETRESUID 1
2001 #include "confdefs.h"
2002 #include "${srcdir-.}/lib/util_sec.c"],
2003            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2004 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2005     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2006 fi
2007 fi
2008
2009
2010 if test $seteuid = no; then
2011 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2012 AC_TRY_RUN([
2013 #define AUTOCONF_TEST 1
2014 #define USE_SETREUID 1
2015 #include "confdefs.h"
2016 #include "${srcdir-.}/lib/util_sec.c"],
2017            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2018 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2019     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2020 fi
2021 fi
2022
2023 if test $seteuid = no; then
2024 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2025 AC_TRY_RUN([
2026 #define AUTOCONF_TEST 1
2027 #define USE_SETEUID 1
2028 #include "confdefs.h"
2029 #include "${srcdir-.}/lib/util_sec.c"],
2030            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2031 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2032     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2033 fi
2034 fi
2035
2036 if test $seteuid = no; then
2037 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2038 AC_TRY_RUN([
2039 #define AUTOCONF_TEST 1
2040 #define USE_SETUIDX 1
2041 #include "confdefs.h"
2042 #include "${srcdir-.}/lib/util_sec.c"],
2043            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2044 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2045     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2046 fi
2047 fi
2048
2049
2050 AC_CACHE_CHECK([for working mmap],samba_cv_HAVE_MMAP,[
2051 AC_TRY_RUN([#include "${srcdir-.}/tests/shared_mmap.c"],
2052            samba_cv_HAVE_MMAP=yes,samba_cv_HAVE_MMAP=no,samba_cv_HAVE_MMAP=cross)])
2053 if test x"$samba_cv_HAVE_MMAP" = x"yes"; then
2054     AC_DEFINE(HAVE_MMAP,1,[Whether mmap works])
2055 fi
2056
2057 AC_CACHE_CHECK([for ftruncate needs root],samba_cv_FTRUNCATE_NEEDS_ROOT,[
2058 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncroot.c"],
2059            samba_cv_FTRUNCATE_NEEDS_ROOT=yes,samba_cv_FTRUNCATE_NEEDS_ROOT=no,samba_cv_FTRUNCATE_NEEDS_ROOT=cross)])
2060 if test x"$samba_cv_FTRUNCATE_NEEDS_ROOT" = x"yes"; then
2061     AC_DEFINE(FTRUNCATE_NEEDS_ROOT,1,[Whether ftruncate() needs root])
2062 fi
2063
2064 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2065 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
2066            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2067 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2068     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2069 fi
2070
2071 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
2072 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
2073            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
2074 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
2075     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
2076
2077 else
2078
2079 dnl
2080 dnl Don't check for 64 bit fcntl locking if we know that the
2081 dnl glibc2.1 broken check has succeeded.
2082 dnl 
2083
2084   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
2085   AC_TRY_RUN([
2086 #if defined(HAVE_UNISTD_H)
2087 #include <unistd.h>
2088 #endif
2089 #include <stdio.h>
2090 #include <stdlib.h>
2091
2092 #ifdef HAVE_FCNTL_H
2093 #include <fcntl.h>
2094 #endif
2095
2096 #ifdef HAVE_SYS_FCNTL_H
2097 #include <sys/fcntl.h>
2098 #endif
2099 main() { struct flock64 fl64;
2100 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
2101 exit(0);
2102 #else
2103 exit(1);
2104 #endif
2105 }],
2106        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
2107
2108   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
2109       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
2110   fi
2111 fi
2112
2113 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
2114 AC_TRY_COMPILE([#include <sys/types.h>
2115 #include <sys/stat.h>
2116 #include <unistd.h>],
2117 [struct stat st;  st.st_blocks = 0;],
2118 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
2119 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
2120     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
2121 fi 
2122
2123 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
2124 AC_TRY_COMPILE([#include <sys/types.h>
2125 #include <sys/stat.h>
2126 #include <unistd.h>],
2127 [struct stat st;  st.st_blksize = 0;],
2128 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
2129 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
2130     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
2131 fi
2132
2133 case "$host_os" in
2134 *linux*)
2135 AC_CACHE_CHECK([for broken RedHat 7.2 system header files],samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS,[
2136 AC_TRY_COMPILE([
2137 #ifdef HAVE_SYS_VFS_H
2138 #include <sys/vfs.h>
2139 #endif
2140 #ifdef HAVE_SYS_CAPABILITY_H
2141 #include <sys/capability.h>
2142 #endif
2143 ],[int i;],
2144    samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no,samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=yes)])
2145 if test x"$samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" = x"yes"; then
2146    AC_DEFINE(BROKEN_REDHAT_7_SYSTEM_HEADERS,1,[Broken RedHat 7.2 system header files])
2147 fi
2148 ;;
2149 esac
2150
2151 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
2152 AC_TRY_COMPILE([#include <sys/acl.h>
2153 #if defined(HAVE_RPCSVC_NIS_H)
2154 #include <rpcsvc/nis.h>
2155 #endif],
2156 [int i;],
2157 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
2158 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
2159         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
2160 fi
2161
2162
2163 #################################################
2164 # check for smbwrapper support
2165 AC_MSG_CHECKING(whether to use smbwrapper)
2166 AC_ARG_WITH(smbwrapper,
2167 [  --with-smbwrapper       Include SMB wrapper support (default=no) ],
2168 [ case "$withval" in
2169   yes)
2170     AC_MSG_RESULT(yes)
2171     AC_DEFINE(WITH_SMBWRAPPER,1,[Whether to include smbwrapper support])
2172         WRAPPROG="bin/smbsh\$(EXEEXT)"
2173         WRAP="bin/smbwrapper.$SHLIBEXT"
2174
2175 # Conditions under which smbwrapper should not be built.
2176
2177         if test x$PICFLAG = x; then
2178            echo No support for PIC code - disabling smbwrapper and smbsh
2179            WRAPPROG=""
2180            WRAP=""
2181         elif test x$ac_cv_func_syscall = xno; then
2182            AC_MSG_RESULT([No syscall() -- disabling smbwrapper and smbsh])
2183            WRAPPROG=""
2184            WRAP=""
2185         fi
2186         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WRAPPROG $WRAP"
2187         SMBWRAPPER="$WRAPPROG $WRAP"
2188     ;;
2189   *)
2190     AC_MSG_RESULT(no)
2191     ;;
2192   esac ],
2193   AC_MSG_RESULT(no)
2194 )
2195
2196 #################################################
2197 # check for AFS clear-text auth support
2198 AC_MSG_CHECKING(whether to use AFS clear-text auth)
2199 AC_ARG_WITH(afs,
2200 [  --with-afs              Include AFS clear-text auth support (default=no) ],
2201 [ case "$withval" in
2202   yes)
2203     AC_MSG_RESULT(yes)
2204     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
2205     ;;
2206   *)
2207     AC_MSG_RESULT(no)
2208     ;;
2209   esac ],
2210   AC_MSG_RESULT(no)
2211 )
2212
2213 ####################################################
2214 # check for Linux-specific AFS fake-kaserver support
2215 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
2216 AC_ARG_WITH(fake-kaserver,
2217 [  --with-fake-kaserver    Include AFS fake-kaserver support (default=no) ],
2218 [ case "$withval" in
2219   yes)
2220     AC_MSG_RESULT(yes)
2221     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
2222     ;;
2223   *)
2224     AC_MSG_RESULT(no)
2225     ;;
2226   esac ],
2227   AC_MSG_RESULT(no)
2228 )
2229
2230 #################################################
2231 # check for the DFS clear-text auth system
2232 AC_MSG_CHECKING(whether to use DFS clear-text auth)
2233 AC_ARG_WITH(dfs,
2234 [  --with-dce-dfs          Include DCE/DFS clear-text auth support (default=no)],
2235 [ case "$withval" in
2236   yes)
2237     AC_MSG_RESULT(yes)
2238     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
2239     ;;
2240   *)
2241     AC_MSG_RESULT(no)
2242     ;;
2243   esac ],
2244   AC_MSG_RESULT(no)
2245 )
2246
2247 ########################################################
2248 # Compile with LDAP support?
2249
2250 with_ldap_support=auto
2251 AC_MSG_CHECKING([for LDAP support])
2252
2253 AC_ARG_WITH(ldap,
2254 [  --with-ldap             LDAP support (default yes)],
2255 [ case "$withval" in
2256     yes|no)
2257         with_ldap_support=$withval
2258         ;;
2259   esac ])
2260
2261 AC_MSG_RESULT($with_ldap_support)
2262
2263 SMBLDAP=""
2264 AC_SUBST(SMBLDAP)
2265 if test x"$with_ldap_support" != x"no"; then
2266
2267   ##################################################################
2268   # first test for ldap.h and lber.h
2269   # (ldap.h is required for this test)
2270   AC_CHECK_HEADERS(ldap.h lber.h)
2271   
2272   if test x"$ac_cv_header_ldap_h" != x"yes"; then
2273         if test x"$with_ldap_support" = x"yes"; then
2274          AC_MSG_ERROR(ldap.h is needed for LDAP support)
2275         else
2276          AC_MSG_WARN(ldap.h is needed for LDAP support)
2277         fi
2278         
2279         with_ldap_support=no
2280   fi
2281 fi
2282
2283 if test x"$with_ldap_support" != x"no"; then
2284   ac_save_LIBS=$LIBS
2285
2286   ##################################################################
2287   # we might need the lber lib on some systems. To avoid link errors
2288   # this test must be before the libldap test
2289   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
2290
2291   ########################################################
2292   # now see if we can find the ldap libs in standard paths
2293   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
2294
2295   AC_CHECK_FUNC_EXT(ldap_domain2hostlist,$LDAP_LIBS)
2296   
2297   ########################################################
2298   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
2299   # Check found in pam_ldap 145.
2300   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
2301
2302   LIBS="$LIBS $LDAP_LIBS"
2303   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
2304     AC_TRY_COMPILE([
2305         #include <lber.h>
2306         #include <ldap.h>], 
2307         [ldap_set_rebind_proc(0, 0, 0);], 
2308         [smb_ldap_cv_ldap_set_rebind_proc=3], 
2309         [smb_ldap_cv_ldap_set_rebind_proc=2]
2310     ) 
2311   ])
2312   
2313   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
2314
2315   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS) 
2316   
2317   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes" -a x"$ac_cv_func_ext_ldap_domain2hostlist" = x"yes"; then
2318     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
2319     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
2320     SMBLDAP="lib/smbldap.o"
2321     with_ldap_support=yes
2322     AC_MSG_CHECKING(whether LDAP support is used)
2323     AC_MSG_RESULT(yes)
2324   else
2325     if test x"$with_ldap_support" = x"yes"; then
2326         AC_MSG_ERROR(libldap is needed for LDAP support)
2327     else
2328         AC_MSG_WARN(libldap is needed for LDAP support)
2329     fi
2330     
2331     LDAP_LIBS=""
2332     with_ldap_support=no
2333   fi
2334   LIBS=$ac_save_LIBS
2335 fi
2336
2337
2338 #################################################
2339 # active directory support
2340
2341 with_ads_support=auto
2342 AC_MSG_CHECKING([for Active Directory and krb5 support])
2343
2344 AC_ARG_WITH(ads,
2345 [  --with-ads              Active Directory support (default auto)],
2346 [ case "$withval" in
2347     yes|no)
2348         with_ads_support="$withval"
2349         ;;
2350   esac ])
2351
2352 AC_MSG_RESULT($with_ads_support)
2353
2354 FOUND_KRB5=no
2355 KRB5_LIBS=""
2356
2357 if test x"$with_ldap_support" != x"yes"; then
2358     if test x"$with_ads_support" = x"yes"; then
2359         AC_MSG_ERROR(Active Directory Support requires LDAP support)
2360     elif test x"$with_ads_support" != x"no"; then
2361         AC_MSG_WARN(Active Directory Support requires LDAP support)
2362     fi
2363     with_ads_support=no
2364 fi
2365
2366 if test x"$with_ads_support" != x"no"; then
2367
2368   # Do no harm to the values of CFLAGS and LIBS while testing for
2369   # Kerberos support.
2370
2371   #################################################
2372   # check for krb5-config from recent MIT and Heimdal kerberos 5
2373   AC_PATH_PROG(KRB5_CONFIG, krb5-config)
2374   AC_MSG_CHECKING(for working krb5-config)
2375   if test -x "$KRB5_CONFIG"; then
2376     ac_save_CFLAGS=$CFLAGS
2377     CFLAGS="";export CFLAGS
2378     ac_save_LDFLAGS=$LDFLAGS
2379     LDFLAGS="";export LDFLAGS
2380     KRB5_LIBS="`$KRB5_CONFIG --libs gssapi`"
2381     KRB5_CFLAGS="`$KRB5_CONFIG --cflags | sed s/@INCLUDE_des@//`" 
2382     KRB5_CPPFLAGS="`$KRB5_CONFIG --cflags | sed s/@INCLUDE_des@//`"
2383     CFLAGS=$ac_save_CFLAGS;export CFLAGS
2384     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
2385     FOUND_KRB5=yes
2386     AC_MSG_RESULT(yes)
2387   else
2388     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
2389   fi
2390   
2391   if test x$FOUND_KRB5 = x"no"; then
2392     #################################################
2393     # check for location of Kerberos 5 install
2394     AC_MSG_CHECKING(for kerberos 5 install path)
2395     AC_ARG_WITH(krb5,
2396     [  --with-krb5=base-dir    Locate Kerberos 5 support (default=/usr)],
2397     [ case "$withval" in
2398       no)
2399         AC_MSG_RESULT(no krb5-path given)
2400         ;;
2401       yes)
2402         AC_MSG_RESULT(/usr)
2403         FOUND_KRB5=yes
2404         ;;
2405       *)
2406         AC_MSG_RESULT($withval)
2407         KRB5_CFLAGS="-I$withval/include"
2408         KRB5_CPPFLAGS="-I$withval/include"
2409         KRB5_LDFLAGS="-L$withval/lib"
2410         FOUND_KRB5=yes
2411         ;;
2412       esac ],
2413       AC_MSG_RESULT(no krb5-path given)
2414     )
2415   fi
2416
2417   if test x$FOUND_KRB5 = x"no"; then
2418     #################################################
2419     # see if this box has the SuSE location for the heimdal krb implementation
2420     AC_MSG_CHECKING(for /usr/include/heimdal)
2421     if test -d /usr/include/heimdal; then
2422       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
2423           KRB5_CFLAGS="-I/usr/include/heimdal"
2424           KRB5_CPPFLAGS="-I/usr/include/heimdal"
2425           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
2426           AC_MSG_RESULT(yes)
2427       else
2428           KRB5_CFLAGS="-I/usr/include/heimdal"
2429           KRB5_CPPFLAGS="-I/usr/include/heimdal"
2430           AC_MSG_RESULT(yes)
2431       fi
2432     else
2433       AC_MSG_RESULT(no)
2434     fi
2435   fi
2436
2437   if test x$FOUND_KRB5 = x"no"; then
2438     #################################################
2439     # see if this box has the RedHat location for kerberos
2440     AC_MSG_CHECKING(for /usr/kerberos)
2441     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
2442       KRB5_LDFLAGS="-L/usr/kerberos/lib"
2443       KRB5_CFLAGS="-I/usr/kerberos/include"
2444       KRB5_CPPFLAGS="-I/usr/kerberos/include"
2445       AC_MSG_RESULT(yes)
2446     else
2447       AC_MSG_RESULT(no)
2448     fi
2449   fi
2450
2451   ac_save_CFLAGS=$CFLAGS
2452   ac_save_CPPFLAGS=$CPPFLAGS
2453   ac_save_LDFLAGS=$LDFLAGS
2454
2455   CFLAGS="$CFLAGS $KRB5_CFLAGS"
2456   CPPFLAGS="$CPPFLAGS $KRB5_CPPFLAGS"
2457   LDFLAGS="$LDFLAGS $KRB5_LDFLAGS"
2458
2459   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
2460
2461   # now check for krb5.h. Some systems have the libraries without the headers!
2462   # note that this check is done here to allow for different kerberos
2463   # include paths
2464   AC_CHECK_HEADERS(krb5.h)
2465
2466   if test x"$ac_cv_header_krb5_h" = x"no"; then
2467
2468     # Give a warning if AD support was not explicitly requested,
2469     # i.e with_ads_support = auto, otherwise die with an error.
2470
2471     if test x"$with_ads_support" = x"yes"; then
2472       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
2473     else
2474       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
2475     fi
2476
2477     # Turn off AD support and restore CFLAGS and LIBS variables
2478
2479     with_ads_support="no"
2480     
2481     CFLAGS=$ac_save_CFLAGS
2482     CPPFLAGS=$ac_save_CPPFLAGS
2483     LDFLAGS=$ac_save_LDFLAGS
2484   fi
2485 fi
2486
2487 # Now we have determined whether we really want ADS support
2488
2489 if test x"$with_ads_support" != x"no"; then
2490   ac_save_LIBS=$LIBS
2491
2492   # now check for gssapi headers.  This is also done here to allow for
2493   # different kerberos include paths
2494   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
2495
2496   ##################################################################
2497   # we might need the k5crypto and com_err libraries on some systems
2498   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
2499   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
2500
2501   # Heimdal checks.
2502   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
2503   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
2504   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
2505
2506   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
2507   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],
2508                                 AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available]))
2509
2510   ########################################################
2511   # now see if we can find the krb5 libs in standard paths
2512   # or as specified above
2513   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
2514
2515   ########################################################
2516   # now see if we can find the gssapi libs in standard paths
2517   AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],
2518             AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available]))
2519
2520   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
2521   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
2522   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
2523   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
2524   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
2525   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS) 
2526   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
2527   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS) 
2528   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
2529   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS) 
2530   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
2531   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS) 
2532   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS) 
2533   AC_CHECK_FUNC_EXT(krb5_free_ktypes, $KRB5_LIBS)
2534   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
2535
2536   LIBS="$LIBS $KRB5_LIBS"
2537   
2538   AC_CACHE_CHECK([for addrtype in krb5_address],
2539                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
2540     AC_TRY_COMPILE([#include <krb5.h>],
2541       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
2542       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
2543       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
2544
2545   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
2546     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
2547                [Whether the krb5_address struct has a addrtype property])
2548   fi
2549
2550   AC_CACHE_CHECK([for addr_type in krb5_address],
2551                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
2552     AC_TRY_COMPILE([#include <krb5.h>],
2553       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
2554       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
2555       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
2556
2557   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
2558     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
2559               [Whether the krb5_address struct has a addr_type property])
2560   fi
2561
2562   AC_CACHE_CHECK([for enc_part2 in krb5_ticket], 
2563                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
2564                  [AC_TRY_COMPILE([#include <krb5.h>],
2565     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
2566     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
2567
2568   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
2569     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
2570               [Whether the krb5_ticket struct has a enc_part2 property])
2571   fi
2572
2573   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
2574                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
2575     AC_TRY_COMPILE([#include <krb5.h>],
2576       [krb5_keyblock key; key.keyvalue.data = NULL;],
2577       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
2578       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
2579
2580   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
2581     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
2582               [Whether the krb5_keyblock struct has a keyvalue property])
2583   fi
2584
2585   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
2586                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
2587     AC_TRY_COMPILE([#include <krb5.h>],
2588       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
2589       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
2590       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
2591   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
2592                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
2593     AC_TRY_COMPILE([#include <krb5.h>],
2594       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
2595       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
2596       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
2597 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
2598 # w.r.t. arcfour and windows, so we must not enable it here
2599   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
2600           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
2601     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
2602               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
2603   fi
2604
2605   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
2606                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
2607     AC_TRY_COMPILE([#include <krb5.h>],
2608       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
2609       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
2610       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
2611
2612   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
2613     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
2614               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
2615   fi
2616
2617   AC_CACHE_CHECK([for the krb5_princ_component macro],
2618                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
2619     AC_TRY_LINK([#include <krb5.h>],
2620       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
2621       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
2622       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
2623
2624   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
2625     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
2626                [Whether krb5_princ_component is available])
2627   fi
2628
2629   AC_CACHE_CHECK([for memory keytab support],
2630                  samba_cv_HAVE_MEMORY_KEYTAB,[
2631     AC_TRY_RUN([
2632 #include<krb5.h>
2633   main()
2634   {
2635     krb5_context context;
2636     krb5_keytab keytab;
2637     
2638     krb5_init_context(&context);
2639     if (krb5_kt_resolve(context, "MEMORY:", &keytab))
2640       exit(0);
2641     exit(1);
2642   }], 
2643   samba_cv_HAVE_MEMORY_KEYTAB=no,
2644   samba_cv_HAVE_MEMORY_KEYTAB=yes)])
2645
2646   if test x"$samba_cv_HAVE_MEMORY_KEYTAB" = x"yes"; then
2647       AC_DEFINE(HAVE_MEMORY_KEYTAB,1,
2648                [Whether in-memory keytabs are supported])
2649   fi
2650
2651
2652   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" = x"yes"; then
2653     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
2654     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
2655     AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
2656     AC_MSG_RESULT(yes)
2657   else
2658     if test x"$with_ads_support" = x"yes"; then
2659         AC_MSG_ERROR(libkrb5 is needed for Active Directory support)
2660     else
2661         AC_MSG_WARN(libkrb5 is needed for Active Directory support)
2662     fi
2663     KRB5_LIBS=""
2664     with_ads_support=no 
2665   fi
2666   LIBS="$ac_save_LIBS"
2667 fi
2668
2669 ########################################################
2670 # Compile experimental passdb backends?
2671 # (pdb_xml, pdb_mysql)
2672 AC_MSG_CHECKING(whether to build experimental passdb libraries)
2673 AC_ARG_WITH(expsam,
2674 [  --with-expsam=<list>    Include experimental passdb libraries (default=no)]
2675 [                          Valid choices include (comma separated list): ]
2676 [                              xml & mysql],
2677 [ expsam_pdb_modules=`echo "$withval" | sed 's/,/ /g'`
2678   if test "z$expsam_pdb_modules" = "zyes"; then
2679     expsam_pdb_modules="xml mysql"
2680   fi
2681   AC_MSG_RESULT($expsam_pdb_modules)
2682   for i in $expsam_pdb_modules
2683   do 
2684     case "$i" in
2685     xml)
2686       ## pdb_xml
2687       AM_PATH_XML2([2.0.0],[default_shared_modules="$default_shared_modules pdb_xml"],[])
2688       CFLAGS="$CFLAGS $XML_CFLAGS"
2689       ;;
2690     mysql)
2691       ## pdb_mysql
2692       AM_PATH_MYSQL([default_shared_modules="$default_shared_modules pdb_mysql"],[])
2693       CFLAGS="$CFLAGS $MYSQL_CFLAGS"
2694       ;;
2695     no)
2696       ;;
2697     *)
2698       echo "Unknown module name \"$i\"!  Exiting..."
2699       exit 1
2700       ;;
2701     esac
2702   done ],
2703   AC_MSG_RESULT(no)
2704 )
2705
2706 #################################################
2707 # check for automount support
2708 AC_MSG_CHECKING(whether to use automount)
2709 AC_ARG_WITH(automount,
2710 [  --with-automount        Include automount support (default=no)],
2711 [ case "$withval" in
2712   yes)
2713     AC_MSG_RESULT(yes)
2714     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
2715     ;;
2716   *)
2717     AC_MSG_RESULT(no)
2718     ;;
2719   esac ],
2720   AC_MSG_RESULT(no)
2721 )
2722
2723 #################################################
2724 # check for smbmount support
2725 AC_MSG_CHECKING(whether to use smbmount)
2726 AC_ARG_WITH(smbmount,
2727 [  --with-smbmount         Include smbmount (Linux only) support (default=no)],
2728 [ case "$withval" in
2729   yes)
2730         case "$host_os" in
2731         *linux*)
2732                 AC_MSG_RESULT(yes)
2733                 AC_DEFINE(WITH_SMBMOUNT,1,[Whether to build smbmount])
2734                 EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbmount bin/smbmnt bin/smbumount"
2735                 ;;
2736         *)
2737                 AC_MSG_ERROR(not on a linux system!)
2738                 ;;
2739         esac
2740     ;;
2741   *)
2742     AC_MSG_RESULT(no)
2743     ;;
2744   esac ],
2745   AC_MSG_RESULT(no)
2746 )
2747
2748
2749 #################################################
2750 # check for a PAM clear-text auth, accounts, password and session support
2751 with_pam_for_crypt=no
2752 AC_MSG_CHECKING(whether to use PAM)
2753 AC_ARG_WITH(pam,
2754 [  --with-pam              Include PAM support (default=no)],
2755 [ case "$withval" in
2756   yes)
2757     AC_MSG_RESULT(yes)
2758     if test x"$ac_cv_header_security_pam_appl_h" = x"no"; then
2759        if test x"$ac_cv_header_security_pam_modules_h" = x"no"; then
2760           if test x"$ac_cv_header_security__pam_macros_h" = x"no"; then
2761              AC_MSG_ERROR(--with-pam specified but no PAM headers found)
2762           fi
2763        fi
2764     fi
2765     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
2766     AUTH_LIBS="$AUTH_LIBS -lpam"
2767     with_pam_for_crypt=yes
2768     ;;
2769   *)
2770     AC_MSG_RESULT(no)
2771     ;;
2772   esac ],
2773   AC_MSG_RESULT(no)
2774 )
2775
2776 # we can't build a pam module if we don't have pam.
2777 AC_CHECK_LIB(pam, pam_get_data, [AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])])
2778
2779 #################################################
2780 # check for pam_smbpass support
2781 AC_MSG_CHECKING(whether to use pam_smbpass)
2782 AC_ARG_WITH(pam_smbpass,
2783 [  --with-pam_smbpass      Build PAM module for authenticating against passdb backends (default=no)],
2784 [ case "$withval" in
2785   yes)
2786     AC_MSG_RESULT(yes)
2787
2788        # Conditions under which pam_smbpass should not be built.
2789
2790        if test x$PICFLAG = x; then
2791           AC_MSG_ERROR([No support for PIC code])
2792        elif test x"$ac_cv_header_security_pam_appl_h" = x"no"; then
2793           AC_MSG_ERROR([No security/pam_appl.h found])
2794        elif test x$ac_cv_lib_pam_pam_get_data = xno; then
2795           AC_MSG_ERROR([No libpam found])
2796        else
2797           AUTH_LIBS="$AUTH_LIBS -lpam"
2798           SHLIB_PROGS="$SHLIB_PROGS bin/pam_smbpass.$SHLIBEXT"
2799        fi
2800     ;;
2801   *)
2802     AC_MSG_RESULT(no)
2803     ;;
2804   esac ],
2805   AC_MSG_RESULT(no)
2806 )
2807
2808
2809 ###############################################
2810 # test for where we get crypt() from
2811 AC_SEARCH_LIBS(crypt, [crypt],
2812   [test "$ac_cv_search_crypt" = "none required" || AUTH_LIBS="-lcrypt $AUTH_LIBS"
2813   AC_DEFINE(HAVE_CRYPT,1,[Whether the system has the crypt() function])])
2814
2815 ##
2816 ## moved after the check for -lcrypt in order to
2817 ## ensure that the necessary libraries are included
2818 ## check checking for truncated salt.  Wrapped by the
2819 ## $with_pam_for_crypt variable as above   --jerry
2820 ##
2821 if test $with_pam_for_crypt = no; then
2822 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
2823 crypt_LIBS="$LIBS"
2824 LIBS="$AUTH_LIBS $LIBS"
2825 AC_TRY_RUN([#include "${srcdir-.}/tests/crypttest.c"],
2826         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
2827 LIBS="$crypt_LIBS"])
2828 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
2829         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
2830 fi
2831 fi
2832
2833 ########################################################################################
2834 ##
2835 ## TESTS FOR SAM BACKENDS.  KEEP THESE GROUPED TOGETHER
2836 ##
2837 ########################################################################################
2838
2839 #################################################
2840 # check for a LDAP password database configuration backwards compatibility
2841 AC_MSG_CHECKING(whether to use LDAP SAM 2.2 compatible configuration)
2842 AC_ARG_WITH(ldapsam,
2843 [  --with-ldapsam          Include LDAP SAM 2.2 compatible configuration (default=no)],
2844 [ case "$withval" in
2845   yes)
2846     AC_MSG_RESULT(yes)
2847     AC_DEFINE(WITH_LDAP_SAMCONFIG,1,[Whether to include 2.2 compatible LDAP SAM configuration])
2848     ;;
2849   *)
2850     AC_MSG_RESULT(no)
2851     ;;
2852   esac ],
2853   AC_MSG_RESULT(no)
2854 )
2855
2856 ########################################################################################
2857 ##
2858 ## END OF TESTS FOR SAM BACKENDS.  
2859 ##
2860 ########################################################################################
2861
2862 #################################################
2863 # check for a NISPLUS_HOME support 
2864 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
2865 AC_ARG_WITH(nisplus-home,
2866 [  --with-nisplus-home     Include NISPLUS_HOME support (default=no)],
2867 [ case "$withval" in
2868   yes)
2869     AC_MSG_RESULT(yes)
2870     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
2871     ;;
2872   *)
2873     AC_MSG_RESULT(no)
2874     ;;
2875   esac ],
2876   AC_MSG_RESULT(no)
2877 )
2878
2879 #################################################
2880 # check for syslog logging
2881 AC_MSG_CHECKING(whether to use syslog logging)
2882 AC_ARG_WITH(syslog,
2883 [  --with-syslog           Include experimental SYSLOG support (default=no)],
2884 [ case "$withval" in
2885   yes)
2886     AC_MSG_RESULT(yes)
2887     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
2888     ;;
2889   *)
2890     AC_MSG_RESULT(no)
2891     ;;
2892   esac ],
2893   AC_MSG_RESULT(no)
2894 )
2895
2896 #################################################
2897 # check for a shared memory profiling support
2898 AC_MSG_CHECKING(whether to use profiling)
2899 AC_ARG_WITH(profiling-data,
2900 [  --with-profiling-data   Include gathering source code profile information (default=no)],
2901 [ case "$withval" in
2902   yes)
2903     AC_MSG_RESULT(yes)
2904     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
2905     ;;
2906   *)
2907     AC_MSG_RESULT(no)
2908     ;;
2909   esac ],
2910   AC_MSG_RESULT(no)
2911 )
2912
2913
2914 #################################################
2915 # check for experimental disk-quotas support
2916
2917 samba_cv_WITH_QUOTAS=auto
2918 samba_cv_TRY_QUOTAS=no
2919 samba_cv_RUN_QUOTA_TESTS=auto
2920 samba_cv_WITH_SYS_QUOTAS=auto
2921 samba_cv_TRY_SYS_QUOTAS=no
2922
2923 AC_MSG_CHECKING(whether to try disk-quotas support)
2924 AC_ARG_WITH(quotas,
2925 [  --with-quotas           Include disk-quota support (default=no)],
2926 [ case "$withval" in
2927   yes)
2928     AC_MSG_RESULT(yes)
2929     samba_cv_WITH_QUOTAS=yes
2930     samba_cv_TRY_QUOTAS=yes
2931     samba_cv_RUN_QUOTA_TESTS=yes
2932     #set sys quotas to auto in this case
2933     samba_cv_TRY_SYS_QUOTAS=auto
2934     ;;
2935   auto)
2936     AC_MSG_RESULT(auto)
2937     samba_cv_WITH_QUOTAS=auto
2938     samba_cv_TRY_QUOTAS=auto
2939     samba_cv_RUN_QUOTA_TESTS=auto
2940     #set sys quotas to auto in this case
2941     samba_cv_TRY_SYS_QUOTAS=auto
2942     ;;
2943   no)
2944     AC_MSG_RESULT(no)
2945     samba_cv_WITH_QUOTAS=no
2946     samba_cv_TRY_QUOTAS=no
2947     samba_cv_RUN_QUOTA_TESTS=no
2948     ;;
2949   *)
2950     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
2951     ;;
2952   esac ],
2953   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
2954 )
2955
2956 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
2957 AC_ARG_WITH(sys-quotas,
2958 [  --with-sys-quotas       Include lib/sysquotas.c support (default=auto)],
2959 [ case "$withval" in
2960   yes)
2961     AC_MSG_RESULT(yes)
2962     samba_cv_WITH_SYS_QUOTAS=yes
2963     samba_cv_TRY_SYS_QUOTAS=yes
2964     samba_cv_RUN_QUOTA_TESTS=yes
2965     ;;
2966   auto)
2967     AC_MSG_RESULT(auto)
2968     samba_cv_WITH_SYS_QUOTAS=auto
2969     samba_cv_TRY_SYS_QUOTAS=auto
2970     samba_cv_RUN_QUOTA_TESTS=auto
2971     ;;
2972   no)
2973     AC_MSG_RESULT(no)
2974     samba_cv_WITH_SYS_QUOTAS=no
2975     samba_cv_TRY_SYS_QUOTAS=no
2976     ;;
2977   *)
2978     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
2979     ;;
2980   esac ],
2981   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
2982 )
2983
2984 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
2985 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
2986   case "$host_os" in
2987         *linux*)
2988             AC_MSG_RESULT(yes)
2989             samba_cv_TRY_SYS_QUOTAS=yes
2990             samba_cv_RUN_QUOTA_TESTS=yes
2991             ;;
2992         *)
2993             AC_MSG_RESULT(no)
2994             samba_cv_TRY_SYS_QUOTAS=no
2995             ;;
2996   esac
2997 fi
2998
2999 #############################################
3000 # only check for quota stuff if --with-quotas
3001 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
3002
3003 # For quotas on Veritas VxFS filesystems
3004 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
3005
3006 # For sys/quota.h and linux/quota.h
3007 AC_CHECK_HEADERS(sys/quota.h)
3008 AC_CHECK_HEADERS(asm/types.h linux/quota.h)
3009
3010 # For quotas on Linux XFS filesystems
3011 AC_CHECK_HEADERS(linux/xqm.h linux/xfs_fs.h)
3012 AC_CHECK_HEADERS(xfs/libxfs.h xfs/xqm.h xfs/xfs_fs.h)
3013 # For linux > 2.5.56 
3014 AC_CHECK_HEADERS(linux/dqblk_xfs.h)
3015
3016 # if we have struct if_dqblk in <linux/quota.h> we should use it
3017 AC_CACHE_CHECK([for struct if_dqblk in <linux/quota.h>],samba_cv_HAVE_STRUCT_IF_DQBLK, [
3018 AC_TRY_COMPILE([
3019 #include "confdefs.h"
3020 #ifdef HAVE_SYS_TYPES_H
3021 #include <sys/types.h>
3022 #endif
3023 #ifdef HAVE_ASM_TYPES_H
3024 #include <asm/types.h>
3025 #endif
3026 #include <linux/quota.h>
3027 ],[struct if_dqblk D;],
3028 samba_cv_HAVE_STRUCT_IF_DQBLK=yes,samba_cv_HAVE_STRUCT_IF_DQBLK=no)])
3029 if test "$samba_cv_HAVE_STRUCT_IF_DQBLK"x = "yes"x; then
3030         AC_DEFINE(HAVE_STRUCT_IF_DQBLK,1,[struct if_dqblk])
3031 fi
3032
3033 # if we have struct mem_dqblk in <linux/quota.h> we should use it
3034 AC_CACHE_CHECK([for struct mem_dqblk in <linux/quota.h>],samba_cv_HAVE_STRUCT_MEM_DQBLK, [
3035 AC_TRY_COMPILE([
3036 #include "confdefs.h"
3037 #ifdef HAVE_SYS_TYPES_H
3038 #include <sys/types.h>
3039 #endif
3040 #ifdef HAVE_ASM_TYPES_H
3041 #include <asm/types.h>
3042 #endif
3043 #include <linux/quota.h>
3044 ],[struct mem_dqblk D;],
3045 samba_cv_HAVE_STRUCT_MEM_DQBLK=yes,samba_cv_HAVE_STRUCT_MEM_DQBLK=no)])
3046 if test "$samba_cv_HAVE_STRUCT_MEM_DQBLK"x = "yes"x; then
3047         AC_DEFINE(HAVE_STRUCT_MEM_DQBLK,1,[struct mem_dqblk])
3048 fi
3049
3050 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX 
3051 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
3052 AC_TRY_COMPILE([
3053 #include "confdefs.h"
3054 #ifdef HAVE_SYS_QUOTA_H
3055 #include <sys/quota.h>
3056 #endif
3057 ],[
3058 struct dqblk D;
3059 D.dqb_fsoftlimit = 0;],
3060 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
3061 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
3062         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
3063 fi
3064
3065 ##################
3066 # look for a working quota system
3067 samba_cv_SYSQUOTA_FOUND=no;
3068
3069 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
3070 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
3071 AC_TRY_RUN_STRICT([
3072 #define HAVE_QUOTACTL_4A 1
3073 #define AUTOCONF_TEST 1
3074 #include "confdefs.h"
3075 #include "${srcdir-.}/lib/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3076            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
3077 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
3078     samba_cv_SYSQUOTA_FOUND=yes;AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
3079 fi
3080 fi
3081
3082 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
3083 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
3084 AC_TRY_RUN_STRICT([
3085 #define HAVE_QUOTACTL_4B 1
3086 #define AUTOCONF_TEST 1
3087 #include "confdefs.h"
3088 #include "${srcdir-.}/lib/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3089            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
3090 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
3091     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
3092 #    samba_cv_SYSQUOTA_FOUND=yes;AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
3093 fi
3094 fi
3095
3096 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
3097 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
3098 AC_TRY_RUN_STRICT([
3099 #define HAVE_QUOTACTL_3 1
3100 #define AUTOCONF_TEST 1
3101 #include "confdefs.h"
3102 #include "${srcdir-.}/lib/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3103            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
3104 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
3105     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
3106 #    samba_cv_SYSQUOTA_FOUND=yes;AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
3107 fi
3108 fi
3109
3110 #################################################
3111 # check for mntent.h and struct mntent
3112 AC_CHECK_HEADERS(mntent.h)
3113 #################################################
3114 # check for setmntent,getmntent,endmntent
3115 AC_CHECK_FUNCS(setmntent getmntent endmntent)
3116
3117 #################################################
3118 # check for devnm.h and struct mntent
3119 AC_CHECK_HEADERS(devnm.h)
3120 #################################################
3121 # check for devnm
3122 AC_CHECK_FUNCS(devnm)
3123
3124 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
3125     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
3126         # if --with-sys-quotas=yes then build it 
3127         # you have can use the get/set quota command smb.conf
3128         # options then
3129         samba_cv_SYSQUOTA_FOUND=auto
3130     fi
3131     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
3132         # if --with-sys-quotas=yes then build it 
3133         # you have can use the get/set quota command smb.conf
3134         # options then
3135         samba_cv_TRY_SYS_QUOTAS=auto
3136     fi
3137 fi
3138
3139 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
3140 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
3141 SAVE_CPPFLAGS="$CPPFLAGS"
3142 CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I. -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt  -I${srcdir-.}/smbwrapper -I${srcdir-.}/nsswitch"
3143 AC_TRY_COMPILE([
3144 #include "confdefs.h"
3145 #define NO_PROTO_H 1
3146 #define NO_CONFIG_H 1
3147 #define HAVE_SYS_QUOTAS 1
3148 #include "${srcdir-.}/lib/sysquotas.c"
3149 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
3150 CPPFLAGS="$SAVE_CPPFLAGS"
3151 ])
3152 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
3153 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
3154     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then 
3155         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
3156         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
3157         samba_cv_WE_USE_SYS_QUOTAS=yes
3158         AC_MSG_RESULT(yes)
3159     else
3160         AC_MSG_RESULT(no)
3161     fi
3162 fi
3163 fi
3164
3165 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
3166 SAVE_CPPFLAGS="$CPPFLAGS"
3167 CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I. -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt  -I${srcdir-.}/smbwrapper -I${srcdir-.}/nsswitch"
3168 AC_TRY_COMPILE([
3169 #include "confdefs.h"
3170 #define NO_PROTO_H 1
3171 #define NO_CONFIG_H 1
3172 #include "${srcdir-.}/smbd/quotas.c"
3173 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
3174 CPPFLAGS="$SAVE_CPPFLAGS"
3175 ])
3176 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
3177 AC_MSG_CHECKING(whether to use the old quota support)
3178     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
3179       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
3180         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
3181         AC_MSG_RESULT(yes)
3182       else
3183         AC_MSG_RESULT(no)
3184       fi
3185     else
3186       AC_MSG_RESULT(no)
3187     fi
3188 fi
3189
3190 ####################
3191 # End of quota check samba_cv_RUN_QUOTA_TESTS
3192 fi
3193
3194 #################################################
3195 # check for experimental utmp accounting
3196
3197 AC_MSG_CHECKING(whether to support utmp accounting)
3198 WITH_UTMP=yes
3199 AC_ARG_WITH(utmp,
3200 [  --with-utmp             Include utmp accounting (default, if supported by OS)],
3201 [ case "$withval" in
3202   no)
3203                 WITH_UTMP=no
3204                 ;;
3205   *)
3206                 WITH_UTMP=yes
3207                 ;;
3208   esac ],
3209 )
3210
3211 # utmp requires utmp.h
3212 # Note similar check earlier, when checking utmp details.
3213
3214 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
3215         utmp_no_reason=", no utmp.h on $host_os"
3216         WITH_UTMP=no
3217 fi
3218
3219 # Display test results
3220
3221 if test x"$WITH_UTMP" = x"yes"; then
3222         AC_MSG_RESULT(yes)
3223         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
3224 else
3225         AC_MSG_RESULT(no$utmp_no_reason)
3226 fi
3227
3228 #################################################
3229 # choose native language(s) of man pages
3230 AC_MSG_CHECKING(chosen man pages' language(s))
3231 AC_ARG_WITH(manpages-langs,
3232 [  --with-manpages-langs={en,ja,pl}  Choose man pages' language(s). (en)],
3233 [ case "$withval" in
3234   yes|no)
3235     AC_MSG_WARN(--with-manpages-langs called without argument - will use default)
3236     manlangs="en"
3237   ;;
3238   *)
3239     manlangs="$withval"
3240   ;;
3241   esac
3242
3243   AC_MSG_RESULT($manlangs)
3244   manlangs=`echo $manlangs | sed "s/,/ /g"`   # replacing commas with spaces to produce a list
3245   AC_SUBST(manlangs)],
3246
3247   [manlangs="en"
3248   AC_MSG_RESULT($manlangs)
3249   AC_SUBST(manlangs)]
3250 )
3251
3252 #################################################
3253 # should we build libsmbclient?
3254
3255 INSTALLCLIENTCMD_SH=:
3256 INSTALLCLIENTCMD_A=:
3257 INSTALLCLIENT=
3258 LIBSMBCLIENT_SHARED=
3259 LIBSMBCLIENT=
3260 AC_MSG_CHECKING(whether to build the libsmbclient shared library)
3261 AC_ARG_WITH(libsmbclient,
3262 [  --with-libsmbclient     Build the libsmbclient shared library (default=yes if shared libs supported)],
3263 [ case "$withval" in
3264   no) 
3265      AC_MSG_RESULT(no)
3266      ;;
3267   *)
3268      if test $BLDSHARED = true; then
3269         INSTALLCLIENTCMD_SH="\$(INSTALLCMD)"
3270         ## build the static version of libsmbclient as well
3271         INSTALLCLIENTCMD_A="\$(INSTALLCMD)"
3272         LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
3273         LIBSMBCLIENT=libsmbclient
3274         AC_MSG_RESULT(yes)
3275      else
3276         enable_static=yes
3277         AC_MSG_RESULT(no shared library support -- will supply static library)
3278      fi
3279      if test $enable_static = yes; then
3280         INSTALLCLIENTCMD_A="\$(INSTALLCMD)"
3281         LIBSMBCLIENT=libsmbclient
3282      fi
3283      INSTALLCLIENT=installclientlib
3284      ;;
3285   esac ],
3286 [
3287 # if unspecified, default is to built it iff possible.
3288   if test $BLDSHARED = true; then
3289      INSTALLCLIENTCMD_SH="\$(INSTALLCMD)"
3290      LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
3291      LIBSMBCLIENT=libsmbclient
3292      AC_MSG_RESULT(yes)
3293    else
3294      enable_static=yes
3295      AC_MSG_RESULT(no shared library support -- will supply static library)
3296    fi
3297    if test $enable_static = yes; then
3298      INSTALLCLIENTCMD_A="\$(INSTALLCMD)"
3299      LIBSMBCLIENT=libsmbclient
3300   fi]
3301   INSTALLCLIENT=installclientlib
3302 )
3303
3304
3305 #################################################
3306 # these tests are taken from the GNU fileutils package
3307 AC_CHECKING(how to get filesystem space usage)
3308 space=no
3309
3310 # Test for statvfs64.
3311 if test $space = no; then
3312   # SVR4
3313   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
3314   [AC_TRY_RUN([
3315 #if defined(HAVE_UNISTD_H)
3316 #include <unistd.h>
3317 #endif
3318 #include <sys/types.h>
3319 #include <sys/statvfs.h>
3320   main ()
3321   {
3322     struct statvfs64 fsd;
3323     exit (statvfs64 (".", &fsd));
3324   }],
3325   fu_cv_sys_stat_statvfs64=yes,
3326   fu_cv_sys_stat_statvfs64=no,
3327   fu_cv_sys_stat_statvfs64=cross)])
3328   if test $fu_cv_sys_stat_statvfs64 = yes; then
3329     space=yes
3330     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
3331   fi
3332 fi
3333
3334 # Perform only the link test since it seems there are no variants of the
3335 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
3336 # because that got a false positive on SCO OSR5.  Adding the declaration
3337 # of a `struct statvfs' causes this test to fail (as it should) on such
3338 # systems.  That system is reported to work fine with STAT_STATFS4 which
3339 # is what it gets when this test fails.
3340 if test $space = no; then
3341   # SVR4
3342   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
3343                  [AC_TRY_LINK([#include <sys/types.h>
3344 #include <sys/statvfs.h>],
3345                               [struct statvfs fsd; statvfs (0, &fsd);],
3346                               fu_cv_sys_stat_statvfs=yes,
3347                               fu_cv_sys_stat_statvfs=no)])
3348   if test $fu_cv_sys_stat_statvfs = yes; then
3349     space=yes
3350     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
3351   fi
3352 fi
3353
3354 if test $space = no; then
3355   # DEC Alpha running OSF/1
3356   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
3357   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
3358   [AC_TRY_RUN([
3359 #include <sys/param.h>
3360 #include <sys/types.h>
3361 #include <sys/mount.h>
3362   main ()
3363   {
3364     struct statfs fsd;
3365     fsd.f_fsize = 0;
3366     exit (statfs (".", &fsd, sizeof (struct statfs)));
3367   }],
3368   fu_cv_sys_stat_statfs3_osf1=yes,
3369   fu_cv_sys_stat_statfs3_osf1=no,
3370   fu_cv_sys_stat_statfs3_osf1=no)])
3371   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
3372   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
3373     space=yes
3374     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
3375   fi
3376 fi
3377
3378 if test $space = no; then
3379 # AIX
3380   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
3381 member (AIX, 4.3BSD)])
3382   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
3383   [AC_TRY_RUN([
3384 #ifdef HAVE_SYS_PARAM_H
3385 #include <sys/param.h>
3386 #endif
3387 #ifdef HAVE_SYS_MOUNT_H
3388 #include <sys/mount.h>
3389 #endif
3390 #ifdef HAVE_SYS_VFS_H
3391 #include <sys/vfs.h>
3392 #endif
3393   main ()
3394   {
3395   struct statfs fsd;
3396   fsd.f_bsize = 0;
3397   exit (statfs (".", &fsd));
3398   }],
3399   fu_cv_sys_stat_statfs2_bsize=yes,
3400   fu_cv_sys_stat_statfs2_bsize=no,
3401   fu_cv_sys_stat_statfs2_bsize=no)])
3402   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
3403   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
3404     space=yes
3405     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
3406   fi
3407 fi
3408
3409 if test $space = no; then
3410 # SVR3
3411   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
3412   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
3413   [AC_TRY_RUN([#include <sys/types.h>
3414 #include <sys/statfs.h>
3415   main ()
3416   {
3417   struct statfs fsd;
3418   exit (statfs (".", &fsd, sizeof fsd, 0));
3419   }],
3420     fu_cv_sys_stat_statfs4=yes,
3421     fu_cv_sys_stat_statfs4=no,
3422     fu_cv_sys_stat_statfs4=no)])
3423   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
3424   if test $fu_cv_sys_stat_statfs4 = yes; then
3425     space=yes
3426     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
3427   fi
3428 fi
3429
3430 if test $space = no; then
3431 # 4.4BSD and NetBSD
3432   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
3433 member (4.4BSD and NetBSD)])
3434   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
3435   [AC_TRY_RUN([#include <sys/types.h>
3436 #ifdef HAVE_SYS_PARAM_H
3437 #include <sys/param.h>
3438 #endif
3439 #ifdef HAVE_SYS_MOUNT_H
3440 #include <sys/mount.h>
3441 #endif
3442   main ()
3443   {
3444   struct statfs fsd;
3445   fsd.f_fsize = 0;
3446   exit (statfs (".", &fsd));
3447   }],
3448   fu_cv_sys_stat_statfs2_fsize=yes,
3449   fu_cv_sys_stat_statfs2_fsize=no,
3450   fu_cv_sys_stat_statfs2_fsize=no)])
3451   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
3452   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
3453     space=yes
3454         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
3455   fi
3456 fi
3457
3458 if test $space = no; then
3459   # Ultrix
3460   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
3461   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
3462   [AC_TRY_RUN([#include <sys/types.h>
3463 #ifdef HAVE_SYS_PARAM_H
3464 #include <sys/param.h>
3465 #endif
3466 #ifdef HAVE_SYS_MOUNT_H
3467 #include <sys/mount.h>
3468 #endif
3469 #ifdef HAVE_SYS_FS_TYPES_H
3470 #include <sys/fs_types.h>
3471 #endif
3472   main ()
3473   {
3474   struct fs_data fsd;
3475   /* Ultrix's statfs returns 1 for success,
3476      0 for not mounted, -1 for failure.  */
3477   exit (statfs (".", &fsd) != 1);
3478   }],
3479   fu_cv_sys_stat_fs_data=yes,
3480   fu_cv_sys_stat_fs_data=no,
3481   fu_cv_sys_stat_fs_data=no)])
3482   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
3483   if test $fu_cv_sys_stat_fs_data = yes; then
3484     space=yes
3485     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
3486   fi
3487 fi
3488
3489 #
3490 # As a gating factor for large file support, in order to
3491 # use <4GB files we must have the following minimal support
3492 # available.
3493 # long long, and a 64 bit off_t or off64_t.
3494 # If we don't have all of these then disable large
3495 # file support.
3496 #
3497 AC_MSG_CHECKING([if large file support can be enabled])
3498 AC_TRY_COMPILE([
3499 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
3500 #include <sys/types.h>
3501 #else
3502 __COMPILE_ERROR_
3503 #endif
3504 ],
3505 [int i],
3506 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
3507 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
3508         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
3509 fi
3510 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
3511
3512 AC_ARG_WITH(spinlocks, 
3513 [  --with-spinlocks        Use spin locks instead of fcntl locks (default=no) ])
3514 if test "x$with_spinlocks" = "xyes"; then
3515     AC_DEFINE(USE_SPINLOCKS,1,[Whether to use spin locks instead of fcntl locks])
3516
3517     case "$host_cpu" in
3518         sparc)
3519             AC_DEFINE(SPARC_SPINLOCKS,1,[Whether to use sparc spinlocks])
3520             ;;
3521
3522         i386|i486|i586|i686)
3523             AC_DEFINE(INTEL_SPINLOCKS,1,[Whether to use intel spinlocks])
3524             ;;
3525
3526         mips)
3527             AC_DEFINE(MIPS_SPINLOCKS,1,[Whether to use mips spinlocks])
3528             ;;
3529
3530         powerpc)
3531             AC_DEFINE(POWERPC_SPINLOCKS,1,[Whether to use powerpc spinlocks])
3532             ;;
3533     esac
3534 fi
3535
3536 #################################################
3537 # check for ACL support
3538
3539 AC_MSG_CHECKING(whether to support ACLs)
3540 AC_ARG_WITH(acl-support,
3541 [  --with-acl-support      Include ACL support (default=no)],
3542 [ case "$withval" in
3543   yes)
3544
3545         case "$host_os" in
3546         *sysv5*)
3547                 AC_MSG_RESULT(Using UnixWare ACLs)
3548                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
3549                 ;;
3550         *solaris*)
3551                 AC_MSG_RESULT(Using solaris ACLs)
3552                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
3553                 ;;
3554         *hpux*)
3555                 AC_MSG_RESULT(Using HPUX ACLs)
3556                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
3557                 ;;
3558         *irix*)
3559                 AC_MSG_RESULT(Using IRIX ACLs)
3560                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
3561                 ;;
3562         *aix*)
3563                 AC_MSG_RESULT(Using AIX ACLs)
3564                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
3565                 ;;
3566         *osf*)
3567                 AC_MSG_RESULT(Using Tru64 ACLs)
3568                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
3569                 ACL_LIBS="$ACL_LIBS -lpacl"
3570                 ;;
3571         *freebsd5*)
3572                 AC_MSG_RESULT(Using FreeBSD posix ACLs)
3573                 AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether FreeBSD POSIX ACLs are available])
3574                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
3575                 ;;
3576         *linux*)
3577                 AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
3578                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
3579                 AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[
3580                 acl_LIBS=$LIBS
3581                 LIBS="$LIBS -lacl"
3582                 AC_TRY_LINK([#include <sys/types.h>
3583 #include <sys/acl.h>],
3584 [ acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p);],
3585 samba_cv_HAVE_POSIX_ACLS=yes,samba_cv_HAVE_POSIX_ACLS=no)
3586                 LIBS=$acl_LIBS])
3587                         if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
3588                                 AC_MSG_RESULT(Using posix ACLs)
3589                                 AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
3590                                 AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
3591                                 acl_LIBS=$LIBS
3592                                 LIBS="$LIBS -lacl"
3593                                 AC_TRY_LINK([#include <sys/types.h>
3594 #include <sys/acl.h>],
3595 [ acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm);],
3596 samba_cv_HAVE_ACL_GET_PERM_NP=yes,samba_cv_HAVE_ACL_GET_PERM_NP=no)
3597                                 LIBS=$acl_LIBS])
3598                                 if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
3599                                         AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
3600                                 fi
3601                         fi
3602             ;;
3603          *)
3604                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
3605                 AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[
3606                 acl_LIBS=$LIBS
3607                 LIBS="$LIBS -lacl"
3608                 AC_TRY_LINK([#include <sys/types.h>
3609 #include <sys/acl.h>],
3610 [ acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p);],
3611 samba_cv_HAVE_POSIX_ACLS=yes,samba_cv_HAVE_POSIX_ACLS=no)
3612                 LIBS=$acl_LIBS])
3613                         if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
3614                                 AC_MSG_RESULT(Using posix ACLs)
3615                                 AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
3616                                 AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
3617                                 acl_LIBS=$LIBS
3618                                 LIBS="$LIBS -lacl"
3619                                 AC_TRY_LINK([#include <sys/types.h>
3620 #include <sys/acl.h>],
3621 [ acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm);],
3622 samba_cv_HAVE_ACL_GET_PERM_NP=yes,samba_cv_HAVE_ACL_GET_PERM_NP=no)
3623                                 LIBS=$acl_LIBS])
3624                                 if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
3625                                         AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
3626                                 fi
3627                         fi
3628             ;;
3629         esac
3630         ;;
3631   *)
3632     AC_MSG_RESULT(no)
3633     AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
3634     ;;
3635   esac ],
3636   AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
3637   AC_MSG_RESULT(no)
3638 )
3639
3640 #################################################
3641 # check for sendfile support
3642
3643 with_sendfile_support=yes
3644 AC_MSG_CHECKING(whether to check to support sendfile)
3645 AC_ARG_WITH(sendfile-support,
3646 [  --with-sendfile-support Check for sendfile support (default=yes)],
3647 [ case "$withval" in
3648   yes)
3649
3650         AC_MSG_RESULT(yes);
3651
3652         case "$host_os" in
3653         *linux*)
3654                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
3655                 AC_TRY_LINK([#include <sys/sendfile.h>],
3656 [\
3657 int tofd, fromfd;
3658 off64_t offset;
3659 size_t total;
3660 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
3661 ],
3662 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
3663
3664                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
3665                 AC_TRY_LINK([#include <sys/sendfile.h>],
3666 [\
3667 int tofd, fromfd;
3668 off_t offset;
3669 size_t total;
3670 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
3671 ],
3672 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
3673
3674 # Try and cope with broken Linux sendfile....
3675                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
3676                 AC_TRY_LINK([\
3677 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
3678 #undef _FILE_OFFSET_BITS
3679 #endif
3680 #include <sys/sendfile.h>],
3681 [\
3682 int tofd, fromfd;
3683 off_t offset;
3684 size_t total;
3685 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
3686 ],
3687 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
3688
3689         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
3690                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
3691                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
3692                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
3693         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
3694                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
3695                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
3696                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
3697         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
3698                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
3699                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
3700         else
3701                 AC_MSG_RESULT(no);
3702         fi
3703
3704         ;;
3705         *freebsd*)
3706                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
3707                 AC_TRY_LINK([\
3708 #include <sys/types.h>
3709 #include <unistd.h>
3710 #include <sys/socket.h>
3711 #include <sys/uio.h>],
3712 [\
3713         int fromfd, tofd, ret, total=0;
3714         off_t offset, nwritten;
3715         struct sf_hdtr hdr;
3716         struct iovec hdtrl;
3717         hdr.headers = &hdtrl;
3718         hdr.hdr_cnt = 1;
3719         hdr.trailers = NULL;
3720         hdr.trl_cnt = 0;
3721         hdtrl.iov_base = NULL;
3722         hdtrl.iov_len = 0;
3723         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
3724 ],
3725 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
3726
3727         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
3728                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
3729                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
3730                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
3731         else
3732                 AC_MSG_RESULT(no);
3733         fi
3734         ;;
3735
3736         *hpux*)
3737                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
3738                 AC_TRY_LINK([\
3739 #include <sys/socket.h>
3740 #include <sys/uio.h>],
3741 [\
3742         int fromfd, tofd;
3743         size_t total=0;
3744         struct iovec hdtrl[2];
3745         ssize_t nwritten;
3746         off64_t offset;
3747
3748         hdtrl[0].iov_base = 0;
3749         hdtrl[0].iov_len = 0;
3750
3751         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
3752 ],
3753 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
3754         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
3755                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
3756                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
3757                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
3758         else
3759                 AC_MSG_RESULT(no);
3760         fi
3761
3762                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
3763                 AC_TRY_LINK([\
3764 #include <sys/socket.h>
3765 #include <sys/uio.h>],
3766 [\
3767         int fromfd, tofd;
3768         size_t total=0;
3769         struct iovec hdtrl[2];
3770         ssize_t nwritten;
3771         off_t offset;
3772
3773         hdtrl[0].iov_base = 0;
3774         hdtrl[0].iov_len = 0;
3775
3776         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
3777 ],
3778 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
3779         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
3780                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
3781                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
3782                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
3783         else
3784                 AC_MSG_RESULT(no);
3785         fi
3786         ;;
3787
3788         *solaris*)
3789                 AC_CHECK_LIB(sendfile,sendfilev)
3790                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
3791                 AC_TRY_LINK([\
3792 #include <sys/sendfile.h>],
3793 [\
3794         int sfvcnt;
3795         size_t xferred;
3796         struct sendfilevec vec[2];
3797         ssize_t nwritten;
3798         int tofd;
3799
3800         sfvcnt = 2;
3801
3802         vec[0].sfv_fd = SFV_FD_SELF;
3803         vec[0].sfv_flag = 0;
3804         vec[0].sfv_off = 0;
3805         vec[0].sfv_len = 0;
3806
3807         vec[1].sfv_fd = 0;
3808         vec[1].sfv_flag = 0;
3809         vec[1].sfv_off = 0;
3810         vec[1].sfv_len = 0;
3811         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
3812 ],
3813 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
3814
3815         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
3816                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
3817                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
3818                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
3819         else
3820                 AC_MSG_RESULT(no);
3821         fi
3822
3823                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
3824                 AC_TRY_LINK([\
3825 #include <sys/sendfile.h>],
3826 [\
3827         int sfvcnt;
3828         size_t xferred;
3829         struct sendfilevec vec[2];
3830         ssize_t nwritten;
3831         int tofd;
3832
3833         sfvcnt = 2;
3834
3835         vec[0].sfv_fd = SFV_FD_SELF;
3836         vec[0].sfv_flag = 0;
3837         vec[0].sfv_off = 0;
3838         vec[0].sfv_len = 0;
3839
3840         vec[1].sfv_fd = 0;
3841         vec[1].sfv_flag = 0;
3842         vec[1].sfv_off = 0;
3843         vec[1].sfv_len = 0;
3844         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
3845 ],
3846 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
3847
3848         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
3849                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
3850                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
3851                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
3852         else
3853                 AC_MSG_RESULT(no);
3854         fi
3855         ;;
3856
3857         *)
3858         ;;
3859         esac
3860         ;;
3861   *)
3862     AC_MSG_RESULT(no)
3863     ;;
3864   esac ],
3865   AC_MSG_RESULT(yes)
3866 )
3867
3868
3869 #################################################
3870 # Check whether winbind is supported on this platform.  If so we need to
3871 # build and install client programs, sbin programs and shared libraries
3872
3873 AC_MSG_CHECKING(whether to build winbind)
3874
3875 # Initially, the value of $host_os decides whether winbind is supported
3876
3877 HAVE_WINBIND=yes
3878
3879 # Define the winbind shared library name and any specific linker flags
3880 # it needs to be built with.
3881
3882 WINBIND_NSS="nsswitch/libnss_winbind.$SHLIBEXT"
3883 WINBIND_WINS_NSS="nsswitch/libnss_wins.$SHLIBEXT"
3884 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
3885
3886 case "$host_os" in
3887         *linux*|*freebsd*)
3888                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_linux.o"
3889                 ;;
3890         *irix*)
3891                 # IRIX has differently named shared libraries
3892                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_irix.o"
3893                 WINBIND_NSS="nsswitch/libns_winbind.$SHLIBEXT"
3894                 WINBIND_WINS_NSS="nsswitch/libns_wins.$SHLIBEXT"
3895                 ;;
3896         *solaris*)
3897                 # Solaris winbind client is implemented as a wrapper around
3898                 # the Linux version.
3899                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o \
3900                     nsswitch/winbind_nss_linux.o"
3901                 WINBIND_NSS_EXTRA_LIBS="-lsocket"
3902                 ;;
3903         *hpux11*)
3904                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
3905                 ;;
3906         *aix*)
3907                 # AIX has even differently named shared libraries.  No
3908                 # WINS support has been implemented yet.
3909                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_aix.o"
3910                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
3911                 WINBIND_NSS="nsswitch/WINBIND"
3912                 WINBIND_WINS_NSS=""
3913                 ;;
3914         *)
3915                 HAVE_WINBIND=no
3916                 winbind_no_reason=", unsupported on $host_os"
3917                 ;;
3918 esac
3919
3920 AC_SUBST(WINBIND_NSS)
3921 AC_SUBST(WINBIND_WINS_NSS)
3922 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
3923 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
3924 AC_SUBST(WINBIND_NSS_EXTRA_LIBS)
3925
3926 # Check the setting of --with-winbindd
3927
3928 AC_ARG_WITH(winbind,
3929 [  --with-winbind          Build winbind (default, if supported by OS)],
3930
3931   case "$withval" in
3932         yes)
3933                 HAVE_WINBIND=yes
3934                 ;;
3935         no)
3936                 HAVE_WINBIND=no
3937                 winbind_reason=""
3938                 ;;
3939   esac ],
3940 )
3941
3942 # We need unix domain sockets for winbind
3943
3944 if test x"$HAVE_WINBIND" = x"yes"; then
3945         if test x"$samba_cv_unixsocket" = x"no"; then
3946                 winbind_no_reason=", no unix domain socket support on $host_os"
3947                 HAVE_WINBIND=no
3948         fi
3949 fi
3950
3951 # Display test results
3952
3953 if test x"$HAVE_WINBIND" = x"yes"; then
3954         AC_MSG_RESULT(yes)
3955         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
3956
3957         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
3958         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
3959         if test x"$BLDSHARED" = x"true"; then
3960                 SHLIB_PROGS="$SHLIB_PROGS $WINBIND_NSS $WINBIND_WINS_NSS"
3961
3962                 if test x"$with_pam" = x"yes"; then
3963                         SHLIB_PROGS="$SHLIB_PROGS nsswitch/pam_winbind.$SHLIBEXT"
3964                 fi
3965         fi
3966 else
3967         AC_MSG_RESULT(no$winbind_no_reason)
3968 fi
3969
3970 # Solaris has some extra fields in struct passwd that need to be
3971 # initialised otherwise nscd crashes.  
3972  
3973 AC_CHECK_MEMBER(struct passwd.pw_comment,
3974                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
3975                 [#include <pwd.h>])
3976
3977 AC_CHECK_MEMBER(struct passwd.pw_age,
3978                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
3979                 [#include <pwd.h>])
3980
3981 #################################################
3982 # Check to see if we should use the included popt 
3983
3984 AC_ARG_WITH(included-popt,
3985 [  --with-included-popt    use bundled popt library, not from system],
3986
3987   case "$withval" in
3988         yes)
3989                 INCLUDED_POPT=yes
3990                 ;;
3991         no)
3992                 INCLUDED_POPT=no
3993                 ;;
3994   esac ],
3995 )
3996 if test x"$INCLUDED_POPT" != x"yes"; then
3997     AC_CHECK_LIB(popt, poptGetContext,
3998                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
3999 fi
4000
4001 AC_MSG_CHECKING(whether to use included popt)
4002 if test x"$INCLUDED_POPT" = x"yes"; then
4003     AC_MSG_RESULT(yes)
4004     BUILD_POPT='$(POPT_OBJS)'
4005         POPTLIBS='$(POPT_OBJS)'
4006     FLAGS1="-I$srcdir/popt"
4007 else
4008     AC_MSG_RESULT(no)
4009         BUILD_POPT=""
4010     POPTLIBS="-lpopt"
4011 fi
4012 AC_SUBST(BUILD_POPT)
4013 AC_SUBST(POPTLIBS)
4014 AC_SUBST(FLAGS1)
4015
4016 #################################################
4017 # Check if the user wants Python
4018
4019 # At the moment, you can use this to set which Python binary to link
4020 # against.  (Libraries built for Python2.2 can't be used by 2.1,
4021 # though they can coexist in different directories.)  In the future
4022 # this might make the Python stuff be built by default.
4023
4024 # Defaulting python breaks the clean target if python isn't installed
4025
4026 PYTHON=
4027
4028 AC_ARG_WITH(python,
4029 [  --with-python=PYTHONNAME  build Python libraries],
4030 [ case "${withval-python}" in
4031   yes)
4032         PYTHON=python
4033         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS python_ext"
4034         ;;
4035   no)
4036         PYTHON=
4037         ;;
4038   *)
4039         PYTHON=${withval-python}
4040         ;;
4041   esac ])
4042 AC_SUBST(PYTHON)
4043
4044 for i in `echo $default_static_modules | sed -e's/,/ /g'`
4045 do
4046         eval MODULE_DEFAULT_$i=STATIC
4047 done
4048
4049 for i in `echo $default_shared_modules | sed -e's/,/ /g'`
4050 do
4051         dnl Fall back to static if dlopen() is not available
4052         eval MODULE_DEFAULT_$i=STATIC
4053
4054         if test x"$ac_cv_func_dlopen" = xyes; then
4055                 eval MODULE_DEFAULT_$i=SHARED
4056         fi
4057 done
4058
4059 dnl Always built these modules static
4060 MODULE_pdb_guest=STATIC
4061 MODULE_rpc_spoolss=STATIC
4062 MODULE_rpc_srv=STATIC
4063 MODULE_idmap_tdb=STATIC
4064
4065 AC_ARG_WITH(static-modules,
4066 [  --with-static-modules=MODULES  Comma-seperated list of names of modules to statically link in],
4067 [ if test $withval; then
4068         for i in `echo $withval | sed -e's/,/ /g'`
4069         do
4070                 eval MODULE_$i=STATIC
4071         done
4072 fi ])
4073
4074 AC_ARG_WITH(shared-modules,
4075 [  --with-shared-modules=MODULES  Comma-seperated list of names of modules to build shared],
4076 [ if test $withval; then
4077         for i in `echo $withval | sed -e's/,/ /g'`
4078         do
4079                         eval MODULE_$i=SHARED
4080         done
4081 fi ])
4082
4083 ###########################################################################
4084 ## contributed pdb_modules
4085
4086 SMB_MODULE(pdb_xml, passdb/pdb_xml.o, "bin/xml.$SHLIBEXT", PDB,
4087                   [ PASSDB_LIBS="$PASSDB_LIBS $XML_LIBS" ] )
4088 SMB_MODULE(pdb_mysql, passdb/pdb_mysql.o, "bin/mysql.$SHLIBEXT", PDB, 
4089                    [ PASSDB_LIBS="$PASSDB_LIBS $MYSQL_LIBS" ]   )
4090
4091 ## end of contributed pdb_modules
4092 ###########################################################################
4093
4094 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o, "bin/ldapsam.$SHLIBEXT", PDB, 
4095                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
4096 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
4097 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
4098 SMB_MODULE(pdb_guest, passdb/pdb_guest.o, "bin/guest.$SHLIBEXT", PDB)
4099 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.c)
4100
4101 SMB_MODULE(rpc_lsa, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
4102 SMB_MODULE(rpc_reg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
4103 SMB_MODULE(rpc_lsa_ds, \$(RPC_LSA_DS_OBJ), "bin/librpc_lsa_ds.$SHLIBEXT", RPC)
4104 SMB_MODULE(rpc_wks, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
4105 SMB_MODULE(rpc_net, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
4106 SMB_MODULE(rpc_dfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
4107 SMB_MODULE(rpc_srv, \$(RPC_SVC_OBJ), "bin/librpc_srvsvc.$SHLIBEXT", RPC)
4108 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
4109 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
4110 SMB_MODULE(rpc_echo, \$(RPC_ECHO_OBJ), "bin/librpc_echo.$SHLIBEXT", RPC)
4111 SMB_SUBSYSTEM(RPC,smbd/server.c)
4112
4113 SMB_MODULE(idmap_ldap, sam/idmap_ldap.o, "bin/idmap_ldap.$SHLIBEXT", IDMAP)
4114 SMB_MODULE(idmap_tdb, sam/idmap_tdb.o, "bin/idmap_tdb.$SHLIBEXT", IDMAP)
4115 SMB_SUBSYSTEM(IDMAP,sam/idmap.c)
4116
4117 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
4118 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
4119 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
4120 SMB_SUBSYSTEM(CHARSET,lib/iconv.c)
4121
4122 SMB_MODULE(auth_rhosts, \$(AUTH_RHOSTS_OBJ), "bin/rhosts.$SHLIBEXT", AUTH)
4123 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
4124 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
4125 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
4126 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
4127 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
4128 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
4129 SMB_SUBSYSTEM(AUTH,auth/auth.c)
4130
4131 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
4132 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
4133 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
4134 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
4135 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
4136 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
4137 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
4138 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
4139 SMB_SUBSYSTEM(VFS,smbd/vfs.c)
4140
4141 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
4142
4143 #################################################
4144 # do extra things if we are running insure
4145
4146 if test "${ac_cv_prog_CC}" = "insure"; then
4147         CPPFLAGS="$CPPFLAGS -D__INSURE__"
4148 fi
4149
4150 #################################################
4151 # Display summary of libraries detected
4152
4153 AC_MSG_RESULT([Using libraries:])
4154 AC_MSG_RESULT([    LIBS = $LIBS])
4155 if test x"$with_ads_support" != x"no"; then
4156    AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
4157 fi
4158 if test x"$with_ldap_support" != x"no"; then
4159    AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
4160 fi
4161 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
4162
4163 #################################################
4164 # final configure stuff
4165
4166 AC_MSG_CHECKING([configure summary])
4167 AC_TRY_RUN([#include "${srcdir-.}/tests/summary.c"],
4168            AC_MSG_RESULT(yes),
4169            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
4170            AC_MSG_WARN([cannot run when cross-compiling]))
4171
4172 builddir=`pwd`
4173 AC_SUBST(builddir)
4174
4175 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
4176 LIB_REMOVE_USR_LIB(LDFLAGS)
4177 LIB_REMOVE_USR_LIB(LIBS)
4178
4179 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
4180 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
4181 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
4182
4183 AC_OUTPUT(include/stamp-h Makefile script/findsmb smbadduser script/gen-8bit-gap.sh)
4184
4185 #################################################
4186 # Print very concise instructions on building/use
4187 if test "x$enable_dmalloc" = xyes
4188 then
4189         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
4190         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])
4191 fi