r21778: Wrap calls to krb5_get_init_creds_opt_free to handle the different
[samba.git] / source3 / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2
3 dnl We must use autotools 2.53 or above
4 AC_PREREQ(2.53)
5 AC_INIT(include/includes.h)
6 AC_CONFIG_HEADER(include/config.h)
7 AC_DEFINE(CONFIG_H_IS_FROM_SAMBA,1,[Marker for samba's config.h])
8
9 SMB_VERSION_STRING=`cat $srcdir/include/version.h | grep 'SAMBA_VERSION_OFFICIAL_STRING' | cut -d '"' -f2`
10 echo "SAMBA VERSION: ${SMB_VERSION_STRING}"
11
12 SAMBA_VERSION_SVN_REVISION=`cat $srcdir/include/version.h | grep 'SAMBA_VERSION_SVN_REVISION' | cut -d ' ' -f3-`
13 if test -n "${SAMBA_VERSION_SVN_REVISION}";then
14         echo "BUILD REVISION: ${SAMBA_VERSION_SVN_REVISION}"
15 fi
16
17 AC_LIBREPLACE_LOCATION_CHECKS
18
19 AC_DISABLE_STATIC
20 AC_ENABLE_SHARED
21
22 #################################################
23 # Directory handling stuff to support both the
24 # legacy SAMBA directories and FHS compliant
25 # ones...
26 AC_PREFIX_DEFAULT(/usr/local/samba)
27
28 rootsbindir="\${SBINDIR}"
29 lockdir="\${VARDIR}/locks"
30 piddir="\${VARDIR}/locks"
31 test "${mandir}" || mandir="\${prefix}/man"
32 logfilebase="\${VARDIR}"
33 privatedir="\${prefix}/private"
34 test "${libdir}" || libdir="\${prefix}/lib"
35 pammodulesdir="\${LIBDIR}/security"
36 configdir="\${LIBDIR}"
37 swatdir="\${prefix}/swat"
38
39 AC_ARG_WITH(fhs, 
40 [  --with-fhs              Use FHS-compliant paths (default=no)],
41 [ case "$withval" in
42   yes)
43     lockdir="\${VARDIR}/lib/samba"
44     piddir="\${VARDIR}/run"
45     mandir="\${prefix}/share/man"
46     logfilebase="\${VARDIR}/log/samba"
47     privatedir="\${CONFIGDIR}/private"
48     libdir="\${prefix}/lib/samba"
49     configdir="\${sysconfdir}/samba"
50     swatdir="\${DATADIR}/samba/swat"
51     ;;
52   esac])
53
54 #################################################
55 # set private directory location
56 AC_ARG_WITH(privatedir,
57 [  --with-privatedir=DIR   Where to put smbpasswd ($ac_default_prefix/private)],
58 [ case "$withval" in
59   yes|no)
60   #
61   # Just in case anybody calls it without argument
62   #
63     AC_MSG_WARN([--with-privatedir called without argument - will use default])
64   ;;
65   * )
66     privatedir="$withval"
67     ;;
68   esac])
69
70 #################################################
71 # set root sbin directory location
72 AC_ARG_WITH(rootsbindir,
73 [  --with-rootsbindir=DIR  Which directory to use for root sbin ($ac_default_prefix/sbin)],
74 [ case "$withval" in
75   yes|no)
76   #
77   # Just in case anybody calls it without argument
78   #
79     AC_MSG_WARN([--with-rootsbindir called without argument - will use default])
80   ;;
81   * )
82     rootsbindir="$withval"
83     ;;
84   esac])
85
86 #################################################
87 # set lock directory location
88 AC_ARG_WITH(lockdir,
89 [  --with-lockdir=DIR      Where to put lock files ($ac_default_prefix/var/locks)],
90 [ case "$withval" in
91   yes|no)
92   #
93   # Just in case anybody calls it without argument
94   #
95     AC_MSG_WARN([--with-lockdir called without argument - will use default])
96   ;;
97   * )
98     lockdir="$withval"
99     ;;
100   esac])
101
102 #################################################
103 # set pid directory location
104 AC_ARG_WITH(piddir,
105 [  --with-piddir=DIR       Where to put pid files ($ac_default_prefix/var/locks)],
106 [ case "$withval" in
107   yes|no)
108   #
109   # Just in case anybody calls it without argument
110   #
111     AC_MSG_WARN([--with-piddir called without argument - will use default])
112   ;;
113   * )
114     piddir="$withval"
115     ;;
116   esac])
117
118 #################################################
119 # set SWAT directory location
120 AC_ARG_WITH(swatdir,
121 [  --with-swatdir=DIR      Where to put SWAT files ($ac_default_prefix/swat)],
122 [ case "$withval" in
123   yes|no)
124   #
125   # Just in case anybody does it
126   #
127     AC_MSG_WARN([--with-swatdir called without argument - will use default])
128   ;;
129   * )
130     swatdir="$withval"
131     ;;
132   esac])
133
134 #################################################
135 # set configuration directory location
136 AC_ARG_WITH(configdir,
137 [  --with-configdir=DIR    Where to put configuration files ($libdir)],
138 [ case "$withval" in
139   yes|no)
140   #
141   # Just in case anybody does it
142   #
143     AC_MSG_WARN([--with-configdir called without argument - will use default])
144   ;;
145   * )
146     configdir="$withval"
147     ;;
148   esac])
149
150 #################################################
151 # set log directory location
152 AC_ARG_WITH(logfilebase,
153 [  --with-logfilebase=DIR  Where to put log files ($VARDIR)],
154 [ case "$withval" in
155   yes|no)
156   #
157   # Just in case anybody does it
158   #
159     AC_MSG_WARN([--with-logfilebase called without argument - will use default])
160   ;;
161   * )
162     logfilebase="$withval"
163     ;;
164   esac])
165
166 #################################################
167 # set lib directory location
168 AC_ARG_WITH(libdir,
169 [  --with-libdir=DIR       Where to put libdir ($libdir)],
170 [ case "$withval" in
171   yes|no)
172   #
173   # Just in case anybody does it
174   #
175     AC_MSG_WARN([--with-libdir without argument - will use default])
176   ;;
177   * )
178     libdir="$withval"
179     ;;
180   esac])
181
182 #################################################
183 # set PAM modules directory location
184 AC_ARG_WITH(pammodulesdir,
185 [  --with-pammodulesdir=DIR  Which directory to use for PAM modules ($ac_default_prefix/$libdir/security)],
186 [ case "$withval" in
187   yes|no)
188   #
189   # Just in case anybody calls it without argument
190   #
191     AC_MSG_WARN([--with-pammodulesdir called without argument - will use default])
192   ;;
193   * )
194     pammodulesdir="$withval"
195     ;;
196   esac])
197
198 #################################################
199 # set man directory location
200 AC_ARG_WITH(mandir,
201 [  --with-mandir=DIR       Where to put man pages ($mandir)],
202 [ case "$withval" in
203   yes|no)
204   #
205   # Just in case anybody does it
206   #
207     AC_MSG_WARN([--with-mandir without argument - will use default])
208   ;;
209   * )
210     mandir="$withval"
211     ;;
212   esac])
213
214 AC_ARG_WITH(cfenc,
215 [  --with-cfenc=HEADERDIR  Use internal CoreFoundation encoding API
216                           for optimization (Mac OS X/Darwin only)],
217 [
218 # May be in source $withval/CoreFoundation/StringEncodings.subproj.
219 # Should have been in framework $withval/CoreFoundation.framework/Headers.
220 for d in \
221     $withval/CoreFoundation/StringEncodings.subproj \
222     $withval/StringEncodings.subproj \
223     $withval/CoreFoundation.framework/Headers \
224     $withval/Headers \
225     $withval
226 do
227     if test -r $d/CFStringEncodingConverter.h; then
228         ln -sfh $d include/CoreFoundation
229     fi
230 done
231 ])
232
233 SAMBA_CPPFLAGS="-Iinclude -I${srcdir-.}/include  -I. -I${srcdir-.}"
234 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/lib/replace"
235 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/lib/talloc"
236 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/tdb/include"
237 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/libaddns"
238 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/librpc"
239
240 SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/popt"
241
242 ## cleanup the $(srcdir) in the Makefile if we are outside of the tree
243 if test "x${srcdir-.}" != "x."; then
244         SAMBA_CPPFLAGS=`echo ${SAMBA_CPPFLAGS} | sed -e "s;${srcdir};\$\(srcdir\);g"`
245 fi
246
247 AC_SUBST(configdir)
248 AC_SUBST(lockdir)
249 AC_SUBST(piddir)
250 AC_SUBST(logfilebase)
251 AC_SUBST(privatedir)
252 AC_SUBST(swatdir)
253 AC_SUBST(bindir)
254 AC_SUBST(sbindir)
255 AC_SUBST(rootsbindir)
256 AC_SUBST(pammodulesdir)
257
258 dnl Unique-to-Samba variables we'll be playing with.
259 AC_SUBST(SAMBA_CPPFLAGS)
260 AC_SUBST(SHELL)
261 AC_SUBST(LDSHFLAGS)
262 AC_SUBST(SONAMEFLAG)
263 AC_SUBST(SHLD)
264 AC_SUBST(HOST_OS)
265 AC_SUBST(PICFLAG)
266 AC_SUBST(PIE_CFLAGS)
267 AC_SUBST(PIE_LDFLAGS)
268 AC_SUBST(SHLIBEXT)
269 AC_SUBST(INSTALLLIBCMD_SH)
270 AC_SUBST(INSTALLLIBCMD_A)
271 AC_SUBST(UNINSTALLLIBCMD_SH)
272 AC_SUBST(UNINSTALLLIBCMD_A)
273 AC_SUBST(INSTALL_LIBMSRPC)
274 AC_SUBST(UNINSTALL_LIBMSRPC)
275 AC_SUBST(LIBMSRPC_SHARED)
276 AC_SUBST(LIBMSRPC)
277 AC_SUBST(INSTALL_LIBADDNS)
278 AC_SUBST(UNINSTALL_LIBADDNS)
279 AC_SUBST(LIBADDNS_SHARED)
280 AC_SUBST(LIBADDNS)
281 AC_SUBST(INSTALL_LIBSMBCLIENT)
282 AC_SUBST(UNINSTALL_LIBSMBCLIENT)
283 AC_SUBST(LIBSMBCLIENT_SHARED)
284 AC_SUBST(LIBSMBCLIENT)
285 AC_SUBST(INSTALL_LIBSMBSHAREMODES)
286 AC_SUBST(UNINSTALL_LIBSMBSHAREMODES)
287 AC_SUBST(LIBSMBSHAREMODES_SHARED)
288 AC_SUBST(LIBSMBSHAREMODES)
289 AC_SUBST(PRINT_LIBS)
290 AC_SUBST(AUTH_LIBS)
291 AC_SUBST(ACL_LIBS)
292 AC_SUBST(PASSDB_LIBS)
293 AC_SUBST(IDMAP_LIBS)
294 AC_SUBST(KRB5_LIBS)
295 AC_SUBST(UUID_LIBS)
296 AC_SUBST(LDAP_LIBS)
297 AC_SUBST(SHLIB_PROGS)
298 AC_SUBST(PAM_MODULES)
299 AC_SUBST(INSTALL_PAM_MODULES)
300 AC_SUBST(UNINSTALL_PAM_MODULES)
301 AC_SUBST(SMBWRAPPER)
302 AC_SUBST(SMBWRAP_OBJS)
303 AC_SUBST(SMBWRAP_INC)
304 AC_SUBST(EXTRA_BIN_PROGS)
305 AC_SUBST(SMBMOUNT_PROGS)
306 AC_SUBST(CIFSMOUNT_PROGS)
307 AC_SUBST(INSTALL_CIFSMOUNT)
308 AC_SUBST(UNINSTALL_CIFSMOUNT)
309 AC_SUBST(EXTRA_SBIN_PROGS)
310 AC_SUBST(EXTRA_ALL_TARGETS)
311 AC_SUBST(CONFIG_LIBS)
312 AC_SUBST(NSCD_LIBS)
313
314 ## check for --enable-debug first before checking CFLAGS before
315 ## so that we don't mix -O and -g
316 AC_ARG_ENABLE(debug, 
317 [  --enable-debug          Turn on compiler debugging information (default=no)],
318     [if eval "test x$enable_debug = xyes"; then
319         CFLAGS="${CFLAGS} -g"
320     fi])
321
322 # compile with optimization and without debugging by default, but
323 # allow people to set their own preference.
324 # do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
325 # if it has no value.  This prevent *very* large debug binaries from occurring
326 # by default.
327 if test "x$CFLAGS" = x; then
328   CFLAGS="-O"
329 fi
330
331 CFLAGS="${CFLAGS} -D_SAMBA_BUILD_=3"
332
333 AC_LIBREPLACE_CC_CHECKS
334
335 m4_include(lib/socket_wrapper/config.m4)
336
337 #################################################
338 # set prefix for 'make test'
339 selftest_prefix="./"
340 AC_SUBST(selftest_prefix)
341 AC_ARG_WITH(selftest-prefix,
342 [  --with-selftest-prefix=DIR    The prefix where make test will be runned ($selftest_prefix)],
343 [ case "$withval" in
344   yes|no)
345     AC_MSG_WARN([--with-selftest-prefix called without argument - will use default])
346   ;;
347   * )
348     selftest_prefix="$withval"
349     ;;
350   esac
351 ])
352
353 #################################################
354 # set path of samba4's smbtorture
355 smbtorture4_path=""
356 AC_SUBST(smbtorture4_path)
357 AC_ARG_WITH(smbtorture4_path,
358 [  --with-smbtorture4-path=PATH    The path to a samba4 smbtorture for make test (none)],
359 [ case "$withval" in
360   yes|no)
361     AC_MSG_ERROR([--with-smbtorture4-path should take a path])
362   ;;
363   * )
364     smbtorture4_path="$withval"
365     if test -z "$smbtorture4_path" -a ! -f $smbtorture4_path; then
366         AC_MSG_ERROR(['$smbtorture_path' does not  exist!]) 
367     fi
368   ;;
369  esac
370 ])
371
372 AC_ARG_ENABLE(developer, [  --enable-developer      Turn on developer warnings and debugging (default=no)],
373     [if eval "test x$enable_developer = xyes"; then
374         developer=yes
375         CFLAGS="${CFLAGS} -gstabs -Wall -Wshadow -Wstrict-prototypes -Wpointer-arith -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
376         # Add -Wdeclaration-after-statement if compiler supports it
377         AC_CACHE_CHECK(
378           [that the C compiler understands -Wdeclaration-after-statement],
379           samba_cv_HAVE_Wdeclaration_after_statement, [
380           AC_TRY_RUN_STRICT([
381             int main(void)
382             {
383                 return 0;
384             }],[-Wdeclaration-after-statement],[$CPPFLAGS],[$LDFLAGS],
385             samba_cv_HAVE_Wdeclaration_after_statement=yes,
386             samba_cv_HAVE_Wdeclaration_after_statement=no,
387             samba_cv_HAVE_Wdeclaration_after_statement=cross)
388        ])
389        if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
390             CFLAGS="${CFLAGS} -Wdeclaration-after-statement"
391        fi
392     fi])
393
394 AC_ARG_ENABLE(krb5developer, [  --enable-krb5developer  Turn on developer warnings and debugging, except -Wstrict-prototypes (default=no)],
395     [if eval "test x$enable_krb5developer = xyes"; then
396         developer=yes
397         CFLAGS="${CFLAGS} -gstabs -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
398     fi])
399
400 AC_ARG_ENABLE(dmalloc, [  --enable-dmalloc        Enable heap debugging [default=no]])
401
402 if test "x$enable_dmalloc" = xyes
403 then
404         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
405         AC_DEFINE(DMALLOC_FUNC_CHECK, 1, 
406                   [Define to check invariants around some common functions])
407         LIBS="$LIBS -ldmalloc"  
408 fi
409
410 #################################################
411 # check for a shared memory profiling support
412 AC_MSG_CHECKING(whether to use profiling)
413 AC_ARG_WITH(profiling-data,
414 [  --with-profiling-data   Include gathering source code profile information (default=no)],
415 [ case "$withval" in
416   yes)
417     AC_MSG_RESULT(yes)
418     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
419     samba_cv_WITH_PROFILE=yes
420     ;;
421   *)
422     AC_MSG_RESULT(no)
423     samba_cv_WITH_PROFILE=no
424     ;;
425   esac ],
426   AC_MSG_RESULT(no)
427 )
428
429 dnl Checks for programs.
430
431 AC_PROG_INSTALL
432 AC_PROG_AWK
433 AC_PATH_PROG(PERL, perl)
434
435 AC_CHECK_TOOL(AR, ar)
436
437 dnl Check if we use GNU ld
438 LD=ld
439 AC_PROG_LD_GNU
440
441 dnl Certain versions of GNU ld the default is not to have the 
442 dnl --allow-shlib-undefined flag defined.  This causes a stackload of
443 dnl warnings when building modules.
444 if test "$ac_cv_prog_gnu_ld" = "yes"; then
445         ac_cv_gnu_ld_version=`$LD -v 2>/dev/null | head -1`
446         AC_MSG_CHECKING(GNU ld release date)
447         changequote(,)dnl
448         ac_cv_gnu_ld_date=`echo $ac_cv_gnu_ld_version | sed -n 's,^.*\([2-9][0-9][0-9][0-9]\)[-]*\([01][0-9]\)[-]*\([0-3][0-9]\).*$,\1\2\3,p'`
449         changequote([,])dnl
450         AC_MSG_RESULT(${ac_cv_gnu_ld_date})
451         if test -n "$ac_cv_gnu_ld_date"; then
452         if test "$ac_cv_gnu_ld_date" -lt 20030217; then
453                 ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
454         fi
455         else
456            AC_MSG_CHECKING(GNU ld release version)
457            changequote(,)dnl
458            ac_cv_gnu_ld_vernr=`echo $ac_cv_gnu_ld_version | sed -n 's,^.*\([1-9][0-9]*\.[0-9][0-9]*\).*$,\1,p'`
459            ac_cv_gnu_ld_vernr_major=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 1`
460            ac_cv_gnu_ld_vernr_minor=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 2`
461            changequote([,])dnl
462            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr})
463            AC_MSG_CHECKING(GNU ld release version major)
464            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_major})
465            AC_MSG_CHECKING(GNU ld release version minor)
466            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_minor})
467            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
468              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
469            fi
470         fi
471 fi
472
473 dnl look for executable suffix
474 AC_EXEEXT
475
476 dnl Check if C compiler understands -c and -o at the same time
477 AC_PROG_CC_C_O
478 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
479       BROKEN_CC=
480 else
481       BROKEN_CC=#
482 fi
483 AC_SUBST(BROKEN_CC)
484
485 dnl Check if the C compiler understands -Werror
486 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
487  AC_TRY_RUN_STRICT([
488   int main(void)
489   {
490         return 0;
491   }],[-Werror],[$CPPFLAGS],[$LDFLAGS],
492   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
493 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
494    Werror_FLAGS="-Werror"
495 else 
496 dnl Check if the C compiler understands -w2
497 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
498  AC_TRY_RUN_STRICT([
499   int main(void)
500   {
501         return 0;
502   }],[-w2],[$CPPFLAGS],[$LDFLAGS],
503   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
504 if test x"$samba_cv_HAVE_w2" = x"yes"; then
505    Werror_FLAGS="-w2"
506 fi
507 fi
508
509 dnl Check if the C compiler understands volatile (it should, being ANSI).
510 AC_CACHE_CHECK([that the C compiler understands volatile],samba_cv_volatile, [
511     AC_TRY_COMPILE([#include <sys/types.h>],[volatile int i = 0],
512         samba_cv_volatile=yes,samba_cv_volatile=no)])
513 if test x"$samba_cv_volatile" = x"yes"; then
514    AC_DEFINE(HAVE_VOLATILE, 1, [Whether the C compiler understands volatile])
515 fi
516
517 ############################################
518 # check if the compiler can handle negative enum values
519 # and don't truncate the values to INT_MAX
520 # a runtime test is needed here
521 AC_SUBST(PIDL_ARGS)
522 AC_CACHE_CHECK([that the C compiler understands negative enum values],SMB_BUILD_CC_NEGATIVE_ENUM_VALUES, [
523     AC_TRY_RUN(
524 [
525         #include <stdio.h>
526         enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
527         int main(void) {
528                 enum negative_values v1 = NEGATIVE_VALUE;
529                 unsigned v2 = NEGATIVE_VALUE;
530
531                 if (v1 != 0xFFFFFFFF) {
532                         printf("%u != 0xFFFFFFFF\n", v1);
533                         return 1;
534                 }
535                 if (v2 != 0xFFFFFFFF) {
536                         printf("%u != 0xFFFFFFFF\n", v2);
537                         return 1;
538                 }
539
540                 return 0;
541         }
542 ],
543         SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=yes,SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=no)])
544 if test x"$SMB_BUILD_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
545         AC_MSG_WARN([using --unit-enums for pidl])
546         PIDL_ARGS="$PIDL_ARGS --uint-enums"
547 fi
548
549 dnl Figure out the flags to support named structure initializers
550
551 LIBREPLACE_C99_STRUCT_INIT([],[AC_MSG_ERROR([c99 structure initializer are not supported])])
552
553 UNAME_S=`(uname -s) 2>/dev/null` || UNAME_S="unknown"
554 AC_MSG_CHECKING(uname -s)
555 AC_MSG_RESULT(${UNAME_S})
556
557 UNAME_R=`(uname -r) 2>/dev/null` || UNAME_R="unknown"
558 AC_MSG_CHECKING(uname -r)
559 AC_MSG_RESULT(${UNAME_R})
560
561 UNAME_M=`(uname -m) 2>/dev/null` || UNAME_M="unknown"
562 AC_MSG_CHECKING(uname -m)
563 AC_MSG_RESULT(${UNAME_M})
564
565 UNAME_P=`(uname -p) 2>/dev/null` || UNAME_P="unknown"
566 AC_MSG_CHECKING(uname -p)
567 AC_MSG_RESULT(${UNAME_P})
568
569 dnl Add #include for broken IRIX header files
570   case "$host_os" in
571         *irix6*)
572                 #TODO add to libreplace
573                 if test x"$ac_cv_prog_gcc" != x"yes" ; then
574                         dnl Fix sensible defaults for MIPSPro compilers. The
575                         dnl error numbers are valid for the 7.3 compilers,
576                         dnl hopefully also valid for the 7.4 series.
577                         dnl
578                         dnl Bugzilla 3801. Force an error on warning 1035
579                         dnl so we don't incorrectly detect stdint.h. This
580                         dnl warning is emitted for #error directives.
581                         CFLAGS="$CFLAGS -diag_error 1035"
582                         dnl 1209: Controlling expression is constant
583                         dnl 1174: Function foo declared but never referenced
584                         dnl 3201: Parameter foo was never referenced
585                         CFLAGS="$CFLAGS -woff 1209,1174,3201"
586                 fi
587         ;;
588 esac
589
590 DYNEXP=
591 AC_SUBST(DYNEXP)
592
593 dnl Add modules that have to be built by default here
594 dnl These have to be built static:
595 default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsa rpc_samr rpc_winreg rpc_initshutdown rpc_lsa_ds rpc_wkssvc rpc_svcctl rpc_ntsvcs rpc_net rpc_netdfs rpc_srvsvc rpc_spoolss rpc_eventlog rpc_unixinfo auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin vfs_default nss_info_template"
596
597 dnl These are preferably build shared, and static if dlopen() is not available
598 default_shared_modules="vfs_recycle vfs_audit vfs_extd_audit vfs_full_audit vfs_netatalk vfs_fake_perms vfs_default_quota vfs_readonly vfs_cap vfs_expand_msdfs vfs_shadow_copy charset_CP850 charset_CP437 auth_script"
599
600 if test "x$developer" = xyes; then
601    default_static_modules="$default_static_modules rpc_rpcecho"
602    default_shared_modules="$default_shared_modules charset_weird"
603 fi
604
605 #
606 # Config CPPFLAG settings for strange OS's that must be set
607 # before other tests. Do NOT invoke AC_CHECK_HEADERS within this
608 # case statement; its first reference must be unconditional.
609 #
610 case "$host_os" in
611 # Try to work out if this is the native HPUX compiler that uses the -Ae flag.
612     *hpux*)
613 #
614 # Defines needed for HPUX support.
615 # HPUX has bigcrypt but (sometimes?) doesn't use it for
616 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
617 #
618       case `uname -r` in
619                         *9*|*10*)
620                                 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4 -DMAX_POSITIVE_LOCK_OFFSET=0x1ffffffffffLL"
621                                 AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
622                                 AC_DEFINE(_HPUX_SOURCE, 1, [Whether to use HPUX extensions])
623                                 AC_DEFINE(_POSIX_SOURCE, 1, [Whether to use POSIX compatible functions])
624                                 AC_DEFINE(_ALIGNMENT_REQUIRED,1,[Required alignment])
625                                 AC_DEFINE(_MAX_ALIGNMENT,4,[Maximum alignment])
626                                 ;;
627                         *11*)
628                                 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_LARGEFILE64_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4 -DMAX_POSITIVE_LOCK_OFFSET=0x1ffffffffffLL"
629                                 AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
630                                 AC_DEFINE(_HPUX_SOURCE, 1, [Whether to use HPUX extensions])
631                                 AC_DEFINE(_POSIX_SOURCE, 1, [Whether to use POSIX compatible functions])
632                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to use large file support])
633                                 AC_DEFINE(_ALIGNMENT_REQUIRED, 1, [Required alignment])
634                                 AC_DEFINE(_MAX_ALIGNMENT, 4, [Maximum alignment])
635                                 AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Unix 98 sources -- needed for socklen_t in getsockopt on HP/UX 11])
636                                 ;;
637       esac
638       ;;
639
640 #
641 # CRAY Unicos has broken const handling
642        *unicos*)
643           AC_MSG_RESULT([disabling const])
644           CPPFLAGS="$CPPFLAGS -Dconst="
645           ;;
646         
647 #
648 # AIX4.x doesn't even admit to having large
649 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
650 #
651     *aix4*)
652           AC_MSG_RESULT([enabling large file support])
653       CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
654           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
655       ;;    
656 #
657 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
658 # to the existance of large files..
659 # Note that -D_LARGEFILE64_SOURCE is different from the Sun
660 # recommendations on large file support, however it makes the
661 # compile work using gcc 2.7 and 2.8, whereas using the Sun
662 # recommendation makes the compile fail on gcc2.7. JRA.
663 #
664 # Solaris uses SYSV printing.  Make sure to set that here.  --jerry
665 #
666         *solaris*)
667                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
668                 case `uname -r` in
669                         5.0|5.0.*|5.1|5.1.*|5.2|5.2.*|5.3|5.3.*|5.5|5.5.*)
670                                 AC_MSG_RESULT([no large file support])
671                                 ;;
672                         5.*)
673                         AC_MSG_RESULT([enabling large file support])
674                         if test "$ac_cv_prog_gcc" = yes; then
675                                 ${CC-cc} -v >conftest.c 2>&1
676                                 ac_cv_gcc_compiler_version_number=`grep 'gcc version' conftest.c`
677                                 rm -fr conftest.c
678                                 case "$ac_cv_gcc_compiler_version_number" in
679                                         *"gcc version 2.6"*|*"gcc version 2.7"*)
680                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE -D_REENTRANT"
681                                                 LDFLAGS="$LDFLAGS -lthread"
682                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
683                                                 ;;
684                                         *)
685                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
686                                                 LDFLAGS="$LDFLAGS -lthread"
687                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
688                                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
689                                                 ;;
690                                 esac
691                         else
692                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
693                                 LDFLAGS="$LDFLAGS -lthread"
694                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
695                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
696                         fi
697                         ;;
698                 esac
699                 ;;
700 #
701 # IRIX uses SYSV printing.  Make sure to set that here
702 #
703         *irix*)
704                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
705                 ;;
706         *freebsd*|*dragonfly*)
707                 AC_DEFINE(FREEBSD, 1, [Whether the host os is FreeBSD])
708                 ;;
709 #
710 # VOS may need to have POSIX support and System V compatibility enabled.
711 #
712     *vos*)
713     case "$CPPFLAGS" in
714           *-D_POSIX_C_SOURCE*)
715                 ;;
716           *)
717                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200112L"
718                 AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Whether to enable POSIX support])
719                 ;;
720     esac
721     case "$CPPFLAGS" in
722           *-D_SYSV*|*-D_SVID_SOURCE*)
723                 ;;
724           *)
725                 CPPFLAGS="$CPPFLAGS -D_SYSV"
726                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
727     esac
728     ;;
729 #
730 # Tests needed for SINIX large file support.
731 #
732     *sysv4*)
733       if test $host = mips-sni-sysv4 ; then
734         AC_MSG_CHECKING([for LFS support])
735         old_CPPFLAGS="$CPPFLAGS"
736         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
737         AC_TRY_RUN([
738 #include <unistd.h>
739 main () {
740 #if _LFS64_LARGEFILE == 1
741 exit(0);
742 #else
743 exit(1);
744 #endif
745 }], [SINIX_LFS_SUPPORT=yes], [SINIX_LFS_SUPPORT=no], [SINIX_LFS_SUPPORT=cross])
746         CPPFLAGS="$old_CPPFLAGS"
747         if test x$SINIX_LFS_SUPPORT = xyes ; then
748           CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
749                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
750           CFLAGS="`getconf LFS64_CFLAGS` $CFLAGS"
751           LDFLAGS="`getconf LFS64_LDFLAGS` $LDFLAGS"
752           LIBS="`getconf LFS64_LIBS` $LIBS"
753         fi
754       AC_MSG_RESULT([$SINIX_LFS_SUPPORT])
755       fi
756     ;;
757
758 # Tests for linux LFS support. Need kernel 2.4 and glibc2.2 or greater support.
759 #
760     *linux*)
761         AC_MSG_CHECKING([for LFS support])
762         old_CPPFLAGS="$CPPFLAGS"
763         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
764        AC_TRY_RUN([
765 #include <unistd.h>
766 #include <sys/utsname.h>
767 #include <string.h>
768 #include <stdlib.h>
769 main() {
770 #if _LFS64_LARGEFILE == 1
771        struct utsname uts;
772        char *release;
773        int major, minor;
774
775        /* Ensure this is glibc 2.2 or higher */
776 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
777        int libc_major = __GLIBC__;
778        int libc_minor = __GLIBC_MINOR__;
779
780        if (libc_major < 2)
781               exit(1);
782        if (libc_minor < 2)
783               exit(1);
784 #endif
785
786        /* Ensure this is kernel 2.4 or higher */
787
788        uname(&uts);
789        release = strdup(uts.release);
790        major = atoi(strsep(&release, "."));
791        minor = atoi(strsep(&release, "."));
792
793        if (major > 2 || (major == 2 && minor > 3))
794                exit(0);
795        exit(1);
796 #else
797        exit(1);
798 #endif
799 }
800 ], [LINUX_LFS_SUPPORT=yes], [LINUX_LFS_SUPPORT=no], [LINUX_LFS_SUPPORT=cross])
801         CPPFLAGS="$old_CPPFLAGS"
802         if test x$LINUX_LFS_SUPPORT = xyes ; then
803                 CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
804                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
805                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
806                 AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
807         fi
808         AC_MSG_RESULT([$LINUX_LFS_SUPPORT])
809         ;;
810
811 #
812 # MacOS X is the *only* system that uses compose character in utf8. This
813 # is so horribly broken....
814 #
815     *darwin*)
816         AC_DEFINE(BROKEN_UNICODE_COMPOSE_CHARACTERS, 1, [Does this system use unicode compose characters])
817
818         # Add a system specific charset module.
819         default_shared_modules="$default_shared_modules charset_macosxfs"
820
821         ;;
822     *hurd*)
823         AC_MSG_CHECKING([for LFS support])
824         old_CPPFLAGS="$CPPFLAGS"
825         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
826         AC_TRY_RUN([
827 #include <unistd.h>
828 main () {
829 #if _LFS64_LARGEFILE == 1
830 exit(0);
831 #else
832 exit(1);
833 #endif
834 }], [GLIBC_LFS_SUPPORT=yes], [GLIBC_LFS_SUPPORT=no], [GLIBC_LFS_SUPPORT=cross])
835         CPPFLAGS="$old_CPPFLAGS"
836         if test x$GLIBC_LFS_SUPPORT = xyes ; then
837           CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
838                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
839           AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
840         fi
841       AC_MSG_RESULT([$GLIBC_LFS_SUPPORT])
842     ;;
843
844 esac
845
846 AC_LIBREPLACE_BROKEN_CHECKS
847
848 LIBREPLACE_DIR=`echo ${libreplacedir} | sed -e "s;${srcdir};;" -e "s;^/;;"`
849
850 LIBREPLACE_OBJS=""
851 for obj in ${LIBREPLACEOBJ}; do
852         LIBREPLACE_OBJS="${LIBREPLACE_OBJS} ${LIBREPLACE_DIR}/${obj}"
853 done
854 AC_SUBST(LIBREPLACE_OBJS)
855
856 # add -ldl to the global LIBS
857 LIBS="${LIBS} ${LIBDL}"
858
859 AC_CHECK_HEADERS(aio.h arpa/inet.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h rpc/nettype.h)
860 AC_CHECK_HEADERS(unistd.h utime.h grp.h sys/id.h memory.h alloca.h)
861 AC_CHECK_HEADERS(limits.h float.h)
862 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
863 AC_CHECK_HEADERS(sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h sys/prctl.h)
864 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h sys/socket.h)
865 AC_CHECK_HEADERS(sys/un.h)
866 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
867 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/sockio.h)
868 AC_CHECK_HEADERS(sys/sysmacros.h)
869 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
870 AC_CHECK_HEADERS(langinfo.h locale.h)
871 AC_CHECK_HEADERS(xfs/libxfs.h)
872
873 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
874 #if HAVE_RPC_RPC_H
875 #include <rpc/rpc.h>
876 #endif
877 ]])
878
879 ## These fail to compile on IRIX so just check for their presence
880 AC_CHECK_HEADERS(sys/mode.h,,,)
881
882 # Look for Darwin headers
883 old_CPPFLAGS="$CPPFLAGS"
884 CPPFLAGS="-Iinclude $CPPFLAGS"
885 AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
886 CPPFLAGS="$old_CPPFLAGS"
887
888 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
889 # subdirectory of headers.
890 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
891
892 # check for linux on amd64 since valgrind is not quite there yet
893 case "$host_os" in
894         *linux*)
895                 case "$UNAME_P" in
896                         *x86_64*)
897                                 AC_DEFINE(HAVE_64BIT_LINUX,1,[Whether we are running on 64bit linux])
898                                 ;;
899                 esac
900                 ;;
901 esac
902
903
904 #
905 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
906 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
907 #
908 case "$host_os" in
909     *hpux*)
910                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
911                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
912                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
913                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
914                 fi
915         ;;
916 esac
917 AC_CHECK_HEADERS(shadow.h)
918 AC_CHECK_HEADERS(nss.h nss_common.h nsswitch.h ns_api.h sys/security.h)
919 AC_CHECK_HEADERS(syscall.h sys/syscall.h)
920
921 AC_CHECK_HEADERS(sys/acl.h sys/attributes.h attr/xattr.h sys/xattr.h sys/extattr.h sys/uio.h)
922 AC_CHECK_HEADERS(sys/ea.h sys/proplist.h)
923
924 AC_CHECK_HEADERS(sys/cdefs.h glob.h)
925
926 # For experimental utmp support (lastlog on some BSD-like systems)
927 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
928  
929 AC_CHECK_SIZEOF(int,cross)
930 AC_CHECK_SIZEOF(long,cross)
931 AC_CHECK_SIZEOF(long long,cross)
932 AC_CHECK_SIZEOF(short,cross)
933
934 AC_C_CONST
935 AC_C_INLINE
936 AC_C_BIGENDIAN
937 AC_C_CHAR_UNSIGNED
938
939 AC_TYPE_SIGNAL
940 AC_TYPE_UID_T
941 AC_TYPE_MODE_T
942 AC_TYPE_OFF_T
943 AC_TYPE_SIZE_T
944 AC_TYPE_PID_T
945 AC_STRUCT_ST_RDEV
946 AC_DIRENT_D_OFF
947 AC_CHECK_TYPE(ino_t,unsigned)
948 AC_CHECK_TYPE(loff_t,off_t)
949 AC_CHECK_TYPE(offset_t,loff_t)
950 AC_CHECK_TYPE(ssize_t, int)
951 AC_CHECK_TYPE(wchar_t, unsigned short)
952 AC_CHECK_TYPE(comparison_fn_t, 
953 [AC_DEFINE(HAVE_COMPARISON_FN_T, 1,[Whether or not we have comparison_fn_t])])
954
955 ############################################
956 # for cups support we need libcups, and a handful of header files
957
958 AC_ARG_ENABLE(cups,
959 [  --enable-cups           Turn on CUPS support (default=auto)])
960
961 if test x$enable_cups != xno; then
962         AC_PATH_PROG(CUPS_CONFIG, cups-config)
963
964         if test "x$CUPS_CONFIG" != x; then
965                 AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
966                 CFLAGS="$CFLAGS `$CUPS_CONFIG --cflags`"
967                 LDFLAGS="$LDFLAGS `$CUPS_CONFIG --ldflags`"
968                 PRINT_LIBS="$PRINT_LIBS `$CUPS_CONFIG --libs`"
969         elif test x"$enable_cups" = x"yes"; then
970                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
971         fi
972 fi
973
974 AC_ARG_ENABLE(iprint,
975 [  --enable-iprint         Turn on iPrint support (default=yes if cups is yes)])
976
977 if test x$enable_iprint != xno; then
978         if test "x$CUPS_CONFIG" != x; then
979                 AC_DEFINE(HAVE_IPRINT,1,[Whether we have iPrint])
980         elif test x"$enable_iprint" = x"yes"; then
981                 AC_MSG_ERROR(iPrint support required but cups not enabled.  Make sure cups-devel related files are installed and that cups is enabled.)
982         fi
983 fi
984
985 ############################################
986 # check if the compiler will optimize out function calls
987 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
988     AC_TRY_LINK([
989 #include <stdio.h>],
990 [
991                 if (0) {
992                    this_function_does_not_exist();
993                 } else {
994                   return 1;
995                 }
996
997 ],
998         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
999 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
1000    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
1001 fi
1002
1003 ############################################
1004 # check for unix domain sockets
1005 AC_CACHE_CHECK([for unix domain sockets],samba_cv_unixsocket, [
1006     AC_TRY_COMPILE([
1007 #include <sys/types.h>
1008 #include <stdlib.h>
1009 #include <stddef.h>
1010 #include <sys/socket.h>
1011 #include <sys/un.h>],
1012 [
1013   struct sockaddr_un sunaddr; 
1014   sunaddr.sun_family = AF_UNIX;
1015 ],
1016         samba_cv_unixsocket=yes,samba_cv_unixsocket=no)])
1017 if test x"$samba_cv_unixsocket" = x"yes"; then
1018    AC_DEFINE(HAVE_UNIXSOCKET,1,[If we need to build with unixscoket support])
1019 fi
1020
1021
1022 AC_CACHE_CHECK([for socklen_t type],samba_cv_socklen_t, [
1023     AC_TRY_COMPILE([
1024 #include <sys/types.h>
1025 #if STDC_HEADERS
1026 #include <stdlib.h>
1027 #include <stddef.h>
1028 #endif
1029 #include <sys/socket.h>],[socklen_t i = 0],
1030         samba_cv_socklen_t=yes,samba_cv_socklen_t=no)])
1031 if test x"$samba_cv_socklen_t" = x"yes"; then
1032    AC_DEFINE(HAVE_SOCKLEN_T_TYPE,1,[Whether we have the variable type socklen_t])
1033 fi
1034
1035 AC_CACHE_CHECK([for sig_atomic_t type],samba_cv_sig_atomic_t, [
1036     AC_TRY_COMPILE([
1037 #include <sys/types.h>
1038 #if STDC_HEADERS
1039 #include <stdlib.h>
1040 #include <stddef.h>
1041 #endif
1042 #include <signal.h>],[sig_atomic_t i = 0],
1043         samba_cv_sig_atomic_t=yes,samba_cv_sig_atomic_t=no)])
1044 if test x"$samba_cv_sig_atomic_t" = x"yes"; then
1045    AC_DEFINE(HAVE_SIG_ATOMIC_T_TYPE,1,[Whether we have the atomic_t variable type])
1046 fi
1047
1048 AC_CACHE_CHECK([for struct timespec type],samba_cv_struct_timespec, [
1049     AC_TRY_COMPILE([
1050 #include <sys/types.h>
1051 #if STDC_HEADERS
1052 #include <stdlib.h>
1053 #include <stddef.h>
1054 #endif
1055 #if TIME_WITH_SYS_TIME
1056 # include <sys/time.h>
1057 # include <time.h>
1058 #else
1059 # if HAVE_SYS_TIME_H
1060 #  include <sys/time.h>
1061 # else
1062 #  include <time.h>
1063 # endif
1064 #endif
1065 ],[struct timespec ts;],
1066         samba_cv_struct_timespec=yes,samba_cv_struct_timespec=no)])
1067 if test x"$samba_cv_struct_timespec" = x"yes"; then
1068    AC_DEFINE(HAVE_STRUCT_TIMESPEC,1,[Whether we have struct timespec])
1069 fi
1070
1071 # stupid headers have the functions but no declaration. grrrr.
1072 AC_HAVE_DECL(errno, [#include <errno.h>])
1073 AC_HAVE_DECL(setresuid, [#include <unistd.h>])
1074 AC_HAVE_DECL(setresgid, [#include <unistd.h>])
1075 AC_HAVE_DECL(asprintf, [#include <stdio.h>])
1076 AC_HAVE_DECL(vasprintf, [#include <stdio.h>])
1077 AC_HAVE_DECL(vsnprintf, [#include <stdio.h>])
1078 AC_HAVE_DECL(snprintf, [#include <stdio.h>])
1079
1080 # and glibc has setresuid under linux but the function does
1081 # nothing until kernel 2.1.44! very dumb.
1082 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
1083     AC_TRY_RUN([#include <errno.h>
1084 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
1085         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
1086 if test x"$samba_cv_have_setresuid" = x"yes"; then
1087     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
1088 fi
1089
1090 # Do the same check for setresguid...
1091 #
1092 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
1093     AC_TRY_RUN([#include <unistd.h>
1094 #include <errno.h>
1095 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
1096         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
1097 if test x"$samba_cv_have_setresgid" = x"yes"; then
1098     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
1099 fi
1100
1101 AC_FUNC_MEMCMP
1102
1103 ###############################################
1104 # Readline included by default unless explicitly asked not to
1105 test "${with_readline+set}" != "set" && with_readline=yes
1106
1107 # test for where we get readline() from
1108 AC_MSG_CHECKING(whether to use readline)
1109 AC_ARG_WITH(readline,
1110 [  --with-readline[=DIR]     Look for readline include/libs in DIR (default=auto) ],
1111 [  case "$with_readline" in
1112   yes)
1113     AC_MSG_RESULT(yes)
1114
1115     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
1116     AC_CHECK_HEADERS(readline/history.h)
1117
1118     AC_CHECK_HEADERS(readline.h readline/readline.h,[
1119       for termlib in ncurses curses termcap terminfo termlib tinfo; do
1120        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
1121       done
1122       AC_CHECK_LIB(readline, rl_callback_handler_install,
1123        [TERMLIBS="-lreadline $TERMLIBS"
1124        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
1125        break], [TERMLIBS=], $TERMLIBS)])
1126     ;;
1127   no)
1128     AC_MSG_RESULT(no)
1129     ;;
1130   *)
1131     AC_MSG_RESULT(yes)
1132
1133     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
1134     # alternate readline path
1135     _ldflags=${LDFLAGS}
1136     _cppflags=${CPPFLAGS}
1137
1138     # Add additional search path
1139     LDFLAGS="-L$with_readline/lib $LDFLAGS"
1140     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1141
1142     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
1143     AC_CHECK_HEADERS(readline/history.h)
1144
1145     AC_CHECK_HEADERS(readline.h readline/readline.h,[
1146       for termlib in ncurses curses termcap terminfo termlib; do
1147        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
1148       done
1149       AC_CHECK_LIB(readline, rl_callback_handler_install,
1150        [TERMLDFLAGS="-L$with_readline/lib"
1151        TERMCPPFLAGS="-I$with_readline/include"
1152        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1153        TERMLIBS="-lreadline $TERMLIBS"
1154        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
1155        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
1156
1157     LDFLAGS=$_ldflags
1158     ;;
1159   esac],
1160   AC_MSG_RESULT(no)
1161 )
1162 AC_SUBST(TERMLIBS)
1163 AC_SUBST(TERMLDFLAGS)
1164
1165 # The readline API changed slightly from readline3 to readline4, so
1166 # code will generate warnings on one of them unless we have a few
1167 # special cases.
1168 AC_CHECK_LIB(readline, rl_completion_matches,
1169              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1, 
1170                         [Do we have rl_completion_matches?])],
1171              [],
1172              [$TERMLIBS])
1173
1174 # not all readline libs have rl_event_hook or history_list
1175 AC_CHECK_DECLS(rl_event_hook, [], [], [#include <readline/readline.h>])
1176 AC_CHECK_LIB(readline, history_list,
1177              [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])],
1178              [],
1179              [$TERMLIBS])
1180
1181 # The following test taken from the cvs sources
1182 # If we can't find connect, try looking in -lsocket, -lnsl, and -linet.
1183 # The Irix 5 libc.so has connect and gethostbyname, but Irix 5 also has
1184 # libsocket.so which has a bad implementation of gethostbyname (it
1185 # only looks in /etc/hosts), so we only look for -lsocket if we need
1186 # it.
1187 AC_CHECK_FUNCS(connect)
1188 if test x"$ac_cv_func_connect" = x"no"; then
1189     case "$LIBS" in
1190     *-lnsl*) ;;
1191     *) AC_CHECK_LIB(nsl_s, connect) ;;
1192     esac
1193     case "$LIBS" in
1194     *-lnsl*) ;;
1195     *) AC_CHECK_LIB(nsl, connect) ;;
1196     esac
1197     case "$LIBS" in
1198     *-lsocket*) ;;
1199     *) AC_CHECK_LIB(socket, connect) ;;
1200     esac
1201     case "$LIBS" in
1202     *-linet*) ;;
1203     *) AC_CHECK_LIB(inet, connect) ;;
1204     esac
1205     dnl We can't just call AC_CHECK_FUNCS(connect) here, because the value
1206     dnl has been cached.
1207     if test x"$ac_cv_lib_socket_connect" = x"yes" || 
1208        test x"$ac_cv_lib_inet_connect" = x"yes"; then
1209         # ac_cv_func_connect=yes
1210         # don't!  it would cause AC_CHECK_FUNC to succeed next time configure is run
1211         AC_DEFINE(HAVE_CONNECT,1,[Whether the system has connect()])
1212     fi
1213 fi
1214
1215 ###############################################
1216 # test for where we get yp_get_default_domain() from
1217 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
1218 AC_CHECK_FUNCS(yp_get_default_domain)
1219
1220 # Check if we have execl, if not we need to compile smbrun.
1221 AC_CHECK_FUNCS(execl)
1222 if test x"$ac_cv_func_execl" = x"no"; then
1223     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
1224 fi
1225
1226 AC_CHECK_FUNCS(waitpid getcwd strdup strndup strnlen strerror chown fchown chmod fchmod chroot link mknod mknod64)
1227 AC_CHECK_FUNCS(strtol strtoll strtoul strtoull strtouq __strtoull)
1228 AC_CHECK_FUNCS(fstat strchr utime utimes getrlimit fsync memset strlcpy strlcat setpgid)
1229 AC_CHECK_FUNCS(memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid)
1230 AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
1231 AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf realpath)
1232 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate chsize stat64 fstat64)
1233 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64)
1234 AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf)
1235 AC_CHECK_FUNCS(opendir64 readdir64 seekdir64 telldir64 rewinddir64 closedir64)
1236 AC_CHECK_FUNCS(getpwent_r)
1237 AC_CHECK_FUNCS(getdents getdents64)
1238 AC_CHECK_FUNCS(srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink)
1239 AC_CHECK_FUNCS(syslog vsyslog timegm)
1240 AC_CHECK_FUNCS(setlocale nl_langinfo)
1241 AC_CHECK_FUNCS(nanosleep)
1242 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
1243 AC_CHECK_FUNCS(memalign posix_memalign)
1244 AC_CHECK_HEADERS(sys/mman.h)
1245 # setbuffer, shmget, shm_open are needed for smbtorture
1246 AC_CHECK_FUNCS(setbuffer shmget shm_open)
1247 AC_CHECK_FUNCS(makecontext getcontext setcontext swapcontext)
1248
1249 # Find a method of generating a stack trace
1250 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
1251 AC_CHECK_FUNCS(backtrace_symbols)
1252 AC_CHECK_LIB(exc, trace_back_stack)
1253
1254 echo -n "checking for GPFS GPL libs... "
1255 save_LIBS="$LIBS"
1256 LIBS="$LIBS -lgpfs_gpl"
1257 AC_TRY_LINK([#include <gpfs_gpl.h>],
1258           [gpfs_set_share(0,GPFS_SHARE_READ,GPFS_DENY_NONE)],
1259           samba_cv_HAVE_GPFS=yes,
1260           samba_cv_HAVE_GPFS=no)
1261 echo $samba_cv_HAVE_GPFS
1262 if test x"$samba_cv_HAVE_GPFS" = x"yes"; then
1263     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL libs are available])
1264     default_shared_modules="$default_shared_modules vfs_gpfs"
1265 fi
1266 LIBS="$save_LIBS"
1267
1268 # Note that all the libunwind symbols in the API are defined to internal
1269 # platform-specific version, so we must include libunwind.h before checking
1270 # any of them.
1271 AC_MSG_CHECKING([for libunwind])
1272 save_LIBS=$LIBS
1273 if test x"$UNAME_P" = xunknown ; then
1274     # This probably won't link without the platform-specific libunwind.
1275     LIBS="$LIBS -lunwind"
1276 else
1277     # Add the platform-specific libunwind module. uname -p seems the most
1278     # plausible option and works for ia64, where libunwind is most useful.
1279     LIBS="$LIBS -lunwind -lunwind-$UNAME_P"
1280 fi
1281
1282 AC_TRY_LINK(
1283     [
1284 #ifdef HAVE_LIBUNWIND_H
1285 #include <libunwind.h>
1286 #endif
1287     ],
1288     [
1289         unw_context_t ctx; unw_cursor_t cur;
1290         char buf[256]; unw_word_t off; 
1291         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1292         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1293     ],
1294     [
1295         AC_MSG_RESULT(yes)
1296         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1297
1298         # If we have libunwind, test whether we also have libunwind-ptrace
1299         # which would let us unwind arbitrary processes.
1300         save_LIBS=$LIBS
1301         AC_CHECK_HEADERS(libunwind-ptrace.h)
1302         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1303             [
1304                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1305                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1306                     [Whether libunwind-ptrace.a is available.])
1307             ],
1308             [ LIBUNWIND_PTRACE="" ])
1309
1310         LIBS=$save_LIBS
1311     ],
1312     [
1313         AC_MSG_RESULT(no)
1314         LIBS=$save_LIBS
1315     ])
1316
1317 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1318 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1319     AC_CHECK_HEADERS(sys/ptrace.h)
1320     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1321     AC_TRY_LINK(
1322             [
1323 #if HAVE_SYS_TYPES_H
1324 #include <sys/types.h>
1325 #endif
1326 #if HAVE_SYS_PTRACE_H
1327 #include <sys/ptrace.h>
1328 #endif
1329             ],
1330             [
1331                 int main(int argc, const char ** argv)
1332                 {
1333                         pid_t me = (pid_t)-1;
1334                         ptrace(PTRACE_ATTACH, me, 0, 0);
1335                         ptrace(PTRACE_DETACH, me, 0, 0);
1336                         return 0;
1337                 }
1338             ],
1339             [
1340                 AC_MSG_RESULT(yes)
1341                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1342                     [Whether the Linux ptrace(2) interface is available.])
1343             ],
1344             [
1345                 AC_MSG_RESULT(no)
1346                 LIBUNWIND_PTRACE=""
1347             ])
1348 fi
1349
1350 AC_SUBST(LIBUNWIND_PTRACE)
1351
1352 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1353 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1354 AC_CHECK_FUNCS(__getcwd _getcwd)
1355 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1356 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1357 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1358 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1359 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1360 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1361 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1362 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1363 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1364 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1365 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1366 AC_CHECK_FUNCS(prctl)
1367
1368 AC_TRY_COMPILE([
1369 #ifdef HAVE_SYS_PRCTL_H
1370 #include <sys/prctl.h>
1371 #endif
1372 ],
1373 [int i; i = prtcl(0); ],
1374 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1375
1376 #
1377
1378 #
1379 case "$host_os" in
1380     *linux*)
1381        # glibc <= 2.3.2 has a broken getgrouplist
1382        AC_TRY_RUN([
1383 #include <unistd.h>
1384 #include <sys/utsname.h>
1385 main() {
1386        /* glibc up to 2.3 has a broken getgrouplist */
1387 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1388        int libc_major = __GLIBC__;
1389        int libc_minor = __GLIBC_MINOR__;
1390
1391        if (libc_major < 2)
1392               exit(1);
1393        if ((libc_major == 2) && (libc_minor <= 3))
1394               exit(1);
1395 #endif
1396        exit(0);
1397 }
1398 ], [linux_getgrouplist_ok=yes], [linux_getgrouplist_ok=no])
1399        if test x"$linux_getgrouplist_ok" = x"yes"; then
1400           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1401        fi
1402        ;;
1403     *)
1404        AC_CHECK_FUNCS(getgrouplist)
1405        ;;
1406 esac
1407
1408 #
1409 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1410 #
1411
1412 if test x$ac_cv_func_stat64 = xno ; then
1413   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1414   AC_TRY_LINK([
1415 #if defined(HAVE_UNISTD_H)
1416 #include <unistd.h>
1417 #endif
1418 #include <sys/stat.h>
1419 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
1420   AC_MSG_RESULT([$ac_cv_func_stat64])
1421   if test x$ac_cv_func_stat64 = xyes ; then
1422     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1423   fi
1424 fi
1425
1426 if test x$ac_cv_func_lstat64 = xno ; then
1427   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1428   AC_TRY_LINK([
1429 #if defined(HAVE_UNISTD_H)
1430 #include <unistd.h>
1431 #endif
1432 #include <sys/stat.h>
1433 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
1434   AC_MSG_RESULT([$ac_cv_func_lstat64])
1435   if test x$ac_cv_func_lstat64 = xyes ; then
1436     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1437   fi
1438 fi
1439
1440 if test x$ac_cv_func_fstat64 = xno ; then
1441   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1442   AC_TRY_LINK([
1443 #if defined(HAVE_UNISTD_H)
1444 #include <unistd.h>
1445 #endif
1446 #include <sys/stat.h>
1447 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
1448   AC_MSG_RESULT([$ac_cv_func_fstat64])
1449   if test x$ac_cv_func_fstat64 = xyes ; then
1450     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1451   fi
1452 fi
1453
1454 #################################################
1455 # Check whether struct stat has timestamps with sub-second resolution.
1456 # At least IRIX and Solaris have these.
1457 #
1458 # We check that 
1459 #       all of st_mtim, st_atim and st_ctim exist
1460 #       all of the members are in fact of type struct timespec
1461 #
1462 # There is some conflicting standards weirdness about whether we should use
1463 # "struct timespec" or "timespec_t". Linux doesn't have timespec_t, so we
1464 # prefer struct timespec.
1465
1466 AC_CACHE_CHECK([whether struct stat has sub-second timestamps], samba_stat_hires,
1467     [
1468         AC_TRY_COMPILE(
1469             [
1470 #if TIME_WITH_SYS_TIME
1471 # include <sys/time.h>
1472 # include <time.h>
1473 #else
1474 # if HAVE_SYS_TIME_H
1475 #  include <sys/time.h>
1476 # else
1477 #  include <time.h>
1478 # endif
1479 #endif
1480 #ifdef HAVE_SYS_STAT_H
1481 #include <sys/stat.h>
1482 #endif
1483             ],
1484             [
1485                 struct timespec t;
1486                 struct stat s = {0};
1487                 t.tv_sec = s.st_mtim.tv_sec;
1488                 t.tv_nsec = s.st_mtim.tv_nsec;
1489                 t.tv_sec = s.st_ctim.tv_sec;
1490                 t.tv_nsec = s.st_ctim.tv_nsec;
1491                 t.tv_sec = s.st_atim.tv_sec;
1492                 t.tv_nsec = s.st_atim.tv_nsec;
1493             ],
1494             samba_stat_hires=yes, samba_stat_hires=no)
1495     ])
1496
1497 if test x"$samba_stat_hires" = x"yes" ; then
1498     AC_DEFINE(HAVE_STAT_ST_MTIM, 1, [whether struct stat contains st_mtim])
1499     AC_DEFINE(HAVE_STAT_ST_ATIM, 1, [whether struct stat contains st_atim])
1500     AC_DEFINE(HAVE_STAT_ST_CTIM, 1, [whether struct stat contains st_ctim])
1501     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1502             [whether struct stat has sub-second timestamps])
1503 fi
1504
1505 AC_CACHE_CHECK([whether struct stat has sub-second timestamps without struct timespec], samba_stat_hires_notimespec,
1506     [
1507         AC_TRY_COMPILE(
1508             [
1509 #if TIME_WITH_SYS_TIME
1510 # include <sys/time.h>
1511 # include <time.h>
1512 #else
1513 # if HAVE_SYS_TIME_H
1514 #  include <sys/time.h>
1515 # else
1516 #  include <time.h>
1517 # endif
1518 #endif
1519 #ifdef HAVE_SYS_STAT_H
1520 #include <sys/stat.h>
1521 #endif
1522             ],
1523             [
1524                 struct timespec t;
1525                 struct stat s = {0};
1526                 t.tv_sec = s.st_mtime;
1527                 t.tv_nsec = s.st_mtimensec;
1528                 t.tv_sec = s.st_ctime;
1529                 t.tv_nsec = s.st_ctimensec;
1530                 t.tv_sec = s.st_atime;
1531                 t.tv_nsec = s.st_atimensec;
1532             ],
1533             samba_stat_hires=yes, samba_stat_hires=no)
1534     ])
1535
1536 if test x"$samba_stat_hires_notimespec" = x"yes" ; then
1537     AC_DEFINE(HAVE_STAT_ST_MTIMENSEC, 1, [whether struct stat contains st_mtimensec])
1538     AC_DEFINE(HAVE_STAT_ST_ATIMENSEC, 1, [whether struct stat contains st_atimensec])
1539     AC_DEFINE(HAVE_STAT_ST_CTIMENSEC, 1, [whether struct stat contains st_ctimensec])
1540     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1541             [whether struct stat has sub-second timestamps without struct timespec])
1542 fi
1543
1544 #####################################
1545 # needed for SRV lookups
1546 AC_CHECK_LIB(resolv, dn_expand)
1547 AC_CHECK_LIB(resolv, _dn_expand)
1548 AC_CHECK_LIB(resolv, __dn_expand)
1549
1550 #
1551 # Check for the functions putprpwnam, set_auth_parameters,
1552 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1553 # Needed for OSF1 and HPUX.
1554 #
1555
1556 AC_LIBTESTFUNC(security, putprpwnam)
1557 AC_LIBTESTFUNC(sec, putprpwnam)
1558
1559 AC_LIBTESTFUNC(security, set_auth_parameters)
1560 AC_LIBTESTFUNC(sec, set_auth_parameters)
1561
1562 # UnixWare 7.x has its getspnam in -lgen
1563 AC_LIBTESTFUNC(gen, getspnam)
1564
1565 AC_LIBTESTFUNC(security, getspnam)
1566 AC_LIBTESTFUNC(sec, getspnam)
1567
1568 AC_LIBTESTFUNC(security, bigcrypt)
1569 AC_LIBTESTFUNC(sec, bigcrypt)
1570
1571 AC_LIBTESTFUNC(security, getprpwnam)
1572 AC_LIBTESTFUNC(sec, getprpwnam)
1573
1574 AC_CHECK_FUNCS(strsignal)
1575
1576 ############################################
1577 # Check if we have libattr
1578 case "$host_os" in
1579   *osf*)
1580         AC_SEARCH_LIBS(getproplist, [proplist])
1581         AC_CHECK_FUNCS(getproplist fgetproplist setproplist fsetproplist)
1582         AC_CHECK_FUNCS(delproplist fdelproplist add_proplist_entry get_proplist_entry)
1583         AC_CHECK_FUNCS(sizeof_proplist_entry)
1584   ;;
1585   *)
1586         AC_SEARCH_LIBS(getxattr, [attr])
1587         AC_CHECK_FUNCS(getxattr lgetxattr fgetxattr listxattr llistxattr)
1588         AC_CHECK_FUNCS(getea fgetea lgetea listea flistea llistea)
1589         AC_CHECK_FUNCS(removeea fremoveea lremoveea setea fsetea lsetea)
1590         AC_CHECK_FUNCS(flistxattr removexattr lremovexattr fremovexattr)
1591         AC_CHECK_FUNCS(setxattr lsetxattr fsetxattr)
1592         AC_CHECK_FUNCS(attr_get attr_list attr_set attr_remove)
1593         AC_CHECK_FUNCS(attr_getf attr_listf attr_setf attr_removef)
1594   ;;
1595 esac
1596
1597 ########################################################
1598 # Do xattr functions take additional options like on Darwin?
1599 if test x"$ac_cv_func_getxattr" = x"yes" ; then
1600         AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt, [
1601                 old_LIBS=$LIBS
1602                 LIBS="$LIBS $ACL_LIBS"
1603                 AC_TRY_COMPILE([
1604                         #include <sys/types.h>
1605                         #if HAVE_ATTR_XATTR_H
1606                         #include <attr/xattr.h>
1607                         #elif HAVE_SYS_XATTR_H
1608                         #include <sys/xattr.h>
1609                         #endif
1610                 ],[
1611                         getxattr(0, 0, 0, 0, 0, 0);
1612                 ],
1613                 [smb_attr_cv_xattr_add_opt=yes],
1614                 [smb_attr_cv_xattr_add_opt=no;LIBS=$old_LIBS])
1615         ])
1616         if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then
1617                 AC_DEFINE(XATTR_ADD_OPT, 1, [xattr functions have additional options])
1618         fi
1619 fi
1620
1621 # Check if we have extattr
1622 case "$host_os" in
1623   *freebsd4* | *dragonfly* )
1624     AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1625     ;;
1626   *)
1627     AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_file extattr_delete_link)
1628     AC_CHECK_FUNCS(extattr_get_fd extattr_get_file extattr_get_link)
1629     AC_CHECK_FUNCS(extattr_list_fd extattr_list_file extattr_list_link)
1630     AC_CHECK_FUNCS(extattr_set_fd extattr_set_file extattr_set_link)
1631     ;;
1632 esac
1633
1634 # Set defaults
1635 PIE_CFLAGS=""
1636 PIE_LDFLAGS=""
1637 AC_ARG_ENABLE(pie, [  --enable-pie            Turn on pie support if available (default=yes)])
1638
1639 if test "x$enable_pie" != xno
1640 then
1641         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1642         [
1643                 cat > conftest.c <<EOF
1644 int foo;
1645 main () { return 0;}
1646 EOF
1647                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1648                 then
1649                         samba_cv_fpie=yes
1650                 else
1651                         samba_cv_fpie=no
1652                 fi
1653                 rm -f conftest*
1654         ])
1655         if test x"${samba_cv_fpie}" = x"yes"
1656         then
1657                 PIE_CFLAGS="-fPIE"
1658                 PIE_LDFLAGS="-pie"
1659         fi
1660 fi
1661
1662 # Assume non-shared by default and override below
1663 BLDSHARED="false"
1664
1665 # these are the defaults, good for lots of systems
1666 HOST_OS="$host_os"
1667 LDSHFLAGS="-shared"
1668 SONAMEFLAG="#"
1669 SHLD="\${CC} \${CFLAGS}"
1670 PICFLAG="${PIE_CFLAGS}"
1671 SHLIBEXT="so"
1672
1673 # this bit needs to be modified for each OS that supports share libs
1674 # You need to specify how to create a shared library and
1675 # how to compile C code to produce PIC object files
1676
1677 AC_MSG_CHECKING([ability to build shared libraries])
1678
1679 # and these are for particular systems
1680 case "$host_os" in
1681                 *linux*)   AC_DEFINE(LINUX,1,[Whether the host os is linux])
1682                         BLDSHARED="true"
1683                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1684                                 LDSHFLAGS="-shared -Wl,-Bsymbolic -Wl,--allow-shlib-undefined" 
1685                         else
1686                                 LDSHFLAGS="-shared -Wl,-Bsymbolic" 
1687                         fi
1688                         DYNEXP="-Wl,--export-dynamic"
1689                         PICFLAG="-fPIC"
1690                         SONAMEFLAG="-Wl,-soname="
1691                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1692                         ;;
1693                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1694                         BLDSHARED="true"
1695                         LDSHFLAGS="-G"
1696                         SONAMEFLAG="-h "
1697                         if test "${GCC}" = "yes"; then
1698                                 PICFLAG="-fPIC"
1699                                 SONAMEFLAG="-Wl,-soname="
1700                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1701                                         DYNEXP="-Wl,-E"
1702                                 fi
1703                         else
1704                                 PICFLAG="-KPIC"
1705                                 ## ${CFLAGS} added for building 64-bit shared 
1706                                 ## libs using Sun's Compiler
1707                                 LDSHFLAGS="-G \${CFLAGS}"
1708                         fi
1709                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1710                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1711                         ;;
1712                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1713                         BLDSHARED="true"
1714                         LDSHFLAGS="-G"
1715                         SONAMEFLAG="-Wl,-h,"
1716                         PICFLAG="-KPIC"   # Is this correct for SunOS
1717                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1718                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1719                         ;;
1720                 *netbsd* | *freebsd* | *dragonfly* )  
1721                         BLDSHARED="true"
1722                         LDSHFLAGS="-shared"
1723                         DYNEXP="-Wl,--export-dynamic"
1724                         SONAMEFLAG="-Wl,-soname,"
1725                         PICFLAG="-fPIC -DPIC"
1726                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1727                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1728                         ;;
1729                 *openbsd*)  BLDSHARED="true"
1730                         LDSHFLAGS="-shared"
1731                         DYNEXP="-Wl,-Bdynamic"
1732                         SONAMEFLAG="-Wl,-soname,"
1733                         PICFLAG="-fPIC"
1734                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1735                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1736                         ;;
1737                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1738                         case "$host_os" in
1739                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1740                         ;;
1741                         esac
1742                         BLDSHARED="true"
1743                         LDSHFLAGS="-set_version sgi1.0 -shared"
1744                         SONAMEFLAG="-soname "
1745                         SHLD="\${LD}"
1746                         if test "${GCC}" = "yes"; then
1747                                 PICFLAG="-fPIC"
1748                         else 
1749                                 PICFLAG="-KPIC"
1750                         fi
1751                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1752                         ;;
1753                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1754                         BLDSHARED="true"
1755                         LDSHFLAGS="-Wl,-G,-bexpall,-bbigtoc"
1756                         DYNEXP="-Wl,-brtl,-bexpall,-bbigtoc"
1757                         PICFLAG="-O2"
1758                         # as AIX code is always position independent...
1759                         # .po will just create compile warnings, use po.o:
1760                         if test "${GCC}" != "yes"; then
1761                                 ## for funky AIX compiler using strncpy()
1762                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
1763                         fi
1764
1765                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1766                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1767                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1768                         ;;
1769                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1770                         # Use special PIC flags for the native HP-UX compiler.
1771                         if test $ac_cv_prog_cc_Ae = yes; then
1772                                 BLDSHARED="true"
1773                                 SHLD="cc"
1774                                 LDSHFLAGS="-b -Wl,-B,symbolic,-b,-z"
1775                                 SONAMEFLAG="-Wl,+h "
1776                                 PICFLAG="+z"
1777                         elif test "${GCC}" = "yes"; then
1778                                 PICFLAG="-fPIC"
1779                         fi
1780                         if test "$host_cpu" = "ia64"; then
1781                                 SHLIBEXT="so"
1782                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
1783                         else
1784                                 SHLIBEXT="sl"
1785                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1786                         fi
1787                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1788                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1789                         ;;
1790                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
1791                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1792                         ;;
1793                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1794                         BLDSHARED="true"
1795                         LDSHFLAGS="-shared"
1796                         SONAMEFLAG="-Wl,-soname,"
1797                         PICFLAG="-fPIC"
1798                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1799                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1800                         ;;
1801                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1802                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1803                         ;;
1804                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1805                         BLDSHARED="true"
1806                         LDSHFLAGS="-shared"
1807                         SONAMEFLAG="-Wl,-soname,"
1808                         PICFLAG="-KPIC"
1809                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1810                         ;;
1811                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1812                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1813                         ;;
1814                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1815                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1816                         ;;
1817                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1818                         case "$host" in
1819                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1820                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1821                                         fi
1822                                         LDSHFLAGS="-G"
1823                                         DYNEXP="-Bexport"
1824                                 ;;
1825                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1826                         esac
1827                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1828                         ;;
1829
1830                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1831                         if [ test "$GCC" != yes ]; then
1832                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1833                         fi
1834                         LDSHFLAGS="-G"
1835                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1836                         ;;
1837                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1838                         BLDSHARED="false"
1839                         LDSHFLAGS=""
1840                         ;;
1841
1842                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1843                         BLDSHARED="true"
1844                         LDSHFLAGS="-bundle -flat_namespace -undefined suppress"
1845                         SHLIBEXT="dylib"
1846                         # Since gcc doesn't fail on unrecognised options, the
1847                         # PIE test incorrectly succeeds. Darwin gcc does not
1848                         # actually support the PIE stuff.
1849                         PIE_LDFLAGS=
1850                         PIE_CFLAGS=
1851                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1852                         ;;
1853
1854                 *)
1855                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1856                         ;;
1857 esac
1858
1859 if test "$enable_shared" != "yes"; then
1860         BLDSHARED=false
1861 fi
1862
1863 AC_MSG_RESULT($BLDSHARED)
1864
1865 AC_MSG_CHECKING([LDFLAGS])
1866 AC_MSG_RESULT([$LDFLAGS])
1867 AC_MSG_CHECKING([DYNEXP])
1868 AC_MSG_RESULT([$DYNEXP])
1869
1870 #######################################################
1871 # test whether building a shared library actually works
1872 if test $BLDSHARED = true; then
1873
1874 AC_MSG_CHECKING([SHLD])
1875 AC_MSG_RESULT([$SHLD])
1876 AC_MSG_CHECKING([LDSHFLAGS])
1877 AC_MSG_RESULT([$LDSHFLAGS])
1878
1879 AC_MSG_CHECKING([SHLIBEXT])
1880 AC_MSG_RESULT([$SHLIBEXT])
1881 AC_MSG_CHECKING([SONAMEFLAG])
1882 AC_MSG_RESULT([$SONAMEFLAG])
1883
1884 AC_MSG_CHECKING([PICFLAG])
1885 AC_MSG_RESULT([$PICFLAG])
1886
1887 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1888 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1889
1890 AC_CACHE_CHECK([whether building shared libraries actually works], 
1891                [ac_cv_shlib_works],[
1892    # try building a trivial shared library
1893    ac_cv_shlib_works=no
1894    # The $SHLD and $LDSHFLAGS variables may contain references to other
1895    # variables so they need to be eval'ed.
1896    $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o \
1897         shlib.o ${srcdir-.}/tests/shlib.c && \
1898    `eval echo $SHLD` `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" \
1899         shlib.o && ac_cv_shlib_works=yes
1900    rm -f "shlib.$SHLIBEXT" shlib.o
1901
1902 ])
1903 if test $ac_cv_shlib_works = no; then
1904    BLDSHARED=false
1905 fi
1906 fi
1907
1908 if test x"$BLDSHARED" != x"true"; then
1909         LDSHFLAGS="shared-libraries-disabled"
1910         SONAMEFLAG="shared-libraries-disabled"
1911         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1912         SHLD="shared-libraries-disabled"
1913         PICFLAG="${PIE_CFLAGS}"
1914         SHLIBEXT="shared_libraries_disabled"
1915 fi
1916
1917 AC_MSG_CHECKING([used PICFLAG])
1918 AC_MSG_RESULT([$PICFLAG])
1919
1920 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
1921
1922 ################
1923
1924 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
1925 AC_TRY_RUN([#include <stdio.h>
1926 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
1927 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
1928 if test x"$samba_cv_have_longlong" = x"yes"; then
1929     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
1930     AC_CHECK_TYPE(intptr_t, unsigned long long)
1931 else
1932     AC_CHECK_TYPE(intptr_t, unsigned long)
1933 fi
1934
1935 #
1936 # Check if the compiler supports the LL prefix on long long integers.
1937 # AIX needs this.
1938
1939 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
1940     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
1941         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
1942 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
1943    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
1944 fi
1945
1946   
1947 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
1948 AC_TRY_RUN([#include <stdio.h>
1949 #include <sys/stat.h>
1950 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
1951 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
1952 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
1953     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
1954 fi
1955
1956 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
1957 AC_TRY_RUN([
1958 #if defined(HAVE_UNISTD_H)
1959 #include <unistd.h>
1960 #endif
1961 #include <stdio.h>
1962 #include <sys/stat.h>
1963 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1964 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
1965 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
1966     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
1967 fi
1968
1969 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
1970 AC_TRY_RUN([
1971 #if defined(HAVE_UNISTD_H)
1972 #include <unistd.h>
1973 #endif
1974 #include <stdio.h>
1975 #include <sys/stat.h>
1976 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
1977 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
1978 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
1979     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
1980 fi
1981
1982 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
1983 AC_TRY_RUN([
1984 #if defined(HAVE_UNISTD_H)
1985 #include <unistd.h>
1986 #endif
1987 #include <stdio.h>
1988 #include <sys/stat.h>
1989 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1990 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
1991 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
1992     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
1993 fi
1994
1995 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
1996 AC_TRY_RUN([
1997 #if defined(HAVE_UNISTD_H)
1998 #include <unistd.h>
1999 #endif
2000 #include <stdio.h>
2001 #include <sys/stat.h>
2002 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
2003 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
2004 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
2005     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
2006 fi
2007
2008 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
2009 AC_TRY_RUN([
2010 #if defined(HAVE_UNISTD_H)
2011 #include <unistd.h>
2012 #endif
2013 #include <stdio.h>
2014 #include <sys/stat.h>
2015 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2016 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
2017 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
2018     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
2019 fi
2020
2021 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
2022 AC_TRY_COMPILE([
2023 #if defined(HAVE_UNISTD_H)
2024 #include <unistd.h>
2025 #endif
2026 #include <sys/types.h>
2027 #include <dirent.h>],
2028 [DIR64 de;],
2029 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
2030 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2031     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
2032 fi
2033
2034 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
2035 AC_TRY_COMPILE([
2036 #if defined(HAVE_UNISTD_H)
2037 #include <unistd.h>
2038 #endif
2039 #include <sys/types.h>
2040 #include <dirent.h>],
2041 [struct dirent64 de;],
2042 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
2043 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2044     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
2045 fi
2046
2047 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2048 AC_TRY_RUN([
2049 #if defined(HAVE_UNISTD_H)
2050 #include <unistd.h>
2051 #endif
2052 #include <sys/types.h>
2053 main() { dev_t dev; int i = major(dev); return 0; }],
2054 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2055 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2056     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2057 fi
2058
2059 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2060 AC_TRY_RUN([
2061 #if defined(HAVE_UNISTD_H)
2062 #include <unistd.h>
2063 #endif
2064 #include <sys/types.h>
2065 main() { dev_t dev; int i = minor(dev); return 0; }],
2066 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2067 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2068     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2069 fi
2070
2071 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2072 AC_TRY_RUN([
2073 #if defined(HAVE_UNISTD_H)
2074 #include <unistd.h>
2075 #endif
2076 #include <sys/types.h>
2077 main() { dev_t dev = makedev(1,2); return 0; }],
2078 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2079 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2080     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2081 fi
2082
2083 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2084 AC_TRY_RUN([#include <stdio.h>
2085 main() { char c; c=250; exit((c > 0)?0:1); }],
2086 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2087 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2088     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2089 fi
2090
2091 AC_CACHE_CHECK([for sin_len in sock],samba_cv_HAVE_SOCK_SIN_LEN,[
2092 AC_TRY_COMPILE([#include <sys/types.h>
2093 #include <sys/socket.h>
2094 #include <netinet/in.h>],
2095 [struct sockaddr_in sock; sock.sin_len = sizeof(sock);],
2096 samba_cv_HAVE_SOCK_SIN_LEN=yes,samba_cv_HAVE_SOCK_SIN_LEN=no)])
2097 if test x"$samba_cv_HAVE_SOCK_SIN_LEN" = x"yes"; then
2098     AC_DEFINE(HAVE_SOCK_SIN_LEN,1,[Whether the sockaddr_in struct has a sin_len property])
2099 fi
2100
2101 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2102 AC_TRY_COMPILE([#include <sys/types.h>
2103 #include <dirent.h>
2104 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2105 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2106 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2107     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2108 fi
2109
2110 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2111 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2112 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2113 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2114     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2115 fi
2116
2117 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
2118 AC_TRY_RUN([
2119 #include <sys/time.h>
2120 #include <unistd.h>
2121 main() { struct timeval tv; exit(gettimeofday(&tv, NULL));}],
2122            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,samba_cv_HAVE_GETTIMEOFDAY_TZ=no,samba_cv_HAVE_GETTIMEOFDAY_TZ=cross)])
2123 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
2124     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday() is available])
2125 fi
2126
2127 if test x"$samba_cv_WITH_PROFILE" = x"yes"; then
2128
2129     # On some systems (eg. Linux) librt can pull in libpthread. We
2130     # don't want this to happen because libpthreads changes signal delivery
2131     # semantics in ways we are not prepared for. This breaks Linux oplocks
2132     # which rely on signals.
2133
2134     AC_LIBTESTFUNC(rt, clock_gettime,
2135             [
2136                 AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
2137                     [Whether clock_gettime is available])
2138                 SMB_CHECK_CLOCK_ID(CLOCK_MONOTONIC)
2139                 SMB_CHECK_CLOCK_ID(CLOCK_PROCESS_CPUTIME_ID)
2140                 SMB_CHECK_CLOCK_ID(CLOCK_REALTIME)
2141             ])
2142
2143 fi
2144
2145 AC_CACHE_CHECK([for va_copy],samba_cv_HAVE_VA_COPY,[
2146 AC_TRY_LINK([#include <stdarg.h>
2147 va_list ap1,ap2;], [va_copy(ap1,ap2);],
2148 samba_cv_HAVE_VA_COPY=yes,
2149 samba_cv_HAVE_VA_COPY=no)])
2150 if test x"$samba_cv_HAVE_VA_COPY" = x"yes"; then
2151     AC_DEFINE(HAVE_VA_COPY,1,[Whether va_copy() is available])
2152 else
2153     AC_CACHE_CHECK([for __va_copy],samba_cv_HAVE___VA_COPY,[
2154     AC_TRY_LINK([#include <stdarg.h>
2155     va_list ap1,ap2;], [__va_copy(ap1,ap2);],
2156     samba_cv_HAVE___VA_COPY=yes,
2157     samba_cv_HAVE___VA_COPY=no)])
2158     if test x"$samba_cv_HAVE___VA_COPY" = x"yes"; then
2159         AC_DEFINE(HAVE___VA_COPY,1,[Whether __va_copy() is available])
2160     fi
2161 fi
2162
2163 AC_CACHE_CHECK([for C99 vsnprintf],samba_cv_HAVE_C99_VSNPRINTF,[
2164 AC_TRY_RUN([
2165 #include <sys/types.h>
2166 #include <stdarg.h>
2167 void foo(const char *format, ...) { 
2168        va_list ap;
2169        int len;
2170        char buf[5];
2171
2172        va_start(ap, format);
2173        len = vsnprintf(buf, 0, format, ap);
2174        va_end(ap);
2175        if (len != 5) exit(1);
2176
2177        va_start(ap, format);
2178        len = vsnprintf(0, 0, format, ap);
2179        va_end(ap);
2180        if (len != 5) exit(1);
2181
2182        if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
2183
2184        exit(0);
2185 }
2186 main() { foo("hello"); }
2187 ],
2188 samba_cv_HAVE_C99_VSNPRINTF=yes,samba_cv_HAVE_C99_VSNPRINTF=no,samba_cv_HAVE_C99_VSNPRINTF=cross)])
2189 if test x"$samba_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
2190     AC_DEFINE(HAVE_C99_VSNPRINTF,1,[Whether there is a C99 compliant vsnprintf])
2191 fi
2192
2193 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2194 AC_TRY_RUN([#include <sys/types.h>
2195 #include <dirent.h>
2196 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2197 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2198 di->d_name[0] == 0) exit(0); exit(1);} ],
2199 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2200 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2201     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2202 fi
2203
2204 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2205 AC_TRY_COMPILE([#include <sys/types.h>
2206 #include <utime.h>],
2207 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2208 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2209 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2210     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2211 fi
2212
2213 ##############
2214 # Check utmp details, but only if our OS offers utmp.h
2215 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2216 dnl  utmp and utmpx come in many flavours
2217 dnl  We need to check for many of them
2218 dnl  But we don't need to do each and every one, because our code uses
2219 dnl  mostly just the utmp (not utmpx) fields.
2220
2221 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
2222
2223 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2224 AC_TRY_COMPILE([#include <sys/types.h>
2225 #include <utmp.h>],
2226 [struct utmp ut;  ut.ut_name[0] = 'a';],
2227 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2228 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2229     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2230 fi 
2231
2232 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2233 AC_TRY_COMPILE([#include <sys/types.h>
2234 #include <utmp.h>],
2235 [struct utmp ut;  ut.ut_user[0] = 'a';],
2236 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2237 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2238     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2239 fi 
2240
2241 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2242 AC_TRY_COMPILE([#include <sys/types.h>
2243 #include <utmp.h>],
2244 [struct utmp ut;  ut.ut_id[0] = 'a';],
2245 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2246 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2247     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2248 fi 
2249
2250 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2251 AC_TRY_COMPILE([#include <sys/types.h>
2252 #include <utmp.h>],
2253 [struct utmp ut;  ut.ut_host[0] = 'a';],
2254 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2255 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2256     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2257 fi 
2258
2259 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2260 AC_TRY_COMPILE([#include <sys/types.h>
2261 #include <utmp.h>],
2262 [struct utmp ut;  time_t t; ut.ut_time = t;],
2263 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2264 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2265     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2266 fi 
2267
2268 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2269 AC_TRY_COMPILE([#include <sys/types.h>
2270 #include <utmp.h>],
2271 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2272 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2273 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2274     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2275 fi 
2276
2277 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2278 AC_TRY_COMPILE([#include <sys/types.h>
2279 #include <utmp.h>],
2280 [struct utmp ut;  ut.ut_type = 0;],
2281 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2282 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2283     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2284 fi 
2285
2286 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2287 AC_TRY_COMPILE([#include <sys/types.h>
2288 #include <utmp.h>],
2289 [struct utmp ut;  ut.ut_pid = 0;],
2290 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2291 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2292     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2293 fi 
2294
2295 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2296 AC_TRY_COMPILE([#include <sys/types.h>
2297 #include <utmp.h>],
2298 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2299 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2300 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2301     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2302 fi 
2303
2304 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2305 AC_TRY_COMPILE([#include <sys/types.h>
2306 #include <utmp.h>],
2307 [struct utmp ut;  ut.ut_addr = 0;],
2308 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2309 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2310     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2311 fi 
2312
2313 if test x$ac_cv_func_pututline = xyes ; then
2314   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2315   AC_TRY_COMPILE([#include <sys/types.h>
2316 #include <utmp.h>],
2317   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2318   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2319   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2320       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2321   fi
2322 fi
2323
2324 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2325 AC_TRY_COMPILE([#include <sys/types.h>
2326 #include <utmpx.h>],
2327 [struct utmpx ux;  ux.ut_syslen = 0;],
2328 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2329 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2330     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2331 fi 
2332
2333 fi
2334 # end utmp details
2335
2336
2337 ICONV_LOCATION=standard
2338 LOOK_DIRS="/usr /usr/local /sw /opt"
2339 AC_ARG_WITH(libiconv,
2340 [  --with-libiconv=BASEDIR Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto) ],
2341 [
2342   if test "$withval" = "no" ; then
2343     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2344   else
2345      if test "$withval" != "yes" ; then
2346         ICONV_PATH_SPEC=yes
2347         LOOK_DIRS="$withval"
2348      fi
2349   fi
2350 ])
2351
2352 for i in $LOOK_DIRS ; do
2353     save_LIBS=$LIBS
2354     save_LDFLAGS=$LDFLAGS
2355     save_CPPFLAGS=$CPPFLAGS
2356     ICONV_FOUND="no"
2357     unset libext
2358     CPPFLAGS="$CPPFLAGS -I$i/include"
2359 dnl This is here to handle -withval stuff for --with-libiconv
2360 dnl Perhaps we should always add a -L
2361
2362 dnl Check lib and lib32 library variants to cater for IRIX ABI-specific
2363 dnl installation paths. This gets a little tricky since we might have iconv
2364 dnl in both libiconv and in libc. In this case the jm_ICONV test will always
2365 dnl succeed when the header is found. To counter this, make sure the 
2366 dnl library directory is there and check the ABI directory first (which
2367 dnl should be harmless on other systems.
2368 dnl For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2369     for l in "lib32" "lib" "lib/hpux32"; do
2370         if test -d "$i/$l" ; then
2371                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2372         LIBS=
2373         export LDFLAGS LIBS CPPFLAGS
2374 dnl Try to find iconv(3)
2375                 jm_ICONV($i/$l)
2376                 if test x"$ICONV_FOUND" = "xyes" ; then
2377             libext="$l"
2378             break;
2379         fi
2380         fi
2381     done
2382
2383     if test x"$ICONV_FOUND" = "xyes" ; then
2384         LDFLAGS=$save_LDFLAGS
2385         LIB_ADD_DIR(LDFLAGS, "$i/$libext")
2386         CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
2387         LIBS="$save_LIBS"
2388         ICONV_LOCATION=$i
2389         export LDFLAGS LIBS CPPFLAGS
2390 dnl Now, check for a working iconv ... we want to do it here because
2391 dnl there might be a working iconv further down the list of LOOK_DIRS
2392
2393         ############
2394         # check for iconv in libc
2395         ic_save_LIBS="$LIBS"
2396         if test x"$ICONV_PATH_SPEC" = "xyes" ; then
2397            LIBS="$LIBS -L$ICONV_LOCATION/$libext"
2398         fi
2399         if test x"$jm_cv_lib_iconv" != x; then
2400            LIBS="$LIBS -l$jm_cv_lib_iconv"
2401         fi
2402 dnl        AC_CACHE_CHECK([for working iconv],samba_cv_HAVE_NATIVE_ICONV,[
2403         default_dos_charset=no
2404         default_display_charset=no
2405         default_unix_charset=no
2406
2407         # check for default dos charset name
2408         for j in CP850 IBM850 ; do
2409             rjs_CHARSET($j)
2410             if test x"$ICONV_CHARSET" = x"$j"; then
2411                 default_dos_charset="\"$j\""
2412                 break
2413             fi
2414         done
2415         # check for default display charset name
2416         for j in ASCII 646 ; do
2417             rjs_CHARSET($j)
2418             if test x"$ICONV_CHARSET" = x"$j"; then
2419                 default_display_charset="\"$j\""
2420                 break
2421             fi
2422         done
2423         # check for default unix charset name
2424         for j in UTF-8 UTF8 ; do
2425             rjs_CHARSET($j)
2426             if test x"$ICONV_CHARSET" = x"$j"; then
2427                 default_unix_charset="\"$j\""
2428                 break
2429             fi
2430         done
2431         
2432         if test "$default_dos_charset" != "no" -a \
2433                 "$default_dos_charset" != "cross" -a \
2434                 "$default_display_charset" != "no" -a \ 
2435                 "$default_display_charset" != "cross" -a \
2436                 "$default_unix_charset" != "no" -a \
2437                 "$default_unix_charset" != "cross"
2438         then
2439                 samba_cv_HAVE_NATIVE_ICONV=yes
2440         else if test "$default_dos_charset" = "cross" -o \
2441                      "$default_display_charset" = "cross" -o \
2442                      "$default_unix_charset" = "cross"
2443         then
2444                 samba_cv_HAVE_NATIVE_ICONV=cross
2445         else
2446                 samba_cv_HAVE_NATIVE_ICONV=no
2447         fi
2448         fi
2449 dnl ])
2450
2451         LIBS="$ic_save_LIBS"
2452         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes"; then
2453            CPPFLAGS=$save_CPPFLAGS
2454            LDFLAGS=$save_LDFLAGS
2455            LIBS=$save_LIBS
2456            if test x"$jm_cv_lib_iconv" != x; then
2457               LIBS="$LIBS -l$jm_cv_lib_iconv"
2458            fi
2459            dnl Add the flags we need to CPPFLAGS and LDFLAGS
2460            CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
2461            LIB_ADD_DIR(LDFLAGS, "$i/$libext")
2462            export CPPFLAGS
2463            AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2464            AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2465            AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2466            AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2467            break
2468         fi
2469 dnl We didn't find a working iconv, so keep going
2470     fi
2471 dnl We only need to clean these up here for the next pass through the loop
2472     CPPFLAGS=$save_CPPFLAGS
2473     LDFLAGS=$save_LDFLAGS
2474     LIBS=$save_LIBS
2475     export LDFLAGS LIBS CPPFLAGS
2476 done
2477 unset libext
2478
2479
2480 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2481     AC_MSG_WARN([Sufficient support for iconv function was not found. 
2482     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2483    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2484    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2485    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2486 fi
2487
2488
2489 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2490 AC_TRY_RUN([
2491 #include <sys/types.h>
2492 #include <fcntl.h>
2493 #ifndef F_GETLEASE
2494 #define F_GETLEASE      1025
2495 #endif
2496 main() {
2497        int fd = open("/dev/null", O_RDONLY);
2498        return fcntl(fd, F_GETLEASE, 0) == -1;
2499 }
2500 ],
2501 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2502 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2503     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2504 fi
2505
2506 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2507 AC_TRY_RUN([
2508 #include <sys/types.h>
2509 #include <fcntl.h>
2510 #include <signal.h>
2511 #ifndef F_NOTIFY
2512 #define F_NOTIFY 1026
2513 #endif
2514 main() {
2515         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2516 }
2517 ],
2518 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2519 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2520     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2521 fi
2522
2523 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2524 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h)
2525 AC_CHECK_FUNC(inotify_init)
2526 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2527 ],
2528 samba_cv_HAVE_INOTIFY=yes,
2529 samba_cv_HAVE_INOTIFY=no,
2530 samba_cv_HAVE_INOTIFY=cross)
2531
2532 if test x"$ac_cv_func_inotify_init" = x"yes" -a x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2533     AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
2534 fi
2535
2536 #################################################
2537 # Check if FAM notifications are available. For FAM info, see
2538 #       http://oss.sgi.com/projects/fam/
2539 #       http://savannah.nongnu.org/projects/fam/
2540 AC_ARG_ENABLE(fam,
2541 [  --enable-fam            Turn on FAM support (default=auto)])
2542
2543 if test x$enable_fam != xno; then
2544     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2545     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2546         # On IRIX, libfam requires libC, but other FAM implementations
2547         # might not need it.
2548         AC_CHECK_LIB(fam, FAMOpen2,
2549             [samba_cv_HAVE_LIBFAM=yes; samba_fam_libs="-lfam"],
2550             [samba_cv_HAVE_LIBFAM=no])
2551
2552         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2553             samba_fam_xtra=-lC
2554             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2555                 [samba_cv_HAVE_LIBFAM=yes; samba_fam_libs="-lfam -lC"],
2556                 [samba_cv_HAVE_LIBFAM=no])
2557             unset samba_fam_xtra
2558         fi
2559     fi
2560
2561     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2562         default_shared_modules="$default_shared_modules vfs_notify_fam"
2563         AC_TRY_COMPILE([#include <fam.h>],
2564                     [FAMCodes code = FAMChanged;],
2565                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2566                         [Whether fam.h contains a typedef for enum FAMCodes]),
2567                     [])
2568     fi
2569
2570     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2571         AC_MSG_ERROR(FAM support requested but FAM library not available )
2572     fi
2573 fi
2574
2575 #################################################
2576 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2577
2578 SMB_CHECK_DMAPI([], AC_MSG_NOTICE(DMAPI support not present) )
2579
2580 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2581 AC_TRY_RUN([
2582 #include <sys/types.h>
2583 #include <fcntl.h>
2584 #include <signal.h>
2585 #include <sys/file.h>
2586 #ifndef LOCK_MAND
2587 #define LOCK_MAND       32
2588 #define LOCK_READ       64
2589 #endif
2590 main() {
2591         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2592 }
2593 ],
2594 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2595 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2596     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2597 fi
2598
2599
2600 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2601 AC_TRY_COMPILE([#include <sys/types.h>
2602 #include <fcntl.h>],
2603 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2604 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2605 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2606     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2607 fi
2608
2609 #################################################
2610 # Check for POSIX capability support
2611
2612 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2613     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2614     [], [])
2615
2616 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2617
2618     ac_save_LIBS=$LIBS
2619     AC_LIBTESTFUNC(cap, cap_get_proc)
2620
2621     AC_CACHE_CHECK([for POSIX capabilities],
2622             samba_cv_HAVE_POSIX_CAPABILITIES,
2623             [
2624                 AC_TRY_RUN([
2625 #include <sys/types.h>
2626 #include <sys/capability.h>
2627 main() {
2628  cap_t cap;
2629  cap_value_t vals[1];
2630  if (!(cap = cap_get_proc()))
2631    exit(1);
2632  vals[0] = CAP_CHOWN;
2633  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2634  cap_set_proc(cap);
2635  exit(0);
2636 }],
2637                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2638                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2639                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2640             ])
2641
2642 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2643     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2644             [Whether POSIX capabilities are available])
2645 else
2646     LIBS=$ac_save_LIBS
2647 fi
2648
2649 fi
2650
2651 #
2652 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2653 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2654 #
2655
2656 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2657 AC_TRY_COMPILE([#include <sys/types.h>
2658 #if defined(HAVE_RPC_RPC_H)
2659 #include <rpc/rpc.h>
2660 #endif],
2661 [int16 testvar;],
2662 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2663 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2664     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2665 fi
2666
2667 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2668 AC_TRY_COMPILE([#include <sys/types.h>
2669 #if defined(HAVE_RPC_RPC_H)
2670 #include <rpc/rpc.h>
2671 #endif],
2672 [uint16 testvar;],
2673 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2674 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2675     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2676 fi
2677
2678 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2679 AC_TRY_COMPILE([#include <sys/types.h>
2680 #if defined(HAVE_RPC_RPC_H)
2681 #include <rpc/rpc.h>
2682 #endif],
2683 [int32 testvar;],
2684 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2685 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2686     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2687 fi
2688
2689 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2690 AC_TRY_COMPILE([#include <sys/types.h>
2691 #if defined(HAVE_RPC_RPC_H)
2692 #include <rpc/rpc.h>
2693 #endif],
2694 [uint32 testvar;],
2695 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2696 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2697     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2698 fi
2699
2700 dnl
2701 dnl Some systems (SCO) have a problem including
2702 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2703 dnl as a #define in <prot.h> and as part of an enum
2704 dnl in <rpc/rpc.h>.
2705 dnl
2706
2707 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2708 AC_TRY_COMPILE([#include <sys/types.h>
2709 #ifdef HAVE_SYS_SECURITY_H
2710 #include <sys/security.h>
2711 #include <prot.h>
2712 #endif  /* HAVE_SYS_SECURITY_H */
2713 #if defined(HAVE_RPC_RPC_H)
2714 #include <rpc/rpc.h>
2715 #endif],
2716 [int testvar;],
2717 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2718 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2719     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2720 fi
2721
2722 AC_MSG_CHECKING([for test routines])
2723 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
2724            AC_MSG_RESULT(yes),
2725            AC_MSG_ERROR([cant find test code. Aborting config]),
2726            AC_MSG_WARN([cannot run when cross-compiling]))
2727
2728 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2729 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
2730            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2731 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2732     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2733 fi
2734
2735 AC_CACHE_CHECK([for AF_LOCAL socket support], samba_cv_HAVE_WORKING_AF_LOCAL, [
2736 AC_TRY_RUN([#include "${srcdir-.}/tests/unixsock.c"],
2737            samba_cv_HAVE_WORKING_AF_LOCAL=yes,
2738            samba_cv_HAVE_WORKING_AF_LOCAL=no,
2739            samba_cv_HAVE_WORKING_AF_LOCAL=cross)])
2740 if test x"$samba_cv_HAVE_WORKING_AF_LOCAL" != xno
2741 then
2742     AC_DEFINE(HAVE_WORKING_AF_LOCAL, 1, [Define if you have working AF_LOCAL sockets])
2743 fi
2744
2745 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2746 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
2747            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2748 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2749     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2750 fi
2751
2752 AC_CACHE_CHECK([for secure mkstemp],samba_cv_HAVE_SECURE_MKSTEMP,[
2753 AC_TRY_RUN([#include <stdlib.h>
2754 #include <sys/types.h>
2755 #include <sys/stat.h>
2756 #include <unistd.h>
2757 main() { 
2758   struct stat st;
2759   char tpl[20]="/tmp/test.XXXXXX"; 
2760   int fd = mkstemp(tpl); 
2761   if (fd == -1) exit(1);
2762   unlink(tpl);
2763   if (fstat(fd, &st) != 0) exit(1);
2764   if ((st.st_mode & 0777) != 0600) exit(1);
2765   exit(0);
2766 }],
2767 samba_cv_HAVE_SECURE_MKSTEMP=yes,
2768 samba_cv_HAVE_SECURE_MKSTEMP=no,
2769 samba_cv_HAVE_SECURE_MKSTEMP=cross)])
2770 if test x"$samba_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
2771     AC_DEFINE(HAVE_SECURE_MKSTEMP,1,[Whether mkstemp is secure])
2772 fi
2773
2774 AC_CACHE_CHECK([for broken readdir],samba_cv_HAVE_BROKEN_READDIR,[
2775         AC_TRY_RUN([#include "${srcdir-.}/tests/os2_delete.c"],
2776                 [samba_cv_HAVE_BROKEN_READDIR=no],
2777                         [samba_cv_HAVE_BROKEN_READDIR=yes],
2778                         [samba_cv_HAVE_BROKEN_READDIR="assuming not"])])
2779
2780 if test x"$samba_cv_HAVE_BROKEN_READDIR" = x"yes"; then
2781 AC_CACHE_CHECK([for replacing readdir],samba_cv_REPLACE_READDIR,[
2782         AC_TRY_RUN([
2783 #include "${srcdir-.}/lib/repdir.c"
2784 #include "${srcdir-.}/tests/os2_delete.c"],
2785         samba_cv_REPLACE_READDIR=yes,samba_cv_REPLACE_READDIR=no)])
2786 fi
2787
2788 if test x"$samba_cv_REPLACE_READDIR" = x"yes"; then
2789         AC_DEFINE(REPLACE_READDIR,1,[replace readdir])
2790 fi
2791
2792 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2793 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2794 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2795 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2796 AC_CHECK_FUNCS(getpagesize)
2797
2798 ##################
2799 # look for a method of finding the list of network interfaces
2800 iface=no;
2801 AC_CACHE_CHECK([for iface AIX],samba_cv_HAVE_IFACE_AIX,[
2802 SAVE_CPPFLAGS="$CPPFLAGS"
2803 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2804 AC_TRY_RUN([
2805 #define HAVE_IFACE_AIX 1
2806 #define AUTOCONF_TEST 1
2807 #undef _XOPEN_SOURCE_EXTENDED
2808 #include "${srcdir-.}/lib/interfaces.c"],
2809            samba_cv_HAVE_IFACE_AIX=yes,samba_cv_HAVE_IFACE_AIX=no,samba_cv_HAVE_IFACE_AIX=cross)])
2810 CPPFLAGS="$SAVE_CPPFLAGS"
2811 if test x"$samba_cv_HAVE_IFACE_AIX" = x"yes"; then
2812     iface=yes;AC_DEFINE(HAVE_IFACE_AIX,1,[Whether iface AIX is available])
2813 fi
2814
2815 if test $iface = no; then
2816 AC_CACHE_CHECK([for iface ifconf],samba_cv_HAVE_IFACE_IFCONF,[
2817 SAVE_CPPFLAGS="$CPPFLAGS"
2818 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2819 AC_TRY_RUN([
2820 #define HAVE_IFACE_IFCONF 1
2821 #define AUTOCONF_TEST 1
2822 #include "${srcdir-.}/lib/interfaces.c"],
2823            samba_cv_HAVE_IFACE_IFCONF=yes,samba_cv_HAVE_IFACE_IFCONF=no,samba_cv_HAVE_IFACE_IFCONF=cross)])
2824 CPPFLAGS="$SAVE_CPPFLAGS"
2825 if test x"$samba_cv_HAVE_IFACE_IFCONF" = x"yes"; then
2826     iface=yes;AC_DEFINE(HAVE_IFACE_IFCONF,1,[Whether iface ifconf is available])
2827 fi
2828 fi
2829
2830 if test $iface = no; then
2831 AC_CACHE_CHECK([for iface ifreq],samba_cv_HAVE_IFACE_IFREQ,[
2832 SAVE_CPPFLAGS="$CPPFLAGS"
2833 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2834 AC_TRY_RUN([
2835 #define HAVE_IFACE_IFREQ 1
2836 #define AUTOCONF_TEST 1
2837 #include "${srcdir-.}/lib/interfaces.c"],
2838            samba_cv_HAVE_IFACE_IFREQ=yes,samba_cv_HAVE_IFACE_IFREQ=no,samba_cv_HAVE_IFACE_IFREQ=cross)])
2839 CPPFLAGS="$SAVE_CPPFLAGS"
2840 if test x"$samba_cv_HAVE_IFACE_IFREQ" = x"yes"; then
2841     iface=yes;AC_DEFINE(HAVE_IFACE_IFREQ,1,[Whether iface ifreq is available])
2842 fi
2843 fi
2844
2845
2846 ################################################
2847 # look for a method of setting the effective uid
2848 seteuid=no;
2849 if test $seteuid = no; then
2850 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2851 AC_TRY_RUN([
2852 #define AUTOCONF_TEST 1
2853 #define USE_SETRESUID 1
2854 #include "confdefs.h"
2855 #include "${srcdir-.}/lib/util_sec.c"],
2856            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2857 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2858     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2859 fi
2860 fi
2861
2862
2863 if test $seteuid = no; then
2864 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2865 AC_TRY_RUN([
2866 #define AUTOCONF_TEST 1
2867 #define USE_SETREUID 1
2868 #include "confdefs.h"
2869 #include "${srcdir-.}/lib/util_sec.c"],
2870            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2871 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2872     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2873 fi
2874 fi
2875
2876 if test $seteuid = no; then
2877 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2878 AC_TRY_RUN([
2879 #define AUTOCONF_TEST 1
2880 #define USE_SETEUID 1
2881 #include "confdefs.h"
2882 #include "${srcdir-.}/lib/util_sec.c"],
2883            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2884 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2885     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2886 fi
2887 fi
2888
2889 if test $seteuid = no; then
2890 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2891 AC_TRY_RUN([
2892 #define AUTOCONF_TEST 1
2893 #define USE_SETUIDX 1
2894 #include "confdefs.h"
2895 #include "${srcdir-.}/lib/util_sec.c"],
2896            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2897 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2898     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2899 fi
2900 fi
2901
2902
2903 AC_CACHE_CHECK([for working mmap],samba_cv_HAVE_MMAP,[
2904 AC_TRY_RUN([#include "${srcdir-.}/tests/shared_mmap.c"],
2905            samba_cv_HAVE_MMAP=yes,samba_cv_HAVE_MMAP=no,samba_cv_HAVE_MMAP=cross)])
2906 if test x"$samba_cv_HAVE_MMAP" = x"yes"; then
2907     AC_DEFINE(HAVE_MMAP,1,[Whether mmap works])
2908 fi
2909
2910 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2911 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
2912            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2913 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2914     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2915 fi
2916
2917 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
2918 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
2919            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
2920 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
2921     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
2922
2923 else
2924
2925 dnl
2926 dnl Don't check for 64 bit fcntl locking if we know that the
2927 dnl glibc2.1 broken check has succeeded.
2928 dnl 
2929
2930   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
2931   AC_TRY_RUN([
2932 #if defined(HAVE_UNISTD_H)
2933 #include <unistd.h>
2934 #endif
2935 #include <stdio.h>
2936 #include <stdlib.h>
2937
2938 #ifdef HAVE_FCNTL_H
2939 #include <fcntl.h>
2940 #endif
2941
2942 #ifdef HAVE_SYS_FCNTL_H
2943 #include <sys/fcntl.h>
2944 #endif
2945 main() { struct flock64 fl64;
2946 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
2947 exit(0);
2948 #else
2949 exit(1);
2950 #endif
2951 }],
2952        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
2953
2954   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
2955       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
2956   fi
2957 fi
2958
2959 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
2960 AC_TRY_COMPILE([#include <sys/types.h>
2961 #include <sys/stat.h>
2962 #include <unistd.h>],
2963 [struct stat st;  st.st_blocks = 0;],
2964 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
2965 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
2966     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
2967 fi 
2968
2969 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
2970 AC_TRY_COMPILE([#include <sys/types.h>
2971 #include <sys/stat.h>
2972 #include <unistd.h>],
2973 [struct stat st;  st.st_blksize = 0;],
2974 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
2975 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
2976     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
2977 fi
2978
2979 AC_CACHE_CHECK([for st_flags in struct stat],
2980         samba_cv_HAVE_STAT_ST_FLAGS,
2981         [
2982             AC_TRY_COMPILE([#include <sys/types.h>
2983 #include <sys/stat.h>
2984 #include <unistd.h>],
2985             [struct stat st;  st.st_flags = 0;],
2986             samba_cv_HAVE_STAT_ST_FLAGS=yes,
2987             samba_cv_HAVE_STAT_ST_FLAGS=no,
2988             samba_cv_HAVE_STAT_ST_FLAGS=cross)
2989         ])
2990
2991 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
2992     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
2993                 [Whether the stat struct has a st_flags member])
2994 fi
2995
2996 case "$host_os" in
2997 *linux*)
2998 AC_CACHE_CHECK([for broken RedHat 7.2 system header files],samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS,[
2999 AC_TRY_COMPILE([
3000 #ifdef HAVE_SYS_VFS_H
3001 #include <sys/vfs.h>
3002 #endif
3003 #ifdef HAVE_SYS_CAPABILITY_H
3004 #include <sys/capability.h>
3005 #endif
3006 ],[int i;],
3007    samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no,samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=yes)])
3008 if test x"$samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" = x"yes"; then
3009    AC_DEFINE(BROKEN_REDHAT_7_SYSTEM_HEADERS,1,[Broken RedHat 7.2 system header files])
3010 fi
3011 ;;
3012 esac
3013
3014 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
3015 AC_TRY_COMPILE([
3016 #include <sys/types.h>
3017 #include <sys/acl.h>
3018 #if defined(HAVE_RPCSVC_NIS_H)
3019 #include <rpcsvc/nis.h>
3020 #endif],
3021 [int i;],
3022 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
3023 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
3024         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
3025 fi
3026
3027 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
3028 AC_TRY_RUN([
3029 #include <stdio.h>
3030 #include <limits.h>
3031 main() {
3032         char *newpath = realpath("/tmp", NULL);
3033         exit ((newpath != NULL) ? 0 : 1);
3034 }
3035 ],
3036 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
3037 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
3038     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
3039 fi
3040
3041 #################################################
3042 # check for AFS clear-text auth support
3043 samba_cv_WITH_AFS=no
3044 AC_MSG_CHECKING(whether to use AFS clear-text auth)
3045 AC_ARG_WITH(afs,
3046 [  --with-afs              Include AFS clear-text auth support (default=no) ],
3047 [ case "$withval" in
3048   yes|auto)
3049     AC_MSG_RESULT($withval)
3050     samba_cv_WITH_AFS=$withval
3051     ;;
3052   *)
3053     AC_MSG_RESULT(no)
3054     ;;
3055   esac ],
3056   AC_MSG_RESULT(no)
3057 )
3058
3059 ####################################################
3060 # check for Linux-specific AFS fake-kaserver support
3061 samba_cv_WITH_FAKE_KASERVER=no
3062 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
3063 AC_ARG_WITH(fake-kaserver,
3064 [  --with-fake-kaserver    Include AFS fake-kaserver support (default=no) ],
3065 [ case "$withval" in
3066   yes|auto)
3067     AC_MSG_RESULT($withval)
3068     samba_cv_WITH_FAKE_KASERVER=$withval
3069     ;;
3070   *)
3071     AC_MSG_RESULT(no)
3072     ;;
3073   esac ],
3074   AC_MSG_RESULT(no)
3075 )
3076
3077 #################################################
3078 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
3079 if test x"$samba_cv_WITH_AFS" != x"no" ||
3080    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
3081
3082     # see if this box has the afs-headers in /usr/include/afs
3083     AC_MSG_CHECKING(for /usr/include/afs)
3084     if test -d /usr/include/afs; then
3085           CFLAGS="$CFLAGS -I/usr/include/afs"
3086           CPPFLAGS="$CPPFLAGS -I/usr/include/afs"
3087           AC_MSG_RESULT(yes)
3088     else
3089       AC_MSG_RESULT(no)
3090     fi
3091    
3092     # check for afs.h
3093     have_afs_headers=no
3094     AC_CHECK_HEADERS(afs.h afs/afs.h)
3095     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
3096         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
3097            test x"$samba_cv_WITH_AFS" = x"auto"; then
3098                 AC_MSG_WARN([AFS cannot be supported without afs.h])
3099         else
3100                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
3101         fi
3102     else
3103         have_afs_headers=yes
3104     fi
3105 fi
3106
3107 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
3108     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
3109 fi
3110
3111 #################################################
3112 # check whether to compile AFS/NT ACL mapping module
3113 samba_cv_WITH_VFS_AFSACL=no
3114 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3115 AC_ARG_WITH(vfs-afsacl,
3116 [  --with-vfs-afsacl       Include AFS to NT ACL mapping module (default=no) ],
3117 [ case "$withval" in
3118   yes|auto)
3119     AC_MSG_RESULT($withval)
3120     samba_cv_WITH_VFS_AFSACL=yes
3121     ;;
3122   *)
3123     AC_MSG_RESULT(no)
3124     ;;
3125   esac ],
3126   AC_MSG_RESULT(no)
3127 )
3128
3129 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3130    default_shared_modules="$default_shared_modules vfs_afsacl"
3131 fi
3132         
3133 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3134     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3135 fi
3136
3137 #################################################
3138 # check for the DFS clear-text auth system
3139 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3140 AC_ARG_WITH(dfs,
3141 [  --with-dce-dfs          Include DCE/DFS clear-text auth support (default=no)],
3142 [ case "$withval" in
3143   yes)
3144     AC_MSG_RESULT(yes)
3145     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3146     ;;
3147   *)
3148     AC_MSG_RESULT(no)
3149     ;;
3150   esac ],
3151   AC_MSG_RESULT(no)
3152 )
3153
3154 ########################################################
3155 # Compile with LDAP support?
3156
3157 with_ldap_support=auto
3158 AC_MSG_CHECKING([for LDAP support])
3159
3160 AC_ARG_WITH(ldap,
3161 [  --with-ldap             LDAP support (default yes)],
3162 [ case "$withval" in
3163     yes|no)
3164         with_ldap_support=$withval
3165         ;;
3166   esac ])
3167
3168 AC_MSG_RESULT($with_ldap_support)
3169
3170 SMBLDAP=""
3171 AC_SUBST(SMBLDAP)
3172 SMBLDAPUTIL=""
3173 AC_SUBST(SMBLDAPUTIL)
3174 LDBLDAP=""
3175 AC_SUBST(LDBLDAP)
3176
3177 if test x"$with_ldap_support" != x"no"; then
3178
3179   ##################################################################
3180   # first test for ldap.h and lber.h
3181   # (ldap.h is required for this test)
3182   AC_CHECK_HEADERS(ldap.h lber.h)
3183   
3184   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3185         if test x"$with_ldap_support" = x"yes"; then
3186          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3187         else
3188          AC_MSG_WARN(ldap.h is needed for LDAP support)
3189         fi
3190         
3191         with_ldap_support=no
3192   fi
3193
3194   ##################################################################
3195   # HP/UX does not have ber_tag_t, disable LDAP there
3196   AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3197   if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3198         if test x"$with_ldap_support" = x"yes"; then
3199          AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3200         else
3201          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3202         fi
3203         with_ldap_support=no
3204   fi
3205 fi
3206
3207 if test x"$with_ldap_support" != x"no"; then
3208   ac_save_LIBS=$LIBS
3209
3210   ##################################################################
3211   # we might need the lber lib on some systems. To avoid link errors
3212   # this test must be before the libldap test
3213   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3214
3215   ########################################################
3216   # now see if we can find the ldap libs in standard paths
3217   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3218
3219   ########################################################
3220   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3221   # Check found in pam_ldap 145.
3222   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3223
3224   LIBS="$LIBS $LDAP_LIBS"
3225   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3226     AC_TRY_COMPILE([
3227         #include <lber.h>
3228         #include <ldap.h>], 
3229         [ldap_set_rebind_proc(0, 0, 0);], 
3230         [smb_ldap_cv_ldap_set_rebind_proc=3], 
3231         [smb_ldap_cv_ldap_set_rebind_proc=2]
3232     ) 
3233   ])
3234   
3235   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3236
3237   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3238   
3239   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3240     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3241     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3242     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3243     default_shared_modules="$default_shared_modules";
3244     SMBLDAP="lib/smbldap.o"
3245     SMBLDAPUTIL="lib/smbldap_util.o"
3246     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3247       AC_MSG_WARN(Disabling ldb_ldap support (requires ldap_initialize))
3248     else
3249       AC_DEFINE(HAVE_LDB_LDAP,1,[Whether ldb_ldap is available])
3250       LDBLDAP="lib/ldb/ldb_ldap/ldb_ldap.o"
3251     fi
3252     with_ldap_support=yes
3253     AC_MSG_CHECKING(whether LDAP support is used)
3254     AC_MSG_RESULT(yes)
3255   else
3256     if test x"$with_ldap_support" = x"yes"; then
3257         AC_MSG_ERROR(libldap is needed for LDAP support)
3258     else
3259         AC_MSG_WARN(libldap is needed for LDAP support)
3260     fi
3261     
3262     LDAP_LIBS=""
3263     with_ldap_support=no
3264   fi
3265   LIBS=$ac_save_LIBS
3266 fi
3267
3268
3269 #################################################
3270 # active directory support
3271
3272 with_ads_support=auto
3273 AC_MSG_CHECKING([for Active Directory and krb5 support])
3274
3275 AC_ARG_WITH(ads,
3276 [  --with-ads              Active Directory support (default auto)],
3277 [ case "$withval" in
3278     yes|no)
3279         with_ads_support="$withval"
3280         ;;
3281   esac ])
3282
3283 AC_MSG_RESULT($with_ads_support)
3284
3285 FOUND_KRB5=no
3286 KRB5_LIBS=""
3287
3288 if test x"$with_ldap_support" != x"yes"; then
3289
3290     if test x"$with_ads_support" = x"yes"; then
3291         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3292     elif test x"$with_ads_support" = x"auto"; then
3293         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3294         with_ads_support=no
3295     fi
3296
3297 else
3298
3299     # Check to see whether there is enough LDAP functionality to be able
3300     # to build AD support.
3301
3302     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3303
3304     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3305         if test x"$with_ads_support" = x"yes"; then
3306             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3307         elif test x"$with_ads_support" = x"auto"; then
3308             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3309             with_ads_support=no
3310         fi
3311     fi
3312
3313     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3314
3315     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3316         if test x"$with_ads_support" = x"yes"; then
3317             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3318         elif test x"$with_ads_support" = x"auto"; then
3319             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3320             with_ads_support=no
3321         fi
3322     fi
3323
3324 fi
3325
3326 if test x"$with_ads_support" != x"no"; then
3327
3328   # Do no harm to the values of CFLAGS and LIBS while testing for
3329   # Kerberos support.
3330  
3331   if test x$FOUND_KRB5 = x"no"; then
3332     #################################################
3333     # check for location of Kerberos 5 install
3334     AC_MSG_CHECKING(for kerberos 5 install path)
3335     AC_ARG_WITH(krb5,
3336     [  --with-krb5=base-dir    Locate Kerberos 5 support (default=/usr)],
3337     [ case "$withval" in
3338       no)
3339         AC_MSG_RESULT(no krb5-path given)
3340         ;;
3341       yes)
3342         AC_MSG_RESULT(/usr)
3343         FOUND_KRB5=yes
3344         ;;
3345       *)
3346         AC_MSG_RESULT($withval)
3347         KRB5_CFLAGS="-I$withval/include"
3348         KRB5_CPPFLAGS="-I$withval/include"
3349         KRB5_LDFLAGS="-L$withval/lib"
3350         FOUND_KRB5=yes
3351         if test -x "$withval/bin/krb5-config"; then
3352                 KRB5CONFIG=$withval/bin/krb5-config
3353         fi
3354         ;;
3355       esac ],
3356       AC_MSG_RESULT(no krb5-path given)
3357     )
3358   fi
3359
3360   #################################################
3361   # check for krb5-config from recent MIT and Heimdal kerberos 5
3362   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3363   AC_MSG_CHECKING(for working krb5-config)
3364   if test -x "$KRB5CONFIG"; then
3365     ac_save_CFLAGS=$CFLAGS
3366     CFLAGS="";export CFLAGS
3367     ac_save_LDFLAGS=$LDFLAGS
3368     LDFLAGS="";export LDFLAGS
3369     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3370     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3371     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`" 
3372     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3373     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3374     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3375     FOUND_KRB5=yes
3376     AC_MSG_RESULT(yes)
3377   else
3378     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3379   fi
3380  
3381   if test x$FOUND_KRB5 = x"no"; then
3382     #################################################
3383     # see if this box has the SuSE location for the heimdal krb implementation
3384     AC_MSG_CHECKING(for /usr/include/heimdal)
3385     if test -d /usr/include/heimdal; then
3386       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3387           KRB5_CFLAGS="-I/usr/include/heimdal"
3388           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3389           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3390           AC_MSG_RESULT(yes)
3391       else
3392           KRB5_CFLAGS="-I/usr/include/heimdal"
3393           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3394           AC_MSG_RESULT(yes)
3395       fi
3396     else
3397       AC_MSG_RESULT(no)
3398     fi
3399   fi
3400
3401   if test x$FOUND_KRB5 = x"no"; then
3402     #################################################
3403     # see if this box has the RedHat location for kerberos
3404     AC_MSG_CHECKING(for /usr/kerberos)
3405     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3406       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3407       KRB5_CFLAGS="-I/usr/kerberos/include"
3408       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3409       AC_MSG_RESULT(yes)
3410     else
3411       AC_MSG_RESULT(no)
3412     fi
3413   fi
3414
3415   ac_save_CFLAGS=$CFLAGS
3416   ac_save_CPPFLAGS=$CPPFLAGS
3417   ac_save_LDFLAGS=$LDFLAGS
3418
3419   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3420   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3421   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3422
3423   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3424
3425   # now check for krb5.h. Some systems have the libraries without the headers!
3426   # note that this check is done here to allow for different kerberos
3427   # include paths
3428   AC_CHECK_HEADERS(krb5.h)
3429
3430   if test x"$ac_cv_header_krb5_h" = x"no"; then
3431
3432     # Give a warning if AD support was not explicitly requested,
3433     # i.e with_ads_support = auto, otherwise die with an error.
3434
3435     if test x"$with_ads_support" = x"yes"; then
3436       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3437     else
3438       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3439     fi
3440
3441     # Turn off AD support and restore CFLAGS and LIBS variables
3442
3443     with_ads_support="no"
3444     
3445     CFLAGS=$ac_save_CFLAGS
3446     CPPFLAGS=$ac_save_CPPFLAGS
3447     LDFLAGS=$ac_save_LDFLAGS
3448   fi
3449 fi
3450
3451 # Now we have determined whether we really want ADS support
3452 use_ads=no
3453 if test x"$with_ads_support" != x"no"; then
3454   use_ads=yes
3455   have_gssapi=no
3456   ac_save_LIBS=$LIBS
3457
3458   # now check for gssapi headers.  This is also done here to allow for
3459   # different kerberos include paths
3460   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
3461
3462   ##################################################################
3463   # we might need the k5crypto and com_err libraries on some systems
3464   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3465   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3466
3467   # Heimdal checks.
3468   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3469   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3470   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3471
3472   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3473   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3474
3475   ########################################################
3476   # now see if we can find the krb5 libs in standard paths
3477   # or as specified above
3478   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3479   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3480
3481   ########################################################
3482   # now see if we can find the gssapi libs in standard paths
3483   if test x"$have_gssapi" != x"yes"; then
3484      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3485   fi
3486
3487   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3488   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3489   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3490   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3491   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3492   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3493   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS) 
3494   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3495   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS) 
3496   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3497   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS) 
3498   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3499   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS) 
3500   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS) 
3501   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3502   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3503   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3504   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3505   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3506   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3507   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3508   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3509   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3510   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3511   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3512   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3513   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3514   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3515   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3516   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3517   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3518   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3519   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3520   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3521   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3522   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3523   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3524   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3525
3526   LIBS="$KRB5_LIBS $LIBS"
3527
3528   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3529         smb_krb5_ticket_has_keyinfo,
3530         [
3531             AC_TRY_COMPILE(
3532             [
3533                 #include <krb5.h>
3534             ],
3535             [
3536                 krb5_ticket ticket;
3537                 krb5_kvno kvno;
3538                 krb5_enctype enctype;
3539
3540                 enctype = ticket.enc_part.enctype;
3541                 kvno = ticket.enc_part.kvno;
3542             ],
3543             [ smb_krb5_ticket_has_keyinfo=yes ],
3544             [ smb_krb5_ticket_has_keyinfo=no ])
3545         ])
3546
3547   if test x"$smb_krb5_ticket_has_keyinfo" = x"yes" ; then
3548         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3549             [Whether the krb5_ticket structure contains the kvno and enctype])
3550   fi
3551
3552   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3553           smb_krb5_creds_opt_free_context,
3554           [
3555                 AC_TRY_COMPILE([
3556                     #include <krb5.h>],
3557                     [
3558                         krb5_context ctx;
3559                         krb5_get_init_creds_opt *opt = NULL;
3560                         krb5_get_init_creds_opt_free(ctx, opt);
3561                     ],
3562                     [smb_krb5_creds_opt_free_context=yes],
3563                     [smb_krb5_creds_opt_free_context=no]
3564                 )
3565           ])
3566
3567   if test x"$smb_krb5_creds_opt_free_context" = x"yes" ; then
3568         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3569             [Whether krb5_get_init_creds_opt_free takes a context argument])
3570   fi
3571
3572   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_verify_checksum, [
3573     AC_TRY_COMPILE([
3574         #include <krb5.h>], 
3575         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);], 
3576         [smb_krb5_verify_checksum=7], 
3577         [smb_krb5_verify_checksum=6], 
3578     ) 
3579   ])
3580   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_verify_checksum, [Number of arguments to krb5_verify_checksum])
3581
3582   AC_CACHE_CHECK([for checksum in krb5_checksum],
3583                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3584     AC_TRY_COMPILE([#include <krb5.h>],
3585       [krb5_checksum cksum; cksum.checksum.length = 0;],
3586       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3587       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3588
3589   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3590     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3591                [Whether the krb5_checksum struct has a checksum property])
3592   fi
3593
3594   AC_CACHE_CHECK([for etype in EncryptedData],
3595                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3596     AC_TRY_COMPILE([#include <krb5.h>],
3597       [EncryptedData edata; edata.etype = 0;],
3598       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3599       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3600
3601   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3602     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3603                [Whether the EncryptedData struct has a etype property])
3604   fi
3605
3606   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3607                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3608     AC_TRY_COMPILE([#include <krb5.h>],
3609       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3610       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3611       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3612
3613   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3614     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3615                [Whether the krb5_ap_req struct has a ticket pointer])
3616   fi
3617
3618   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3619                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3620     AC_TRY_COMPILE([#include <krb5.h>],
3621       [krb5_error err; err.e_data = NULL;],
3622       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3623       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3624
3625   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3626     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3627                [Whether the krb5_error struct has a e_data pointer])
3628   fi
3629
3630   AC_CACHE_CHECK([for krb5_crypto type],
3631                 samba_cv_HAVE_KRB5_CRYPTO,[
3632     AC_TRY_COMPILE([#include <krb5.h>],
3633       [krb5_crypto crypto;],
3634       samba_cv_HAVE_KRB5_CRYPTO=yes,
3635       samba_cv_HAVE_KRB5_CRYPTO=no)])
3636
3637   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3638     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3639                [Whether the type krb5_crypto exists])
3640   fi
3641
3642   AC_CACHE_CHECK([for krb5_encrypt_block type],
3643                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3644     AC_TRY_COMPILE([#include <krb5.h>],
3645       [krb5_encrypt_block block;],
3646       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3647       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3648
3649   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3650     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3651                [Whether the type krb5_encrypt_block exists])
3652   fi
3653
3654   AC_CACHE_CHECK([for addrtype in krb5_address],
3655                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3656     AC_TRY_COMPILE([#include <krb5.h>],
3657       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3658       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3659       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3660
3661   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3662     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3663                [Whether the krb5_address struct has a addrtype property])
3664   fi
3665
3666   AC_CACHE_CHECK([for addr_type in krb5_address],
3667                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3668     AC_TRY_COMPILE([#include <krb5.h>],
3669       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3670       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3671       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3672
3673   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3674     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3675               [Whether the krb5_address struct has a addr_type property])
3676   fi
3677
3678   AC_CACHE_CHECK([for enc_part2 in krb5_ticket], 
3679                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3680                  [AC_TRY_COMPILE([#include <krb5.h>],
3681     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3682     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3683
3684   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3685     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3686               [Whether the krb5_ticket struct has a enc_part2 property])
3687   fi
3688
3689   AC_CACHE_CHECK([for keyblock in krb5_creds],
3690                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3691     AC_TRY_COMPILE([#include <krb5.h>],
3692       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3693       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3694       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3695
3696   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3697     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3698               [Whether the krb5_creds struct has a keyblock property])
3699   fi
3700
3701   AC_CACHE_CHECK([for session in krb5_creds],
3702                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3703     AC_TRY_COMPILE([#include <krb5.h>],
3704       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3705       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3706       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3707
3708   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3709     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3710               [Whether the krb5_creds struct has a session property])
3711   fi
3712
3713   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3714                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3715     AC_TRY_COMPILE([#include <krb5.h>],
3716       [krb5_keyblock key; key.keyvalue.data = NULL;],
3717       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3718       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3719
3720   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3721     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3722               [Whether the krb5_keyblock struct has a keyvalue property])
3723   fi
3724
3725   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3726                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3727     AC_TRY_COMPILE([#include <krb5.h>],
3728       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3729       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3730       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3731   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3732                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3733     AC_TRY_COMPILE([#include <krb5.h>],
3734       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3735       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3736       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3737 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3738 # w.r.t. arcfour and windows, so we must not enable it here
3739   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3740           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3741     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3742               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
3743   fi
3744
3745   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3746                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3747     AC_TRY_COMPILE([#include <krb5.h>],
3748       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3749       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3750       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3751
3752   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3753     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3754               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3755   fi
3756
3757   AC_CACHE_CHECK([for KV5M_KEYTAB],
3758                  samba_cv_HAVE_KV5M_KEYTAB,[
3759     AC_TRY_COMPILE([#include <krb5.h>],
3760       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3761       samba_cv_HAVE_KV5M_KEYTAB=yes,
3762       samba_cv_HAVE_KV5M_KEYTAB=no)])
3763
3764   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3765       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3766              [Whether the KV5M_KEYTAB option is available])
3767   fi
3768
3769   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3770                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3771     AC_TRY_COMPILE([#include <krb5.h>],
3772       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3773       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3774       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3775
3776   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3777     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3778               [Whether KRB5_KU_OTHER_CKSUM is available])
3779   fi
3780   
3781   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3782                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3783     AC_TRY_COMPILE([#include <krb5.h>],
3784       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3785       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3786       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3787
3788   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3789     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3790               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3791   fi
3792
3793   AC_CACHE_CHECK([for the krb5_princ_component macro],
3794                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3795     AC_TRY_LINK([#include <krb5.h>],
3796       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3797       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3798       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3799
3800   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3801     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3802                [Whether krb5_princ_component is available])
3803   fi
3804
3805   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3806                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3807     AC_TRY_COMPILE([#include <krb5.h>],
3808       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3809       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3810       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3811
3812   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3813     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3814               [Whether krb5_keytab_entry has key member])
3815   fi
3816
3817   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3818                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3819     AC_TRY_COMPILE([#include <krb5.h>],
3820       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3821       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3822       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3823
3824   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3825     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3826               [Whether krb5_keytab_entry has keyblock member])
3827   fi
3828
3829   AC_CACHE_CHECK([for magic in krb5_address],
3830                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
3831     AC_TRY_COMPILE([#include <krb5.h>],
3832       [krb5_address addr; addr.magic = 0;],
3833       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
3834       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
3835
3836   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
3837     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
3838               [Whether the krb5_address struct has a magic property])
3839   fi
3840
3841   AC_CACHE_CHECK([for WRFILE: keytab support],
3842                 samba_cv_HAVE_WRFILE_KEYTAB,[
3843     AC_TRY_RUN([
3844 #include<krb5.h>
3845   main()
3846   {
3847     krb5_context context;
3848     krb5_keytab keytab;
3849
3850     krb5_init_context(&context);
3851     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3852   }],
3853   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3854   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3855
3856   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3857       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3858                [Whether the WRFILE:-keytab is supported])
3859   fi
3860
3861   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
3862                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
3863     AC_TRY_COMPILE([#include <krb5.h>],
3864     [
3865     krb5_context context;
3866     krb5_principal principal;
3867     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
3868     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
3869     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
3870
3871   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
3872     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
3873               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
3874   fi
3875
3876   AC_CACHE_CHECK([for krb5_addresses type],
3877                 samba_cv_HAVE_KRB5_ADDRESSES,[
3878     AC_TRY_COMPILE([#include <krb5.h>],
3879       [krb5_addresses addr;],
3880       samba_cv_HAVE_KRB5_ADDRESSES=yes,
3881       samba_cv_HAVE_KRB5_ADDRESSES=no)])
3882
3883   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
3884     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
3885                [Whether the type krb5_addresses type exists])
3886   fi
3887
3888   #
3889   #
3890   # Now the decisions whether we can support krb5
3891   # 
3892   # NOTE: all tests should be done before this block!
3893   #
3894   #
3895   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
3896     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
3897     use_ads=no
3898   fi
3899
3900   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
3901           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
3902   then
3903     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
3904     use_ads=no
3905   fi
3906
3907   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
3908           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
3909   then
3910     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
3911     use_ads=no
3912   fi
3913
3914   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
3915           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
3916   then
3917     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
3918     use_ads=no
3919   fi
3920
3921   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
3922           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
3923   then
3924     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
3925     use_ads=no
3926   fi
3927
3928   if test x"$smb_krb5_ticket_has_keyinfo" != x"yes" ; then
3929
3930       # We only need the following functions if we can't get the enctype
3931       # and kvno out of the ticket directly (ie. on Heimdal).
3932
3933       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
3934       then
3935         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
3936         use_ads=no
3937       fi
3938
3939       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
3940       then
3941         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
3942         use_ads=no
3943       fi
3944
3945   fi
3946
3947   if test x"$use_ads" = x"yes"; then
3948     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
3949     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
3950     if test x"$have_gssapi" = x"yes"; then
3951       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
3952     fi
3953   else
3954     if test x"$with_ads_support" = x"yes"; then
3955         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
3956     else
3957         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
3958     fi
3959     AC_REMOVE_DEFINE(HAVE_KRB5_H)
3960     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
3961     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
3962     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
3963     KRB5_LIBS=""
3964     with_ads_support=no 
3965   fi
3966   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
3967   AC_MSG_RESULT([$use_ads])
3968
3969 LIBS="$ac_save_LIBS"
3970 fi
3971
3972 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
3973 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
3974
3975
3976 ########################################################
3977 # Compile with DNS Updates support?
3978
3979 with_dnsupdate_support=no
3980 AC_MSG_CHECKING([whether to enable DNS Updates support])
3981
3982 AC_ARG_WITH(dnsupdate,
3983 [  --with-dnsupdate        Enable DNS Updates support (default no)],
3984 [ case "$withval" in
3985     yes|no)
3986         with_dnsupdate_support=$withval
3987         ;;
3988   esac ])
3989
3990 AC_MSG_RESULT($with_dnsupdate_support)
3991
3992 if test x"$with_dnsupdate_support" != x"no"; then
3993
3994   ################################################################
3995   # first test for Active Directory support being enabled
3996   #if test x"$with_ads_support" = x"no"; then
3997   #             AC_MSG_ERROR(Active Directory support is required to enable DNS Update support)
3998   #             with_dnsupdate_support=no
3999   #fi           
4000   ##################################################################
4001   # then test for uuid.h (necessary to generate unique DNS keynames
4002   # (uuid.h is required for this test)
4003   AC_CHECK_HEADERS(uuid/uuid.h)
4004   
4005   if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
4006         if test x"$with_dnsupdate_support" = x"yes"; then
4007          AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
4008         else
4009          AC_MSG_WARN(uuid.h is needed to enable DNS Updates support)
4010         fi
4011         with_dnsupdate_support=no
4012   fi
4013 fi
4014
4015 if test x"$with_dnsupdate_support" != x"no"; then
4016
4017   ########################################################
4018   # Now see if we can find the uuid libs in standard paths
4019   # On some systems, the uuid API is in libc, so we have to
4020   # be careful not to insert a spurious -luuid.
4021   
4022   UUID_LIBS=""
4023   AC_LIBTESTFUNC(uuid, uuid_generate,
4024           [
4025             case " $LIBS " in
4026                 *\ -luuid\ *)
4027                 UUID_LIBS="-luuid"
4028                 SMB_REMOVE_LIB(uuid)
4029                 ;;
4030             esac
4031
4032             with_dnsupdate_support=yes
4033             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4034         ],
4035         [
4036             if test x"$with_dnsupdate_support" = x"yes"; then
4037                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4038             else
4039                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4040             fi
4041             with_dnsupdate_support=no
4042         ])
4043 fi
4044
4045 #################################################
4046 # check for automount support
4047 AC_MSG_CHECKING(whether to use automount)
4048 AC_ARG_WITH(automount,
4049 [  --with-automount        Include automount support (default=no)],
4050 [ case "$withval" in
4051   yes)
4052     AC_MSG_RESULT(yes)
4053     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4054     ;;
4055   *)
4056     AC_MSG_RESULT(no)
4057     ;;
4058   esac ],
4059   AC_MSG_RESULT(no)
4060 )
4061
4062 #################################################
4063 # check for smbmount support
4064 AC_MSG_CHECKING(whether to use smbmount)
4065 AC_ARG_WITH(smbmount,
4066 [  --with-smbmount         Include smbmount (Linux only) support (default=no)],
4067 [ case "$withval" in
4068   yes)
4069         case "$host_os" in
4070         *linux*)
4071                 AC_MSG_RESULT(yes)
4072                 AC_DEFINE(WITH_SMBMOUNT,1,[Whether to build smbmount])
4073                 SMBMOUNT_PROGS="bin/smbmount bin/smbmnt bin/smbumount"
4074                 ;;
4075         *)
4076                 AC_MSG_ERROR(not on a linux system!)
4077                 ;;
4078         esac
4079     ;;
4080   *)
4081     AC_MSG_RESULT(no)
4082     ;;
4083   esac ],
4084   AC_MSG_RESULT(no)
4085 )
4086
4087 #################################################
4088 # check for mount- and umount.cifs support
4089 CIFSMOUNT_PROGS=""
4090 INSTALL_CIFSMOUNT=""
4091 UNINSTALL_CIFSMOUNT=""
4092 AC_MSG_CHECKING(whether to build mount.cifs and umount.cifs)
4093 AC_ARG_WITH(cifsmount,
4094 [  --with-cifsmount        Include mount.cifs and umount.cifs (Linux only) support (default=yes)],
4095 [ case "$withval" in
4096   no)
4097         AC_MSG_RESULT(no)
4098         ;;
4099   *)
4100         case "$host_os" in
4101         *linux*)
4102                 AC_MSG_RESULT(yes)
4103                 AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4104                 CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4105                 INSTALL_CIFSMOUNT="installcifsmount"
4106                 UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4107                 ;;
4108         *)
4109                 AC_MSG_ERROR(not on a linux system!)
4110                 ;;
4111         esac
4112     ;;
4113   esac ],
4114 [ case "$host_os" in
4115   *linux*)
4116         AC_MSG_RESULT(yes)
4117         AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4118         CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4119         INSTALL_CIFSMOUNT="installcifsmount"
4120         UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4121         ;;
4122   *)
4123         AC_MSG_RESULT(no)
4124         ;;
4125   esac ]
4126 )
4127
4128
4129 #################################################
4130 # check for a PAM clear-text auth, accounts, password and session support
4131 with_pam_for_crypt=no
4132 try_pam=no
4133 AC_MSG_CHECKING(whether to try PAM support)
4134 AC_ARG_WITH(pam,
4135 [  --with-pam              Include PAM support (default=no)],
4136 [ case "$withval" in
4137   yes|no)
4138     try_pam=$withval
4139     ;;
4140   esac
4141 ])
4142 AC_MSG_RESULT([$try_pam])
4143
4144 use_pam=no
4145 create_pam_modules=no
4146 if test x"${try_pam}" != x"no";then
4147         use_pam=yes
4148         create_pam_modules=yes
4149
4150         AC_CHECK_HEADERS(security/pam_appl.h)
4151         if test x"$ac_cv_header_security_pam_appl_h" != x"yes"; then
4152                 if test x"${try_pam}" = x"yes";then
4153                         AC_MSG_ERROR([--with-pam=yes but security/pam_appl.h not found])
4154                 fi
4155                 use_pam=no
4156                 create_pam_modules=no
4157         fi
4158
4159         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4160         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4161                 if test x"${try_pam}" = x"yes";then
4162                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4163                 fi
4164                 use_pam=no
4165                 create_pam_modules=no
4166         fi
4167
4168         AC_CHECK_HEADERS(security/pam_modules.h,,,[[
4169                 #if HAVE_SECURITY_PAM_APPL_H
4170                 #include <security/pam_appl.h>
4171                 #endif
4172         ]])
4173         if test x"$ac_cv_header_security_pam_modules_h" = x"no"; then
4174                 if test x"${try_pam}" = x"yes";then
4175                         AC_MSG_ERROR([--with-pam=yes but security/pam_modules.h not found])
4176                 fi
4177                 create_pam_modules=no
4178         fi
4179
4180         if test x"$use_pam" = x"yes"; then
4181                 AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4182                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4183                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4184                 with_pam_for_crypt=yes
4185
4186                 if test x"$create_pam_modules" = x"yes"; then
4187                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4188                         # this checks are optional,
4189                         # we don't care about the results here
4190                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4191                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4192                 else
4193                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4194                 fi
4195         fi
4196         AC_MSG_CHECKING(whether to use PAM support)
4197         AC_MSG_RESULT([$use_pam])
4198
4199         AC_MSG_CHECKING(whether to have PAM MODULES support)
4200         AC_MSG_RESULT([$create_pam_modules])
4201 fi # try_pam != no
4202
4203 #################################################
4204 # check for pam_smbpass support
4205 PAM_MODULES=""
4206 INSTALL_PAM_MODULES=""
4207 UNINSTALL_PAM_MODULES=""
4208 AC_MSG_CHECKING(whether to use pam_smbpass)
4209 AC_ARG_WITH(pam_smbpass,
4210 [  --with-pam_smbpass      Build PAM module for authenticating against passdb backends (default=no)],
4211 [ case "$withval" in
4212   yes)
4213     AC_MSG_RESULT(yes)
4214
4215        # Conditions under which pam_smbpass should not be built.
4216
4217        if test x"$BLDSHARED" != x"true"; then
4218           AC_MSG_ERROR([No support for shared modules])
4219        elif test x"$create_pam_modules" != x"yes"; then
4220           AC_MSG_ERROR([No support for PAM MODULES])
4221        else
4222           PAM_MODULES="pam_smbpass"
4223           INSTALL_PAM_MODULES="installpammodules"
4224           UNINSTALL_PAM_MODULES="uninstallpammodules"
4225        fi
4226     ;;
4227   *)
4228     AC_MSG_RESULT(no)
4229     ;;
4230   esac ],
4231   AC_MSG_RESULT(no)
4232 )
4233
4234
4235 ###############################################
4236 # test for where we get crypt() from
4237 AC_SEARCH_LIBS(crypt, [crypt],
4238   [test "$ac_cv_search_crypt" = "none required" || AUTH_LIBS="-lcrypt $AUTH_LIBS"
4239   AC_DEFINE(HAVE_CRYPT,1,[Whether the system has the crypt() function])])
4240
4241 ##
4242 ## moved after the check for -lcrypt in order to
4243 ## ensure that the necessary libraries are included
4244 ## check checking for truncated salt.  Wrapped by the
4245 ## $with_pam_for_crypt variable as above   --jerry
4246 ##
4247 if test $with_pam_for_crypt = no; then
4248 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4249 crypt_LIBS="$LIBS"
4250 LIBS="$AUTH_LIBS $LIBS"
4251 AC_TRY_RUN([#include "${srcdir-.}/tests/crypttest.c"],
4252         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4253 LIBS="$crypt_LIBS"])
4254 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4255         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4256 fi
4257 fi
4258
4259 #################################################
4260 # check for a NISPLUS_HOME support 
4261 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4262 AC_ARG_WITH(nisplus-home,
4263 [  --with-nisplus-home     Include NISPLUS_HOME support (default=no)],
4264 [ case "$withval" in
4265   yes)
4266     AC_MSG_RESULT(yes)
4267     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4268     ;;
4269   *)
4270     AC_MSG_RESULT(no)
4271     ;;
4272   esac ],
4273   AC_MSG_RESULT(no)
4274 )
4275
4276 #################################################
4277 # check for syslog logging
4278 AC_MSG_CHECKING(whether to use syslog logging)
4279 AC_ARG_WITH(syslog,
4280 [  --with-syslog           Include experimental SYSLOG support (default=no)],
4281 [ case "$withval" in
4282   yes)
4283     AC_MSG_RESULT(yes)
4284     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4285     ;;
4286   *)
4287     AC_MSG_RESULT(no)
4288     ;;
4289   esac ],
4290   AC_MSG_RESULT(no)
4291 )
4292
4293 #################################################
4294 # check for experimental disk-quotas support
4295
4296 samba_cv_WITH_QUOTAS=auto
4297 samba_cv_TRY_QUOTAS=no
4298 samba_cv_RUN_QUOTA_TESTS=auto
4299 samba_cv_WITH_SYS_QUOTAS=auto
4300 samba_cv_TRY_SYS_QUOTAS=auto
4301 samba_cv_SYSQUOTA_FOUND=no
4302
4303 AC_MSG_CHECKING(whether to try disk-quotas support)
4304 AC_ARG_WITH(quotas,
4305 [  --with-quotas           Include disk-quota support (default=no)],
4306 [ case "$withval" in
4307   yes)
4308     AC_MSG_RESULT(yes)
4309     samba_cv_WITH_QUOTAS=yes
4310     samba_cv_TRY_QUOTAS=yes
4311     samba_cv_RUN_QUOTA_TESTS=yes
4312     #set sys quotas to auto in this case
4313     samba_cv_TRY_SYS_QUOTAS=auto
4314     ;;
4315   auto)
4316     AC_MSG_RESULT(auto)
4317     samba_cv_WITH_QUOTAS=auto
4318     samba_cv_TRY_QUOTAS=auto
4319     samba_cv_RUN_QUOTA_TESTS=auto
4320     #set sys quotas to auto in this case
4321     samba_cv_TRY_SYS_QUOTAS=auto
4322     ;;
4323   no)
4324     AC_MSG_RESULT(no)
4325     samba_cv_WITH_QUOTAS=no
4326     samba_cv_TRY_QUOTAS=no
4327     samba_cv_RUN_QUOTA_TESTS=no
4328     ;;
4329   *)
4330     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4331     ;;
4332   esac ],
4333   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4334 )
4335
4336 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4337 AC_ARG_WITH(sys-quotas,
4338 [  --with-sys-quotas       Include lib/sysquotas.c support (default=auto)],
4339 [ case "$withval" in
4340   yes)
4341     AC_MSG_RESULT(yes)
4342     samba_cv_WITH_SYS_QUOTAS=yes
4343     samba_cv_TRY_SYS_QUOTAS=yes
4344     samba_cv_RUN_QUOTA_TESTS=yes
4345     ;;
4346   auto)
4347     AC_MSG_RESULT(auto)
4348     samba_cv_WITH_SYS_QUOTAS=auto
4349     samba_cv_TRY_SYS_QUOTAS=auto
4350     samba_cv_RUN_QUOTA_TESTS=auto
4351     ;;
4352   no)
4353     AC_MSG_RESULT(no)
4354     samba_cv_WITH_SYS_QUOTAS=no
4355     samba_cv_TRY_SYS_QUOTAS=no
4356     ;;
4357   *)
4358     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4359     ;;
4360   esac ],
4361   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4362 )
4363
4364 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4365 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4366   case "$host_os" in
4367         *linux*)
4368             AC_MSG_RESULT(yes)
4369             samba_cv_TRY_SYS_QUOTAS=yes
4370             samba_cv_RUN_QUOTA_TESTS=yes
4371             ;;
4372         *)
4373             AC_MSG_RESULT(no)
4374             samba_cv_TRY_SYS_QUOTAS=no
4375             ;;
4376   esac
4377 fi
4378
4379 #############################################
4380 # only check for quota stuff if --with-quotas
4381 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4382
4383 case "$host_os" in
4384         # on linux we didn't need to test we have builtin support
4385         *linux*)
4386             samba_cv_SYSQUOTA_FOUND=yes
4387             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4388             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4389             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4390             AC_MSG_RESULT(yes)
4391
4392             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4393             samba_cv_found_xfs_header=yes
4394             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4395             AC_MSG_RESULT(yes)
4396             ;;
4397         *solaris*)
4398             # need to set this define when using static linking (BUG 1473)
4399             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4400             ;;
4401         *)
4402             ;;
4403 esac
4404
4405 # some broken header files need this
4406 AC_CHECK_HEADER(asm/types.h,[
4407             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4408             AC_ADD_INCLUDE(<asm/types.h>)
4409             ])
4410
4411 # For quotas on Veritas VxFS filesystems
4412 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4413
4414 # For sys/quota.h and linux/quota.h
4415 AC_CHECK_HEADERS(sys/quota.h)
4416
4417 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4418 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4419 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4420 AC_TRY_COMPILE([
4421 #include "confdefs.h"
4422 #ifdef HAVE_SYS_TYPES_H
4423 #include <sys/types.h>
4424 #endif
4425 #ifdef HAVE_ASM_TYPES_H
4426 #include <asm/types.h>
4427 #endif
4428 #include <sys/quota.h>
4429 ],[int i = Q_XGETQUOTA;],
4430 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4431 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4432         samba_cv_found_xfs_header=yes
4433 fi
4434 fi
4435
4436 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX 
4437 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4438 AC_TRY_COMPILE([
4439 #include "confdefs.h"
4440 #ifdef HAVE_SYS_QUOTA_H
4441 #include <sys/quota.h>
4442 #endif
4443 ],[
4444 struct dqblk D;
4445 D.dqb_fsoftlimit = 0;],
4446 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4447 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4448         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4449 fi
4450
4451 ##################
4452 # look for a working quota system
4453
4454 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4455 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4456 AC_TRY_RUN_STRICT([
4457 #define HAVE_QUOTACTL_4A 1
4458 #define AUTOCONF_TEST 1
4459 #include "confdefs.h"
4460 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4461            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4462 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4463     samba_cv_SYSQUOTA_FOUND=yes;
4464     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4465     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
4466 fi
4467 fi
4468
4469 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4470 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4471 AC_TRY_RUN_STRICT([
4472 #define HAVE_QUOTACTL_4B 1
4473 #define AUTOCONF_TEST 1
4474 #include "confdefs.h"
4475 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4476            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4477 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4478     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
4479     samba_cv_SYSQUOTA_FOUND=yes;
4480     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4481     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
4482 fi
4483 fi
4484
4485 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4486 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
4487 AC_TRY_RUN_STRICT([
4488 #define HAVE_QUOTACTL_3 1
4489 #define AUTOCONF_TEST 1
4490 #include "confdefs.h"
4491 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4492            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
4493 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
4494     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
4495     samba_cv_SYSQUOTA_FOUND=yes;
4496     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
4497     samba_cv_sysquotas_file="lib/sysquotas_3.c"
4498 fi
4499 fi
4500
4501 #################################################
4502 # check for mntent.h and struct mntent
4503 AC_CHECK_HEADERS(mntent.h)
4504 #################################################
4505 # check for setmntent,getmntent,endmntent
4506 AC_CHECK_FUNCS(setmntent getmntent endmntent)
4507
4508 #################################################
4509 # check for devnm.h and struct mntent
4510 AC_CHECK_HEADERS(devnm.h)
4511 #################################################
4512 # check for devnm
4513 AC_CHECK_FUNCS(devnm)
4514
4515 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
4516     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4517         # if --with-sys-quotas=yes then build it 
4518         # you have can use the get/set quota command smb.conf
4519         # options then
4520         samba_cv_SYSQUOTA_FOUND=auto
4521     fi
4522     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
4523         # if --with-sys-quotas=yes then build it 
4524         # you have can use the get/set quota command smb.conf
4525         # options then
4526         samba_cv_TRY_SYS_QUOTAS=auto
4527     fi
4528 fi
4529
4530 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
4531 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
4532 SAVE_CPPFLAGS="$CPPFLAGS"
4533 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4534 AC_TRY_COMPILE([
4535 #include "confdefs.h"
4536 #define NO_PROTO_H 1
4537 #define NO_CONFIG_H 1
4538 #define HAVE_SYS_QUOTAS 1
4539 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
4540 #include "${srcdir-.}/lib/sysquotas.c"
4541 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
4542 CPPFLAGS="$SAVE_CPPFLAGS"
4543 ])
4544 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
4545 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
4546     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then 
4547         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4548         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
4549         samba_cv_WE_USE_SYS_QUOTAS=yes
4550         AC_MSG_RESULT(yes)
4551     else
4552         AC_MSG_RESULT(no)
4553     fi
4554 fi
4555 fi
4556
4557 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
4558 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
4559 SAVE_CPPFLAGS="$CPPFLAGS"
4560 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4561 AC_TRY_COMPILE([
4562 #include "confdefs.h"
4563 #define NO_PROTO_H 1
4564 #define NO_CONFIG_H 1
4565 #define HAVE_SYS_QUOTAS 1
4566 #define HAVE_XFS_QUOTAS 1
4567 #include "${srcdir-.}/lib/sysquotas_xfs.c"
4568 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
4569 CPPFLAGS="$SAVE_CPPFLAGS"
4570 ])
4571 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
4572     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
4573         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
4574     fi
4575 fi
4576 fi
4577
4578 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
4579 SAVE_CPPFLAGS="$CPPFLAGS"
4580 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4581 AC_TRY_COMPILE([
4582 #include "confdefs.h"
4583 #define NO_PROTO_H 1
4584 #define NO_CONFIG_H 1
4585 #include "${srcdir-.}/smbd/quotas.c"
4586 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
4587 CPPFLAGS="$SAVE_CPPFLAGS"
4588 ])
4589 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
4590 AC_MSG_CHECKING(whether to use the old quota support)
4591     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
4592       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
4593         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4594         AC_MSG_RESULT(yes)
4595       else
4596         AC_MSG_RESULT(no)
4597       fi
4598     else
4599       AC_MSG_RESULT(no)
4600     fi
4601 fi
4602
4603 ####################
4604 # End of quota check samba_cv_RUN_QUOTA_TESTS
4605 fi
4606
4607 #################################################
4608 # check for experimental utmp accounting
4609
4610 AC_MSG_CHECKING(whether to support utmp accounting)
4611 WITH_UTMP=yes
4612 AC_ARG_WITH(utmp,
4613 [  --with-utmp             Include utmp accounting (default, if supported by OS)],
4614 [ case "$withval" in
4615   no)
4616                 WITH_UTMP=no
4617                 ;;
4618   *)
4619                 WITH_UTMP=yes
4620                 ;;
4621   esac ],
4622 )
4623
4624 # utmp requires utmp.h
4625 # Note similar check earlier, when checking utmp details.
4626
4627 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
4628         utmp_no_reason=", no utmp.h on $host_os"
4629         WITH_UTMP=no
4630 fi
4631
4632 # Display test results
4633
4634 if test x"$WITH_UTMP" = x"yes"; then
4635         AC_MSG_RESULT(yes)
4636         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
4637 else
4638         AC_MSG_RESULT(no$utmp_no_reason)
4639 fi
4640
4641 INSTALLLIBCMD_SH=:
4642 INSTALLLIBCMD_A=:
4643 UNINSTALLLIBCMD_SH=:
4644 UNINSTALLLIBCMD_A=:
4645
4646 if test $BLDSHARED = true; then
4647         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
4648         UNINSTALLLIBCMD_SH="rm -f"
4649 fi
4650 if test $enable_static = yes; then
4651         INSTALLLIBCMD_A="\$(INSTALLCMD)"
4652         UNINSTALLLIBCMD_A="rm -f"
4653 fi
4654
4655 #################################################
4656 # should we build libmsrpc?
4657 INSTALL_LIBMSRPC=
4658 UNINSTALL_LIBMSRPC=
4659 LIBMSRPC_SHARED=
4660 LIBMSRPC=
4661 AC_MSG_CHECKING(whether to build the libmsrpc shared library)
4662 AC_ARG_WITH(libmsrpc,
4663 [  --with-libmsrpc         Build the libmsrpc shared library (default=yes if shared libs supported)],
4664 [ case "$withval" in
4665   no) 
4666      AC_MSG_RESULT(no)
4667      ;;
4668   *)
4669      if test $BLDSHARED = true; then
4670         LIBMSRPC_SHARED=bin/libmsrpc.$SHLIBEXT
4671         LIBMSRPC=libmsrpc
4672         AC_MSG_RESULT(yes)
4673      else
4674         enable_static=yes
4675         AC_MSG_RESULT(no shared library support -- will supply static library)
4676      fi
4677      if test $enable_static = yes; then
4678         LIBMSRPC=libmsrpc
4679      fi
4680      INSTALL_LIBMSRPC=installlibmsrpc
4681      UNINSTALL_LIBMSRPC=uninstalllibmsrpc
4682      ;;
4683   esac ],
4684 [
4685 # if unspecified, default is to built it if possible.
4686   if test $BLDSHARED = true; then
4687      LIBMSRPC_SHARED=bin/libmsrpc.$SHLIBEXT
4688      LIBMSRPC=libmsrpc
4689      AC_MSG_RESULT(yes)
4690    else
4691      enable_static=yes
4692      AC_MSG_RESULT(no shared library support -- will supply static library)
4693    fi
4694    if test $enable_static = yes; then
4695      LIBMSRPC=libmsrpc
4696   fi]
4697   INSTALL_LIBMSRPC=installlibmsrpc
4698   UNINSTALL_LIBMSRPC=uninstalllibmsrpc
4699 )
4700
4701
4702 #################################################
4703 # should we build libaddns?
4704 INSTALL_LIBADDNS=
4705 UNINSTALL_LIBADDNS=
4706 LIBADDNS_SHARED=
4707 LIBADDNS=
4708 AC_MSG_CHECKING(whether to build the libaddns shared library)
4709 AC_ARG_WITH(libaddns,
4710 [  --with-libaddns         Build the libaddns shared library (default=yes if shared libs supported)],
4711 [ case "$withval" in
4712   no) 
4713      AC_MSG_RESULT(no)
4714      ;;
4715   *)
4716      if test $BLDSHARED = true; then
4717         LIBADDNS_SHARED=bin/libaddns.$SHLIBEXT
4718         LIBADDNS=libaddns
4719         AC_MSG_RESULT(yes)
4720      else
4721         enable_static=yes
4722         AC_MSG_RESULT(no shared library support -- will supply static library)
4723      fi
4724      if test $enable_static = yes; then
4725         LIBADDNS=libaddns
4726      fi
4727      INSTALL_LIBADDNS=installlibaddns
4728      UNINSTALL_LIBADDNS=uninstalllibaddns
4729      ;;
4730   esac ],
4731 [
4732 # if unspecified, default is to built it if possible.
4733   if test $BLDSHARED = true; then
4734      LIBADDNS_SHARED=bin/libaddns.$SHLIBEXT
4735      LIBADDNS=libaddns
4736      AC_MSG_RESULT(yes)
4737    else
4738      enable_static=yes
4739      AC_MSG_RESULT(no shared library support -- will supply static library)
4740    fi
4741    if test $enable_static = yes; then
4742      LIBADDNS=libaddns
4743   fi]
4744   INSTALL_LIBADDNS=installlibaddns
4745   UNINSTALL_LIBADDNS=uninstalllibaddns
4746 )
4747
4748 #################################################
4749 # should we build libsmbclient?
4750 INSTALL_LIBSMBCLIENT=
4751 UNINSTALL_LIBSMBCLIENT=
4752 LIBSMBCLIENT_SHARED=
4753 LIBSMBCLIENT=
4754 AC_MSG_CHECKING(whether to build the libsmbclient shared library)
4755 AC_ARG_WITH(libsmbclient,
4756 [  --with-libsmbclient     Build the libsmbclient shared library (default=yes if shared libs supported)],
4757 [ case "$withval" in
4758   no) 
4759      AC_MSG_RESULT(no)
4760      ;;
4761   *)
4762      if test $BLDSHARED = true; then
4763         LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
4764         LIBSMBCLIENT=libsmbclient
4765         AC_MSG_RESULT(yes)
4766      else
4767         enable_static=yes
4768         AC_MSG_RESULT(no shared library support -- will supply static library)
4769      fi
4770      if test $enable_static = yes; then
4771         LIBSMBCLIENT=libsmbclient
4772      fi
4773      INSTALL_LIBSMBCLIENT=installclientlib
4774      UNINSTALL_LIBSMBCLIENT=uninstallclientlib
4775      ;;
4776   esac ],
4777 [
4778 # if unspecified, default is to built it if possible.
4779   if test $BLDSHARED = true; then
4780      LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
4781      LIBSMBCLIENT=libsmbclient
4782      AC_MSG_RESULT(yes)
4783    else
4784      enable_static=yes
4785      AC_MSG_RESULT(no shared library support -- will supply static library)
4786    fi
4787    if test $enable_static = yes; then
4788      LIBSMBCLIENT=libsmbclient
4789   fi]
4790   INSTALL_LIBSMBCLIENT=installclientlib
4791   UNINSTALL_LIBSMBCLIENT=uninstallclientlib
4792 )
4793
4794 INSTALL_LIBSMBSHAREMODES=
4795 LIBSMBSHAREMODES_SHARED=
4796 LIBSMBSHAREMODES=
4797 AC_MSG_CHECKING(whether to build the libsmbsharemodes shared library)
4798 AC_ARG_WITH(libsmbsharemodes,
4799 [  --with-libsmbsharemodes     Build the libsmbsharemodes shared library (default=yes if shared libs supported)],
4800 [ case "$withval" in
4801   no)
4802      AC_MSG_RESULT(no)
4803      ;;
4804   *)
4805      if test $BLDSHARED = true; then
4806         LIBSMBSHAREMODES_SHARED=bin/libsmbsharemodes.$SHLIBEXT
4807         LIBSMBSHAREMODES=libsmbsharemodes
4808         AC_MSG_RESULT(yes)
4809      else
4810         enable_static=yes
4811         AC_MSG_RESULT(no shared library support -- will supply static library)
4812      fi
4813      if test $enable_static = yes; then
4814         LIBSMBSHAREMODES=libsmbsharemodes
4815      fi
4816      INSTALL_LIBSMBSHAREMODES=installlibsmbsharemodes
4817      UNINSTALL_LIBSMBSHAREMODES=uninstalllibsmbsharemodes
4818      ;;
4819   esac ],
4820 [
4821 # if unspecified, default is to built it if possible.
4822   if test $BLDSHARED = true; then
4823      LIBSMBSHAREMODES_SHARED=bin/libsmbsharemodes.$SHLIBEXT
4824      LIBSMBSHAREMODES=libsmbsharemodes
4825      AC_MSG_RESULT(yes)
4826    else
4827      enable_static=yes
4828      AC_MSG_RESULT(no shared library support -- will supply static library)
4829    fi
4830    if test $enable_static = yes; then
4831      LIBSMBSHAREMODES=libsmbsharemodes
4832   fi]
4833   INSTALL_LIBSMBSHAREMODES=installlibsmbsharemodes
4834 )
4835
4836 #################################################
4837 # these tests are taken from the GNU fileutils package
4838 AC_CHECKING(how to get filesystem space usage)
4839 space=no
4840
4841 # Test for statvfs64.
4842 if test $space = no; then
4843   # SVR4
4844   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
4845   [AC_TRY_RUN([
4846 #if defined(HAVE_UNISTD_H)
4847 #include <unistd.h>
4848 #endif
4849 #include <sys/types.h>
4850 #include <sys/statvfs.h>
4851   main ()
4852   {
4853     struct statvfs64 fsd;
4854     exit (statvfs64 (".", &fsd));
4855   }],
4856   fu_cv_sys_stat_statvfs64=yes,
4857   fu_cv_sys_stat_statvfs64=no,
4858   fu_cv_sys_stat_statvfs64=cross)])
4859   if test $fu_cv_sys_stat_statvfs64 = yes; then
4860     space=yes
4861     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
4862   fi
4863 fi
4864
4865 # Perform only the link test since it seems there are no variants of the
4866 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
4867 # because that got a false positive on SCO OSR5.  Adding the declaration
4868 # of a `struct statvfs' causes this test to fail (as it should) on such
4869 # systems.  That system is reported to work fine with STAT_STATFS4 which
4870 # is what it gets when this test fails.
4871 if test $space = no; then
4872   # SVR4
4873   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
4874                  [AC_TRY_LINK([#include <sys/types.h>
4875 #include <sys/statvfs.h>],
4876                               [struct statvfs fsd; statvfs (0, &fsd);],
4877                               fu_cv_sys_stat_statvfs=yes,
4878                               fu_cv_sys_stat_statvfs=no)])
4879   if test $fu_cv_sys_stat_statvfs = yes; then
4880     space=yes
4881     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
4882   fi
4883 fi
4884
4885 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
4886 # This is not the case on ancient Linux systems.
4887
4888 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
4889     AC_TRY_COMPILE([#include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
4890         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
4891 if test x"$samba_cv_fsid_int" = x"yes"; then
4892     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
4893 fi
4894
4895 if test $space = no; then
4896   # DEC Alpha running OSF/1
4897   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
4898   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
4899   [AC_TRY_RUN([
4900 #include <sys/param.h>
4901 #include <sys/types.h>
4902 #include <sys/mount.h>
4903   main ()
4904   {
4905     struct statfs fsd;
4906     fsd.f_fsize = 0;
4907     exit (statfs (".", &fsd, sizeof (struct statfs)));
4908   }],
4909   fu_cv_sys_stat_statfs3_osf1=yes,
4910   fu_cv_sys_stat_statfs3_osf1=no,
4911   fu_cv_sys_stat_statfs3_osf1=no)])
4912   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
4913   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
4914     space=yes
4915     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
4916   fi
4917 fi
4918
4919 if test $space = no; then
4920 # AIX
4921   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
4922 member (AIX, 4.3BSD)])
4923   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
4924   [AC_TRY_RUN([
4925 #ifdef HAVE_SYS_PARAM_H
4926 #include <sys/param.h>
4927 #endif
4928 #ifdef HAVE_SYS_MOUNT_H
4929 #include <sys/mount.h>
4930 #endif
4931 #ifdef HAVE_SYS_VFS_H
4932 #include <sys/vfs.h>
4933 #endif
4934   main ()
4935   {
4936   struct statfs fsd;
4937   fsd.f_bsize = 0;
4938   exit (statfs (".", &fsd));
4939   }],
4940   fu_cv_sys_stat_statfs2_bsize=yes,
4941   fu_cv_sys_stat_statfs2_bsize=no,
4942   fu_cv_sys_stat_statfs2_bsize=no)])
4943   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
4944   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
4945     space=yes
4946     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
4947   fi
4948 fi
4949
4950 if test $space = no; then
4951 # SVR3
4952   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
4953   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
4954   [AC_TRY_RUN([#include <sys/types.h>
4955 #include <sys/statfs.h>
4956   main ()
4957   {
4958   struct statfs fsd;
4959   exit (statfs (".", &fsd, sizeof fsd, 0));
4960   }],
4961     fu_cv_sys_stat_statfs4=yes,
4962     fu_cv_sys_stat_statfs4=no,
4963     fu_cv_sys_stat_statfs4=no)])
4964   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
4965   if test $fu_cv_sys_stat_statfs4 = yes; then
4966     space=yes
4967     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
4968   fi
4969 fi
4970
4971 if test $space = no; then
4972 # 4.4BSD and NetBSD
4973   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
4974 member (4.4BSD and NetBSD)])
4975   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
4976   [AC_TRY_RUN([#include <sys/types.h>
4977 #ifdef HAVE_SYS_PARAM_H
4978 #include <sys/param.h>
4979 #endif
4980 #ifdef HAVE_SYS_MOUNT_H
4981 #include <sys/mount.h>
4982 #endif
4983   main ()
4984   {
4985   struct statfs fsd;
4986   fsd.f_fsize = 0;
4987   exit (statfs (".", &fsd));
4988   }],
4989   fu_cv_sys_stat_statfs2_fsize=yes,
4990   fu_cv_sys_stat_statfs2_fsize=no,
4991   fu_cv_sys_stat_statfs2_fsize=no)])
4992   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
4993   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
4994     space=yes
4995         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
4996   fi
4997 fi
4998
4999 if test $space = no; then
5000   # Ultrix
5001   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
5002   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
5003   [AC_TRY_RUN([#include <sys/types.h>
5004 #ifdef HAVE_SYS_PARAM_H
5005 #include <sys/param.h>
5006 #endif
5007 #ifdef HAVE_SYS_MOUNT_H
5008 #include <sys/mount.h>
5009 #endif
5010 #ifdef HAVE_SYS_FS_TYPES_H
5011 #include <sys/fs_types.h>
5012 #endif
5013   main ()
5014   {
5015   struct fs_data fsd;
5016   /* Ultrix's statfs returns 1 for success,
5017      0 for not mounted, -1 for failure.  */
5018   exit (statfs (".", &fsd) != 1);
5019   }],
5020   fu_cv_sys_stat_fs_data=yes,
5021   fu_cv_sys_stat_fs_data=no,
5022   fu_cv_sys_stat_fs_data=no)])
5023   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
5024   if test $fu_cv_sys_stat_fs_data = yes; then
5025     space=yes
5026     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
5027   fi
5028 fi
5029
5030 #
5031 # As a gating factor for large file support, in order to
5032 # use <4GB files we must have the following minimal support
5033 # available.
5034 # long long, and a 64 bit off_t or off64_t.
5035 # If we don't have all of these then disable large
5036 # file support.
5037 #
5038 AC_MSG_CHECKING([if large file support can be enabled])
5039 AC_TRY_COMPILE([
5040 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
5041 #include <sys/types.h>
5042 #else
5043 __COMPILE_ERROR_
5044 #endif
5045 ],
5046 [int i],
5047 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
5048 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
5049         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
5050 fi
5051 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
5052
5053 #################################################
5054 # check for cluster extensions
5055
5056 AC_MSG_CHECKING(whether to include cluster support)
5057 AC_ARG_WITH(cluster-support, 
5058 [  --with-cluster-support  Enable cluster extensions (default=no)])
5059 if test "x$with_cluster_support" = "xyes"; then
5060     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5061     AC_MSG_RESULT(yes)
5062 else
5063     AC_MSG_RESULT(no)
5064 fi
5065
5066
5067 #################################################
5068 # check for ACL support
5069
5070 AC_MSG_CHECKING(whether to support ACLs)
5071 AC_ARG_WITH(acl-support,
5072 [  --with-acl-support      Include ACL support (default=no)],
5073 [ case "$withval" in
5074   yes)
5075
5076         case "$host_os" in
5077         *sysv5*)
5078                 AC_MSG_RESULT(Using UnixWare ACLs)
5079                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5080                 default_static_modules="$default_static_modules vfs_solarisacl"
5081                 ;;
5082         *solaris*)
5083                 AC_MSG_RESULT(Using solaris ACLs)
5084                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5085                 ACL_LIBS="$ACL_LIBS -lsec"
5086                 default_static_modules="$default_static_modules vfs_solarisacl"
5087                 ;;
5088         *hpux*)
5089                 AC_MSG_RESULT(Using HPUX ACLs)
5090                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5091                 default_static_modules="$default_static_modules vfs_hpuxacl"
5092                 ;;
5093         *irix*)
5094                 AC_MSG_RESULT(Using IRIX ACLs)
5095                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5096                 default_static_modules="$default_static_modules vfs_irixacl"
5097                 ;;
5098         *aix*)
5099                 AC_MSG_RESULT(Using AIX ACLs)
5100                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5101                 default_static_modules="$default_static_modules vfs_aixacl"
5102                 ;;
5103         *osf*)
5104                 AC_MSG_RESULT(Using Tru64 ACLs)
5105                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5106                 ACL_LIBS="$ACL_LIBS -lpacl"
5107                 default_static_modules="$default_static_modules vfs_tru64acl"
5108                 ;;
5109         *freebsd[[5-9]]*)
5110                 AC_MSG_RESULT(Using FreeBSD posix ACLs)
5111                 AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether FreeBSD POSIX ACLs are available])
5112                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5113                 ;;
5114         *linux*)
5115                 AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5116                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5117                 AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[
5118                         acl_LIBS=$LIBS
5119                         LIBS="$LIBS -lacl"
5120                         AC_TRY_LINK([
5121                                 #include <sys/types.h>
5122                                 #include <sys/acl.h>
5123                         ],[
5124                                 acl_t acl;
5125                                 int entry_id;
5126                                 acl_entry_t *entry_p;
5127                                 return acl_get_entry(acl, entry_id, entry_p);
5128                         ],
5129                         [samba_cv_HAVE_POSIX_ACLS=yes],
5130                         [samba_cv_HAVE_POSIX_ACLS=no])
5131                         LIBS=$acl_LIBS
5132                 ])
5133                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5134                         AC_MSG_RESULT(Using posix ACLs)
5135                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5136                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5137                                 acl_LIBS=$LIBS
5138                                 LIBS="$LIBS -lacl"
5139                                 AC_TRY_LINK([
5140                                         #include <sys/types.h>
5141                                         #include <sys/acl.h>
5142                                 ],[
5143                                         acl_permset_t permset_d;
5144                                         acl_perm_t perm;
5145                                         return acl_get_perm_np(permset_d, perm);
5146                                 ],
5147                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5148                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5149                                 LIBS=$acl_LIBS
5150                         ])
5151                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5152                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5153                         fi
5154                 fi
5155             ;;
5156          *)
5157                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5158                 AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[
5159                         acl_LIBS=$LIBS
5160                         LIBS="$LIBS -lacl"
5161                         AC_TRY_LINK([
5162                                 #include <sys/types.h>
5163                                 #include <sys/acl.h>
5164                         ],[
5165                                 acl_t acl;
5166                                 int entry_id;
5167                                 acl_entry_t *entry_p;
5168                                 return acl_get_entry( acl, entry_id, entry_p);
5169                         ],
5170                         [samba_cv_HAVE_POSIX_ACLS=yes],
5171                         [samba_cv_HAVE_POSIX_ACLS=no])
5172                         LIBS=$acl_LIBS
5173                 ])
5174                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5175                         AC_MSG_RESULT(Using posix ACLs)
5176                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5177                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5178                                 acl_LIBS=$LIBS
5179                                 LIBS="$LIBS -lacl"
5180                                 AC_TRY_LINK([
5181                                         #include <sys/types.h>
5182                                         #include <sys/acl.h>
5183                                 ],[
5184                                         acl_permset_t permset_d;
5185                                         acl_perm_t perm;
5186                                         return acl_get_perm_np( permset_d, perm);
5187                                 ],
5188                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5189                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5190                                 LIBS=$acl_LIBS
5191                         ])
5192                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5193                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5194                         fi
5195                 fi
5196             ;;
5197         esac
5198         ;;
5199   *)
5200     AC_MSG_RESULT(no)
5201     AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5202     ;;
5203   esac ],
5204   AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5205   AC_MSG_RESULT(no)
5206 )
5207
5208 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5209    default_static_modules="$default_static_modules vfs_posixacl"
5210 fi
5211
5212 #################################################
5213 # check for AIO support
5214
5215 AC_MSG_CHECKING(whether to support asynchronous io)
5216 AC_ARG_WITH(aio-support,
5217 [  --with-aio-support      Include asynchronous io support (default=no)],
5218 [ case "$withval" in
5219   yes)
5220
5221         AC_MSG_RESULT(yes)
5222         case "$host_os" in
5223         *)
5224                 AIO_LIBS=$LIBS
5225                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5226                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5227                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5228                 aio_LIBS=$LIBS
5229                 LIBS=$AIO_LIBS
5230                 AC_TRY_LINK([#include <sys/types.h>
5231 #include <aio.h>],
5232 [ struct aiocb a; return aio_read(&a);],
5233 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5234                 LIBS=$aio_LIBS])
5235                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5236                 aio_LIBS=$LIBS
5237                 LIBS=$AIO_LIBS
5238                 AC_TRY_LINK([#include <sys/types.h>
5239 #include <aio.h>],
5240 [ struct aiocb64 a; return aio_read64(&a);],
5241 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5242                 LIBS=$aio_LIBS])
5243                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5244                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5245                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5246                         LIBS=$AIO_LIBS
5247                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5248                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5249                         LIBS=$AIO_LIBS
5250                 fi
5251
5252                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5253                         AC_MSG_CHECKING(for aio_read)
5254                         AC_LINK_IFELSE([#include <aio.h>
5255 int main() { struct aiocb a; return aio_read(&a); }],
5256 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5257 [AC_MSG_RESULT(no)])
5258
5259                         AC_MSG_CHECKING(for aio_write)
5260                         AC_LINK_IFELSE([#include <aio.h>
5261 int main() { struct aiocb a; return aio_write(&a); }],
5262 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5263 [AC_MSG_RESULT(no)])
5264
5265                         AC_MSG_CHECKING(for aio_fsync)
5266                         AC_LINK_IFELSE([#include <aio.h>
5267 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5268 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5269 [AC_MSG_RESULT(no)])
5270
5271                         AC_MSG_CHECKING(for aio_return)
5272                         AC_LINK_IFELSE([#include <aio.h>
5273 int main() { struct aiocb a; return aio_return(&a); }],
5274 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5275 [AC_MSG_RESULT(no)])
5276
5277                         AC_MSG_CHECKING(for aio_error)
5278                         AC_LINK_IFELSE([#include <aio.h>
5279 int main() { struct aiocb a; return aio_error(&a); }],
5280 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5281 [AC_MSG_RESULT(no)])
5282
5283                         AC_MSG_CHECKING(for aio_cancel)
5284                         AC_LINK_IFELSE([#include <aio.h>
5285 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5286 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5287 [AC_MSG_RESULT(no)])
5288
5289                         AC_MSG_CHECKING(for aio_suspend)
5290                         AC_LINK_IFELSE([#include <aio.h>
5291 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5292 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5293 [AC_MSG_RESULT(no)])
5294                 fi
5295
5296                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5297                         AC_MSG_CHECKING(for aio_read64)
5298                         AC_LINK_IFELSE([#include <aio.h>
5299 int main() { struct aiocb a; return aio_read64(&a); }],
5300 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5301 [AC_MSG_RESULT(no)])
5302
5303                         AC_MSG_CHECKING(for aio_write64)
5304                         AC_LINK_IFELSE([#include <aio.h>
5305 int main() { struct aiocb a; return aio_write64(&a); }],
5306 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5307 [AC_MSG_RESULT(no)])
5308
5309                         AC_MSG_CHECKING(for aio_fsync64)
5310                         AC_LINK_IFELSE([#include <aio.h>
5311 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5312 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5313 [AC_MSG_RESULT(no)])
5314
5315                         AC_MSG_CHECKING(for aio_return64)
5316                         AC_LINK_IFELSE([#include <aio.h>
5317 int main() { struct aiocb a; return aio_return64(&a); }],
5318 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5319 [AC_MSG_RESULT(no)])
5320
5321                         AC_MSG_CHECKING(for aio_error64)
5322                         AC_LINK_IFELSE([#include <aio.h>
5323 int main() { struct aiocb a; return aio_error64(&a); }],
5324 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5325 [AC_MSG_RESULT(no)])
5326
5327                         AC_MSG_CHECKING(for aio_cancel64)
5328                         AC_LINK_IFELSE([#include <aio.h>
5329 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5330 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5331 [AC_MSG_RESULT(no)])
5332
5333                         AC_MSG_CHECKING(for aio_suspend64)
5334                         AC_LINK_IFELSE([#include <aio.h>
5335 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5336 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5337 [AC_MSG_RESULT(no)])
5338                 fi
5339             ;;
5340         esac
5341         ;;
5342   *)
5343     AC_MSG_RESULT(no)
5344     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5345     ;;
5346   esac ],
5347   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5348   AC_MSG_RESULT(no)
5349 )
5350
5351 #################################################
5352 # check for sendfile support
5353
5354 with_sendfile_support=yes
5355 AC_MSG_CHECKING(whether to check to support sendfile)
5356 AC_ARG_WITH(sendfile-support,
5357 [  --with-sendfile-support Check for sendfile support (default=yes)],
5358 [ case "$withval" in
5359   yes)
5360
5361         AC_MSG_RESULT(yes);
5362
5363         case "$host_os" in
5364         *linux*)
5365                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5366                 AC_TRY_LINK([#include <sys/sendfile.h>],
5367 [\
5368 int tofd, fromfd;
5369 off64_t offset;
5370 size_t total;
5371 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5372 ],
5373 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5374
5375                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5376                 AC_TRY_LINK([#include <sys/sendfile.h>],
5377 [\
5378 int tofd, fromfd;
5379 off_t offset;
5380 size_t total;
5381 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5382 ],
5383 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5384
5385 # Try and cope with broken Linux sendfile....
5386                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5387                 AC_TRY_LINK([\
5388 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5389 #undef _FILE_OFFSET_BITS
5390 #endif
5391 #include <sys/sendfile.h>],
5392 [\
5393 int tofd, fromfd;
5394 off_t offset;
5395 size_t total;
5396 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5397 ],
5398 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5399
5400         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5401                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5402                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5403                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5404         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5405                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5406                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5407                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5408         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
5409                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5410                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5411         else
5412                 AC_MSG_RESULT(no);
5413         fi
5414
5415         ;;
5416         *freebsd* | *dragonfly* )
5417                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5418                 AC_TRY_LINK([\
5419 #include <sys/types.h>
5420 #include <unistd.h>
5421 #include <sys/socket.h>
5422 #include <sys/uio.h>],
5423 [\
5424         int fromfd, tofd, ret, total=0;
5425         off_t offset, nwritten;
5426         struct sf_hdtr hdr;
5427         struct iovec hdtrl;
5428         hdr.headers = &hdtrl;
5429         hdr.hdr_cnt = 1;
5430         hdr.trailers = NULL;
5431         hdr.trl_cnt = 0;
5432         hdtrl.iov_base = NULL;
5433         hdtrl.iov_len = 0;
5434         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5435 ],
5436 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5437
5438         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5439                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5440                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5441                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5442         else
5443                 AC_MSG_RESULT(no);
5444         fi
5445         ;;
5446
5447         *hpux*)
5448                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5449                 AC_TRY_LINK([\
5450 #include <sys/socket.h>
5451 #include <sys/uio.h>],
5452 [\
5453         int fromfd, tofd;
5454         size_t total=0;
5455         struct iovec hdtrl[2];
5456         ssize_t nwritten;
5457         off64_t offset;
5458
5459         hdtrl[0].iov_base = 0;
5460         hdtrl[0].iov_len = 0;
5461
5462         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
5463 ],
5464 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5465         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5466                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
5467                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5468                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5469         else
5470                 AC_MSG_RESULT(no);
5471         fi
5472
5473                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5474                 AC_TRY_LINK([\
5475 #include <sys/socket.h>
5476 #include <sys/uio.h>],
5477 [\
5478         int fromfd, tofd;
5479         size_t total=0;
5480         struct iovec hdtrl[2];
5481         ssize_t nwritten;
5482         off_t offset;
5483
5484         hdtrl[0].iov_base = 0;
5485         hdtrl[0].iov_len = 0;
5486
5487         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5488 ],
5489 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5490         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5491                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5492                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5493                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5494         else
5495                 AC_MSG_RESULT(no);
5496         fi
5497         ;;
5498
5499         *solaris*)
5500                 AC_CHECK_LIB(sendfile,sendfilev)
5501                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
5502                 AC_TRY_LINK([\
5503 #include <sys/sendfile.h>],
5504 [\
5505         int sfvcnt;
5506         size_t xferred;
5507         struct sendfilevec vec[2];
5508         ssize_t nwritten;
5509         int tofd;
5510
5511         sfvcnt = 2;
5512
5513         vec[0].sfv_fd = SFV_FD_SELF;
5514         vec[0].sfv_flag = 0;
5515         vec[0].sfv_off = 0;
5516         vec[0].sfv_len = 0;
5517
5518         vec[1].sfv_fd = 0;
5519         vec[1].sfv_flag = 0;
5520         vec[1].sfv_off = 0;
5521         vec[1].sfv_len = 0;
5522         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
5523 ],
5524 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
5525
5526         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
5527                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
5528                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
5529                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5530         else
5531                 AC_MSG_RESULT(no);
5532         fi
5533
5534                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5535                 AC_TRY_LINK([\
5536 #include <sys/sendfile.h>],
5537 [\
5538         int sfvcnt;
5539         size_t xferred;
5540         struct sendfilevec vec[2];
5541         ssize_t nwritten;
5542         int tofd;
5543
5544         sfvcnt = 2;
5545
5546         vec[0].sfv_fd = SFV_FD_SELF;
5547         vec[0].sfv_flag = 0;
5548         vec[0].sfv_off = 0;
5549         vec[0].sfv_len = 0;
5550
5551         vec[1].sfv_fd = 0;
5552         vec[1].sfv_flag = 0;
5553         vec[1].sfv_off = 0;
5554         vec[1].sfv_len = 0;
5555         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
5556 ],
5557 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
5558
5559         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
5560                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
5561                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
5562                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5563         else
5564                 AC_MSG_RESULT(no);
5565         fi
5566         ;;
5567         *aix*)
5568                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
5569                 AC_TRY_LINK([\
5570 #include <sys/socket.h>],
5571 [\
5572         int fromfd, tofd;
5573         size_t total=0;
5574         struct sf_parms hdtrl;
5575         ssize_t nwritten;
5576         off64_t offset;
5577
5578         hdtrl.header_data = 0;
5579         hdtrl.header_length = 0;
5580         hdtrl.file_descriptor = fromfd;
5581         hdtrl.file_offset = 0;
5582         hdtrl.file_bytes = 0;
5583         hdtrl.trailer_data = 0;
5584         hdtrl.trailer_length = 0;
5585
5586         nwritten = send_file(&tofd, &hdtrl, 0);
5587 ],
5588 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5589         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5590                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5591                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
5592                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5593         else
5594                 AC_MSG_RESULT(no);
5595         fi
5596         ;;
5597         *)
5598         ;;
5599         esac
5600         ;;
5601   *)
5602     AC_MSG_RESULT(no)
5603     ;;
5604   esac ],
5605   AC_MSG_RESULT(yes)
5606 )
5607
5608
5609 #################################################
5610 # Check whether winbind is supported on this platform.  If so we need to
5611 # build and install client programs, sbin programs and shared libraries
5612
5613 AC_MSG_CHECKING(whether to build winbind)
5614
5615 # Initially, the value of $host_os decides whether winbind is supported
5616
5617 HAVE_WINBIND=yes
5618
5619 # Define the winbind shared library name and any specific linker flags
5620 # it needs to be built with.
5621
5622 WINBIND_NSS="nsswitch/libnss_winbind.$SHLIBEXT"
5623 WINBIND_WINS_NSS="nsswitch/libnss_wins.$SHLIBEXT"
5624 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
5625 NSSSONAMEVERSIONSUFFIX=""
5626
5627 case "$host_os" in
5628         *linux*)
5629                 NSSSONAMEVERSIONSUFFIX=".2"
5630                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_linux.o"
5631                 ;;
5632         *freebsd[[5-9]]*)
5633                 # FreeBSD winbind client is implemented as a wrapper around
5634                 # the Linux version.
5635                 NSSSONAMEVERSIONSUFFIX=".1"
5636                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_freebsd.o \
5637                     nsswitch/winbind_nss_linux.o"
5638                 WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5639                 WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5640                 ;;
5641
5642         *netbsd*[[3-9]]*)
5643                 # NetBSD winbind client is implemented as a wrapper
5644                 # around the Linux version. It needs getpwent_r() to
5645                 # indicate libc's use of the correct nsdispatch API.
5646                 #
5647                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
5648                         WINBIND_NSS_EXTRA_OBJS="\
5649                             nsswitch/winbind_nss_netbsd.o \
5650                             nsswitch/winbind_nss_linux.o"
5651                         WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5652                         WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5653                 else
5654                         HAVE_WINBIND=no
5655                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
5656                 fi
5657                 ;;
5658         *irix*)
5659                 # IRIX has differently named shared libraries
5660                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_irix.o"
5661                 WINBIND_NSS="nsswitch/libns_winbind.$SHLIBEXT"
5662                 WINBIND_WINS_NSS="nsswitch/libns_wins.$SHLIBEXT"
5663                 ;;
5664         *solaris*)
5665                 # Solaris winbind client is implemented as a wrapper around
5666                 # the Linux version.
5667                 NSSSONAMEVERSIONSUFFIX=".1"
5668                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o \
5669                     nsswitch/winbind_nss_linux.o"
5670                 WINBIND_NSS_EXTRA_LIBS="-lsocket"
5671                 ;;
5672         *hpux11*)
5673                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
5674                 ;;
5675         *aix*)
5676                 # AIX has even differently named shared libraries.  No
5677                 # WINS support has been implemented yet.
5678                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_aix.o"
5679                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
5680                 WINBIND_NSS="nsswitch/WINBIND"
5681                 WINBIND_WINS_NSS=""
5682                 ;;
5683         *)
5684                 HAVE_WINBIND=no
5685                 winbind_no_reason=", unsupported on $host_os"
5686                 ;;
5687 esac
5688
5689 AC_SUBST(WINBIND_NSS)
5690 AC_SUBST(WINBIND_WINS_NSS)
5691 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
5692 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
5693 AC_SUBST(WINBIND_NSS_EXTRA_LIBS)
5694 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
5695
5696 # Check the setting of --with-winbind
5697
5698 AC_ARG_WITH(winbind,
5699 [  --with-winbind          Build winbind (default, if supported by OS)],
5700
5701   case "$withval" in
5702         yes)
5703                 HAVE_WINBIND=yes
5704                 ;;
5705         no)
5706                 HAVE_WINBIND=no
5707                 winbind_reason=""
5708                 ;;
5709   esac ],
5710 )
5711
5712 # We need unix domain sockets for winbind
5713
5714 if test x"$HAVE_WINBIND" = x"yes"; then
5715         if test x"$samba_cv_unixsocket" = x"no"; then
5716                 winbind_no_reason=", no unix domain socket support on $host_os"
5717                 HAVE_WINBIND=no
5718         fi
5719 fi
5720
5721 # Display test results
5722
5723 if test x"$HAVE_WINBIND" = x"no"; then
5724         WINBIND_NSS=""
5725         WINBIND_WINS_NSS=""
5726 fi
5727
5728 if test x"$HAVE_WINBIND" = x"yes"; then
5729         AC_MSG_RESULT(yes)
5730         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
5731
5732         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
5733         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
5734         if test $BLDSHARED = true; then
5735                 SHLIB_PROGS="$SHLIB_PROGS $WINBIND_NSS $WINBIND_WINS_NSS"
5736
5737                 if test x"$create_pam_modules" = x"yes"; then
5738                         PAM_MODULES="$PAM_MODULES pam_winbind"
5739                         INSTALL_PAM_MODULES="installpammodules"
5740                         UNINSTALL_PAM_MODULES="uninstallpammodules"
5741                 fi
5742         fi
5743 else
5744         AC_MSG_RESULT(no$winbind_no_reason)
5745 fi
5746
5747 # Solaris 10 does have new member in nss_XbyY_key
5748 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
5749                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
5750                 [#include <nss_dbdefs.h>])
5751
5752 # Solaris has some extra fields in struct passwd that need to be
5753 # initialised otherwise nscd crashes.  
5754  
5755 AC_CHECK_MEMBER(struct passwd.pw_comment,
5756                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
5757                 [#include <pwd.h>])
5758
5759 AC_CHECK_MEMBER(struct passwd.pw_age,
5760                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
5761                 [#include <pwd.h>])
5762
5763 # AIX 4.3.x and 5.1 do not have as many members in
5764 # struct secmethod_table as AIX 5.2
5765 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
5766        [#include <usersec.h>])
5767 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
5768        [#include <usersec.h>])
5769
5770 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
5771 AC_TRY_COMPILE([#include <sys/types.h>
5772 #include <sys/socket.h>],
5773 [struct ucred cred;
5774  socklen_t cred_len;
5775  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
5776 ],
5777 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
5778 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
5779     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
5780 fi
5781
5782
5783 #################################################
5784 # Check to see if we should use the included popt 
5785
5786 AC_ARG_WITH(included-popt,
5787 [  --with-included-popt    use bundled popt library, not from system],
5788
5789   case "$withval" in
5790         yes)
5791                 INCLUDED_POPT=yes
5792                 ;;
5793         no)
5794                 INCLUDED_POPT=no
5795                 ;;
5796   esac ],
5797 )
5798 if test x"$INCLUDED_POPT" != x"yes"; then
5799     AC_CHECK_LIB(popt, poptGetContext,
5800                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
5801 fi
5802
5803 AC_MSG_CHECKING(whether to use included popt)
5804 if test x"$INCLUDED_POPT" = x"yes"; then
5805     AC_MSG_RESULT(yes)
5806     BUILD_POPT='$(POPT_OBJ)'
5807     POPTLIBS='$(POPT_OBJ)'
5808     FLAGS1="-I\$(srcdir)/popt"
5809 else
5810     AC_MSG_RESULT(no)
5811     BUILD_POPT=""
5812     POPTLIBS="-lpopt"
5813 fi
5814 AC_SUBST(BUILD_POPT)
5815 AC_SUBST(POPTLIBS)
5816 AC_SUBST(FLAGS1)
5817
5818 #################################################
5819 # Check to see if we should use the included iniparser 
5820
5821 AC_ARG_WITH(included-iniparser,
5822 [  --with-included-iniparser    use bundled iniparser library, not from system],
5823
5824   case "$withval" in
5825         yes)
5826                 INCLUDED_INIPARSER=yes
5827                 ;;
5828         no)
5829                 INCLUDED_INIPARSER=no
5830                 ;;
5831   esac ],
5832 )
5833 if test x"$INCLUDED_INIPARSER" != x"yes"; then
5834     AC_CHECK_LIB(iniparser, iniparser_load,
5835                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
5836 fi
5837
5838 AC_MSG_CHECKING(whether to use included iniparser)
5839 if test x"$INCLUDED_INIPARSER" = x"yes"; then
5840     AC_MSG_RESULT(yes)
5841     BUILD_INIPARSER='$(INIPARSER_OBJ)'
5842         INIPARSERLIBS=""
5843     FLAGS1="$FLAGS1 -I\$(srcdir)/iniparser/src"
5844 else
5845     AC_MSG_RESULT(no)
5846         BUILD_INIPARSER=""
5847     INIPARSERLIBS="-liniparser"
5848 fi
5849 AC_SUBST(BUILD_INIPARSER)
5850 AC_SUBST(INIPARSERLIBS)
5851 AC_SUBST(FLAGS1)
5852
5853
5854
5855 #################################################
5856 # Check if the user wants Python
5857
5858 # At the moment, you can use this to set which Python binary to link
5859 # against.  (Libraries built for Python2.2 can't be used by 2.1,
5860 # though they can coexist in different directories.)  In the future
5861 # this might make the Python stuff be built by default.
5862
5863 # Defaulting python breaks the clean target if python isn't installed
5864
5865 PYTHON=
5866
5867 AC_ARG_WITH(python,
5868 [  --with-python=PYTHONNAME  build Python libraries],
5869 [ case "${withval-python}" in
5870   yes)
5871         PYTHON=python
5872         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS python_ext"
5873         ;;
5874   no)
5875         PYTHON=
5876         ;;
5877   *)
5878         PYTHON=${withval-python}
5879         ;;
5880   esac ])
5881 AC_SUBST(PYTHON)
5882
5883 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
5884 do
5885         eval MODULE_DEFAULT_$i=STATIC
5886 done
5887
5888 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
5889 do
5890         dnl Fall back to static if we cannot build shared libraries
5891         eval MODULE_DEFAULT_$i=STATIC
5892
5893         if test $BLDSHARED = true; then
5894                 eval MODULE_DEFAULT_$i=SHARED
5895         fi
5896 done
5897
5898 dnl Always built these modules static
5899 MODULE_rpc_spoolss=STATIC
5900 MODULE_rpc_srvsvc=STATIC
5901 MODULE_idmap_tdb=STATIC
5902 MODULE_idmap_passdb=STATIC
5903 MODULE_idmap_nss=STATIC
5904
5905 MODULE_nss_info_template=STATIC
5906
5907 AC_ARG_WITH(static-modules,
5908 [  --with-static-modules=MODULES  Comma-separated list of names of modules to statically link in],
5909 [ if test $withval; then
5910         for i in `echo $withval | sed -e 's/,/ /g'`
5911         do
5912                 eval MODULE_$i=STATIC
5913         done
5914 fi ])
5915
5916 AC_ARG_WITH(shared-modules,
5917 [  --with-shared-modules=MODULES  Comma-separated list of names of modules to build shared],
5918 [ if test $withval; then
5919         for i in `echo $withval | sed -e 's/,/ /g'`
5920         do
5921                         eval MODULE_$i=SHARED
5922         done
5923 fi ])
5924
5925 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o, "bin/ldapsam.$SHLIBEXT", PDB, 
5926                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
5927 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
5928 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
5929 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
5930
5931
5932 SMB_MODULE(rpc_lsa, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
5933 SMB_MODULE(rpc_winreg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
5934 SMB_MODULE(rpc_initshutdown, \$(RPC_INITSHUTDOWN_OBJ), "bin/librpc_initshutdown.$SHLIBEXT", RPC)
5935 SMB_MODULE(rpc_lsa_ds, \$(RPC_LSA_DS_OBJ), "bin/librpc_lsa_ds.$SHLIBEXT", RPC)
5936 SMB_MODULE(rpc_wkssvc, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
5937 SMB_MODULE(rpc_svcctl, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl.$SHLIBEXT", RPC)
5938 SMB_MODULE(rpc_ntsvcs, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs.$SHLIBEXT", RPC)
5939 SMB_MODULE(rpc_net, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
5940 SMB_MODULE(rpc_netdfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
5941 SMB_MODULE(rpc_srvsvc, \$(RPC_SVC_OBJ), "bin/librpc_srvsvc.$SHLIBEXT", RPC)
5942 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
5943 SMB_MODULE(rpc_eventlog, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog.$SHLIBEXT", RPC)
5944 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
5945 SMB_MODULE(rpc_rpcecho, \$(RPC_ECHO_OBJ), "bin/librpc_echo.$SHLIBEXT", RPC)
5946 SMB_MODULE(rpc_unixinfo, \$(RPC_UNIXINFO_OBJ), "bin/librpc_unixinfo.$SHLIBEXT", RPC)
5947 SMB_SUBSYSTEM(RPC,smbd/server.o)
5948
5949 SMB_MODULE(idmap_ldap, nsswitch/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
5950 SMB_MODULE(idmap_tdb, nsswitch/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
5951 SMB_MODULE(idmap_passdb, nsswitch/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
5952 SMB_MODULE(idmap_nss, nsswitch/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
5953 SMB_MODULE(idmap_rid, nsswitch/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
5954 SMB_MODULE(idmap_ad, nsswitch/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
5955 SMB_SUBSYSTEM(IDMAP, nsswitch/idmap.o)
5956
5957 SMB_MODULE(nss_info_template, nsswitch/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
5958 SMB_SUBSYSTEM(NSS_INFO, nsswitch/nss_info.o)
5959
5960 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
5961 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
5962 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
5963 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
5964 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
5965
5966 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
5967 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
5968 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
5969 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
5970 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
5971 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
5972 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
5973 SMB_SUBSYSTEM(AUTH,auth/auth.o)
5974
5975 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
5976 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
5977 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
5978 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
5979 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
5980 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
5981 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
5982 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
5983 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
5984 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
5985 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
5986 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
5987 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
5988 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
5989 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
5990 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
5991 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
5992 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
5993 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
5994 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
5995 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
5996 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
5997 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
5998 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
5999 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6000 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6001
6002 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6003
6004 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6005
6006 #################################################
6007 # do extra things if we are running insure
6008
6009 if test "${ac_cv_prog_CC}" = "insure"; then
6010         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6011 fi
6012
6013 #################################################
6014 # If run from the build farm, enable NASTY hacks
6015 #################################################
6016 AC_MSG_CHECKING(whether to enable build farm hacks)
6017 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
6018         AC_MSG_RESULT(yes)
6019         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
6020 else
6021         AC_MSG_RESULT(no)
6022 fi
6023
6024 #################################################
6025 # check for bad librt/libpthread interactions
6026
6027 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6028     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6029     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6030     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6031
6032 SMB_IF_RTSIGNAL_BUG(
6033         [
6034             # Have RT_SIGNAL bug, need to check whether the problem will
6035             # affect anything we have configured.
6036
6037             rt_do_error=no
6038             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6039                 if test x"$rt_signal_lease_ok" = x"no" ; then
6040                     rt_do_error=yes
6041                 fi
6042             fi
6043
6044             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6045                 if test x"$rt_signal_notify_ok" = x"no" ; then
6046                     rt_do_error=yes
6047                 fi
6048             fi
6049
6050             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6051                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6052                 if test x"$rt_signal_aio_ok" = x"no" ; then
6053                     rt_do_error=yes
6054                 fi
6055             fi
6056
6057             if test x"$rt_do_error" = x"yes" ; then
6058                 SMB_IS_LIBPTHREAD_LINKED(
6059                     [
6060                         cat<<MSG
6061
6062 *** On this platforms, linking Samba against pthreads causes problems
6063 *** with the oplock and change notification mechanisms. You may be
6064 *** using pthreads as a side-effect of using the --with-aio-support
6065 *** or --with-profiling-data options. Please remove these and try again.
6066
6067 MSG
6068                     ],
6069                     [
6070                         cat<<MSG
6071
6072 *** On this platform, the oplock and change notification mechanisms do not
6073 *** appear to work. Please report this problem to samba-technical@samba.org
6074 *** and attach the config.log file from this directory.
6075
6076 MSG
6077                     ])
6078                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6079             fi
6080         ],
6081         [
6082             # no RT_SIGNAL bug, we are golden
6083             SMB_IS_LIBPTHREAD_LINKED(
6084                 [
6085                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6086                 ])
6087
6088         ],
6089         [
6090             # cross compiling, I hope you know what you are doing
6091             true
6092         ])
6093
6094 fi
6095
6096 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6097 LIB_REMOVE_USR_LIB(LDFLAGS)
6098 LIB_REMOVE_USR_LIB(LIBS)
6099 LIB_REMOVE_USR_LIB(KRB5_LIBS)
6100
6101 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6102 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6103 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6104
6105 #################################################
6106 # Display summary of libraries detected
6107
6108 AC_MSG_RESULT([Using libraries:])
6109 AC_MSG_RESULT([    LIBS = $LIBS])
6110 if test x"$with_ads_support" != x"no"; then
6111     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6112 fi
6113 if test x"$with_ldap_support" != x"no"; then
6114     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6115 fi
6116 if test x"$with_dnsupdate_support" != x"no"; then
6117     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
6118 fi
6119 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6120
6121 #################################################
6122 # final configure stuff
6123
6124 AC_MSG_CHECKING([configure summary])
6125 AC_TRY_RUN([#include "${srcdir-.}/tests/summary.c"],
6126            AC_MSG_RESULT(yes),
6127            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
6128            AC_MSG_WARN([cannot run when cross-compiling]))
6129
6130 builddir=`pwd`
6131 AC_SUBST(builddir)
6132
6133 # Stuff the smbd-only libraries at the end of the smbd link
6134 # path (if we have them).
6135 SMBD_LIBS="$samba_fam_libs $samba_dmapi_libs"
6136 AC_SUBST(SMBD_LIBS)
6137
6138 AC_OUTPUT(include/stamp-h Makefile script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh)
6139
6140 #################################################
6141 # Print very concise instructions on building/use
6142 if test "x$enable_dmalloc" = xyes
6143 then
6144         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
6145         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])
6146 fi