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