r19730: as libreplace always provides dlopen(), we need to always define SHLIBEXT
[nivanova/samba-autobuild/.git] / source3 / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2
3 dnl We must use autotools 2.53 or above
4 AC_PREREQ(2.53)
5 AC_INIT(include/includes.h)
6 AC_CONFIG_HEADER(include/config.h)
7
8 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