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