r21822: Adding experimental krb5 lib locator plugin.
[samba.git] / source / 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   AC_CHECK_HEADERS(krb5/locate_plugin.h)
3450 fi
3451
3452 # Now we have determined whether we really want ADS support
3453 use_ads=no
3454 if test x"$with_ads_support" != x"no"; then
3455   use_ads=yes
3456   have_gssapi=no
3457   ac_save_LIBS=$LIBS
3458
3459   # now check for gssapi headers.  This is also done here to allow for
3460   # different kerberos include paths
3461   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
3462
3463   ##################################################################
3464   # we might need the k5crypto and com_err libraries on some systems
3465   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3466   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3467
3468   # Heimdal checks.
3469   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3470   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3471   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3472
3473   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3474   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3475
3476   ########################################################
3477   # now see if we can find the krb5 libs in standard paths
3478   # or as specified above
3479   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3480   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3481
3482   ########################################################
3483   # now see if we can find the gssapi libs in standard paths
3484   if test x"$have_gssapi" != x"yes"; then
3485      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3486   fi
3487
3488   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3489   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3490   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3491   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3492   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3493   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3494   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS) 
3495   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3496   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS) 
3497   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3498   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS) 
3499   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3500   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS) 
3501   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS) 
3502   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3503   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3504   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3505   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3506   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3507   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3508   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3509   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3510   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3511   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3512   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3513   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3514   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3515   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3516   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3517   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3518   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3519   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3520   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3521   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3522   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3523   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3524   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3525   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3526
3527   LIBS="$KRB5_LIBS $LIBS"
3528
3529   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3530         smb_krb5_ticket_has_keyinfo,
3531         [
3532             AC_TRY_COMPILE(
3533             [
3534                 #include <krb5.h>
3535             ],
3536             [
3537                 krb5_ticket ticket;
3538                 krb5_kvno kvno;
3539                 krb5_enctype enctype;
3540
3541                 enctype = ticket.enc_part.enctype;
3542                 kvno = ticket.enc_part.kvno;
3543             ],
3544             [ smb_krb5_ticket_has_keyinfo=yes ],
3545             [ smb_krb5_ticket_has_keyinfo=no ])
3546         ])
3547
3548   if test x"$smb_krb5_ticket_has_keyinfo" = x"yes" ; then
3549         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3550             [Whether the krb5_ticket structure contains the kvno and enctype])
3551   fi
3552
3553   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3554           smb_krb5_creds_opt_free_context,
3555           [
3556                 AC_TRY_COMPILE([
3557                     #include <krb5.h>],
3558                     [
3559                         krb5_context ctx;
3560                         krb5_get_init_creds_opt *opt = NULL;
3561                         krb5_get_init_creds_opt_free(ctx, opt);
3562                     ],
3563                     [smb_krb5_creds_opt_free_context=yes],
3564                     [smb_krb5_creds_opt_free_context=no]
3565                 )
3566           ])
3567
3568   if test x"$smb_krb5_creds_opt_free_context" = x"yes" ; then
3569         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3570             [Whether krb5_get_init_creds_opt_free takes a context argument])
3571   fi
3572
3573   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_verify_checksum, [
3574     AC_TRY_COMPILE([
3575         #include <krb5.h>], 
3576         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);], 
3577         [smb_krb5_verify_checksum=7], 
3578         [smb_krb5_verify_checksum=6], 
3579     ) 
3580   ])
3581   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_verify_checksum, [Number of arguments to krb5_verify_checksum])
3582
3583   AC_CACHE_CHECK([for checksum in krb5_checksum],
3584                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3585     AC_TRY_COMPILE([#include <krb5.h>],
3586       [krb5_checksum cksum; cksum.checksum.length = 0;],
3587       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3588       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3589
3590   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3591     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3592                [Whether the krb5_checksum struct has a checksum property])
3593   fi
3594
3595   AC_CACHE_CHECK([for etype in EncryptedData],
3596                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3597     AC_TRY_COMPILE([#include <krb5.h>],
3598       [EncryptedData edata; edata.etype = 0;],
3599       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3600       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3601
3602   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3603     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3604                [Whether the EncryptedData struct has a etype property])
3605   fi
3606
3607   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3608                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3609     AC_TRY_COMPILE([#include <krb5.h>],
3610       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3611       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3612       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3613
3614   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3615     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3616                [Whether the krb5_ap_req struct has a ticket pointer])
3617   fi
3618
3619   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3620                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3621     AC_TRY_COMPILE([#include <krb5.h>],
3622       [krb5_error err; err.e_data = NULL;],
3623       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3624       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3625
3626   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3627     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3628                [Whether the krb5_error struct has a e_data pointer])
3629   fi
3630
3631   AC_CACHE_CHECK([for krb5_crypto type],
3632                 samba_cv_HAVE_KRB5_CRYPTO,[
3633     AC_TRY_COMPILE([#include <krb5.h>],
3634       [krb5_crypto crypto;],
3635       samba_cv_HAVE_KRB5_CRYPTO=yes,
3636       samba_cv_HAVE_KRB5_CRYPTO=no)])
3637
3638   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3639     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3640                [Whether the type krb5_crypto exists])
3641   fi
3642
3643   AC_CACHE_CHECK([for krb5_encrypt_block type],
3644                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3645     AC_TRY_COMPILE([#include <krb5.h>],
3646       [krb5_encrypt_block block;],
3647       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3648       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3649
3650   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3651     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3652                [Whether the type krb5_encrypt_block exists])
3653   fi
3654
3655   AC_CACHE_CHECK([for addrtype in krb5_address],
3656                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3657     AC_TRY_COMPILE([#include <krb5.h>],
3658       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3659       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3660       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3661
3662   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3663     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3664                [Whether the krb5_address struct has a addrtype property])
3665   fi
3666
3667   AC_CACHE_CHECK([for addr_type in krb5_address],
3668                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3669     AC_TRY_COMPILE([#include <krb5.h>],
3670       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3671       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3672       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3673
3674   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3675     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3676               [Whether the krb5_address struct has a addr_type property])
3677   fi
3678
3679   AC_CACHE_CHECK([for enc_part2 in krb5_ticket], 
3680                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3681                  [AC_TRY_COMPILE([#include <krb5.h>],
3682     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3683     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3684
3685   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3686     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3687               [Whether the krb5_ticket struct has a enc_part2 property])
3688   fi
3689
3690   AC_CACHE_CHECK([for keyblock in krb5_creds],
3691                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3692     AC_TRY_COMPILE([#include <krb5.h>],
3693       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3694       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3695       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3696
3697   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3698     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3699               [Whether the krb5_creds struct has a keyblock property])
3700   fi
3701
3702   AC_CACHE_CHECK([for session in krb5_creds],
3703                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3704     AC_TRY_COMPILE([#include <krb5.h>],
3705       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3706       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3707       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3708
3709   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3710     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3711               [Whether the krb5_creds struct has a session property])
3712   fi
3713
3714   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3715                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3716     AC_TRY_COMPILE([#include <krb5.h>],
3717       [krb5_keyblock key; key.keyvalue.data = NULL;],
3718       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3719       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3720
3721   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3722     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3723               [Whether the krb5_keyblock struct has a keyvalue property])
3724   fi
3725
3726   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3727                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3728     AC_TRY_COMPILE([#include <krb5.h>],
3729       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3730       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3731       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3732   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3733                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3734     AC_TRY_COMPILE([#include <krb5.h>],
3735       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3736       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3737       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3738 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3739 # w.r.t. arcfour and windows, so we must not enable it here
3740   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3741           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3742     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3743               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
3744   fi
3745
3746   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3747                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3748     AC_TRY_COMPILE([#include <krb5.h>],
3749       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3750       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3751       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3752
3753   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3754     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3755               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3756   fi
3757
3758   AC_CACHE_CHECK([for KV5M_KEYTAB],
3759                  samba_cv_HAVE_KV5M_KEYTAB,[
3760     AC_TRY_COMPILE([#include <krb5.h>],
3761       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3762       samba_cv_HAVE_KV5M_KEYTAB=yes,
3763       samba_cv_HAVE_KV5M_KEYTAB=no)])
3764
3765   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3766       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3767              [Whether the KV5M_KEYTAB option is available])
3768   fi
3769
3770   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3771                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3772     AC_TRY_COMPILE([#include <krb5.h>],
3773       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3774       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3775       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3776
3777   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3778     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3779               [Whether KRB5_KU_OTHER_CKSUM is available])
3780   fi
3781   
3782   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3783                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3784     AC_TRY_COMPILE([#include <krb5.h>],
3785       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3786       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3787       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3788
3789   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3790     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3791               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3792   fi
3793
3794   AC_CACHE_CHECK([for the krb5_princ_component macro],
3795                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3796     AC_TRY_LINK([#include <krb5.h>],
3797       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3798       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3799       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3800
3801   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3802     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3803                [Whether krb5_princ_component is available])
3804   fi
3805
3806   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3807                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3808     AC_TRY_COMPILE([#include <krb5.h>],
3809       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3810       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3811       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3812
3813   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3814     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3815               [Whether krb5_keytab_entry has key member])
3816   fi
3817
3818   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3819                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3820     AC_TRY_COMPILE([#include <krb5.h>],
3821       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3822       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3823       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3824
3825   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3826     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3827               [Whether krb5_keytab_entry has keyblock member])
3828   fi
3829
3830   AC_CACHE_CHECK([for magic in krb5_address],
3831                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
3832     AC_TRY_COMPILE([#include <krb5.h>],
3833       [krb5_address addr; addr.magic = 0;],
3834       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
3835       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
3836
3837   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
3838     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
3839               [Whether the krb5_address struct has a magic property])
3840   fi
3841
3842   AC_CACHE_CHECK([for WRFILE: keytab support],
3843                 samba_cv_HAVE_WRFILE_KEYTAB,[
3844     AC_TRY_RUN([
3845 #include<krb5.h>
3846   main()
3847   {
3848     krb5_context context;
3849     krb5_keytab keytab;
3850
3851     krb5_init_context(&context);
3852     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3853   }],
3854   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3855   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3856
3857   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3858       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3859                [Whether the WRFILE:-keytab is supported])
3860   fi
3861
3862   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
3863                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
3864     AC_TRY_COMPILE([#include <krb5.h>],
3865     [
3866     krb5_context context;
3867     krb5_principal principal;
3868     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
3869     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
3870     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
3871
3872   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
3873     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
3874               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
3875   fi
3876
3877   AC_CACHE_CHECK([for krb5_addresses type],
3878                 samba_cv_HAVE_KRB5_ADDRESSES,[
3879     AC_TRY_COMPILE([#include <krb5.h>],
3880       [krb5_addresses addr;],
3881       samba_cv_HAVE_KRB5_ADDRESSES=yes,
3882       samba_cv_HAVE_KRB5_ADDRESSES=no)])
3883
3884   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
3885     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
3886                [Whether the type krb5_addresses type exists])
3887   fi
3888
3889   #
3890   #
3891   # Now the decisions whether we can support krb5
3892   # 
3893   # NOTE: all tests should be done before this block!
3894   #
3895   #
3896   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
3897     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
3898     use_ads=no
3899   fi
3900
3901   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
3902           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
3903   then
3904     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
3905     use_ads=no
3906   fi
3907
3908   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
3909           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
3910   then
3911     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
3912     use_ads=no
3913   fi
3914
3915   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
3916           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
3917   then
3918     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
3919     use_ads=no
3920   fi
3921
3922   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
3923           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
3924   then
3925     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
3926     use_ads=no
3927   fi
3928
3929   if test x"$smb_krb5_ticket_has_keyinfo" != x"yes" ; then
3930
3931       # We only need the following functions if we can't get the enctype
3932       # and kvno out of the ticket directly (ie. on Heimdal).
3933
3934       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
3935       then
3936         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
3937         use_ads=no
3938       fi
3939
3940       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
3941       then
3942         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
3943         use_ads=no
3944       fi
3945
3946   fi
3947
3948   if test x"$use_ads" = x"yes"; then
3949     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
3950     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
3951     if test x"$have_gssapi" = x"yes"; then
3952       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
3953     fi
3954   else
3955     if test x"$with_ads_support" = x"yes"; then
3956         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
3957     else
3958         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
3959     fi
3960     AC_REMOVE_DEFINE(HAVE_KRB5_H)
3961     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
3962     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
3963     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
3964     KRB5_LIBS=""
3965     with_ads_support=no 
3966   fi
3967   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
3968   AC_MSG_RESULT([$use_ads])
3969
3970 LIBS="$ac_save_LIBS"
3971 fi
3972
3973 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
3974 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
3975
3976
3977 ########################################################
3978 # Compile with DNS Updates support?
3979
3980 with_dnsupdate_support=no
3981 AC_MSG_CHECKING([whether to enable DNS Updates support])
3982
3983 AC_ARG_WITH(dnsupdate,
3984 [  --with-dnsupdate        Enable DNS Updates support (default no)],
3985 [ case "$withval" in
3986     yes|no)
3987         with_dnsupdate_support=$withval
3988         ;;
3989   esac ])
3990
3991 AC_MSG_RESULT($with_dnsupdate_support)
3992
3993 if test x"$with_dnsupdate_support" != x"no"; then
3994
3995   ################################################################
3996   # first test for Active Directory support being enabled
3997   #if test x"$with_ads_support" = x"no"; then
3998   #             AC_MSG_ERROR(Active Directory support is required to enable DNS Update support)
3999   #             with_dnsupdate_support=no
4000   #fi           
4001   ##################################################################
4002   # then test for uuid.h (necessary to generate unique DNS keynames
4003   # (uuid.h is required for this test)
4004   AC_CHECK_HEADERS(uuid/uuid.h)
4005   
4006   if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
4007         if test x"$with_dnsupdate_support" = x"yes"; then
4008          AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
4009         else
4010          AC_MSG_WARN(uuid.h is needed to enable DNS Updates support)
4011         fi
4012         with_dnsupdate_support=no
4013   fi
4014 fi
4015
4016 if test x"$with_dnsupdate_support" != x"no"; then
4017
4018   ########################################################
4019   # Now see if we can find the uuid libs in standard paths
4020   # On some systems, the uuid API is in libc, so we have to
4021   # be careful not to insert a spurious -luuid.
4022   
4023   UUID_LIBS=""
4024   AC_LIBTESTFUNC(uuid, uuid_generate,
4025           [
4026             case " $LIBS " in
4027                 *\ -luuid\ *)
4028                 UUID_LIBS="-luuid"
4029                 SMB_REMOVE_LIB(uuid)
4030                 ;;
4031             esac
4032
4033             with_dnsupdate_support=yes
4034             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4035         ],
4036         [
4037             if test x"$with_dnsupdate_support" = x"yes"; then
4038                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4039             else
4040                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4041             fi
4042             with_dnsupdate_support=no
4043         ])
4044 fi
4045
4046 #################################################
4047 # check for automount support
4048 AC_MSG_CHECKING(whether to use automount)
4049 AC_ARG_WITH(automount,
4050 [  --with-automount        Include automount support (default=no)],
4051 [ case "$withval" in
4052   yes)
4053     AC_MSG_RESULT(yes)
4054     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4055     ;;
4056   *)
4057     AC_MSG_RESULT(no)
4058     ;;
4059   esac ],
4060   AC_MSG_RESULT(no)
4061 )
4062
4063 #################################################
4064 # check for smbmount support
4065 AC_MSG_CHECKING(whether to use smbmount)
4066 AC_ARG_WITH(smbmount,
4067 [  --with-smbmount         Include smbmount (Linux only) support (default=no)],
4068 [ case "$withval" in
4069   yes)
4070         case "$host_os" in
4071         *linux*)
4072                 AC_MSG_RESULT(yes)
4073                 AC_DEFINE(WITH_SMBMOUNT,1,[Whether to build smbmount])
4074                 SMBMOUNT_PROGS="bin/smbmount bin/smbmnt bin/smbumount"
4075                 ;;
4076         *)
4077                 AC_MSG_ERROR(not on a linux system!)
4078                 ;;
4079         esac
4080     ;;
4081   *)
4082     AC_MSG_RESULT(no)
4083     ;;
4084   esac ],
4085   AC_MSG_RESULT(no)
4086 )
4087
4088 #################################################
4089 # check for mount- and umount.cifs support
4090 CIFSMOUNT_PROGS=""
4091 INSTALL_CIFSMOUNT=""
4092 UNINSTALL_CIFSMOUNT=""
4093 AC_MSG_CHECKING(whether to build mount.cifs and umount.cifs)
4094 AC_ARG_WITH(cifsmount,
4095 [  --with-cifsmount        Include mount.cifs and umount.cifs (Linux only) support (default=yes)],
4096 [ case "$withval" in
4097   no)
4098         AC_MSG_RESULT(no)
4099         ;;
4100   *)
4101         case "$host_os" in
4102         *linux*)
4103                 AC_MSG_RESULT(yes)
4104                 AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4105                 CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4106                 INSTALL_CIFSMOUNT="installcifsmount"
4107                 UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4108                 ;;
4109         *)
4110                 AC_MSG_ERROR(not on a linux system!)
4111                 ;;
4112         esac
4113     ;;
4114   esac ],
4115 [ case "$host_os" in
4116   *linux*)
4117         AC_MSG_RESULT(yes)
4118         AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4119         CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4120         INSTALL_CIFSMOUNT="installcifsmount"
4121         UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4122         ;;
4123   *)
4124         AC_MSG_RESULT(no)
4125         ;;
4126   esac ]
4127 )
4128
4129
4130 #################################################
4131 # check for a PAM clear-text auth, accounts, password and session support
4132 with_pam_for_crypt=no
4133 try_pam=no
4134 AC_MSG_CHECKING(whether to try PAM support)
4135 AC_ARG_WITH(pam,
4136 [  --with-pam              Include PAM support (default=no)],
4137 [ case "$withval" in
4138   yes|no)
4139     try_pam=$withval
4140     ;;
4141   esac
4142 ])
4143 AC_MSG_RESULT([$try_pam])
4144
4145 use_pam=no
4146 create_pam_modules=no
4147 if test x"${try_pam}" != x"no";then
4148         use_pam=yes
4149         create_pam_modules=yes
4150
4151         AC_CHECK_HEADERS(security/pam_appl.h)
4152         if test x"$ac_cv_header_security_pam_appl_h" != x"yes"; then
4153                 if test x"${try_pam}" = x"yes";then
4154                         AC_MSG_ERROR([--with-pam=yes but security/pam_appl.h not found])
4155                 fi
4156                 use_pam=no
4157                 create_pam_modules=no
4158         fi
4159
4160         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4161         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4162                 if test x"${try_pam}" = x"yes";then
4163                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4164                 fi
4165                 use_pam=no
4166                 create_pam_modules=no
4167         fi
4168
4169         AC_CHECK_HEADERS(security/pam_modules.h,,,[[
4170                 #if HAVE_SECURITY_PAM_APPL_H
4171                 #include <security/pam_appl.h>
4172                 #endif
4173         ]])
4174         if test x"$ac_cv_header_security_pam_modules_h" = x"no"; then
4175                 if test x"${try_pam}" = x"yes";then
4176                         AC_MSG_ERROR([--with-pam=yes but security/pam_modules.h not found])
4177                 fi
4178                 create_pam_modules=no
4179         fi
4180
4181         if test x"$use_pam" = x"yes"; then
4182                 AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4183                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4184                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4185                 with_pam_for_crypt=yes
4186
4187                 if test x"$create_pam_modules" = x"yes"; then
4188                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4189                         # this checks are optional,
4190                         # we don't care about the results here
4191                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4192                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4193                 else
4194                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4195                 fi
4196         fi
4197         AC_MSG_CHECKING(whether to use PAM support)
4198         AC_MSG_RESULT([$use_pam])
4199
4200         AC_MSG_CHECKING(whether to have PAM MODULES support)
4201         AC_MSG_RESULT([$create_pam_modules])
4202 fi # try_pam != no
4203
4204 #################################################
4205 # check for pam_smbpass support
4206 PAM_MODULES=""
4207 INSTALL_PAM_MODULES=""
4208 UNINSTALL_PAM_MODULES=""
4209 AC_MSG_CHECKING(whether to use pam_smbpass)
4210 AC_ARG_WITH(pam_smbpass,
4211 [  --with-pam_smbpass      Build PAM module for authenticating against passdb backends (default=no)],
4212 [ case "$withval" in
4213   yes)
4214     AC_MSG_RESULT(yes)
4215
4216        # Conditions under which pam_smbpass should not be built.
4217
4218        if test x"$BLDSHARED" != x"true"; then
4219           AC_MSG_ERROR([No support for shared modules])
4220        elif test x"$create_pam_modules" != x"yes"; then
4221           AC_MSG_ERROR([No support for PAM MODULES])
4222        else
4223           PAM_MODULES="pam_smbpass"
4224           INSTALL_PAM_MODULES="installpammodules"
4225           UNINSTALL_PAM_MODULES="uninstallpammodules"
4226        fi
4227     ;;
4228   *)
4229     AC_MSG_RESULT(no)
4230     ;;
4231   esac ],
4232   AC_MSG_RESULT(no)
4233 )
4234
4235
4236 ###############################################
4237 # test for where we get crypt() from
4238 AC_SEARCH_LIBS(crypt, [crypt],
4239   [test "$ac_cv_search_crypt" = "none required" || AUTH_LIBS="-lcrypt $AUTH_LIBS"
4240   AC_DEFINE(HAVE_CRYPT,1,[Whether the system has the crypt() function])])
4241
4242 ##
4243 ## moved after the check for -lcrypt in order to
4244 ## ensure that the necessary libraries are included
4245 ## check checking for truncated salt.  Wrapped by the
4246 ## $with_pam_for_crypt variable as above   --jerry
4247 ##
4248 if test $with_pam_for_crypt = no; then
4249 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4250 crypt_LIBS="$LIBS"
4251 LIBS="$AUTH_LIBS $LIBS"
4252 AC_TRY_RUN([#include "${srcdir-.}/tests/crypttest.c"],
4253         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4254 LIBS="$crypt_LIBS"])
4255 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4256         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4257 fi
4258 fi
4259
4260 #################################################
4261 # check for a NISPLUS_HOME support 
4262 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4263 AC_ARG_WITH(nisplus-home,
4264 [  --with-nisplus-home     Include NISPLUS_HOME support (default=no)],
4265 [ case "$withval" in
4266   yes)
4267     AC_MSG_RESULT(yes)
4268     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4269     ;;
4270   *)
4271     AC_MSG_RESULT(no)
4272     ;;
4273   esac ],
4274   AC_MSG_RESULT(no)
4275 )
4276
4277 #################################################
4278 # check for syslog logging
4279 AC_MSG_CHECKING(whether to use syslog logging)
4280 AC_ARG_WITH(syslog,
4281 [  --with-syslog           Include experimental SYSLOG support (default=no)],
4282 [ case "$withval" in
4283   yes)
4284     AC_MSG_RESULT(yes)
4285     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4286     ;;
4287   *)
4288     AC_MSG_RESULT(no)
4289     ;;
4290   esac ],
4291   AC_MSG_RESULT(no)
4292 )
4293
4294 #################################################
4295 # check for experimental disk-quotas support
4296
4297 samba_cv_WITH_QUOTAS=auto
4298 samba_cv_TRY_QUOTAS=no
4299 samba_cv_RUN_QUOTA_TESTS=auto
4300 samba_cv_WITH_SYS_QUOTAS=auto
4301 samba_cv_TRY_SYS_QUOTAS=auto
4302 samba_cv_SYSQUOTA_FOUND=no
4303
4304 AC_MSG_CHECKING(whether to try disk-quotas support)
4305 AC_ARG_WITH(quotas,
4306 [  --with-quotas           Include disk-quota support (default=no)],
4307 [ case "$withval" in
4308   yes)
4309     AC_MSG_RESULT(yes)
4310     samba_cv_WITH_QUOTAS=yes
4311     samba_cv_TRY_QUOTAS=yes
4312     samba_cv_RUN_QUOTA_TESTS=yes
4313     #set sys quotas to auto in this case
4314     samba_cv_TRY_SYS_QUOTAS=auto
4315     ;;
4316   auto)
4317     AC_MSG_RESULT(auto)
4318     samba_cv_WITH_QUOTAS=auto
4319     samba_cv_TRY_QUOTAS=auto
4320     samba_cv_RUN_QUOTA_TESTS=auto
4321     #set sys quotas to auto in this case
4322     samba_cv_TRY_SYS_QUOTAS=auto
4323     ;;
4324   no)
4325     AC_MSG_RESULT(no)
4326     samba_cv_WITH_QUOTAS=no
4327     samba_cv_TRY_QUOTAS=no
4328     samba_cv_RUN_QUOTA_TESTS=no
4329     ;;
4330   *)
4331     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4332     ;;
4333   esac ],
4334   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4335 )
4336
4337 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4338 AC_ARG_WITH(sys-quotas,
4339 [  --with-sys-quotas       Include lib/sysquotas.c support (default=auto)],
4340 [ case "$withval" in
4341   yes)
4342     AC_MSG_RESULT(yes)
4343     samba_cv_WITH_SYS_QUOTAS=yes
4344     samba_cv_TRY_SYS_QUOTAS=yes
4345     samba_cv_RUN_QUOTA_TESTS=yes
4346     ;;
4347   auto)
4348     AC_MSG_RESULT(auto)
4349     samba_cv_WITH_SYS_QUOTAS=auto
4350     samba_cv_TRY_SYS_QUOTAS=auto
4351     samba_cv_RUN_QUOTA_TESTS=auto
4352     ;;
4353   no)
4354     AC_MSG_RESULT(no)
4355     samba_cv_WITH_SYS_QUOTAS=no
4356     samba_cv_TRY_SYS_QUOTAS=no
4357     ;;
4358   *)
4359     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4360     ;;
4361   esac ],
4362   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4363 )
4364
4365 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4366 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4367   case "$host_os" in
4368         *linux*)
4369             AC_MSG_RESULT(yes)
4370             samba_cv_TRY_SYS_QUOTAS=yes
4371             samba_cv_RUN_QUOTA_TESTS=yes
4372             ;;
4373         *)
4374             AC_MSG_RESULT(no)
4375             samba_cv_TRY_SYS_QUOTAS=no
4376             ;;
4377   esac
4378 fi
4379
4380 #############################################
4381 # only check for quota stuff if --with-quotas
4382 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4383
4384 case "$host_os" in
4385         # on linux we didn't need to test we have builtin support
4386         *linux*)
4387             samba_cv_SYSQUOTA_FOUND=yes
4388             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4389             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4390             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4391             AC_MSG_RESULT(yes)
4392
4393             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4394             samba_cv_found_xfs_header=yes
4395             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4396             AC_MSG_RESULT(yes)
4397             ;;
4398         *solaris*)
4399             # need to set this define when using static linking (BUG 1473)
4400             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4401             ;;
4402         *)
4403             ;;
4404 esac
4405
4406 # some broken header files need this
4407 AC_CHECK_HEADER(asm/types.h,[
4408             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4409             AC_ADD_INCLUDE(<asm/types.h>)
4410             ])
4411
4412 # For quotas on Veritas VxFS filesystems
4413 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4414
4415 # For sys/quota.h and linux/quota.h
4416 AC_CHECK_HEADERS(sys/quota.h)
4417
4418 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4419 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4420 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4421 AC_TRY_COMPILE([
4422 #include "confdefs.h"
4423 #ifdef HAVE_SYS_TYPES_H
4424 #include <sys/types.h>
4425 #endif
4426 #ifdef HAVE_ASM_TYPES_H
4427 #include <asm/types.h>
4428 #endif
4429 #include <sys/quota.h>
4430 ],[int i = Q_XGETQUOTA;],
4431 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4432 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4433         samba_cv_found_xfs_header=yes
4434 fi
4435 fi
4436
4437 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX 
4438 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4439 AC_TRY_COMPILE([
4440 #include "confdefs.h"
4441 #ifdef HAVE_SYS_QUOTA_H
4442 #include <sys/quota.h>
4443 #endif
4444 ],[
4445 struct dqblk D;
4446 D.dqb_fsoftlimit = 0;],
4447 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4448 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4449         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4450 fi
4451
4452 ##################
4453 # look for a working quota system
4454
4455 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4456 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4457 AC_TRY_RUN_STRICT([
4458 #define HAVE_QUOTACTL_4A 1
4459 #define AUTOCONF_TEST 1
4460 #include "confdefs.h"
4461 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4462            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4463 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4464     samba_cv_SYSQUOTA_FOUND=yes;
4465     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4466     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
4467 fi
4468 fi
4469
4470 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4471 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4472 AC_TRY_RUN_STRICT([
4473 #define HAVE_QUOTACTL_4B 1
4474 #define AUTOCONF_TEST 1
4475 #include "confdefs.h"
4476 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4477            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4478 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4479     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
4480     samba_cv_SYSQUOTA_FOUND=yes;
4481     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4482     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
4483 fi
4484 fi
4485
4486 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4487 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
4488 AC_TRY_RUN_STRICT([
4489 #define HAVE_QUOTACTL_3 1
4490 #define AUTOCONF_TEST 1
4491 #include "confdefs.h"
4492 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4493            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
4494 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
4495     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
4496     samba_cv_SYSQUOTA_FOUND=yes;
4497     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
4498     samba_cv_sysquotas_file="lib/sysquotas_3.c"
4499 fi
4500 fi
4501
4502 #################################################
4503 # check for mntent.h and struct mntent
4504 AC_CHECK_HEADERS(mntent.h)
4505 #################################################
4506 # check for setmntent,getmntent,endmntent
4507 AC_CHECK_FUNCS(setmntent getmntent endmntent)
4508
4509 #################################################
4510 # check for devnm.h and struct mntent
4511 AC_CHECK_HEADERS(devnm.h)
4512 #################################################
4513 # check for devnm
4514 AC_CHECK_FUNCS(devnm)
4515
4516 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
4517     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4518         # if --with-sys-quotas=yes then build it 
4519         # you have can use the get/set quota command smb.conf
4520         # options then
4521         samba_cv_SYSQUOTA_FOUND=auto
4522     fi
4523     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
4524         # if --with-sys-quotas=yes then build it 
4525         # you have can use the get/set quota command smb.conf
4526         # options then
4527         samba_cv_TRY_SYS_QUOTAS=auto
4528     fi
4529 fi
4530
4531 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
4532 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
4533 SAVE_CPPFLAGS="$CPPFLAGS"
4534 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4535 AC_TRY_COMPILE([
4536 #include "confdefs.h"
4537 #define NO_PROTO_H 1
4538 #define NO_CONFIG_H 1
4539 #define HAVE_SYS_QUOTAS 1
4540 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
4541 #include "${srcdir-.}/lib/sysquotas.c"
4542 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
4543 CPPFLAGS="$SAVE_CPPFLAGS"
4544 ])
4545 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
4546 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
4547     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then 
4548         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4549         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
4550         samba_cv_WE_USE_SYS_QUOTAS=yes
4551         AC_MSG_RESULT(yes)
4552     else
4553         AC_MSG_RESULT(no)
4554     fi
4555 fi
4556 fi
4557
4558 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
4559 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
4560 SAVE_CPPFLAGS="$CPPFLAGS"
4561 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4562 AC_TRY_COMPILE([
4563 #include "confdefs.h"
4564 #define NO_PROTO_H 1
4565 #define NO_CONFIG_H 1
4566 #define HAVE_SYS_QUOTAS 1
4567 #define HAVE_XFS_QUOTAS 1
4568 #include "${srcdir-.}/lib/sysquotas_xfs.c"
4569 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
4570 CPPFLAGS="$SAVE_CPPFLAGS"
4571 ])
4572 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
4573     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
4574         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
4575     fi
4576 fi
4577 fi
4578
4579 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
4580 SAVE_CPPFLAGS="$CPPFLAGS"
4581 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4582 AC_TRY_COMPILE([
4583 #include "confdefs.h"
4584 #define NO_PROTO_H 1
4585 #define NO_CONFIG_H 1
4586 #include "${srcdir-.}/smbd/quotas.c"
4587 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
4588 CPPFLAGS="$SAVE_CPPFLAGS"
4589 ])
4590 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
4591 AC_MSG_CHECKING(whether to use the old quota support)
4592     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
4593       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
4594         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4595         AC_MSG_RESULT(yes)
4596       else
4597         AC_MSG_RESULT(no)
4598       fi
4599     else
4600       AC_MSG_RESULT(no)
4601     fi
4602 fi
4603
4604 ####################
4605 # End of quota check samba_cv_RUN_QUOTA_TESTS
4606 fi
4607
4608 #################################################
4609 # check for experimental utmp accounting
4610
4611 AC_MSG_CHECKING(whether to support utmp accounting)
4612 WITH_UTMP=yes
4613 AC_ARG_WITH(utmp,
4614 [  --with-utmp             Include utmp accounting (default, if supported by OS)],
4615 [ case "$withval" in
4616   no)
4617                 WITH_UTMP=no
4618                 ;;
4619   *)
4620                 WITH_UTMP=yes
4621                 ;;
4622   esac ],
4623 )
4624
4625 # utmp requires utmp.h
4626 # Note similar check earlier, when checking utmp details.
4627
4628 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
4629         utmp_no_reason=", no utmp.h on $host_os"
4630         WITH_UTMP=no
4631 fi
4632
4633 # Display test results
4634
4635 if test x"$WITH_UTMP" = x"yes"; then
4636         AC_MSG_RESULT(yes)
4637         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
4638 else
4639         AC_MSG_RESULT(no$utmp_no_reason)
4640 fi
4641
4642 INSTALLLIBCMD_SH=:
4643 INSTALLLIBCMD_A=:
4644 UNINSTALLLIBCMD_SH=:
4645 UNINSTALLLIBCMD_A=:
4646
4647 if test $BLDSHARED = true; then
4648         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
4649         UNINSTALLLIBCMD_SH="rm -f"
4650 fi
4651 if test $enable_static = yes; then
4652         INSTALLLIBCMD_A="\$(INSTALLCMD)"
4653         UNINSTALLLIBCMD_A="rm -f"
4654 fi
4655
4656 #################################################
4657 # should we build libmsrpc?
4658 INSTALL_LIBMSRPC=
4659 UNINSTALL_LIBMSRPC=
4660 LIBMSRPC_SHARED=
4661 LIBMSRPC=
4662 AC_MSG_CHECKING(whether to build the libmsrpc shared library)
4663 AC_ARG_WITH(libmsrpc,
4664 [  --with-libmsrpc         Build the libmsrpc shared library (default=yes if shared libs supported)],
4665 [ case "$withval" in
4666   no) 
4667      AC_MSG_RESULT(no)
4668      ;;
4669   *)
4670      if test $BLDSHARED = true; then
4671         LIBMSRPC_SHARED=bin/libmsrpc.$SHLIBEXT
4672         LIBMSRPC=libmsrpc
4673         AC_MSG_RESULT(yes)
4674      else
4675         enable_static=yes
4676         AC_MSG_RESULT(no shared library support -- will supply static library)
4677      fi
4678      if test $enable_static = yes; then
4679         LIBMSRPC=libmsrpc
4680      fi
4681      INSTALL_LIBMSRPC=installlibmsrpc
4682      UNINSTALL_LIBMSRPC=uninstalllibmsrpc
4683      ;;
4684   esac ],
4685 [
4686 # if unspecified, default is to built it if possible.
4687   if test $BLDSHARED = true; then
4688      LIBMSRPC_SHARED=bin/libmsrpc.$SHLIBEXT
4689      LIBMSRPC=libmsrpc
4690      AC_MSG_RESULT(yes)
4691    else
4692      enable_static=yes
4693      AC_MSG_RESULT(no shared library support -- will supply static library)
4694    fi
4695    if test $enable_static = yes; then
4696      LIBMSRPC=libmsrpc
4697   fi]
4698   INSTALL_LIBMSRPC=installlibmsrpc
4699   UNINSTALL_LIBMSRPC=uninstalllibmsrpc
4700 )
4701
4702
4703 #################################################
4704 # should we build libaddns?
4705 INSTALL_LIBADDNS=
4706 UNINSTALL_LIBADDNS=
4707 LIBADDNS_SHARED=
4708 LIBADDNS=
4709 AC_MSG_CHECKING(whether to build the libaddns shared library)
4710 AC_ARG_WITH(libaddns,
4711 [  --with-libaddns         Build the libaddns shared library (default=yes if shared libs supported)],
4712 [ case "$withval" in
4713   no) 
4714      AC_MSG_RESULT(no)
4715      ;;
4716   *)
4717      if test $BLDSHARED = true; then
4718         LIBADDNS_SHARED=bin/libaddns.$SHLIBEXT
4719         LIBADDNS=libaddns
4720         AC_MSG_RESULT(yes)
4721      else
4722         enable_static=yes
4723         AC_MSG_RESULT(no shared library support -- will supply static library)
4724      fi
4725      if test $enable_static = yes; then
4726         LIBADDNS=libaddns
4727      fi
4728      INSTALL_LIBADDNS=installlibaddns
4729      UNINSTALL_LIBADDNS=uninstalllibaddns
4730      ;;
4731   esac ],
4732 [
4733 # if unspecified, default is to built it if possible.
4734   if test $BLDSHARED = true; then
4735      LIBADDNS_SHARED=bin/libaddns.$SHLIBEXT
4736      LIBADDNS=libaddns
4737      AC_MSG_RESULT(yes)
4738    else
4739      enable_static=yes
4740      AC_MSG_RESULT(no shared library support -- will supply static library)
4741    fi
4742    if test $enable_static = yes; then
4743      LIBADDNS=libaddns
4744   fi]
4745   INSTALL_LIBADDNS=installlibaddns
4746   UNINSTALL_LIBADDNS=uninstalllibaddns
4747 )
4748
4749 #################################################
4750 # should we build libsmbclient?
4751 INSTALL_LIBSMBCLIENT=
4752 UNINSTALL_LIBSMBCLIENT=
4753 LIBSMBCLIENT_SHARED=
4754 LIBSMBCLIENT=
4755 AC_MSG_CHECKING(whether to build the libsmbclient shared library)
4756 AC_ARG_WITH(libsmbclient,
4757 [  --with-libsmbclient     Build the libsmbclient shared library (default=yes if shared libs supported)],
4758 [ case "$withval" in
4759   no) 
4760      AC_MSG_RESULT(no)
4761      ;;
4762   *)
4763      if test $BLDSHARED = true; then
4764         LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
4765         LIBSMBCLIENT=libsmbclient
4766         AC_MSG_RESULT(yes)
4767      else
4768         enable_static=yes
4769         AC_MSG_RESULT(no shared library support -- will supply static library)
4770      fi
4771      if test $enable_static = yes; then
4772         LIBSMBCLIENT=libsmbclient
4773      fi
4774      INSTALL_LIBSMBCLIENT=installclientlib
4775      UNINSTALL_LIBSMBCLIENT=uninstallclientlib
4776      ;;
4777   esac ],
4778 [
4779 # if unspecified, default is to built it if possible.
4780   if test $BLDSHARED = true; then
4781      LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
4782      LIBSMBCLIENT=libsmbclient
4783      AC_MSG_RESULT(yes)
4784    else
4785      enable_static=yes
4786      AC_MSG_RESULT(no shared library support -- will supply static library)
4787    fi
4788    if test $enable_static = yes; then
4789      LIBSMBCLIENT=libsmbclient
4790   fi]
4791   INSTALL_LIBSMBCLIENT=installclientlib
4792   UNINSTALL_LIBSMBCLIENT=uninstallclientlib
4793 )
4794
4795 INSTALL_LIBSMBSHAREMODES=
4796 LIBSMBSHAREMODES_SHARED=
4797 LIBSMBSHAREMODES=
4798 AC_MSG_CHECKING(whether to build the libsmbsharemodes shared library)
4799 AC_ARG_WITH(libsmbsharemodes,
4800 [  --with-libsmbsharemodes     Build the libsmbsharemodes shared library (default=yes if shared libs supported)],
4801 [ case "$withval" in
4802   no)
4803      AC_MSG_RESULT(no)
4804      ;;
4805   *)
4806      if test $BLDSHARED = true; then
4807         LIBSMBSHAREMODES_SHARED=bin/libsmbsharemodes.$SHLIBEXT
4808         LIBSMBSHAREMODES=libsmbsharemodes
4809         AC_MSG_RESULT(yes)
4810      else
4811         enable_static=yes
4812         AC_MSG_RESULT(no shared library support -- will supply static library)
4813      fi
4814      if test $enable_static = yes; then
4815         LIBSMBSHAREMODES=libsmbsharemodes
4816      fi
4817      INSTALL_LIBSMBSHAREMODES=installlibsmbsharemodes
4818      UNINSTALL_LIBSMBSHAREMODES=uninstalllibsmbsharemodes
4819      ;;
4820   esac ],
4821 [
4822 # if unspecified, default is to built it if possible.
4823   if test $BLDSHARED = true; then
4824      LIBSMBSHAREMODES_SHARED=bin/libsmbsharemodes.$SHLIBEXT
4825      LIBSMBSHAREMODES=libsmbsharemodes
4826      AC_MSG_RESULT(yes)
4827    else
4828      enable_static=yes
4829      AC_MSG_RESULT(no shared library support -- will supply static library)
4830    fi
4831    if test $enable_static = yes; then
4832      LIBSMBSHAREMODES=libsmbsharemodes
4833   fi]
4834   INSTALL_LIBSMBSHAREMODES=installlibsmbsharemodes
4835 )
4836
4837 #################################################
4838 # these tests are taken from the GNU fileutils package
4839 AC_CHECKING(how to get filesystem space usage)
4840 space=no
4841
4842 # Test for statvfs64.
4843 if test $space = no; then
4844   # SVR4
4845   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
4846   [AC_TRY_RUN([
4847 #if defined(HAVE_UNISTD_H)
4848 #include <unistd.h>
4849 #endif
4850 #include <sys/types.h>
4851 #include <sys/statvfs.h>
4852   main ()
4853   {
4854     struct statvfs64 fsd;
4855     exit (statvfs64 (".", &fsd));
4856   }],
4857   fu_cv_sys_stat_statvfs64=yes,
4858   fu_cv_sys_stat_statvfs64=no,
4859   fu_cv_sys_stat_statvfs64=cross)])
4860   if test $fu_cv_sys_stat_statvfs64 = yes; then
4861     space=yes
4862     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
4863   fi
4864 fi
4865
4866 # Perform only the link test since it seems there are no variants of the
4867 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
4868 # because that got a false positive on SCO OSR5.  Adding the declaration
4869 # of a `struct statvfs' causes this test to fail (as it should) on such
4870 # systems.  That system is reported to work fine with STAT_STATFS4 which
4871 # is what it gets when this test fails.
4872 if test $space = no; then
4873   # SVR4
4874   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
4875                  [AC_TRY_LINK([#include <sys/types.h>
4876 #include <sys/statvfs.h>],
4877                               [struct statvfs fsd; statvfs (0, &fsd);],
4878                               fu_cv_sys_stat_statvfs=yes,
4879                               fu_cv_sys_stat_statvfs=no)])
4880   if test $fu_cv_sys_stat_statvfs = yes; then
4881     space=yes
4882     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
4883   fi
4884 fi
4885
4886 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
4887 # This is not the case on ancient Linux systems.
4888
4889 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
4890     AC_TRY_COMPILE([#include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
4891         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
4892 if test x"$samba_cv_fsid_int" = x"yes"; then
4893     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
4894 fi
4895
4896 if test $space = no; then
4897   # DEC Alpha running OSF/1
4898   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
4899   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
4900   [AC_TRY_RUN([
4901 #include <sys/param.h>
4902 #include <sys/types.h>
4903 #include <sys/mount.h>
4904   main ()
4905   {
4906     struct statfs fsd;
4907     fsd.f_fsize = 0;
4908     exit (statfs (".", &fsd, sizeof (struct statfs)));
4909   }],
4910   fu_cv_sys_stat_statfs3_osf1=yes,
4911   fu_cv_sys_stat_statfs3_osf1=no,
4912   fu_cv_sys_stat_statfs3_osf1=no)])
4913   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
4914   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
4915     space=yes
4916     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
4917   fi
4918 fi
4919
4920 if test $space = no; then
4921 # AIX
4922   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
4923 member (AIX, 4.3BSD)])
4924   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
4925   [AC_TRY_RUN([
4926 #ifdef HAVE_SYS_PARAM_H
4927 #include <sys/param.h>
4928 #endif
4929 #ifdef HAVE_SYS_MOUNT_H
4930 #include <sys/mount.h>
4931 #endif
4932 #ifdef HAVE_SYS_VFS_H
4933 #include <sys/vfs.h>
4934 #endif
4935   main ()
4936   {
4937   struct statfs fsd;
4938   fsd.f_bsize = 0;
4939   exit (statfs (".", &fsd));
4940   }],
4941   fu_cv_sys_stat_statfs2_bsize=yes,
4942   fu_cv_sys_stat_statfs2_bsize=no,
4943   fu_cv_sys_stat_statfs2_bsize=no)])
4944   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
4945   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
4946     space=yes
4947     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
4948   fi
4949 fi
4950
4951 if test $space = no; then
4952 # SVR3
4953   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
4954   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
4955   [AC_TRY_RUN([#include <sys/types.h>
4956 #include <sys/statfs.h>
4957   main ()
4958   {
4959   struct statfs fsd;
4960   exit (statfs (".", &fsd, sizeof fsd, 0));
4961   }],
4962     fu_cv_sys_stat_statfs4=yes,
4963     fu_cv_sys_stat_statfs4=no,
4964     fu_cv_sys_stat_statfs4=no)])
4965   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
4966   if test $fu_cv_sys_stat_statfs4 = yes; then
4967     space=yes
4968     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
4969   fi
4970 fi
4971
4972 if test $space = no; then
4973 # 4.4BSD and NetBSD
4974   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
4975 member (4.4BSD and NetBSD)])
4976   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
4977   [AC_TRY_RUN([#include <sys/types.h>
4978 #ifdef HAVE_SYS_PARAM_H
4979 #include <sys/param.h>
4980 #endif
4981 #ifdef HAVE_SYS_MOUNT_H
4982 #include <sys/mount.h>
4983 #endif
4984   main ()
4985   {
4986   struct statfs fsd;
4987   fsd.f_fsize = 0;
4988   exit (statfs (".", &fsd));
4989   }],
4990   fu_cv_sys_stat_statfs2_fsize=yes,
4991   fu_cv_sys_stat_statfs2_fsize=no,
4992   fu_cv_sys_stat_statfs2_fsize=no)])
4993   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
4994   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
4995     space=yes
4996         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
4997   fi
4998 fi
4999
5000 if test $space = no; then
5001   # Ultrix
5002   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
5003   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
5004   [AC_TRY_RUN([#include <sys/types.h>
5005 #ifdef HAVE_SYS_PARAM_H
5006 #include <sys/param.h>
5007 #endif
5008 #ifdef HAVE_SYS_MOUNT_H
5009 #include <sys/mount.h>
5010 #endif
5011 #ifdef HAVE_SYS_FS_TYPES_H
5012 #include <sys/fs_types.h>
5013 #endif
5014   main ()
5015   {
5016   struct fs_data fsd;
5017   /* Ultrix's statfs returns 1 for success,
5018      0 for not mounted, -1 for failure.  */
5019   exit (statfs (".", &fsd) != 1);
5020   }],
5021   fu_cv_sys_stat_fs_data=yes,
5022   fu_cv_sys_stat_fs_data=no,
5023   fu_cv_sys_stat_fs_data=no)])
5024   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
5025   if test $fu_cv_sys_stat_fs_data = yes; then
5026     space=yes
5027     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
5028   fi
5029 fi
5030
5031 #
5032 # As a gating factor for large file support, in order to
5033 # use <4GB files we must have the following minimal support
5034 # available.
5035 # long long, and a 64 bit off_t or off64_t.
5036 # If we don't have all of these then disable large
5037 # file support.
5038 #
5039 AC_MSG_CHECKING([if large file support can be enabled])
5040 AC_TRY_COMPILE([
5041 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
5042 #include <sys/types.h>
5043 #else
5044 __COMPILE_ERROR_
5045 #endif
5046 ],
5047 [int i],
5048 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
5049 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
5050         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
5051 fi
5052 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
5053
5054 #################################################
5055 # check for cluster extensions
5056
5057 AC_MSG_CHECKING(whether to include cluster support)
5058 AC_ARG_WITH(cluster-support, 
5059 [  --with-cluster-support  Enable cluster extensions (default=no)])
5060 if test "x$with_cluster_support" = "xyes"; then
5061     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5062     AC_MSG_RESULT(yes)
5063 else
5064     AC_MSG_RESULT(no)
5065 fi
5066
5067
5068 #################################################
5069 # check for ACL support
5070
5071 AC_MSG_CHECKING(whether to support ACLs)
5072 AC_ARG_WITH(acl-support,
5073 [  --with-acl-support      Include ACL support (default=no)],
5074 [ case "$withval" in
5075   yes)
5076
5077         case "$host_os" in
5078         *sysv5*)
5079                 AC_MSG_RESULT(Using UnixWare ACLs)
5080                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5081                 default_static_modules="$default_static_modules vfs_solarisacl"
5082                 ;;
5083         *solaris*)
5084                 AC_MSG_RESULT(Using solaris ACLs)
5085                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5086                 ACL_LIBS="$ACL_LIBS -lsec"
5087                 default_static_modules="$default_static_modules vfs_solarisacl"
5088                 ;;
5089         *hpux*)
5090                 AC_MSG_RESULT(Using HPUX ACLs)
5091                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5092                 default_static_modules="$default_static_modules vfs_hpuxacl"
5093                 ;;
5094         *irix*)
5095                 AC_MSG_RESULT(Using IRIX ACLs)
5096                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5097                 default_static_modules="$default_static_modules vfs_irixacl"
5098                 ;;
5099         *aix*)
5100                 AC_MSG_RESULT(Using AIX ACLs)
5101                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5102                 default_static_modules="$default_static_modules vfs_aixacl"
5103                 ;;
5104         *osf*)
5105                 AC_MSG_RESULT(Using Tru64 ACLs)
5106                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5107                 ACL_LIBS="$ACL_LIBS -lpacl"
5108                 default_static_modules="$default_static_modules vfs_tru64acl"
5109                 ;;
5110         *freebsd[[5-9]]*)
5111                 AC_MSG_RESULT(Using FreeBSD posix ACLs)
5112                 AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether FreeBSD POSIX ACLs are available])
5113                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5114                 ;;
5115         *linux*)
5116                 AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5117                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5118                 AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[
5119                         acl_LIBS=$LIBS
5120                         LIBS="$LIBS -lacl"
5121                         AC_TRY_LINK([
5122                                 #include <sys/types.h>
5123                                 #include <sys/acl.h>
5124                         ],[
5125                                 acl_t acl;
5126                                 int entry_id;
5127                                 acl_entry_t *entry_p;
5128                                 return acl_get_entry(acl, entry_id, entry_p);
5129                         ],
5130                         [samba_cv_HAVE_POSIX_ACLS=yes],
5131                         [samba_cv_HAVE_POSIX_ACLS=no])
5132                         LIBS=$acl_LIBS
5133                 ])
5134                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5135                         AC_MSG_RESULT(Using posix ACLs)
5136                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5137                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5138                                 acl_LIBS=$LIBS
5139                                 LIBS="$LIBS -lacl"
5140                                 AC_TRY_LINK([
5141                                         #include <sys/types.h>
5142                                         #include <sys/acl.h>
5143                                 ],[
5144                                         acl_permset_t permset_d;
5145                                         acl_perm_t perm;
5146                                         return acl_get_perm_np(permset_d, perm);
5147                                 ],
5148                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5149                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5150                                 LIBS=$acl_LIBS
5151                         ])
5152                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5153                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5154                         fi
5155                 fi
5156             ;;
5157          *)
5158                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5159                 AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[
5160                         acl_LIBS=$LIBS
5161                         LIBS="$LIBS -lacl"
5162                         AC_TRY_LINK([
5163                                 #include <sys/types.h>
5164                                 #include <sys/acl.h>
5165                         ],[
5166                                 acl_t acl;
5167                                 int entry_id;
5168                                 acl_entry_t *entry_p;
5169                                 return acl_get_entry( acl, entry_id, entry_p);
5170                         ],
5171                         [samba_cv_HAVE_POSIX_ACLS=yes],
5172                         [samba_cv_HAVE_POSIX_ACLS=no])
5173                         LIBS=$acl_LIBS
5174                 ])
5175                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5176                         AC_MSG_RESULT(Using posix ACLs)
5177                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5178                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5179                                 acl_LIBS=$LIBS
5180                                 LIBS="$LIBS -lacl"
5181                                 AC_TRY_LINK([
5182                                         #include <sys/types.h>
5183                                         #include <sys/acl.h>
5184                                 ],[
5185                                         acl_permset_t permset_d;
5186                                         acl_perm_t perm;
5187                                         return acl_get_perm_np( permset_d, perm);
5188                                 ],
5189                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5190                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5191                                 LIBS=$acl_LIBS
5192                         ])
5193                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5194                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5195                         fi
5196                 fi
5197             ;;
5198         esac
5199         ;;
5200   *)
5201     AC_MSG_RESULT(no)
5202     AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5203     ;;
5204   esac ],
5205   AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5206   AC_MSG_RESULT(no)
5207 )
5208
5209 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5210    default_static_modules="$default_static_modules vfs_posixacl"
5211 fi
5212
5213 #################################################
5214 # check for AIO support
5215
5216 AC_MSG_CHECKING(whether to support asynchronous io)
5217 AC_ARG_WITH(aio-support,
5218 [  --with-aio-support      Include asynchronous io support (default=no)],
5219 [ case "$withval" in
5220   yes)
5221
5222         AC_MSG_RESULT(yes)
5223         case "$host_os" in
5224         *)
5225                 AIO_LIBS=$LIBS
5226                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5227                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5228                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5229                 aio_LIBS=$LIBS
5230                 LIBS=$AIO_LIBS
5231                 AC_TRY_LINK([#include <sys/types.h>
5232 #include <aio.h>],
5233 [ struct aiocb a; return aio_read(&a);],
5234 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5235                 LIBS=$aio_LIBS])
5236                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5237                 aio_LIBS=$LIBS
5238                 LIBS=$AIO_LIBS
5239                 AC_TRY_LINK([#include <sys/types.h>
5240 #include <aio.h>],
5241 [ struct aiocb64 a; return aio_read64(&a);],
5242 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5243                 LIBS=$aio_LIBS])
5244                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5245                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5246                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5247                         LIBS=$AIO_LIBS
5248                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5249                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5250                         LIBS=$AIO_LIBS
5251                 fi
5252
5253                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5254                         AC_MSG_CHECKING(for aio_read)
5255                         AC_LINK_IFELSE([#include <aio.h>
5256 int main() { struct aiocb a; return aio_read(&a); }],
5257 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5258 [AC_MSG_RESULT(no)])
5259
5260                         AC_MSG_CHECKING(for aio_write)
5261                         AC_LINK_IFELSE([#include <aio.h>
5262 int main() { struct aiocb a; return aio_write(&a); }],
5263 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5264 [AC_MSG_RESULT(no)])
5265
5266                         AC_MSG_CHECKING(for aio_fsync)
5267                         AC_LINK_IFELSE([#include <aio.h>
5268 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5269 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5270 [AC_MSG_RESULT(no)])
5271
5272                         AC_MSG_CHECKING(for aio_return)
5273                         AC_LINK_IFELSE([#include <aio.h>
5274 int main() { struct aiocb a; return aio_return(&a); }],
5275 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5276 [AC_MSG_RESULT(no)])
5277
5278                         AC_MSG_CHECKING(for aio_error)
5279                         AC_LINK_IFELSE([#include <aio.h>
5280 int main() { struct aiocb a; return aio_error(&a); }],
5281 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5282 [AC_MSG_RESULT(no)])
5283
5284                         AC_MSG_CHECKING(for aio_cancel)
5285                         AC_LINK_IFELSE([#include <aio.h>
5286 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5287 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5288 [AC_MSG_RESULT(no)])
5289
5290                         AC_MSG_CHECKING(for aio_suspend)
5291                         AC_LINK_IFELSE([#include <aio.h>
5292 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5293 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5294 [AC_MSG_RESULT(no)])
5295                 fi
5296
5297                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5298                         AC_MSG_CHECKING(for aio_read64)
5299                         AC_LINK_IFELSE([#include <aio.h>
5300 int main() { struct aiocb a; return aio_read64(&a); }],
5301 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5302 [AC_MSG_RESULT(no)])
5303
5304                         AC_MSG_CHECKING(for aio_write64)
5305                         AC_LINK_IFELSE([#include <aio.h>
5306 int main() { struct aiocb a; return aio_write64(&a); }],
5307 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5308 [AC_MSG_RESULT(no)])
5309
5310                         AC_MSG_CHECKING(for aio_fsync64)
5311                         AC_LINK_IFELSE([#include <aio.h>
5312 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5313 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5314 [AC_MSG_RESULT(no)])
5315
5316                         AC_MSG_CHECKING(for aio_return64)
5317                         AC_LINK_IFELSE([#include <aio.h>
5318 int main() { struct aiocb a; return aio_return64(&a); }],
5319 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5320 [AC_MSG_RESULT(no)])
5321
5322                         AC_MSG_CHECKING(for aio_error64)
5323                         AC_LINK_IFELSE([#include <aio.h>
5324 int main() { struct aiocb a; return aio_error64(&a); }],
5325 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5326 [AC_MSG_RESULT(no)])
5327
5328                         AC_MSG_CHECKING(for aio_cancel64)
5329                         AC_LINK_IFELSE([#include <aio.h>
5330 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5331 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5332 [AC_MSG_RESULT(no)])
5333
5334                         AC_MSG_CHECKING(for aio_suspend64)
5335                         AC_LINK_IFELSE([#include <aio.h>
5336 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5337 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5338 [AC_MSG_RESULT(no)])
5339                 fi
5340             ;;
5341         esac
5342         ;;
5343   *)
5344     AC_MSG_RESULT(no)
5345     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5346     ;;
5347   esac ],
5348   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5349   AC_MSG_RESULT(no)
5350 )
5351
5352 #################################################
5353 # check for sendfile support
5354
5355 with_sendfile_support=yes
5356 AC_MSG_CHECKING(whether to check to support sendfile)
5357 AC_ARG_WITH(sendfile-support,
5358 [  --with-sendfile-support Check for sendfile support (default=yes)],
5359 [ case "$withval" in
5360   yes)
5361
5362         AC_MSG_RESULT(yes);
5363
5364         case "$host_os" in
5365         *linux*)
5366                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5367                 AC_TRY_LINK([#include <sys/sendfile.h>],
5368 [\
5369 int tofd, fromfd;
5370 off64_t offset;
5371 size_t total;
5372 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5373 ],
5374 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5375
5376                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5377                 AC_TRY_LINK([#include <sys/sendfile.h>],
5378 [\
5379 int tofd, fromfd;
5380 off_t offset;
5381 size_t total;
5382 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5383 ],
5384 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5385
5386 # Try and cope with broken Linux sendfile....
5387                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5388                 AC_TRY_LINK([\
5389 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5390 #undef _FILE_OFFSET_BITS
5391 #endif
5392 #include <sys/sendfile.h>],
5393 [\
5394 int tofd, fromfd;
5395 off_t offset;
5396 size_t total;
5397 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5398 ],
5399 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5400
5401         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5402                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5403                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5404                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5405         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5406                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5407                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5408                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5409         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
5410                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5411                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5412         else
5413                 AC_MSG_RESULT(no);
5414         fi
5415
5416         ;;
5417         *freebsd* | *dragonfly* )
5418                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5419                 AC_TRY_LINK([\
5420 #include <sys/types.h>
5421 #include <unistd.h>
5422 #include <sys/socket.h>
5423 #include <sys/uio.h>],
5424 [\
5425         int fromfd, tofd, ret, total=0;
5426         off_t offset, nwritten;
5427         struct sf_hdtr hdr;
5428         struct iovec hdtrl;
5429         hdr.headers = &hdtrl;
5430         hdr.hdr_cnt = 1;
5431         hdr.trailers = NULL;
5432         hdr.trl_cnt = 0;
5433         hdtrl.iov_base = NULL;
5434         hdtrl.iov_len = 0;
5435         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5436 ],
5437 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5438
5439         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5440                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5441                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5442                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5443         else
5444                 AC_MSG_RESULT(no);
5445         fi
5446         ;;
5447
5448         *hpux*)
5449                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5450                 AC_TRY_LINK([\
5451 #include <sys/socket.h>
5452 #include <sys/uio.h>],
5453 [\
5454         int fromfd, tofd;
5455         size_t total=0;
5456         struct iovec hdtrl[2];
5457         ssize_t nwritten;
5458         off64_t offset;
5459
5460         hdtrl[0].iov_base = 0;
5461         hdtrl[0].iov_len = 0;
5462
5463         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
5464 ],
5465 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5466         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5467                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
5468                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5469                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5470         else
5471                 AC_MSG_RESULT(no);
5472         fi
5473
5474                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5475                 AC_TRY_LINK([\
5476 #include <sys/socket.h>
5477 #include <sys/uio.h>],
5478 [\
5479         int fromfd, tofd;
5480         size_t total=0;
5481         struct iovec hdtrl[2];
5482         ssize_t nwritten;
5483         off_t offset;
5484
5485         hdtrl[0].iov_base = 0;
5486         hdtrl[0].iov_len = 0;
5487
5488         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5489 ],
5490 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5491         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5492                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5493                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5494                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5495         else
5496                 AC_MSG_RESULT(no);
5497         fi
5498         ;;
5499
5500         *solaris*)
5501                 AC_CHECK_LIB(sendfile,sendfilev)
5502                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
5503                 AC_TRY_LINK([\
5504 #include <sys/sendfile.h>],
5505 [\
5506         int sfvcnt;
5507         size_t xferred;
5508         struct sendfilevec vec[2];
5509         ssize_t nwritten;
5510         int tofd;
5511
5512         sfvcnt = 2;
5513
5514         vec[0].sfv_fd = SFV_FD_SELF;
5515         vec[0].sfv_flag = 0;
5516         vec[0].sfv_off = 0;
5517         vec[0].sfv_len = 0;
5518
5519         vec[1].sfv_fd = 0;
5520         vec[1].sfv_flag = 0;
5521         vec[1].sfv_off = 0;
5522         vec[1].sfv_len = 0;
5523         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
5524 ],
5525 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
5526
5527         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
5528                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
5529                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
5530                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5531         else
5532                 AC_MSG_RESULT(no);
5533         fi
5534
5535                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5536                 AC_TRY_LINK([\
5537 #include <sys/sendfile.h>],
5538 [\
5539         int sfvcnt;
5540         size_t xferred;
5541         struct sendfilevec vec[2];
5542         ssize_t nwritten;
5543         int tofd;
5544
5545         sfvcnt = 2;
5546
5547         vec[0].sfv_fd = SFV_FD_SELF;
5548         vec[0].sfv_flag = 0;
5549         vec[0].sfv_off = 0;
5550         vec[0].sfv_len = 0;
5551
5552         vec[1].sfv_fd = 0;
5553         vec[1].sfv_flag = 0;
5554         vec[1].sfv_off = 0;
5555         vec[1].sfv_len = 0;
5556         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
5557 ],
5558 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
5559
5560         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
5561                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
5562                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
5563                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5564         else
5565                 AC_MSG_RESULT(no);
5566         fi
5567         ;;
5568         *aix*)
5569                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
5570                 AC_TRY_LINK([\
5571 #include <sys/socket.h>],
5572 [\
5573         int fromfd, tofd;
5574         size_t total=0;
5575         struct sf_parms hdtrl;
5576         ssize_t nwritten;
5577         off64_t offset;
5578
5579         hdtrl.header_data = 0;
5580         hdtrl.header_length = 0;
5581         hdtrl.file_descriptor = fromfd;
5582         hdtrl.file_offset = 0;
5583         hdtrl.file_bytes = 0;
5584         hdtrl.trailer_data = 0;
5585         hdtrl.trailer_length = 0;
5586
5587         nwritten = send_file(&tofd, &hdtrl, 0);
5588 ],
5589 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5590         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5591                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5592                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
5593                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5594         else
5595                 AC_MSG_RESULT(no);
5596         fi
5597         ;;
5598         *)
5599         ;;
5600         esac
5601         ;;
5602   *)
5603     AC_MSG_RESULT(no)
5604     ;;
5605   esac ],
5606   AC_MSG_RESULT(yes)
5607 )
5608
5609
5610 #################################################
5611 # Check whether winbind is supported on this platform.  If so we need to
5612 # build and install client programs, sbin programs and shared libraries
5613
5614 AC_MSG_CHECKING(whether to build winbind)
5615
5616 # Initially, the value of $host_os decides whether winbind is supported
5617
5618 HAVE_WINBIND=yes
5619
5620 # Define the winbind shared library name and any specific linker flags
5621 # it needs to be built with.
5622
5623 WINBIND_NSS="nsswitch/libnss_winbind.$SHLIBEXT"
5624 WINBIND_WINS_NSS="nsswitch/libnss_wins.$SHLIBEXT"
5625 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
5626 NSSSONAMEVERSIONSUFFIX=""
5627
5628 SMB_KRB5_LOCATOR="bin/smb_krb5_locator.$SHLIBEXT"
5629
5630 case "$host_os" in
5631         *linux*)
5632                 NSSSONAMEVERSIONSUFFIX=".2"
5633                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_linux.o"
5634                 ;;
5635         *freebsd[[5-9]]*)
5636                 # FreeBSD winbind client is implemented as a wrapper around
5637                 # the Linux version.
5638                 NSSSONAMEVERSIONSUFFIX=".1"
5639                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_freebsd.o \
5640                     nsswitch/winbind_nss_linux.o"
5641                 WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5642                 WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5643                 ;;
5644
5645         *netbsd*[[3-9]]*)
5646                 # NetBSD winbind client is implemented as a wrapper
5647                 # around the Linux version. It needs getpwent_r() to
5648                 # indicate libc's use of the correct nsdispatch API.
5649                 #
5650                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
5651                         WINBIND_NSS_EXTRA_OBJS="\
5652                             nsswitch/winbind_nss_netbsd.o \
5653                             nsswitch/winbind_nss_linux.o"
5654                         WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5655                         WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5656                 else
5657                         HAVE_WINBIND=no
5658                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
5659                 fi
5660                 ;;
5661         *irix*)
5662                 # IRIX has differently named shared libraries
5663                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_irix.o"
5664                 WINBIND_NSS="nsswitch/libns_winbind.$SHLIBEXT"
5665                 WINBIND_WINS_NSS="nsswitch/libns_wins.$SHLIBEXT"
5666                 ;;
5667         *solaris*)
5668                 # Solaris winbind client is implemented as a wrapper around
5669                 # the Linux version.
5670                 NSSSONAMEVERSIONSUFFIX=".1"
5671                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o \
5672                     nsswitch/winbind_nss_linux.o"
5673                 WINBIND_NSS_EXTRA_LIBS="-lsocket"
5674                 ;;
5675         *hpux11*)
5676                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
5677                 ;;
5678         *aix*)
5679                 # AIX has even differently named shared libraries.  No
5680                 # WINS support has been implemented yet.
5681                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_aix.o"
5682                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
5683                 WINBIND_NSS="nsswitch/WINBIND"
5684                 WINBIND_WINS_NSS=""
5685                 ;;
5686         *)
5687                 HAVE_WINBIND=no
5688                 winbind_no_reason=", unsupported on $host_os"
5689                 ;;
5690 esac
5691
5692 AC_SUBST(WINBIND_NSS)
5693 AC_SUBST(WINBIND_WINS_NSS)
5694 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
5695 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
5696 AC_SUBST(WINBIND_NSS_EXTRA_LIBS)
5697 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
5698
5699 AC_SUBST(SMB_KRB5_LOCATOR)
5700
5701 # Check the setting of --with-winbind
5702
5703 AC_ARG_WITH(winbind,
5704 [  --with-winbind          Build winbind (default, if supported by OS)],
5705
5706   case "$withval" in
5707         yes)
5708                 HAVE_WINBIND=yes
5709                 ;;
5710         no)
5711                 HAVE_WINBIND=no
5712                 winbind_reason=""
5713                 ;;
5714   esac ],
5715 )
5716
5717 # We need unix domain sockets for winbind
5718
5719 if test x"$HAVE_WINBIND" = x"yes"; then
5720         if test x"$samba_cv_unixsocket" = x"no"; then
5721                 winbind_no_reason=", no unix domain socket support on $host_os"
5722                 HAVE_WINBIND=no
5723         fi
5724 fi
5725
5726 # Display test results
5727
5728 if test x"$HAVE_WINBIND" = x"no"; then
5729         WINBIND_NSS=""
5730         WINBIND_WINS_NSS=""
5731 fi
5732
5733 if test x"$HAVE_WINBIND" = x"yes"; then
5734         AC_MSG_RESULT(yes)
5735         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
5736
5737         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
5738         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
5739         if test $BLDSHARED = true; then
5740                 SHLIB_PROGS="$SHLIB_PROGS $WINBIND_NSS $WINBIND_WINS_NSS"
5741
5742                 if test x"$create_pam_modules" = x"yes"; then
5743                         PAM_MODULES="$PAM_MODULES pam_winbind"
5744                         INSTALL_PAM_MODULES="installpammodules"
5745                         UNINSTALL_PAM_MODULES="uninstallpammodules"
5746                 fi
5747         fi
5748 else
5749         AC_MSG_RESULT(no$winbind_no_reason)
5750 fi
5751
5752 # Solaris 10 does have new member in nss_XbyY_key
5753 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
5754                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
5755                 [#include <nss_dbdefs.h>])
5756
5757 # Solaris has some extra fields in struct passwd that need to be
5758 # initialised otherwise nscd crashes.  
5759  
5760 AC_CHECK_MEMBER(struct passwd.pw_comment,
5761                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
5762                 [#include <pwd.h>])
5763
5764 AC_CHECK_MEMBER(struct passwd.pw_age,
5765                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
5766                 [#include <pwd.h>])
5767
5768 # AIX 4.3.x and 5.1 do not have as many members in
5769 # struct secmethod_table as AIX 5.2
5770 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
5771        [#include <usersec.h>])
5772 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
5773        [#include <usersec.h>])
5774
5775 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
5776 AC_TRY_COMPILE([#include <sys/types.h>
5777 #include <sys/socket.h>],
5778 [struct ucred cred;
5779  socklen_t cred_len;
5780  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
5781 ],
5782 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
5783 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
5784     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
5785 fi
5786
5787
5788 #################################################
5789 # Check to see if we should use the included popt 
5790
5791 AC_ARG_WITH(included-popt,
5792 [  --with-included-popt    use bundled popt library, not from system],
5793
5794   case "$withval" in
5795         yes)
5796                 INCLUDED_POPT=yes
5797                 ;;
5798         no)
5799                 INCLUDED_POPT=no
5800                 ;;
5801   esac ],
5802 )
5803 if test x"$INCLUDED_POPT" != x"yes"; then
5804     AC_CHECK_LIB(popt, poptGetContext,
5805                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
5806 fi
5807
5808 AC_MSG_CHECKING(whether to use included popt)
5809 if test x"$INCLUDED_POPT" = x"yes"; then
5810     AC_MSG_RESULT(yes)
5811     BUILD_POPT='$(POPT_OBJ)'
5812     POPTLIBS='$(POPT_OBJ)'
5813     FLAGS1="-I\$(srcdir)/popt"
5814 else
5815     AC_MSG_RESULT(no)
5816     BUILD_POPT=""
5817     POPTLIBS="-lpopt"
5818 fi
5819 AC_SUBST(BUILD_POPT)
5820 AC_SUBST(POPTLIBS)
5821 AC_SUBST(FLAGS1)
5822
5823 #################################################
5824 # Check to see if we should use the included iniparser 
5825
5826 AC_ARG_WITH(included-iniparser,
5827 [  --with-included-iniparser    use bundled iniparser library, not from system],
5828
5829   case "$withval" in
5830         yes)
5831                 INCLUDED_INIPARSER=yes
5832                 ;;
5833         no)
5834                 INCLUDED_INIPARSER=no
5835                 ;;
5836   esac ],
5837 )
5838 if test x"$INCLUDED_INIPARSER" != x"yes"; then
5839     AC_CHECK_LIB(iniparser, iniparser_load,
5840                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
5841 fi
5842
5843 AC_MSG_CHECKING(whether to use included iniparser)
5844 if test x"$INCLUDED_INIPARSER" = x"yes"; then
5845     AC_MSG_RESULT(yes)
5846     BUILD_INIPARSER='$(INIPARSER_OBJ)'
5847         INIPARSERLIBS=""
5848     FLAGS1="$FLAGS1 -I\$(srcdir)/iniparser/src"
5849 else
5850     AC_MSG_RESULT(no)
5851         BUILD_INIPARSER=""
5852     INIPARSERLIBS="-liniparser"
5853 fi
5854 AC_SUBST(BUILD_INIPARSER)
5855 AC_SUBST(INIPARSERLIBS)
5856 AC_SUBST(FLAGS1)
5857
5858
5859
5860 #################################################
5861 # Check if the user wants Python
5862
5863 # At the moment, you can use this to set which Python binary to link
5864 # against.  (Libraries built for Python2.2 can't be used by 2.1,
5865 # though they can coexist in different directories.)  In the future
5866 # this might make the Python stuff be built by default.
5867
5868 # Defaulting python breaks the clean target if python isn't installed
5869
5870 PYTHON=
5871
5872 AC_ARG_WITH(python,
5873 [  --with-python=PYTHONNAME  build Python libraries],
5874 [ case "${withval-python}" in
5875   yes)
5876         PYTHON=python
5877         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS python_ext"
5878         ;;
5879   no)
5880         PYTHON=
5881         ;;
5882   *)
5883         PYTHON=${withval-python}
5884         ;;
5885   esac ])
5886 AC_SUBST(PYTHON)
5887
5888 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
5889 do
5890         eval MODULE_DEFAULT_$i=STATIC
5891 done
5892
5893 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
5894 do
5895         dnl Fall back to static if we cannot build shared libraries
5896         eval MODULE_DEFAULT_$i=STATIC
5897
5898         if test $BLDSHARED = true; then
5899                 eval MODULE_DEFAULT_$i=SHARED
5900         fi
5901 done
5902
5903 dnl Always built these modules static
5904 MODULE_rpc_spoolss=STATIC
5905 MODULE_rpc_srvsvc=STATIC
5906 MODULE_idmap_tdb=STATIC
5907 MODULE_idmap_passdb=STATIC
5908 MODULE_idmap_nss=STATIC
5909
5910 MODULE_nss_info_template=STATIC
5911
5912 AC_ARG_WITH(static-modules,
5913 [  --with-static-modules=MODULES  Comma-separated list of names of modules to statically link in],
5914 [ if test $withval; then
5915         for i in `echo $withval | sed -e 's/,/ /g'`
5916         do
5917                 eval MODULE_$i=STATIC
5918         done
5919 fi ])
5920
5921 AC_ARG_WITH(shared-modules,
5922 [  --with-shared-modules=MODULES  Comma-separated list of names of modules to build shared],
5923 [ if test $withval; then
5924         for i in `echo $withval | sed -e 's/,/ /g'`
5925         do
5926                         eval MODULE_$i=SHARED
5927         done
5928 fi ])
5929
5930 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o, "bin/ldapsam.$SHLIBEXT", PDB, 
5931                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
5932 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
5933 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
5934 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
5935
5936
5937 SMB_MODULE(rpc_lsa, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
5938 SMB_MODULE(rpc_winreg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
5939 SMB_MODULE(rpc_initshutdown, \$(RPC_INITSHUTDOWN_OBJ), "bin/librpc_initshutdown.$SHLIBEXT", RPC)
5940 SMB_MODULE(rpc_lsa_ds, \$(RPC_LSA_DS_OBJ), "bin/librpc_lsa_ds.$SHLIBEXT", RPC)
5941 SMB_MODULE(rpc_wkssvc, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
5942 SMB_MODULE(rpc_svcctl, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl.$SHLIBEXT", RPC)
5943 SMB_MODULE(rpc_ntsvcs, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs.$SHLIBEXT", RPC)
5944 SMB_MODULE(rpc_net, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
5945 SMB_MODULE(rpc_netdfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
5946 SMB_MODULE(rpc_srvsvc, \$(RPC_SVC_OBJ), "bin/librpc_srvsvc.$SHLIBEXT", RPC)
5947 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
5948 SMB_MODULE(rpc_eventlog, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog.$SHLIBEXT", RPC)
5949 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
5950 SMB_MODULE(rpc_rpcecho, \$(RPC_ECHO_OBJ), "bin/librpc_echo.$SHLIBEXT", RPC)
5951 SMB_MODULE(rpc_unixinfo, \$(RPC_UNIXINFO_OBJ), "bin/librpc_unixinfo.$SHLIBEXT", RPC)
5952 SMB_SUBSYSTEM(RPC,smbd/server.o)
5953
5954 SMB_MODULE(idmap_ldap, nsswitch/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
5955 SMB_MODULE(idmap_tdb, nsswitch/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
5956 SMB_MODULE(idmap_passdb, nsswitch/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
5957 SMB_MODULE(idmap_nss, nsswitch/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
5958 SMB_MODULE(idmap_rid, nsswitch/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
5959 SMB_MODULE(idmap_ad, nsswitch/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
5960 SMB_SUBSYSTEM(IDMAP, nsswitch/idmap.o)
5961
5962 SMB_MODULE(nss_info_template, nsswitch/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
5963 SMB_SUBSYSTEM(NSS_INFO, nsswitch/nss_info.o)
5964
5965 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
5966 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
5967 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
5968 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
5969 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
5970
5971 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
5972 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
5973 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
5974 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
5975 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
5976 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
5977 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
5978 SMB_SUBSYSTEM(AUTH,auth/auth.o)
5979
5980 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
5981 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
5982 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
5983 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
5984 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
5985 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
5986 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
5987 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
5988 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
5989 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
5990 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
5991 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
5992 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
5993 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
5994 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
5995 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
5996 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
5997 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
5998 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
5999 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6000 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6001 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6002 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6003 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6004 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6005 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6006
6007 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6008
6009 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6010
6011 #################################################
6012 # do extra things if we are running insure
6013
6014 if test "${ac_cv_prog_CC}" = "insure"; then
6015         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6016 fi
6017
6018 #################################################
6019 # If run from the build farm, enable NASTY hacks
6020 #################################################
6021 AC_MSG_CHECKING(whether to enable build farm hacks)
6022 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
6023         AC_MSG_RESULT(yes)
6024         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
6025 else
6026         AC_MSG_RESULT(no)
6027 fi
6028
6029 #################################################
6030 # check for bad librt/libpthread interactions
6031
6032 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6033     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6034     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6035     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6036
6037 SMB_IF_RTSIGNAL_BUG(
6038         [
6039             # Have RT_SIGNAL bug, need to check whether the problem will
6040             # affect anything we have configured.
6041
6042             rt_do_error=no
6043             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6044                 if test x"$rt_signal_lease_ok" = x"no" ; then
6045                     rt_do_error=yes
6046                 fi
6047             fi
6048
6049             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6050                 if test x"$rt_signal_notify_ok" = x"no" ; then
6051                     rt_do_error=yes
6052                 fi
6053             fi
6054
6055             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6056                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6057                 if test x"$rt_signal_aio_ok" = x"no" ; then
6058                     rt_do_error=yes
6059                 fi
6060             fi
6061
6062             if test x"$rt_do_error" = x"yes" ; then
6063                 SMB_IS_LIBPTHREAD_LINKED(
6064                     [
6065                         cat<<MSG
6066
6067 *** On this platforms, linking Samba against pthreads causes problems
6068 *** with the oplock and change notification mechanisms. You may be
6069 *** using pthreads as a side-effect of using the --with-aio-support
6070 *** or --with-profiling-data options. Please remove these and try again.
6071
6072 MSG
6073                     ],
6074                     [
6075                         cat<<MSG
6076
6077 *** On this platform, the oplock and change notification mechanisms do not
6078 *** appear to work. Please report this problem to samba-technical@samba.org
6079 *** and attach the config.log file from this directory.
6080
6081 MSG
6082                     ])
6083                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6084             fi
6085         ],
6086         [
6087             # no RT_SIGNAL bug, we are golden
6088             SMB_IS_LIBPTHREAD_LINKED(
6089                 [
6090                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6091                 ])
6092
6093         ],
6094         [
6095             # cross compiling, I hope you know what you are doing
6096             true
6097         ])
6098
6099 fi
6100
6101 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6102 LIB_REMOVE_USR_LIB(LDFLAGS)
6103 LIB_REMOVE_USR_LIB(LIBS)
6104 LIB_REMOVE_USR_LIB(KRB5_LIBS)
6105
6106 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6107 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6108 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6109
6110 #################################################
6111 # Display summary of libraries detected
6112
6113 AC_MSG_RESULT([Using libraries:])
6114 AC_MSG_RESULT([    LIBS = $LIBS])
6115 if test x"$with_ads_support" != x"no"; then
6116     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6117 fi
6118 if test x"$with_ldap_support" != x"no"; then
6119     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6120 fi
6121 if test x"$with_dnsupdate_support" != x"no"; then
6122     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
6123 fi
6124 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6125
6126 #################################################
6127 # final configure stuff
6128
6129 AC_MSG_CHECKING([configure summary])
6130 AC_TRY_RUN([#include "${srcdir-.}/tests/summary.c"],
6131            AC_MSG_RESULT(yes),
6132            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
6133            AC_MSG_WARN([cannot run when cross-compiling]))
6134
6135 builddir=`pwd`
6136 AC_SUBST(builddir)
6137
6138 # Stuff the smbd-only libraries at the end of the smbd link
6139 # path (if we have them).
6140 SMBD_LIBS="$samba_fam_libs $samba_dmapi_libs"
6141 AC_SUBST(SMBD_LIBS)
6142
6143 AC_OUTPUT(include/stamp-h Makefile script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh)
6144
6145 #################################################
6146 # Print very concise instructions on building/use
6147 if test "x$enable_dmalloc" = xyes
6148 then
6149         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
6150         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])
6151 fi