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