r20429: Restructure the libuuid API tests to handle the case where libuuid
[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 # add -ldl to the global LIBS
855 LIBS="${LIBS} ${LIBDL}"
856
857 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)
858 AC_CHECK_HEADERS(unistd.h utime.h grp.h sys/id.h memory.h alloca.h)
859 AC_CHECK_HEADERS(limits.h float.h)
860 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
861 AC_CHECK_HEADERS(sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h sys/prctl.h)
862 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h sys/socket.h)
863 AC_CHECK_HEADERS(sys/un.h)
864 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
865 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/sockio.h)
866 AC_CHECK_HEADERS(sys/sysmacros.h)
867 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
868 AC_CHECK_HEADERS(langinfo.h locale.h)
869 AC_CHECK_HEADERS(xfs/libxfs.h)
870
871 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
872 #if HAVE_RPC_RPC_H
873 #include <rpc/rpc.h>
874 #endif
875 ]])
876
877 ## These fail to compile on IRIX so just check for their presence
878 AC_CHECK_HEADERS(sys/mode.h,,,)
879
880 # Look for Darwin headers
881 old_CPPFLAGS="$CPPFLAGS"
882 CPPFLAGS="-Iinclude $CPPFLAGS"
883 AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
884 CPPFLAGS="$old_CPPFLAGS"
885
886 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
887 # subdirectory of headers.
888 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
889
890 # check for linux on amd64 since valgrind is not quite there yet
891 case "$host_os" in
892         *linux*)
893                 case "$UNAME_P" in
894                         *x86_64*)
895                                 AC_DEFINE(HAVE_64BIT_LINUX,1,[Whether we are running on 64bit linux])
896                                 ;;
897                 esac
898                 ;;
899 esac
900
901
902 #
903 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
904 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
905 #
906 case "$host_os" in
907     *hpux*)
908                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
909                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
910                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
911                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
912                 fi
913         ;;
914 esac
915 AC_CHECK_HEADERS(shadow.h)
916 AC_CHECK_HEADERS(nss.h nss_common.h nsswitch.h ns_api.h sys/security.h)
917 AC_CHECK_HEADERS(syscall.h sys/syscall.h)
918
919 AC_CHECK_HEADERS(sys/acl.h sys/attributes.h attr/xattr.h sys/xattr.h sys/extattr.h sys/uio.h)
920 AC_CHECK_HEADERS(sys/ea.h sys/proplist.h)
921
922 AC_CHECK_HEADERS(sys/cdefs.h glob.h)
923
924 # For experimental utmp support (lastlog on some BSD-like systems)
925 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
926  
927 AC_CHECK_SIZEOF(int,cross)
928 AC_CHECK_SIZEOF(long,cross)
929 AC_CHECK_SIZEOF(long long,cross)
930 AC_CHECK_SIZEOF(short,cross)
931
932 AC_C_CONST
933 AC_C_INLINE
934 AC_C_BIGENDIAN
935 AC_C_CHAR_UNSIGNED
936
937 AC_TYPE_SIGNAL
938 AC_TYPE_UID_T
939 AC_TYPE_MODE_T
940 AC_TYPE_OFF_T
941 AC_TYPE_SIZE_T
942 AC_TYPE_PID_T
943 AC_STRUCT_ST_RDEV
944 AC_DIRENT_D_OFF
945 AC_CHECK_TYPE(ino_t,unsigned)
946 AC_CHECK_TYPE(loff_t,off_t)
947 AC_CHECK_TYPE(offset_t,loff_t)
948 AC_CHECK_TYPE(ssize_t, int)
949 AC_CHECK_TYPE(wchar_t, unsigned short)
950 AC_CHECK_TYPE(comparison_fn_t, 
951 [AC_DEFINE(HAVE_COMPARISON_FN_T, 1,[Whether or not we have comparison_fn_t])])
952
953 ############################################
954 # for cups support we need libcups, and a handful of header files
955
956 AC_ARG_ENABLE(cups,
957 [  --enable-cups           Turn on CUPS support (default=auto)])
958
959 if test x$enable_cups != xno; then
960         AC_PATH_PROG(CUPS_CONFIG, cups-config)
961
962         if test "x$CUPS_CONFIG" != x; then
963                 AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
964                 CFLAGS="$CFLAGS `$CUPS_CONFIG --cflags`"
965                 LDFLAGS="$LDFLAGS `$CUPS_CONFIG --ldflags`"
966                 PRINT_LIBS="$PRINT_LIBS `$CUPS_CONFIG --libs`"
967         elif test x"$enable_cups" = x"yes"; then
968                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
969         fi
970 fi
971
972 AC_ARG_ENABLE(iprint,
973 [  --enable-iprint         Turn on iPrint support (default=yes if cups is yes)])
974
975 if test x$enable_iprint != xno; then
976         if test "x$CUPS_CONFIG" != x; then
977                 AC_DEFINE(HAVE_IPRINT,1,[Whether we have iPrint])
978         elif test x"$enable_iprint" = x"yes"; then
979                 AC_MSG_ERROR(iPrint support required but cups not enabled.  Make sure cups-devel related files are installed and that cups is enabled.)
980         fi
981 fi
982
983 ############################################
984 # check if the compiler can do immediate structures
985 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
986     AC_TRY_LINK([
987 #include <stdio.h>],
988 [
989                 if (0) {
990                    this_function_does_not_exist();
991                 } else {
992                   return 1;
993                 }
994
995 ],
996         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
997 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
998    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
999 fi
1000
1001 ############################################
1002 # check for unix domain sockets
1003 AC_CACHE_CHECK([for unix domain sockets],samba_cv_unixsocket, [
1004     AC_TRY_COMPILE([
1005 #include <sys/types.h>
1006 #include <stdlib.h>
1007 #include <stddef.h>
1008 #include <sys/socket.h>
1009 #include <sys/un.h>],
1010 [
1011   struct sockaddr_un sunaddr; 
1012   sunaddr.sun_family = AF_UNIX;
1013 ],
1014         samba_cv_unixsocket=yes,samba_cv_unixsocket=no)])
1015 if test x"$samba_cv_unixsocket" = x"yes"; then
1016    AC_DEFINE(HAVE_UNIXSOCKET,1,[If we need to build with unixscoket support])
1017 fi
1018
1019
1020 AC_CACHE_CHECK([for socklen_t type],samba_cv_socklen_t, [
1021     AC_TRY_COMPILE([
1022 #include <sys/types.h>
1023 #if STDC_HEADERS
1024 #include <stdlib.h>
1025 #include <stddef.h>
1026 #endif
1027 #include <sys/socket.h>],[socklen_t i = 0],
1028         samba_cv_socklen_t=yes,samba_cv_socklen_t=no)])
1029 if test x"$samba_cv_socklen_t" = x"yes"; then
1030    AC_DEFINE(HAVE_SOCKLEN_T_TYPE,1,[Whether we have the variable type socklen_t])
1031 fi
1032
1033 AC_CACHE_CHECK([for sig_atomic_t type],samba_cv_sig_atomic_t, [
1034     AC_TRY_COMPILE([
1035 #include <sys/types.h>
1036 #if STDC_HEADERS
1037 #include <stdlib.h>
1038 #include <stddef.h>
1039 #endif
1040 #include <signal.h>],[sig_atomic_t i = 0],
1041         samba_cv_sig_atomic_t=yes,samba_cv_sig_atomic_t=no)])
1042 if test x"$samba_cv_sig_atomic_t" = x"yes"; then
1043    AC_DEFINE(HAVE_SIG_ATOMIC_T_TYPE,1,[Whether we have the atomic_t variable type])
1044 fi
1045
1046 AC_CACHE_CHECK([for struct timespec type],samba_cv_struct_timespec, [
1047     AC_TRY_COMPILE([
1048 #include <sys/types.h>
1049 #if STDC_HEADERS
1050 #include <stdlib.h>
1051 #include <stddef.h>
1052 #endif
1053 #if TIME_WITH_SYS_TIME
1054 # include <sys/time.h>
1055 # include <time.h>
1056 #else
1057 # if HAVE_SYS_TIME_H
1058 #  include <sys/time.h>
1059 # else
1060 #  include <time.h>
1061 # endif
1062 #endif
1063 ],[struct timespec ts;],
1064         samba_cv_struct_timespec=yes,samba_cv_struct_timespec=no)])
1065 if test x"$samba_cv_struct_timespec" = x"yes"; then
1066    AC_DEFINE(HAVE_STRUCT_TIMESPEC,1,[Whether we have struct timespec])
1067 fi
1068
1069 # stupid headers have the functions but no declaration. grrrr.
1070 AC_HAVE_DECL(errno, [#include <errno.h>])
1071 AC_HAVE_DECL(setresuid, [#include <unistd.h>])
1072 AC_HAVE_DECL(setresgid, [#include <unistd.h>])
1073 AC_HAVE_DECL(asprintf, [#include <stdio.h>])
1074 AC_HAVE_DECL(vasprintf, [#include <stdio.h>])
1075 AC_HAVE_DECL(vsnprintf, [#include <stdio.h>])
1076 AC_HAVE_DECL(snprintf, [#include <stdio.h>])
1077
1078 # and glibc has setresuid under linux but the function does
1079 # nothing until kernel 2.1.44! very dumb.
1080 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
1081     AC_TRY_RUN([#include <errno.h>
1082 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
1083         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
1084 if test x"$samba_cv_have_setresuid" = x"yes"; then
1085     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
1086 fi
1087
1088 # Do the same check for setresguid...
1089 #
1090 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
1091     AC_TRY_RUN([#include <unistd.h>
1092 #include <errno.h>
1093 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
1094         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
1095 if test x"$samba_cv_have_setresgid" = x"yes"; then
1096     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
1097 fi
1098
1099 AC_FUNC_MEMCMP
1100
1101 ###############################################
1102 # Readline included by default unless explicitly asked not to
1103 test "${with_readline+set}" != "set" && with_readline=yes
1104
1105 # test for where we get readline() from
1106 AC_MSG_CHECKING(whether to use readline)
1107 AC_ARG_WITH(readline,
1108 [  --with-readline[=DIR]     Look for readline include/libs in DIR (default=auto) ],
1109 [  case "$with_readline" in
1110   yes)
1111     AC_MSG_RESULT(yes)
1112
1113     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
1114     AC_CHECK_HEADERS(readline/history.h)
1115
1116     AC_CHECK_HEADERS(readline.h readline/readline.h,[
1117       for termlib in ncurses curses termcap terminfo termlib tinfo; do
1118        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
1119       done
1120       AC_CHECK_LIB(readline, rl_callback_handler_install,
1121        [TERMLIBS="-lreadline $TERMLIBS"
1122        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
1123        break], [TERMLIBS=], $TERMLIBS)])
1124     ;;
1125   no)
1126     AC_MSG_RESULT(no)
1127     ;;
1128   *)
1129     AC_MSG_RESULT(yes)
1130
1131     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
1132     # alternate readline path
1133     _ldflags=${LDFLAGS}
1134     _cppflags=${CPPFLAGS}
1135
1136     # Add additional search path
1137     LDFLAGS="-L$with_readline/lib $LDFLAGS"
1138     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1139
1140     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
1141     AC_CHECK_HEADERS(readline/history.h)
1142
1143     AC_CHECK_HEADERS(readline.h readline/readline.h,[
1144       for termlib in ncurses curses termcap terminfo termlib; do
1145        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
1146       done
1147       AC_CHECK_LIB(readline, rl_callback_handler_install,
1148        [TERMLDFLAGS="-L$with_readline/lib"
1149        TERMCPPFLAGS="-I$with_readline/include"
1150        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1151        TERMLIBS="-lreadline $TERMLIBS"
1152        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
1153        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
1154
1155     LDFLAGS=$_ldflags
1156     ;;
1157   esac],
1158   AC_MSG_RESULT(no)
1159 )
1160 AC_SUBST(TERMLIBS)
1161 AC_SUBST(TERMLDFLAGS)
1162
1163 # The readline API changed slightly from readline3 to readline4, so
1164 # code will generate warnings on one of them unless we have a few
1165 # special cases.
1166 AC_CHECK_LIB(readline, rl_completion_matches,
1167              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1, 
1168                         [Do we have rl_completion_matches?])],
1169              [],
1170              [$TERMLIBS])
1171
1172 # not all readline libs have rl_event_hook or history_list
1173 AC_CHECK_DECLS(rl_event_hook, [], [], [#include <readline/readline.h>])
1174 AC_CHECK_LIB(readline, history_list,
1175              [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])],
1176              [],
1177              [$TERMLIBS])
1178
1179 # The following test taken from the cvs sources
1180 # If we can't find connect, try looking in -lsocket, -lnsl, and -linet.
1181 # The Irix 5 libc.so has connect and gethostbyname, but Irix 5 also has
1182 # libsocket.so which has a bad implementation of gethostbyname (it
1183 # only looks in /etc/hosts), so we only look for -lsocket if we need
1184 # it.
1185 AC_CHECK_FUNCS(connect)
1186 if test x"$ac_cv_func_connect" = x"no"; then
1187     case "$LIBS" in
1188     *-lnsl*) ;;
1189     *) AC_CHECK_LIB(nsl_s, connect) ;;
1190     esac
1191     case "$LIBS" in
1192     *-lnsl*) ;;
1193     *) AC_CHECK_LIB(nsl, connect) ;;
1194     esac
1195     case "$LIBS" in
1196     *-lsocket*) ;;
1197     *) AC_CHECK_LIB(socket, connect) ;;
1198     esac
1199     case "$LIBS" in
1200     *-linet*) ;;
1201     *) AC_CHECK_LIB(inet, connect) ;;
1202     esac
1203     dnl We can't just call AC_CHECK_FUNCS(connect) here, because the value
1204     dnl has been cached.
1205     if test x"$ac_cv_lib_socket_connect" = x"yes" || 
1206        test x"$ac_cv_lib_inet_connect" = x"yes"; then
1207         # ac_cv_func_connect=yes
1208         # don't!  it would cause AC_CHECK_FUNC to succeed next time configure is run
1209         AC_DEFINE(HAVE_CONNECT,1,[Whether the system has connect()])
1210     fi
1211 fi
1212
1213 ###############################################
1214 # test for where we get yp_get_default_domain() from
1215 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
1216 AC_CHECK_FUNCS(yp_get_default_domain)
1217
1218 # Check if we have execl, if not we need to compile smbrun.
1219 AC_CHECK_FUNCS(execl)
1220 if test x"$ac_cv_func_execl" = x"no"; then
1221     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
1222 fi
1223
1224 AC_CHECK_FUNCS(waitpid getcwd strdup strndup strnlen strerror chown fchown chmod fchmod chroot link mknod mknod64)
1225 AC_CHECK_FUNCS(strtol strtoll strtoul strtoull strtouq __strtoull)
1226 AC_CHECK_FUNCS(fstat strchr utime utimes getrlimit fsync memset strlcpy strlcat setpgid)
1227 AC_CHECK_FUNCS(memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid)
1228 AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
1229 AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf realpath)
1230 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate chsize stat64 fstat64)
1231 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64)
1232 AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf)
1233 AC_CHECK_FUNCS(opendir64 readdir64 seekdir64 telldir64 rewinddir64 closedir64)
1234 AC_CHECK_FUNCS(getpwent_r)
1235 AC_CHECK_FUNCS(getdents getdents64)
1236 AC_CHECK_FUNCS(srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink)
1237 AC_CHECK_FUNCS(syslog vsyslog timegm)
1238 AC_CHECK_FUNCS(setlocale nl_langinfo)
1239 AC_CHECK_FUNCS(nanosleep)
1240 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
1241 AC_CHECK_HEADERS(sys/mman.h)
1242 # setbuffer, shmget, shm_open are needed for smbtorture
1243 AC_CHECK_FUNCS(setbuffer shmget shm_open)
1244
1245 # Find a method of generating a stack trace
1246 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
1247 AC_CHECK_FUNCS(backtrace_symbols)
1248 AC_CHECK_LIB(exc, trace_back_stack)
1249
1250 echo -n "checking for GPFS GPL libs... "
1251 save_LIBS="$LIBS"
1252 LIBS="$LIBS -lgpfs_gpl"
1253 AC_TRY_LINK([#include <gpfs_gpl.h>],
1254           [gpfs_set_share(0,GPFS_SHARE_READ,GPFS_DENY_NONE)],
1255           samba_cv_HAVE_GPFS=yes,
1256           samba_cv_HAVE_GPFS=no)
1257 echo $samba_cv_HAVE_GPFS
1258 if test x"$samba_cv_HAVE_GPFS" = x"yes"; then
1259     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL libs are available])
1260     default_shared_modules="$default_shared_modules vfs_gpfs"
1261 fi
1262 LIBS="$save_LIBS"
1263
1264 # Note that all the libunwind symbols in the API are defined to internal
1265 # platform-specific version, so we must include libunwind.h before checking
1266 # any of them.
1267 AC_MSG_CHECKING([for libunwind])
1268 save_LIBS=$LIBS
1269 if test x"$UNAME_P" = xunknown ; then
1270     # This probably won't link without the platform-specific libunwind.
1271     LIBS="$LIBS -lunwind"
1272 else
1273     # Add the platform-specific libunwind module. uname -p seems the most
1274     # plausible option and works for ia64, where libunwind is most useful.
1275     LIBS="$LIBS -lunwind -lunwind-$UNAME_P"
1276 fi
1277
1278 AC_TRY_LINK(
1279     [
1280 #ifdef HAVE_LIBUNWIND_H
1281 #include <libunwind.h>
1282 #endif
1283     ],
1284     [
1285         unw_context_t ctx; unw_cursor_t cur;
1286         char buf[256]; unw_word_t off; 
1287         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1288         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1289     ],
1290     [
1291         AC_MSG_RESULT(yes)
1292         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1293
1294         # If we have libunwind, test whether we also have libunwind-ptrace
1295         # which would let us unwind arbitrary processes.
1296         save_LIBS=$LIBS
1297         AC_CHECK_HEADERS(libunwind-ptrace.h)
1298         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1299             [
1300                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1301                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1302                     [Whether libunwind-ptrace.a is available.])
1303             ],
1304             [ LIBUNWIND_PTRACE="" ])
1305
1306         LIBS=$save_LIBS
1307     ],
1308     [
1309         AC_MSG_RESULT(no)
1310         LIBS=$save_LIBS
1311     ])
1312
1313 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1314 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1315     AC_CHECK_HEADERS(sys/ptrace.h)
1316     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1317     AC_TRY_LINK(
1318             [
1319 #if HAVE_SYS_TYPES_H
1320 #include <sys/types.h>
1321 #endif
1322 #if HAVE_SYS_PTRACE_H
1323 #include <sys/ptrace.h>
1324 #endif
1325             ],
1326             [
1327                 int main(int argc, const char ** argv)
1328                 {
1329                         pid_t me = (pid_t)-1;
1330                         ptrace(PTRACE_ATTACH, me, 0, 0);
1331                         ptrace(PTRACE_DETACH, me, 0, 0);
1332                         return 0;
1333                 }
1334             ],
1335             [
1336                 AC_MSG_RESULT(yes)
1337                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1338                     [Whether the Linux ptrace(2) interface is available.])
1339             ],
1340             [
1341                 AC_MSG_RESULT(no)
1342                 LIBUNWIND_PTRACE=""
1343             ])
1344 fi
1345
1346 AC_SUBST(LIBUNWIND_PTRACE)
1347
1348 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1349 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1350 AC_CHECK_FUNCS(__getcwd _getcwd)
1351 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1352 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1353 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1354 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1355 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1356 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1357 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1358 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1359 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1360 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1361 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1362 AC_CHECK_FUNCS(prctl)
1363
1364 AC_TRY_COMPILE([
1365 #ifdef HAVE_SYS_PRCTL_H
1366 #include <sys/prctl.h>
1367 #endif
1368 ],
1369 [int i; i = prtcl(0); ],
1370 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1371
1372 #
1373
1374 #
1375 case "$host_os" in
1376     *linux*)
1377        # glibc <= 2.3.2 has a broken getgrouplist
1378        AC_TRY_RUN([
1379 #include <unistd.h>
1380 #include <sys/utsname.h>
1381 main() {
1382        /* glibc up to 2.3 has a broken getgrouplist */
1383 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1384        int libc_major = __GLIBC__;
1385        int libc_minor = __GLIBC_MINOR__;
1386
1387        if (libc_major < 2)
1388               exit(1);
1389        if ((libc_major == 2) && (libc_minor <= 3))
1390               exit(1);
1391 #endif
1392        exit(0);
1393 }
1394 ], [linux_getgrouplist_ok=yes], [linux_getgrouplist_ok=no])
1395        if test x"$linux_getgrouplist_ok" = x"yes"; then
1396           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1397        fi
1398        ;;
1399     *)
1400        AC_CHECK_FUNCS(getgrouplist)
1401        ;;
1402 esac
1403
1404 #
1405 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1406 #
1407
1408 if test x$ac_cv_func_stat64 = xno ; then
1409   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1410   AC_TRY_LINK([
1411 #if defined(HAVE_UNISTD_H)
1412 #include <unistd.h>
1413 #endif
1414 #include <sys/stat.h>
1415 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
1416   AC_MSG_RESULT([$ac_cv_func_stat64])
1417   if test x$ac_cv_func_stat64 = xyes ; then
1418     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1419   fi
1420 fi
1421
1422 if test x$ac_cv_func_lstat64 = xno ; then
1423   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1424   AC_TRY_LINK([
1425 #if defined(HAVE_UNISTD_H)
1426 #include <unistd.h>
1427 #endif
1428 #include <sys/stat.h>
1429 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
1430   AC_MSG_RESULT([$ac_cv_func_lstat64])
1431   if test x$ac_cv_func_lstat64 = xyes ; then
1432     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1433   fi
1434 fi
1435
1436 if test x$ac_cv_func_fstat64 = xno ; then
1437   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1438   AC_TRY_LINK([
1439 #if defined(HAVE_UNISTD_H)
1440 #include <unistd.h>
1441 #endif
1442 #include <sys/stat.h>
1443 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
1444   AC_MSG_RESULT([$ac_cv_func_fstat64])
1445   if test x$ac_cv_func_fstat64 = xyes ; then
1446     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1447   fi
1448 fi
1449
1450 #################################################
1451 # Check whether struct stat has timestamps with sub-second resolution.
1452 # At least IRIX and Solaris have these.
1453 #
1454 # We check that 
1455 #       all of st_mtim, st_atim and st_ctim exist
1456 #       all of the members are in fact of type struct timespec
1457 #
1458 # There is some conflicting standards weirdness about whether we should use
1459 # "struct timespec" or "timespec_t". Linux doesn't have timespec_t, so we
1460 # prefer struct timespec.
1461
1462 AC_CACHE_CHECK([whether struct stat has sub-second timestamps], samba_stat_hires,
1463     [
1464         AC_TRY_COMPILE(
1465             [
1466 #if TIME_WITH_SYS_TIME
1467 # include <sys/time.h>
1468 # include <time.h>
1469 #else
1470 # if HAVE_SYS_TIME_H
1471 #  include <sys/time.h>
1472 # else
1473 #  include <time.h>
1474 # endif
1475 #endif
1476 #ifdef HAVE_SYS_STAT_H
1477 #include <sys/stat.h>
1478 #endif
1479             ],
1480             [
1481                 struct timespec t;
1482                 struct stat s = {0};
1483                 t.tv_sec = s.st_mtim.tv_sec;
1484                 t.tv_nsec = s.st_mtim.tv_nsec;
1485                 t.tv_sec = s.st_ctim.tv_sec;
1486                 t.tv_nsec = s.st_ctim.tv_nsec;
1487                 t.tv_sec = s.st_atim.tv_sec;
1488                 t.tv_nsec = s.st_atim.tv_nsec;
1489             ],
1490             samba_stat_hires=yes, samba_stat_hires=no)
1491     ])
1492
1493 if test x"$samba_stat_hires" = x"yes" ; then
1494     AC_DEFINE(HAVE_STAT_ST_MTIM, 1, [whether struct stat contains st_mtim])
1495     AC_DEFINE(HAVE_STAT_ST_ATIM, 1, [whether struct stat contains st_atim])
1496     AC_DEFINE(HAVE_STAT_ST_CTIM, 1, [whether struct stat contains st_ctim])
1497     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1498             [whether struct stat has sub-second timestamps])
1499 fi
1500
1501 AC_CACHE_CHECK([whether struct stat has sub-second timestamps without struct timespec], samba_stat_hires_notimespec,
1502     [
1503         AC_TRY_COMPILE(
1504             [
1505 #if TIME_WITH_SYS_TIME
1506 # include <sys/time.h>
1507 # include <time.h>
1508 #else
1509 # if HAVE_SYS_TIME_H
1510 #  include <sys/time.h>
1511 # else
1512 #  include <time.h>
1513 # endif
1514 #endif
1515 #ifdef HAVE_SYS_STAT_H
1516 #include <sys/stat.h>
1517 #endif
1518             ],
1519             [
1520                 struct timespec t;
1521                 struct stat s = {0};
1522                 t.tv_sec = s.st_mtime;
1523                 t.tv_nsec = s.st_mtimensec;
1524                 t.tv_sec = s.st_ctime;
1525                 t.tv_nsec = s.st_ctimensec;
1526                 t.tv_sec = s.st_atime;
1527                 t.tv_nsec = s.st_atimensec;
1528             ],
1529             samba_stat_hires=yes, samba_stat_hires=no)
1530     ])
1531
1532 if test x"$samba_stat_hires_notimespec" = x"yes" ; then
1533     AC_DEFINE(HAVE_STAT_ST_MTIMENSEC, 1, [whether struct stat contains st_mtimensec])
1534     AC_DEFINE(HAVE_STAT_ST_ATIMENSEC, 1, [whether struct stat contains st_atimensec])
1535     AC_DEFINE(HAVE_STAT_ST_CTIMENSEC, 1, [whether struct stat contains st_ctimensec])
1536     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1537             [whether struct stat has sub-second timestamps without struct timespec])
1538 fi
1539
1540 #####################################
1541 # needed for SRV lookups
1542 AC_CHECK_LIB(resolv, dn_expand)
1543 AC_CHECK_LIB(resolv, _dn_expand)
1544 AC_CHECK_LIB(resolv, __dn_expand)
1545
1546 #
1547 # Check for the functions putprpwnam, set_auth_parameters,
1548 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1549 # Needed for OSF1 and HPUX.
1550 #
1551
1552 AC_LIBTESTFUNC(security, putprpwnam)
1553 AC_LIBTESTFUNC(sec, putprpwnam)
1554
1555 AC_LIBTESTFUNC(security, set_auth_parameters)
1556 AC_LIBTESTFUNC(sec, set_auth_parameters)
1557
1558 # UnixWare 7.x has its getspnam in -lgen
1559 AC_LIBTESTFUNC(gen, getspnam)
1560
1561 AC_LIBTESTFUNC(security, getspnam)
1562 AC_LIBTESTFUNC(sec, getspnam)
1563
1564 AC_LIBTESTFUNC(security, bigcrypt)
1565 AC_LIBTESTFUNC(sec, bigcrypt)
1566
1567 AC_LIBTESTFUNC(security, getprpwnam)
1568 AC_LIBTESTFUNC(sec, getprpwnam)
1569
1570 AC_CHECK_FUNCS(strsignal)
1571
1572 ############################################
1573 # Check if we have libattr
1574 case "$host_os" in
1575   *osf*)
1576         AC_SEARCH_LIBS(getproplist, [proplist])
1577         AC_CHECK_FUNCS(getproplist fgetproplist setproplist fsetproplist)
1578         AC_CHECK_FUNCS(delproplist fdelproplist add_proplist_entry get_proplist_entry)
1579         AC_CHECK_FUNCS(sizeof_proplist_entry)
1580   ;;
1581   *)
1582         AC_SEARCH_LIBS(getxattr, [attr])
1583         AC_CHECK_FUNCS(getxattr lgetxattr fgetxattr listxattr llistxattr)
1584         AC_CHECK_FUNCS(getea fgetea lgetea listea flistea llistea)
1585         AC_CHECK_FUNCS(removeea fremoveea lremoveea setea fsetea lsetea)
1586         AC_CHECK_FUNCS(flistxattr removexattr lremovexattr fremovexattr)
1587         AC_CHECK_FUNCS(setxattr lsetxattr fsetxattr)
1588         AC_CHECK_FUNCS(attr_get attr_list attr_set attr_remove)
1589         AC_CHECK_FUNCS(attr_getf attr_listf attr_setf attr_removef)
1590   ;;
1591 esac
1592
1593 ########################################################
1594 # Do xattr functions take additional options like on Darwin?
1595 if test x"$ac_cv_func_getxattr" = x"yes" ; then
1596         AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt, [
1597                 old_LIBS=$LIBS
1598                 LIBS="$LIBS $ACL_LIBS"
1599                 AC_TRY_COMPILE([
1600                         #include <sys/types.h>
1601                         #if HAVE_ATTR_XATTR_H
1602                         #include <attr/xattr.h>
1603                         #elif HAVE_SYS_XATTR_H
1604                         #include <sys/xattr.h>
1605                         #endif
1606                 ],[
1607                         getxattr(0, 0, 0, 0, 0, 0);
1608                 ],
1609                 [smb_attr_cv_xattr_add_opt=yes],
1610                 [smb_attr_cv_xattr_add_opt=no;LIBS=$old_LIBS])
1611         ])
1612         if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then
1613                 AC_DEFINE(XATTR_ADD_OPT, 1, [xattr functions have additional options])
1614         fi
1615 fi
1616
1617 # Check if we have extattr
1618 case "$host_os" in
1619   *freebsd4* | *dragonfly* )
1620     AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1621     ;;
1622   *)
1623     AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_file extattr_delete_link)
1624     AC_CHECK_FUNCS(extattr_get_fd extattr_get_file extattr_get_link)
1625     AC_CHECK_FUNCS(extattr_list_fd extattr_list_file extattr_list_link)
1626     AC_CHECK_FUNCS(extattr_set_fd extattr_set_file extattr_set_link)
1627     ;;
1628 esac
1629
1630 # Set defaults
1631 PIE_CFLAGS=""
1632 PIE_LDFLAGS=""
1633 AC_ARG_ENABLE(pie, [  --enable-pie            Turn on pie support if available (default=yes)])
1634
1635 if test "x$enable_pie" != xno
1636 then
1637         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1638         [
1639                 cat > conftest.c <<EOF
1640 int foo;
1641 main () { return 0;}
1642 EOF
1643                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1644                 then
1645                         samba_cv_fpie=yes
1646                 else
1647                         samba_cv_fpie=no
1648                 fi
1649                 rm -f conftest*
1650         ])
1651         if test x"${samba_cv_fpie}" = x"yes"
1652         then
1653                 PIE_CFLAGS="-fPIE"
1654                 PIE_LDFLAGS="-pie"
1655         fi
1656 fi
1657
1658 # Assume non-shared by default and override below
1659 BLDSHARED="false"
1660
1661 # these are the defaults, good for lots of systems
1662 HOST_OS="$host_os"
1663 LDSHFLAGS="-shared"
1664 SONAMEFLAG="#"
1665 SHLD="\${CC} \${CFLAGS}"
1666 PICFLAG="${PIE_CFLAGS}"
1667 SHLIBEXT="so"
1668
1669 # this bit needs to be modified for each OS that supports share libs
1670 # You need to specify how to create a shared library and
1671 # how to compile C code to produce PIC object files
1672
1673 AC_MSG_CHECKING([ability to build shared libraries])
1674
1675 # and these are for particular systems
1676 case "$host_os" in
1677                 *linux*)   AC_DEFINE(LINUX,1,[Whether the host os is linux])
1678                         BLDSHARED="true"
1679                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1680                                 LDSHFLAGS="-shared -Wl,-Bsymbolic -Wl,--allow-shlib-undefined" 
1681                         else
1682                                 LDSHFLAGS="-shared -Wl,-Bsymbolic" 
1683                         fi
1684                         DYNEXP="-Wl,--export-dynamic"
1685                         PICFLAG="-fPIC"
1686                         SONAMEFLAG="-Wl,-soname="
1687                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1688                         ;;
1689                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1690                         BLDSHARED="true"
1691                         LDSHFLAGS="-G"
1692                         SONAMEFLAG="-h "
1693                         if test "${GCC}" = "yes"; then
1694                                 PICFLAG="-fPIC"
1695                                 SONAMEFLAG="-Wl,-soname="
1696                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1697                                         DYNEXP="-Wl,-E"
1698                                 fi
1699                         else
1700                                 PICFLAG="-KPIC"
1701                                 ## ${CFLAGS} added for building 64-bit shared 
1702                                 ## libs using Sun's Compiler
1703                                 LDSHFLAGS="-G \${CFLAGS}"
1704                         fi
1705                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1706                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1707                         ;;
1708                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1709                         BLDSHARED="true"
1710                         LDSHFLAGS="-G"
1711                         SONAMEFLAG="-Wl,-h,"
1712                         PICFLAG="-KPIC"   # Is this correct for SunOS
1713                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1714                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1715                         ;;
1716                 *netbsd* | *freebsd* | *dragonfly* )  
1717                         BLDSHARED="true"
1718                         LDSHFLAGS="-shared"
1719                         DYNEXP="-Wl,--export-dynamic"
1720                         SONAMEFLAG="-Wl,-soname,"
1721                         PICFLAG="-fPIC -DPIC"
1722                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1723                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1724                         ;;
1725                 *openbsd*)  BLDSHARED="true"
1726                         LDSHFLAGS="-shared"
1727                         DYNEXP="-Wl,-Bdynamic"
1728                         SONAMEFLAG="-Wl,-soname,"
1729                         PICFLAG="-fPIC"
1730                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1731                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1732                         ;;
1733                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1734                         case "$host_os" in
1735                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1736                         ;;
1737                         esac
1738                         BLDSHARED="true"
1739                         LDSHFLAGS="-set_version sgi1.0 -shared"
1740                         SONAMEFLAG="-soname "
1741                         SHLD="\${LD}"
1742                         if test "${GCC}" = "yes"; then
1743                                 PICFLAG="-fPIC"
1744                         else 
1745                                 PICFLAG="-KPIC"
1746                         fi
1747                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1748                         ;;
1749                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1750                         BLDSHARED="true"
1751                         LDSHFLAGS="-Wl,-G,-bexpall,-bbigtoc"
1752                         DYNEXP="-Wl,-brtl,-bexpall,-bbigtoc"
1753                         PICFLAG="-O2"
1754                         # as AIX code is always position independent...
1755                         # .po will just create compile warnings, use po.o:
1756                         if test "${GCC}" != "yes"; then
1757                                 ## for funky AIX compiler using strncpy()
1758                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
1759                         fi
1760
1761                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1762                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1763                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1764                         ;;
1765                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1766                         # Use special PIC flags for the native HP-UX compiler.
1767                         if test $ac_cv_prog_cc_Ae = yes; then
1768                                 BLDSHARED="true"
1769                                 SHLD="cc"
1770                                 LDSHFLAGS="-b -Wl,-B,symbolic,-b,-z"
1771                                 SONAMEFLAG="-Wl,+h "
1772                                 PICFLAG="+z"
1773                         elif test "${GCC}" = "yes"; then
1774                                 PICFLAG="-fPIC"
1775                         fi
1776                         if test "$host_cpu" = "ia64"; then
1777                                 SHLIBEXT="so"
1778                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
1779                         else
1780                                 SHLIBEXT="sl"
1781                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1782                         fi
1783                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1784                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1785                         ;;
1786                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
1787                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1788                         ;;
1789                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1790                         BLDSHARED="true"
1791                         LDSHFLAGS="-shared"
1792                         SONAMEFLAG="-Wl,-soname,"
1793                         PICFLAG="-fPIC"
1794                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1795                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1796                         ;;
1797                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1798                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1799                         ;;
1800                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1801                         BLDSHARED="true"
1802                         LDSHFLAGS="-shared"
1803                         SONAMEFLAG="-Wl,-soname,"
1804                         PICFLAG="-KPIC"
1805                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1806                         ;;
1807                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1808                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1809                         ;;
1810                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1811                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1812                         ;;
1813                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1814                         case "$host" in
1815                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1816                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1817                                         fi
1818                                         LDSHFLAGS="-G"
1819                                         DYNEXP="-Bexport"
1820                                 ;;
1821                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1822                         esac
1823                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1824                         ;;
1825
1826                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1827                         if [ test "$GCC" != yes ]; then
1828                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1829                         fi
1830                         LDSHFLAGS="-G"
1831                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1832                         ;;
1833                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1834                         BLDSHARED="false"
1835                         LDSHFLAGS=""
1836                         ;;
1837
1838                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1839                         BLDSHARED="true"
1840                         LDSHFLAGS="-bundle -flat_namespace -undefined suppress"
1841                         SHLIBEXT="dylib"
1842                         # Since gcc doesn't fail on unrecognised options, the
1843                         # PIE test incorrectly succeeds. Darwin gcc does not
1844                         # actually support the PIE stuff.
1845                         PIE_LDFLAGS=
1846                         PIE_CFLAGS=
1847                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1848                         ;;
1849
1850                 *)
1851                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1852                         ;;
1853 esac
1854
1855 if test "$enable_shared" != "yes"; then
1856         BLDSHARED=false
1857 fi
1858
1859 AC_MSG_RESULT($BLDSHARED)
1860
1861 AC_MSG_CHECKING([LDFLAGS])
1862 AC_MSG_RESULT([$LDFLAGS])
1863 AC_MSG_CHECKING([DYNEXP])
1864 AC_MSG_RESULT([$DYNEXP])
1865
1866 #######################################################
1867 # test whether building a shared library actually works
1868 if test $BLDSHARED = true; then
1869
1870 AC_MSG_CHECKING([SHLD])
1871 AC_MSG_RESULT([$SHLD])
1872 AC_MSG_CHECKING([LDSHFLAGS])
1873 AC_MSG_RESULT([$LDSHFLAGS])
1874
1875 AC_MSG_CHECKING([SHLIBEXT])
1876 AC_MSG_RESULT([$SHLIBEXT])
1877 AC_MSG_CHECKING([SONAMEFLAG])
1878 AC_MSG_RESULT([$SONAMEFLAG])
1879
1880 AC_MSG_CHECKING([PICFLAG])
1881 AC_MSG_RESULT([$PICFLAG])
1882
1883 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1884 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1885
1886 AC_CACHE_CHECK([whether building shared libraries actually works], 
1887                [ac_cv_shlib_works],[
1888    # try building a trivial shared library
1889    ac_cv_shlib_works=no
1890    # The $SHLD and $LDSHFLAGS variables may contain references to other
1891    # variables so they need to be eval'ed.
1892    $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o \
1893         shlib.o ${srcdir-.}/tests/shlib.c && \
1894    `eval echo $SHLD` `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" \
1895         shlib.o && ac_cv_shlib_works=yes
1896    rm -f "shlib.$SHLIBEXT" shlib.o
1897
1898 ])
1899 if test $ac_cv_shlib_works = no; then
1900    BLDSHARED=false
1901 fi
1902 fi
1903
1904 if test x"$BLDSHARED" != x"true"; then
1905         LDSHFLAGS="shared-libraries-disabled"
1906         SONAMEFLAG="shared-libraries-disabled"
1907         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1908         SHLD="shared-libraries-disabled"
1909         PICFLAG="${PIE_CFLAGS}"
1910         SHLIBEXT="shared_libraries_disabled"
1911 fi
1912
1913 AC_MSG_CHECKING([used PICFLAG])
1914 AC_MSG_RESULT([$PICFLAG])
1915
1916 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
1917
1918 ################
1919
1920 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
1921 AC_TRY_RUN([#include <stdio.h>
1922 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
1923 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
1924 if test x"$samba_cv_have_longlong" = x"yes"; then
1925     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
1926     AC_CHECK_TYPE(intptr_t, unsigned long long)
1927 else
1928     AC_CHECK_TYPE(intptr_t, unsigned long)
1929 fi
1930
1931 #
1932 # Check if the compiler supports the LL prefix on long long integers.
1933 # AIX needs this.
1934
1935 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
1936     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
1937         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
1938 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
1939    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
1940 fi
1941
1942   
1943 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
1944 AC_TRY_RUN([#include <stdio.h>
1945 #include <sys/stat.h>
1946 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
1947 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
1948 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
1949     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
1950 fi
1951
1952 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
1953 AC_TRY_RUN([
1954 #if defined(HAVE_UNISTD_H)
1955 #include <unistd.h>
1956 #endif
1957 #include <stdio.h>
1958 #include <sys/stat.h>
1959 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1960 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
1961 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
1962     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
1963 fi
1964
1965 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
1966 AC_TRY_RUN([
1967 #if defined(HAVE_UNISTD_H)
1968 #include <unistd.h>
1969 #endif
1970 #include <stdio.h>
1971 #include <sys/stat.h>
1972 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
1973 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
1974 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
1975     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
1976 fi
1977
1978 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
1979 AC_TRY_RUN([
1980 #if defined(HAVE_UNISTD_H)
1981 #include <unistd.h>
1982 #endif
1983 #include <stdio.h>
1984 #include <sys/stat.h>
1985 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1986 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
1987 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
1988     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
1989 fi
1990
1991 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
1992 AC_TRY_RUN([
1993 #if defined(HAVE_UNISTD_H)
1994 #include <unistd.h>
1995 #endif
1996 #include <stdio.h>
1997 #include <sys/stat.h>
1998 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
1999 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
2000 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
2001     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
2002 fi
2003
2004 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
2005 AC_TRY_RUN([
2006 #if defined(HAVE_UNISTD_H)
2007 #include <unistd.h>
2008 #endif
2009 #include <stdio.h>
2010 #include <sys/stat.h>
2011 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2012 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
2013 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
2014     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
2015 fi
2016
2017 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
2018 AC_TRY_COMPILE([
2019 #if defined(HAVE_UNISTD_H)
2020 #include <unistd.h>
2021 #endif
2022 #include <sys/types.h>
2023 #include <dirent.h>],
2024 [DIR64 de;],
2025 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
2026 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2027     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
2028 fi
2029
2030 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
2031 AC_TRY_COMPILE([
2032 #if defined(HAVE_UNISTD_H)
2033 #include <unistd.h>
2034 #endif
2035 #include <sys/types.h>
2036 #include <dirent.h>],
2037 [struct dirent64 de;],
2038 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
2039 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2040     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
2041 fi
2042
2043 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2044 AC_TRY_RUN([
2045 #if defined(HAVE_UNISTD_H)
2046 #include <unistd.h>
2047 #endif
2048 #include <sys/types.h>
2049 main() { dev_t dev; int i = major(dev); return 0; }],
2050 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2051 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2052     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2053 fi
2054
2055 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2056 AC_TRY_RUN([
2057 #if defined(HAVE_UNISTD_H)
2058 #include <unistd.h>
2059 #endif
2060 #include <sys/types.h>
2061 main() { dev_t dev; int i = minor(dev); return 0; }],
2062 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2063 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2064     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2065 fi
2066
2067 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2068 AC_TRY_RUN([
2069 #if defined(HAVE_UNISTD_H)
2070 #include <unistd.h>
2071 #endif
2072 #include <sys/types.h>
2073 main() { dev_t dev = makedev(1,2); return 0; }],
2074 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2075 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2076     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2077 fi
2078
2079 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2080 AC_TRY_RUN([#include <stdio.h>
2081 main() { char c; c=250; exit((c > 0)?0:1); }],
2082 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2083 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2084     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2085 fi
2086
2087 AC_CACHE_CHECK([for sin_len in sock],samba_cv_HAVE_SOCK_SIN_LEN,[
2088 AC_TRY_COMPILE([#include <sys/types.h>
2089 #include <sys/socket.h>
2090 #include <netinet/in.h>],
2091 [struct sockaddr_in sock; sock.sin_len = sizeof(sock);],
2092 samba_cv_HAVE_SOCK_SIN_LEN=yes,samba_cv_HAVE_SOCK_SIN_LEN=no)])
2093 if test x"$samba_cv_HAVE_SOCK_SIN_LEN" = x"yes"; then
2094     AC_DEFINE(HAVE_SOCK_SIN_LEN,1,[Whether the sockaddr_in struct has a sin_len property])
2095 fi
2096
2097 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2098 AC_TRY_COMPILE([#include <sys/types.h>
2099 #include <dirent.h>
2100 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2101 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2102 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2103     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2104 fi
2105
2106 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2107 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2108 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2109 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2110     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2111 fi
2112
2113 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
2114 AC_TRY_RUN([
2115 #include <sys/time.h>
2116 #include <unistd.h>
2117 main() { struct timeval tv; exit(gettimeofday(&tv, NULL));}],
2118            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,samba_cv_HAVE_GETTIMEOFDAY_TZ=no,samba_cv_HAVE_GETTIMEOFDAY_TZ=cross)])
2119 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
2120     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday() is available])
2121 fi
2122
2123 if test x"$samba_cv_WITH_PROFILE" = x"yes"; then
2124
2125     # On some systems (eg. Linux) librt can pull in libpthread. We
2126     # don't want this to happen because libpthreads changes signal delivery
2127     # semantics in ways we are not prepared for. This breaks Linux oplocks
2128     # which rely on signals.
2129
2130     AC_LIBTESTFUNC(rt, clock_gettime,
2131             [
2132                 AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
2133                     [Whether clock_gettime is available])
2134                 SMB_CHECK_CLOCK_ID(CLOCK_MONOTONIC)
2135                 SMB_CHECK_CLOCK_ID(CLOCK_PROCESS_CPUTIME_ID)
2136                 SMB_CHECK_CLOCK_ID(CLOCK_REALTIME)
2137             ])
2138
2139 fi
2140
2141 AC_CACHE_CHECK([for va_copy],samba_cv_HAVE_VA_COPY,[
2142 AC_TRY_LINK([#include <stdarg.h>
2143 va_list ap1,ap2;], [va_copy(ap1,ap2);],
2144 samba_cv_HAVE_VA_COPY=yes,
2145 samba_cv_HAVE_VA_COPY=no)])
2146 if test x"$samba_cv_HAVE_VA_COPY" = x"yes"; then
2147     AC_DEFINE(HAVE_VA_COPY,1,[Whether va_copy() is available])
2148 else
2149     AC_CACHE_CHECK([for __va_copy],samba_cv_HAVE___VA_COPY,[
2150     AC_TRY_LINK([#include <stdarg.h>
2151     va_list ap1,ap2;], [__va_copy(ap1,ap2);],
2152     samba_cv_HAVE___VA_COPY=yes,
2153     samba_cv_HAVE___VA_COPY=no)])
2154     if test x"$samba_cv_HAVE___VA_COPY" = x"yes"; then
2155         AC_DEFINE(HAVE___VA_COPY,1,[Whether __va_copy() is available])
2156     fi
2157 fi
2158
2159 AC_CACHE_CHECK([for C99 vsnprintf],samba_cv_HAVE_C99_VSNPRINTF,[
2160 AC_TRY_RUN([
2161 #include <sys/types.h>
2162 #include <stdarg.h>
2163 void foo(const char *format, ...) { 
2164        va_list ap;
2165        int len;
2166        char buf[5];
2167
2168        va_start(ap, format);
2169        len = vsnprintf(buf, 0, format, ap);
2170        va_end(ap);
2171        if (len != 5) exit(1);
2172
2173        va_start(ap, format);
2174        len = vsnprintf(0, 0, format, ap);
2175        va_end(ap);
2176        if (len != 5) exit(1);
2177
2178        if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
2179
2180        exit(0);
2181 }
2182 main() { foo("hello"); }
2183 ],
2184 samba_cv_HAVE_C99_VSNPRINTF=yes,samba_cv_HAVE_C99_VSNPRINTF=no,samba_cv_HAVE_C99_VSNPRINTF=cross)])
2185 if test x"$samba_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
2186     AC_DEFINE(HAVE_C99_VSNPRINTF,1,[Whether there is a C99 compliant vsnprintf])
2187 fi
2188
2189 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2190 AC_TRY_RUN([#include <sys/types.h>
2191 #include <dirent.h>
2192 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2193 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2194 di->d_name[0] == 0) exit(0); exit(1);} ],
2195 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2196 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2197     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2198 fi
2199
2200 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2201 AC_TRY_COMPILE([#include <sys/types.h>
2202 #include <utime.h>],
2203 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2204 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2205 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2206     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2207 fi
2208
2209 ##############
2210 # Check utmp details, but only if our OS offers utmp.h
2211 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2212 dnl  utmp and utmpx come in many flavours
2213 dnl  We need to check for many of them
2214 dnl  But we don't need to do each and every one, because our code uses
2215 dnl  mostly just the utmp (not utmpx) fields.
2216
2217 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
2218
2219 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2220 AC_TRY_COMPILE([#include <sys/types.h>
2221 #include <utmp.h>],
2222 [struct utmp ut;  ut.ut_name[0] = 'a';],
2223 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2224 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2225     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2226 fi 
2227
2228 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2229 AC_TRY_COMPILE([#include <sys/types.h>
2230 #include <utmp.h>],
2231 [struct utmp ut;  ut.ut_user[0] = 'a';],
2232 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2233 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2234     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2235 fi 
2236
2237 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2238 AC_TRY_COMPILE([#include <sys/types.h>
2239 #include <utmp.h>],
2240 [struct utmp ut;  ut.ut_id[0] = 'a';],
2241 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2242 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2243     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2244 fi 
2245
2246 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2247 AC_TRY_COMPILE([#include <sys/types.h>
2248 #include <utmp.h>],
2249 [struct utmp ut;  ut.ut_host[0] = 'a';],
2250 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2251 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2252     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2253 fi 
2254
2255 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2256 AC_TRY_COMPILE([#include <sys/types.h>
2257 #include <utmp.h>],
2258 [struct utmp ut;  time_t t; ut.ut_time = t;],
2259 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2260 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2261     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2262 fi 
2263
2264 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2265 AC_TRY_COMPILE([#include <sys/types.h>
2266 #include <utmp.h>],
2267 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2268 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2269 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2270     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2271 fi 
2272
2273 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2274 AC_TRY_COMPILE([#include <sys/types.h>
2275 #include <utmp.h>],
2276 [struct utmp ut;  ut.ut_type = 0;],
2277 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2278 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2279     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2280 fi 
2281
2282 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2283 AC_TRY_COMPILE([#include <sys/types.h>
2284 #include <utmp.h>],
2285 [struct utmp ut;  ut.ut_pid = 0;],
2286 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2287 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2288     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2289 fi 
2290
2291 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2292 AC_TRY_COMPILE([#include <sys/types.h>
2293 #include <utmp.h>],
2294 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2295 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2296 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2297     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2298 fi 
2299
2300 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2301 AC_TRY_COMPILE([#include <sys/types.h>
2302 #include <utmp.h>],
2303 [struct utmp ut;  ut.ut_addr = 0;],
2304 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2305 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2306     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2307 fi 
2308
2309 if test x$ac_cv_func_pututline = xyes ; then
2310   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2311   AC_TRY_COMPILE([#include <sys/types.h>
2312 #include <utmp.h>],
2313   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2314   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2315   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2316       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2317   fi
2318 fi
2319
2320 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2321 AC_TRY_COMPILE([#include <sys/types.h>
2322 #include <utmpx.h>],
2323 [struct utmpx ux;  ux.ut_syslen = 0;],
2324 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2325 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2326     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2327 fi 
2328
2329 fi
2330 # end utmp details
2331
2332
2333 ICONV_LOCATION=standard
2334 LOOK_DIRS="/usr /usr/local /sw /opt"
2335 AC_ARG_WITH(libiconv,
2336 [  --with-libiconv=BASEDIR Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto) ],
2337 [
2338   if test "$withval" = "no" ; then
2339     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2340   else
2341      if test "$withval" != "yes" ; then
2342         ICONV_PATH_SPEC=yes
2343         LOOK_DIRS="$withval"
2344      fi
2345   fi
2346 ])
2347
2348 for i in $LOOK_DIRS ; do
2349     save_LIBS=$LIBS
2350     save_LDFLAGS=$LDFLAGS
2351     save_CPPFLAGS=$CPPFLAGS
2352     ICONV_FOUND="no"
2353     unset libext
2354     CPPFLAGS="$CPPFLAGS -I$i/include"
2355 dnl This is here to handle -withval stuff for --with-libiconv
2356 dnl Perhaps we should always add a -L
2357
2358 dnl Check lib and lib32 library variants to cater for IRIX ABI-specific
2359 dnl installation paths. This gets a little tricky since we might have iconv
2360 dnl in both libiconv and in libc. In this case the jm_ICONV test will always
2361 dnl succeed when the header is found. To counter this, make sure the 
2362 dnl library directory is there and check the ABI directory first (which
2363 dnl should be harmless on other systems.
2364 dnl For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2365     for l in "lib32" "lib" "lib/hpux32"; do
2366         if test -d "$i/$l" ; then
2367                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2368         LIBS=
2369         export LDFLAGS LIBS CPPFLAGS
2370 dnl Try to find iconv(3)
2371                 jm_ICONV($i/$l)
2372                 if test x"$ICONV_FOUND" = "xyes" ; then
2373             libext="$l"
2374             break;
2375         fi
2376         fi
2377     done
2378
2379     if test x"$ICONV_FOUND" = "xyes" ; then
2380         LDFLAGS=$save_LDFLAGS
2381         LIB_ADD_DIR(LDFLAGS, "$i/$libext")
2382         CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
2383         LIBS="$save_LIBS"
2384         ICONV_LOCATION=$i
2385         export LDFLAGS LIBS CPPFLAGS
2386 dnl Now, check for a working iconv ... we want to do it here because
2387 dnl there might be a working iconv further down the list of LOOK_DIRS
2388
2389         ############
2390         # check for iconv in libc
2391         ic_save_LIBS="$LIBS"
2392         if test x"$ICONV_PATH_SPEC" = "xyes" ; then
2393            LIBS="$LIBS -L$ICONV_LOCATION/$libext"
2394         fi
2395         if test x"$jm_cv_lib_iconv" != x; then
2396            LIBS="$LIBS -l$jm_cv_lib_iconv"
2397         fi
2398 dnl        AC_CACHE_CHECK([for working iconv],samba_cv_HAVE_NATIVE_ICONV,[
2399         default_dos_charset=no
2400         default_display_charset=no
2401         default_unix_charset=no
2402
2403         # check for default dos charset name
2404         for j in CP850 IBM850 ; do
2405             rjs_CHARSET($j)
2406             if test x"$ICONV_CHARSET" = x"$j"; then
2407                 default_dos_charset="\"$j\""
2408                 break
2409             fi
2410         done
2411         # check for default display charset name
2412         for j in ASCII 646 ; do
2413             rjs_CHARSET($j)
2414             if test x"$ICONV_CHARSET" = x"$j"; then
2415                 default_display_charset="\"$j\""
2416                 break
2417             fi
2418         done
2419         # check for default unix charset name
2420         for j in UTF-8 UTF8 ; do
2421             rjs_CHARSET($j)
2422             if test x"$ICONV_CHARSET" = x"$j"; then
2423                 default_unix_charset="\"$j\""
2424                 break
2425             fi
2426         done
2427         
2428         if test "$default_dos_charset" != "no" -a \
2429                 "$default_dos_charset" != "cross" -a \
2430                 "$default_display_charset" != "no" -a \ 
2431                 "$default_display_charset" != "cross" -a \
2432                 "$default_unix_charset" != "no" -a \
2433                 "$default_unix_charset" != "cross"
2434         then
2435                 samba_cv_HAVE_NATIVE_ICONV=yes
2436         else if test "$default_dos_charset" = "cross" -o \
2437                      "$default_display_charset" = "cross" -o \
2438                      "$default_unix_charset" = "cross"
2439         then
2440                 samba_cv_HAVE_NATIVE_ICONV=cross
2441         else
2442                 samba_cv_HAVE_NATIVE_ICONV=no
2443         fi
2444         fi
2445 dnl ])
2446
2447         LIBS="$ic_save_LIBS"
2448         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes"; then
2449            CPPFLAGS=$save_CPPFLAGS
2450            LDFLAGS=$save_LDFLAGS
2451            LIBS=$save_LIBS
2452            if test x"$jm_cv_lib_iconv" != x; then
2453               LIBS="$LIBS -l$jm_cv_lib_iconv"
2454            fi
2455            dnl Add the flags we need to CPPFLAGS and LDFLAGS
2456            CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
2457            LIB_ADD_DIR(LDFLAGS, "$i/$libext")
2458            export CPPFLAGS
2459            AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2460            AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2461            AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2462            AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2463            break
2464         fi
2465 dnl We didn't find a working iconv, so keep going
2466     fi
2467 dnl We only need to clean these up here for the next pass through the loop
2468     CPPFLAGS=$save_CPPFLAGS
2469     LDFLAGS=$save_LDFLAGS
2470     LIBS=$save_LIBS
2471     export LDFLAGS LIBS CPPFLAGS
2472 done
2473 unset libext
2474
2475
2476 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2477     AC_MSG_WARN([Sufficient support for iconv function was not found. 
2478     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2479    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2480    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2481    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2482 fi
2483
2484
2485 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2486 AC_TRY_RUN([
2487 #include <sys/types.h>
2488 #include <fcntl.h>
2489 #ifndef F_GETLEASE
2490 #define F_GETLEASE      1025
2491 #endif
2492 main() {
2493        int fd = open("/dev/null", O_RDONLY);
2494        return fcntl(fd, F_GETLEASE, 0) == -1;
2495 }
2496 ],
2497 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2498 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2499     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2500 fi
2501
2502 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2503 AC_TRY_RUN([
2504 #include <sys/types.h>
2505 #include <fcntl.h>
2506 #include <signal.h>
2507 #ifndef F_NOTIFY
2508 #define F_NOTIFY 1026
2509 #endif
2510 main() {
2511         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2512 }
2513 ],
2514 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2515 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2516     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2517 fi
2518
2519 #################################################
2520 # Check if FAM notifications are available. For FAM info, see
2521 #       http://oss.sgi.com/projects/fam/
2522 #       http://savannah.nongnu.org/projects/fam/
2523 AC_ARG_ENABLE(fam,
2524 [  --enable-fam            Turn on FAM support (default=auto)])
2525
2526 if test x$enable_fam != xno; then
2527     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2528     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2529         # On IRIX, libfam requires libC, but other FAM implementations
2530         # might not need it.
2531         AC_CHECK_LIB(fam, FAMOpen2,
2532             [samba_cv_HAVE_LIBFAM=yes; samba_fam_libs="-lfam"],
2533             [samba_cv_HAVE_LIBFAM=no])
2534
2535         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2536             samba_fam_xtra=-lC
2537             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2538                 [samba_cv_HAVE_LIBFAM=yes; samba_fam_libs="-lfam -lC"],
2539                 [samba_cv_HAVE_LIBFAM=no])
2540             unset samba_fam_xtra
2541         fi
2542     fi
2543
2544     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2545         AC_DEFINE(HAVE_FAM_CHANGE_NOTIFY, 1,
2546                 [Whether FAM file notifications are available])
2547         AC_TRY_COMPILE([#include <fam.h>],
2548                     [FAMCodes code = FAMChanged;],
2549                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2550                         [Whether fam.h contains a typedef for enum FAMCodes]),
2551                     [])
2552     fi
2553
2554     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2555         AC_MSG_ERROR(FAM support requested but FAM library not available )
2556     fi
2557 fi
2558
2559 #################################################
2560 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2561
2562 SMB_CHECK_DMAPI([], AC_MSG_NOTICE(DMAPI support not present) )
2563
2564 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2565 AC_TRY_RUN([
2566 #include <sys/types.h>
2567 #include <fcntl.h>
2568 #include <signal.h>
2569 #include <sys/file.h>
2570 #ifndef LOCK_MAND
2571 #define LOCK_MAND       32
2572 #define LOCK_READ       64
2573 #endif
2574 main() {
2575         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2576 }
2577 ],
2578 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2579 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2580     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2581 fi
2582
2583
2584 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2585 AC_TRY_COMPILE([#include <sys/types.h>
2586 #include <fcntl.h>],
2587 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2588 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2589 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2590     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2591 fi
2592
2593 #################################################
2594 # Check for POSIX capability support
2595
2596 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2597     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2598     [], [])
2599
2600 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2601
2602     ac_save_LIBS=$LIBS
2603     AC_LIBTESTFUNC(cap, cap_get_proc)
2604
2605     AC_CACHE_CHECK([for POSIX capabilities],
2606             samba_cv_HAVE_POSIX_CAPABILITIES,
2607             [
2608                 AC_TRY_RUN([
2609 #include <sys/types.h>
2610 #include <sys/capability.h>
2611 main() {
2612  cap_t cap;
2613  cap_value_t vals[1];
2614  if (!(cap = cap_get_proc()))
2615    exit(1);
2616  vals[0] = CAP_CHOWN;
2617  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2618  cap_set_proc(cap);
2619  exit(0);
2620 }],
2621                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2622                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2623                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2624             ])
2625
2626 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2627     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2628             [Whether POSIX capabilities are available])
2629 else
2630     LIBS=$ac_save_LIBS
2631 fi
2632
2633 fi
2634
2635 #
2636 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2637 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2638 #
2639
2640 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2641 AC_TRY_COMPILE([#include <sys/types.h>
2642 #if defined(HAVE_RPC_RPC_H)
2643 #include <rpc/rpc.h>
2644 #endif],
2645 [int16 testvar;],
2646 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2647 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2648     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2649 fi
2650
2651 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2652 AC_TRY_COMPILE([#include <sys/types.h>
2653 #if defined(HAVE_RPC_RPC_H)
2654 #include <rpc/rpc.h>
2655 #endif],
2656 [uint16 testvar;],
2657 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2658 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2659     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2660 fi
2661
2662 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2663 AC_TRY_COMPILE([#include <sys/types.h>
2664 #if defined(HAVE_RPC_RPC_H)
2665 #include <rpc/rpc.h>
2666 #endif],
2667 [int32 testvar;],
2668 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2669 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2670     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2671 fi
2672
2673 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2674 AC_TRY_COMPILE([#include <sys/types.h>
2675 #if defined(HAVE_RPC_RPC_H)
2676 #include <rpc/rpc.h>
2677 #endif],
2678 [uint32 testvar;],
2679 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2680 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2681     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2682 fi
2683
2684 dnl
2685 dnl Some systems (SCO) have a problem including
2686 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2687 dnl as a #define in <prot.h> and as part of an enum
2688 dnl in <rpc/rpc.h>.
2689 dnl
2690
2691 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2692 AC_TRY_COMPILE([#include <sys/types.h>
2693 #ifdef HAVE_SYS_SECURITY_H
2694 #include <sys/security.h>
2695 #include <prot.h>
2696 #endif  /* HAVE_SYS_SECURITY_H */
2697 #if defined(HAVE_RPC_RPC_H)
2698 #include <rpc/rpc.h>
2699 #endif],
2700 [int testvar;],
2701 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2702 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2703     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2704 fi
2705
2706 AC_MSG_CHECKING([for test routines])
2707 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
2708            AC_MSG_RESULT(yes),
2709            AC_MSG_ERROR([cant find test code. Aborting config]),
2710            AC_MSG_WARN([cannot run when cross-compiling]))
2711
2712 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2713 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
2714            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2715 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2716     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2717 fi
2718
2719 AC_CACHE_CHECK([for AF_LOCAL socket support], samba_cv_HAVE_WORKING_AF_LOCAL, [
2720 AC_TRY_RUN([#include "${srcdir-.}/tests/unixsock.c"],
2721            samba_cv_HAVE_WORKING_AF_LOCAL=yes,
2722            samba_cv_HAVE_WORKING_AF_LOCAL=no,
2723            samba_cv_HAVE_WORKING_AF_LOCAL=cross)])
2724 if test x"$samba_cv_HAVE_WORKING_AF_LOCAL" != xno
2725 then
2726     AC_DEFINE(HAVE_WORKING_AF_LOCAL, 1, [Define if you have working AF_LOCAL sockets])
2727 fi
2728
2729 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2730 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
2731            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2732 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2733     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2734 fi
2735
2736 AC_CACHE_CHECK([for secure mkstemp],samba_cv_HAVE_SECURE_MKSTEMP,[
2737 AC_TRY_RUN([#include <stdlib.h>
2738 #include <sys/types.h>
2739 #include <sys/stat.h>
2740 #include <unistd.h>
2741 main() { 
2742   struct stat st;
2743   char tpl[20]="/tmp/test.XXXXXX"; 
2744   int fd = mkstemp(tpl); 
2745   if (fd == -1) exit(1);
2746   unlink(tpl);
2747   if (fstat(fd, &st) != 0) exit(1);
2748   if ((st.st_mode & 0777) != 0600) exit(1);
2749   exit(0);
2750 }],
2751 samba_cv_HAVE_SECURE_MKSTEMP=yes,
2752 samba_cv_HAVE_SECURE_MKSTEMP=no,
2753 samba_cv_HAVE_SECURE_MKSTEMP=cross)])
2754 if test x"$samba_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
2755     AC_DEFINE(HAVE_SECURE_MKSTEMP,1,[Whether mkstemp is secure])
2756 fi
2757
2758 AC_CACHE_CHECK([for broken readdir],samba_cv_HAVE_BROKEN_READDIR,[
2759         AC_TRY_RUN([#include "${srcdir-.}/tests/os2_delete.c"],
2760                 [samba_cv_HAVE_BROKEN_READDIR=no],
2761                         [samba_cv_HAVE_BROKEN_READDIR=yes],
2762                         [samba_cv_HAVE_BROKEN_READDIR="assuming not"])])
2763
2764 if test x"$samba_cv_HAVE_BROKEN_READDIR" = x"yes"; then
2765 AC_CACHE_CHECK([for replacing readdir],samba_cv_REPLACE_READDIR,[
2766         AC_TRY_RUN([
2767 #include "${srcdir-.}/lib/repdir.c"
2768 #include "${srcdir-.}/tests/os2_delete.c"],
2769         samba_cv_REPLACE_READDIR=yes,samba_cv_REPLACE_READDIR=no)])
2770 fi
2771
2772 if test x"$samba_cv_REPLACE_READDIR" = x"yes"; then
2773         AC_DEFINE(REPLACE_READDIR,1,[replace readdir])
2774 fi
2775
2776 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2777 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2778 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2779 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2780 AC_CHECK_FUNCS(getpagesize)
2781
2782 ##################
2783 # look for a method of finding the list of network interfaces
2784 iface=no;
2785 AC_CACHE_CHECK([for iface AIX],samba_cv_HAVE_IFACE_AIX,[
2786 SAVE_CPPFLAGS="$CPPFLAGS"
2787 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2788 AC_TRY_RUN([
2789 #define HAVE_IFACE_AIX 1
2790 #define AUTOCONF_TEST 1
2791 #undef _XOPEN_SOURCE_EXTENDED
2792 #include "${srcdir-.}/lib/interfaces.c"],
2793            samba_cv_HAVE_IFACE_AIX=yes,samba_cv_HAVE_IFACE_AIX=no,samba_cv_HAVE_IFACE_AIX=cross)])
2794 CPPFLAGS="$SAVE_CPPFLAGS"
2795 if test x"$samba_cv_HAVE_IFACE_AIX" = x"yes"; then
2796     iface=yes;AC_DEFINE(HAVE_IFACE_AIX,1,[Whether iface AIX is available])
2797 fi
2798
2799 if test $iface = no; then
2800 AC_CACHE_CHECK([for iface ifconf],samba_cv_HAVE_IFACE_IFCONF,[
2801 SAVE_CPPFLAGS="$CPPFLAGS"
2802 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2803 AC_TRY_RUN([
2804 #define HAVE_IFACE_IFCONF 1
2805 #define AUTOCONF_TEST 1
2806 #include "${srcdir-.}/lib/interfaces.c"],
2807            samba_cv_HAVE_IFACE_IFCONF=yes,samba_cv_HAVE_IFACE_IFCONF=no,samba_cv_HAVE_IFACE_IFCONF=cross)])
2808 CPPFLAGS="$SAVE_CPPFLAGS"
2809 if test x"$samba_cv_HAVE_IFACE_IFCONF" = x"yes"; then
2810     iface=yes;AC_DEFINE(HAVE_IFACE_IFCONF,1,[Whether iface ifconf is available])
2811 fi
2812 fi
2813
2814 if test $iface = no; then
2815 AC_CACHE_CHECK([for iface ifreq],samba_cv_HAVE_IFACE_IFREQ,[
2816 SAVE_CPPFLAGS="$CPPFLAGS"
2817 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2818 AC_TRY_RUN([
2819 #define HAVE_IFACE_IFREQ 1
2820 #define AUTOCONF_TEST 1
2821 #include "${srcdir-.}/lib/interfaces.c"],
2822            samba_cv_HAVE_IFACE_IFREQ=yes,samba_cv_HAVE_IFACE_IFREQ=no,samba_cv_HAVE_IFACE_IFREQ=cross)])
2823 CPPFLAGS="$SAVE_CPPFLAGS"
2824 if test x"$samba_cv_HAVE_IFACE_IFREQ" = x"yes"; then
2825     iface=yes;AC_DEFINE(HAVE_IFACE_IFREQ,1,[Whether iface ifreq is available])
2826 fi
2827 fi
2828
2829
2830 ################################################
2831 # look for a method of setting the effective uid
2832 seteuid=no;
2833 if test $seteuid = no; then
2834 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2835 AC_TRY_RUN([
2836 #define AUTOCONF_TEST 1
2837 #define USE_SETRESUID 1
2838 #include "confdefs.h"
2839 #include "${srcdir-.}/lib/util_sec.c"],
2840            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2841 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2842     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2843 fi
2844 fi
2845
2846
2847 if test $seteuid = no; then
2848 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2849 AC_TRY_RUN([
2850 #define AUTOCONF_TEST 1
2851 #define USE_SETREUID 1
2852 #include "confdefs.h"
2853 #include "${srcdir-.}/lib/util_sec.c"],
2854            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2855 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2856     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2857 fi
2858 fi
2859
2860 if test $seteuid = no; then
2861 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2862 AC_TRY_RUN([
2863 #define AUTOCONF_TEST 1
2864 #define USE_SETEUID 1
2865 #include "confdefs.h"
2866 #include "${srcdir-.}/lib/util_sec.c"],
2867            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2868 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2869     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2870 fi
2871 fi
2872
2873 if test $seteuid = no; then
2874 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2875 AC_TRY_RUN([
2876 #define AUTOCONF_TEST 1
2877 #define USE_SETUIDX 1
2878 #include "confdefs.h"
2879 #include "${srcdir-.}/lib/util_sec.c"],
2880            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2881 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2882     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2883 fi
2884 fi
2885
2886
2887 AC_CACHE_CHECK([for working mmap],samba_cv_HAVE_MMAP,[
2888 AC_TRY_RUN([#include "${srcdir-.}/tests/shared_mmap.c"],
2889            samba_cv_HAVE_MMAP=yes,samba_cv_HAVE_MMAP=no,samba_cv_HAVE_MMAP=cross)])
2890 if test x"$samba_cv_HAVE_MMAP" = x"yes"; then
2891     AC_DEFINE(HAVE_MMAP,1,[Whether mmap works])
2892 fi
2893
2894 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2895 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
2896            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2897 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2898     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2899 fi
2900
2901 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
2902 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
2903            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
2904 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
2905     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
2906
2907 else
2908
2909 dnl
2910 dnl Don't check for 64 bit fcntl locking if we know that the
2911 dnl glibc2.1 broken check has succeeded.
2912 dnl 
2913
2914   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
2915   AC_TRY_RUN([
2916 #if defined(HAVE_UNISTD_H)
2917 #include <unistd.h>
2918 #endif
2919 #include <stdio.h>
2920 #include <stdlib.h>
2921
2922 #ifdef HAVE_FCNTL_H
2923 #include <fcntl.h>
2924 #endif
2925
2926 #ifdef HAVE_SYS_FCNTL_H
2927 #include <sys/fcntl.h>
2928 #endif
2929 main() { struct flock64 fl64;
2930 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
2931 exit(0);
2932 #else
2933 exit(1);
2934 #endif
2935 }],
2936        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
2937
2938   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
2939       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
2940   fi
2941 fi
2942
2943 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
2944 AC_TRY_COMPILE([#include <sys/types.h>
2945 #include <sys/stat.h>
2946 #include <unistd.h>],
2947 [struct stat st;  st.st_blocks = 0;],
2948 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
2949 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
2950     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
2951 fi 
2952
2953 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
2954 AC_TRY_COMPILE([#include <sys/types.h>
2955 #include <sys/stat.h>
2956 #include <unistd.h>],
2957 [struct stat st;  st.st_blksize = 0;],
2958 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
2959 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
2960     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
2961 fi
2962
2963 case "$host_os" in
2964 *linux*)
2965 AC_CACHE_CHECK([for broken RedHat 7.2 system header files],samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS,[
2966 AC_TRY_COMPILE([
2967 #ifdef HAVE_SYS_VFS_H
2968 #include <sys/vfs.h>
2969 #endif
2970 #ifdef HAVE_SYS_CAPABILITY_H
2971 #include <sys/capability.h>
2972 #endif
2973 ],[int i;],
2974    samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no,samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=yes)])
2975 if test x"$samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" = x"yes"; then
2976    AC_DEFINE(BROKEN_REDHAT_7_SYSTEM_HEADERS,1,[Broken RedHat 7.2 system header files])
2977 fi
2978 ;;
2979 esac
2980
2981 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
2982 AC_TRY_COMPILE([
2983 #include <sys/types.h>
2984 #include <sys/acl.h>
2985 #if defined(HAVE_RPCSVC_NIS_H)
2986 #include <rpcsvc/nis.h>
2987 #endif],
2988 [int i;],
2989 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
2990 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
2991         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
2992 fi
2993
2994 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
2995 AC_TRY_RUN([
2996 #include <stdio.h>
2997 #include <limits.h>
2998 main() {
2999         char *newpath = realpath("/tmp", NULL);
3000         exit ((newpath != NULL) ? 0 : 1);
3001 }
3002 ],
3003 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
3004 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
3005     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
3006 fi
3007
3008 #################################################
3009 # check for AFS clear-text auth support
3010 samba_cv_WITH_AFS=no
3011 AC_MSG_CHECKING(whether to use AFS clear-text auth)
3012 AC_ARG_WITH(afs,
3013 [  --with-afs              Include AFS clear-text auth support (default=no) ],
3014 [ case "$withval" in
3015   yes|auto)
3016     AC_MSG_RESULT($withval)
3017     samba_cv_WITH_AFS=$withval
3018     ;;
3019   *)
3020     AC_MSG_RESULT(no)
3021     ;;
3022   esac ],
3023   AC_MSG_RESULT(no)
3024 )
3025
3026 ####################################################
3027 # check for Linux-specific AFS fake-kaserver support
3028 samba_cv_WITH_FAKE_KASERVER=no
3029 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
3030 AC_ARG_WITH(fake-kaserver,
3031 [  --with-fake-kaserver    Include AFS fake-kaserver support (default=no) ],
3032 [ case "$withval" in
3033   yes|auto)
3034     AC_MSG_RESULT($withval)
3035     samba_cv_WITH_FAKE_KASERVER=$withval
3036     ;;
3037   *)
3038     AC_MSG_RESULT(no)
3039     ;;
3040   esac ],
3041   AC_MSG_RESULT(no)
3042 )
3043
3044 #################################################
3045 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
3046 if test x"$samba_cv_WITH_AFS" != x"no" ||
3047    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
3048
3049     # see if this box has the afs-headers in /usr/include/afs
3050     AC_MSG_CHECKING(for /usr/include/afs)
3051     if test -d /usr/include/afs; then
3052           CFLAGS="$CFLAGS -I/usr/include/afs"
3053           CPPFLAGS="$CPPFLAGS -I/usr/include/afs"
3054           AC_MSG_RESULT(yes)
3055     else
3056       AC_MSG_RESULT(no)
3057     fi
3058    
3059     # check for afs.h
3060     have_afs_headers=no
3061     AC_CHECK_HEADERS(afs.h afs/afs.h)
3062     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
3063         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
3064            test x"$samba_cv_WITH_AFS" = x"auto"; then
3065                 AC_MSG_WARN([AFS cannot be supported without afs.h])
3066         else
3067                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
3068         fi
3069     else
3070         have_afs_headers=yes
3071     fi
3072 fi
3073
3074 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
3075     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
3076 fi
3077
3078 #################################################
3079 # check whether to compile AFS/NT ACL mapping module
3080 samba_cv_WITH_VFS_AFSACL=no
3081 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3082 AC_ARG_WITH(vfs-afsacl,
3083 [  --with-vfs-afsacl       Include AFS to NT ACL mapping module (default=no) ],
3084 [ case "$withval" in
3085   yes|auto)
3086     AC_MSG_RESULT($withval)
3087     samba_cv_WITH_VFS_AFSACL=yes
3088     ;;
3089   *)
3090     AC_MSG_RESULT(no)
3091     ;;
3092   esac ],
3093   AC_MSG_RESULT(no)
3094 )
3095
3096 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3097    default_shared_modules="$default_shared_modules vfs_afsacl"
3098 fi
3099         
3100 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3101     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3102 fi
3103
3104 #################################################
3105 # check for the DFS clear-text auth system
3106 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3107 AC_ARG_WITH(dfs,
3108 [  --with-dce-dfs          Include DCE/DFS clear-text auth support (default=no)],
3109 [ case "$withval" in
3110   yes)
3111     AC_MSG_RESULT(yes)
3112     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3113     ;;
3114   *)
3115     AC_MSG_RESULT(no)
3116     ;;
3117   esac ],
3118   AC_MSG_RESULT(no)
3119 )
3120
3121 ########################################################
3122 # Compile with LDAP support?
3123
3124 with_ldap_support=auto
3125 AC_MSG_CHECKING([for LDAP support])
3126
3127 AC_ARG_WITH(ldap,
3128 [  --with-ldap             LDAP support (default yes)],
3129 [ case "$withval" in
3130     yes|no)
3131         with_ldap_support=$withval
3132         ;;
3133   esac ])
3134
3135 AC_MSG_RESULT($with_ldap_support)
3136
3137 SMBLDAP=""
3138 AC_SUBST(SMBLDAP)
3139 SMBLDAPUTIL=""
3140 AC_SUBST(SMBLDAPUTIL)
3141 LDBLDAP=""
3142 AC_SUBST(LDBLDAP)
3143
3144 if test x"$with_ldap_support" != x"no"; then
3145
3146   ##################################################################
3147   # first test for ldap.h and lber.h
3148   # (ldap.h is required for this test)
3149   AC_CHECK_HEADERS(ldap.h lber.h)
3150   
3151   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3152         if test x"$with_ldap_support" = x"yes"; then
3153          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3154         else
3155          AC_MSG_WARN(ldap.h is needed for LDAP support)
3156         fi
3157         
3158         with_ldap_support=no
3159   fi
3160
3161   ##################################################################
3162   # HP/UX does not have ber_tag_t, disable LDAP there
3163   AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3164   if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3165         if test x"$with_ldap_support" = x"yes"; then
3166          AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3167         else
3168          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3169         fi
3170         with_ldap_support=no
3171   fi
3172 fi
3173
3174 if test x"$with_ldap_support" != x"no"; then
3175   ac_save_LIBS=$LIBS
3176
3177   ##################################################################
3178   # we might need the lber lib on some systems. To avoid link errors
3179   # this test must be before the libldap test
3180   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3181
3182   ########################################################
3183   # now see if we can find the ldap libs in standard paths
3184   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3185
3186   ########################################################
3187   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3188   # Check found in pam_ldap 145.
3189   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3190
3191   LIBS="$LIBS $LDAP_LIBS"
3192   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3193     AC_TRY_COMPILE([
3194         #include <lber.h>
3195         #include <ldap.h>], 
3196         [ldap_set_rebind_proc(0, 0, 0);], 
3197         [smb_ldap_cv_ldap_set_rebind_proc=3], 
3198         [smb_ldap_cv_ldap_set_rebind_proc=2]
3199     ) 
3200   ])
3201   
3202   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3203
3204   AC_CHECK_FUNC_EXT(ldap_dn2ad_canonical,$LDAP_LIBS)    
3205   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3206   
3207   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3208     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3209     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3210     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3211     default_shared_modules="$default_shared_modules";
3212     SMBLDAP="lib/smbldap.o"
3213     SMBLDAPUTIL="lib/smbldap_util.o"
3214     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3215       AC_MSG_WARN(Disabling ldb_ldap support (requires ldap_initialize))
3216     else
3217       AC_DEFINE(HAVE_LDB_LDAP,1,[Whether ldb_ldap is available])
3218       LDBLDAP="lib/ldb/ldb_ldap/ldb_ldap.o"
3219     fi
3220     with_ldap_support=yes
3221     AC_MSG_CHECKING(whether LDAP support is used)
3222     AC_MSG_RESULT(yes)
3223   else
3224     if test x"$with_ldap_support" = x"yes"; then
3225         AC_MSG_ERROR(libldap is needed for LDAP support)
3226     else
3227         AC_MSG_WARN(libldap is needed for LDAP support)
3228     fi
3229     
3230     LDAP_LIBS=""
3231     with_ldap_support=no
3232   fi
3233   LIBS=$ac_save_LIBS
3234 fi
3235
3236
3237 #################################################
3238 # active directory support
3239
3240 with_ads_support=auto
3241 AC_MSG_CHECKING([for Active Directory and krb5 support])
3242
3243 AC_ARG_WITH(ads,
3244 [  --with-ads              Active Directory support (default auto)],
3245 [ case "$withval" in
3246     yes|no)
3247         with_ads_support="$withval"
3248         ;;
3249   esac ])
3250
3251 AC_MSG_RESULT($with_ads_support)
3252
3253 FOUND_KRB5=no
3254 KRB5_LIBS=""
3255
3256 if test x"$with_ldap_support" != x"yes"; then
3257
3258     if test x"$with_ads_support" = x"yes"; then
3259         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3260     elif test x"$with_ads_support" = x"auto"; then
3261         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3262         with_ads_support=no
3263     fi
3264
3265 else
3266
3267     # Check to see whether there is enough LDAP functionality to be able
3268     # to build AD support.
3269
3270     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3271
3272     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3273         if test x"$with_ads_support" = x"yes"; then
3274             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3275         elif test x"$with_ads_support" = x"auto"; then
3276             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3277             with_ads_support=no
3278         fi
3279     fi
3280
3281     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3282
3283     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3284         if test x"$with_ads_support" = x"yes"; then
3285             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3286         elif test x"$with_ads_support" = x"auto"; then
3287             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3288             with_ads_support=no
3289         fi
3290     fi
3291
3292 fi
3293
3294 if test x"$with_ads_support" != x"no"; then
3295
3296   # Do no harm to the values of CFLAGS and LIBS while testing for
3297   # Kerberos support.
3298  
3299   if test x$FOUND_KRB5 = x"no"; then
3300     #################################################
3301     # check for location of Kerberos 5 install
3302     AC_MSG_CHECKING(for kerberos 5 install path)
3303     AC_ARG_WITH(krb5,
3304     [  --with-krb5=base-dir    Locate Kerberos 5 support (default=/usr)],
3305     [ case "$withval" in
3306       no)
3307         AC_MSG_RESULT(no krb5-path given)
3308         ;;
3309       yes)
3310         AC_MSG_RESULT(/usr)
3311         FOUND_KRB5=yes
3312         ;;
3313       *)
3314         AC_MSG_RESULT($withval)
3315         KRB5_CFLAGS="-I$withval/include"
3316         KRB5_CPPFLAGS="-I$withval/include"
3317         KRB5_LDFLAGS="-L$withval/lib"
3318         FOUND_KRB5=yes
3319         if test -x "$withval/bin/krb5-config"; then
3320                 KRB5CONFIG=$withval/bin/krb5-config
3321         fi
3322         ;;
3323       esac ],
3324       AC_MSG_RESULT(no krb5-path given)
3325     )
3326   fi
3327
3328   #################################################
3329   # check for krb5-config from recent MIT and Heimdal kerberos 5
3330   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3331   AC_MSG_CHECKING(for working krb5-config)
3332   if test -x "$KRB5CONFIG"; then
3333     ac_save_CFLAGS=$CFLAGS
3334     CFLAGS="";export CFLAGS
3335     ac_save_LDFLAGS=$LDFLAGS
3336     LDFLAGS="";export LDFLAGS
3337     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3338     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3339     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`" 
3340     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3341     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3342     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3343     FOUND_KRB5=yes
3344     AC_MSG_RESULT(yes)
3345   else
3346     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3347   fi
3348  
3349   if test x$FOUND_KRB5 = x"no"; then
3350     #################################################
3351     # see if this box has the SuSE location for the heimdal krb implementation
3352     AC_MSG_CHECKING(for /usr/include/heimdal)
3353     if test -d /usr/include/heimdal; then
3354       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3355           KRB5_CFLAGS="-I/usr/include/heimdal"
3356           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3357           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3358           AC_MSG_RESULT(yes)
3359       else
3360           KRB5_CFLAGS="-I/usr/include/heimdal"
3361           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3362           AC_MSG_RESULT(yes)
3363       fi
3364     else
3365       AC_MSG_RESULT(no)
3366     fi
3367   fi
3368
3369   if test x$FOUND_KRB5 = x"no"; then
3370     #################################################
3371     # see if this box has the RedHat location for kerberos
3372     AC_MSG_CHECKING(for /usr/kerberos)
3373     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3374       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3375       KRB5_CFLAGS="-I/usr/kerberos/include"
3376       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3377       AC_MSG_RESULT(yes)
3378     else
3379       AC_MSG_RESULT(no)
3380     fi
3381   fi
3382
3383   ac_save_CFLAGS=$CFLAGS
3384   ac_save_CPPFLAGS=$CPPFLAGS
3385   ac_save_LDFLAGS=$LDFLAGS
3386
3387   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3388   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3389   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3390
3391   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3392
3393   # now check for krb5.h. Some systems have the libraries without the headers!
3394   # note that this check is done here to allow for different kerberos
3395   # include paths
3396   AC_CHECK_HEADERS(krb5.h)
3397
3398   if test x"$ac_cv_header_krb5_h" = x"no"; then
3399
3400     # Give a warning if AD support was not explicitly requested,
3401     # i.e with_ads_support = auto, otherwise die with an error.
3402
3403     if test x"$with_ads_support" = x"yes"; then
3404       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3405     else
3406       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3407     fi
3408
3409     # Turn off AD support and restore CFLAGS and LIBS variables
3410
3411     with_ads_support="no"
3412     
3413     CFLAGS=$ac_save_CFLAGS
3414     CPPFLAGS=$ac_save_CPPFLAGS
3415     LDFLAGS=$ac_save_LDFLAGS
3416   fi
3417 fi
3418
3419 # Now we have determined whether we really want ADS support
3420 use_ads=no
3421 if test x"$with_ads_support" != x"no"; then
3422   use_ads=yes
3423   have_gssapi=no
3424   ac_save_LIBS=$LIBS
3425
3426   # now check for gssapi headers.  This is also done here to allow for
3427   # different kerberos include paths
3428   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
3429
3430   ##################################################################
3431   # we might need the k5crypto and com_err libraries on some systems
3432   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3433   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3434
3435   # Heimdal checks.
3436   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3437   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3438   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3439
3440   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3441   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3442
3443   ########################################################
3444   # now see if we can find the krb5 libs in standard paths
3445   # or as specified above
3446   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3447   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3448
3449   ########################################################
3450   # now see if we can find the gssapi libs in standard paths
3451   if test x"$have_gssapi" != x"yes"; then
3452      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3453   fi
3454
3455   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3456   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3457   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3458   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3459   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3460   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3461   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS) 
3462   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3463   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS) 
3464   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3465   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS) 
3466   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3467   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS) 
3468   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS) 
3469   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3470   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3471   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3472   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3473   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3474   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3475   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3476   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3477   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3478   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3479   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3480   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3481   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3482   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3483   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3484   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3485   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3486   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3487   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3488   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3489   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3490   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3491
3492   LIBS="$KRB5_LIBS $LIBS"
3493
3494   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3495         smb_krb5_ticket_has_keyinfo,
3496         [
3497             AC_TRY_COMPILE(
3498             [
3499                 #include <krb5.h>
3500             ],
3501             [
3502                 krb5_ticket ticket;
3503                 krb5_kvno kvno;
3504                 krb5_enctype enctype;
3505
3506                 enctype = ticket.enc_part.enctype;
3507                 kvno = ticket.enc_part.kvno;
3508             ],
3509             [ smb_krb5_ticket_has_keyinfo=yes ],
3510             [ smb_krb5_ticket_has_keyinfo=no ])
3511         ])
3512
3513   if test x"$smb_krb5_ticket_has_keyinfo" = x"yes" ; then
3514         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3515             [Whether the krb5_ticket structure contains the kvno and enctype])
3516   fi
3517
3518   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_verify_checksum, [
3519     AC_TRY_COMPILE([
3520         #include <krb5.h>], 
3521         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);], 
3522         [smb_krb5_verify_checksum=7], 
3523         [smb_krb5_verify_checksum=6], 
3524     ) 
3525   ])
3526   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_verify_checksum, [Number of arguments to krb5_verify_checksum])
3527
3528   AC_CACHE_CHECK([for checksum in krb5_checksum],
3529                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3530     AC_TRY_COMPILE([#include <krb5.h>],
3531       [krb5_checksum cksum; cksum.checksum.length = 0;],
3532       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3533       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3534
3535   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3536     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3537                [Whether the krb5_checksum struct has a checksum property])
3538   fi
3539
3540   AC_CACHE_CHECK([for etype in EncryptedData],
3541                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3542     AC_TRY_COMPILE([#include <krb5.h>],
3543       [EncryptedData edata; edata.etype = 0;],
3544       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3545       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3546
3547   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3548     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3549                [Whether the EncryptedData struct has a etype property])
3550   fi
3551
3552   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3553                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3554     AC_TRY_COMPILE([#include <krb5.h>],
3555       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3556       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3557       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3558
3559   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3560     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3561                [Whether the krb5_ap_req struct has a ticket pointer])
3562   fi
3563
3564   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3565                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3566     AC_TRY_COMPILE([#include <krb5.h>],
3567       [krb5_error err; err.e_data = NULL;],
3568       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3569       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3570
3571   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3572     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3573                [Whether the krb5_error struct has a e_data pointer])
3574   fi
3575
3576   AC_CACHE_CHECK([for krb5_crypto type],
3577                 samba_cv_HAVE_KRB5_CRYPTO,[
3578     AC_TRY_COMPILE([#include <krb5.h>],
3579       [krb5_crypto crypto;],
3580       samba_cv_HAVE_KRB5_CRYPTO=yes,
3581       samba_cv_HAVE_KRB5_CRYPTO=no)])
3582
3583   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3584     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3585                [Whether the type krb5_crypto exists])
3586   fi
3587
3588   AC_CACHE_CHECK([for krb5_encrypt_block type],
3589                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3590     AC_TRY_COMPILE([#include <krb5.h>],
3591       [krb5_encrypt_block block;],
3592       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3593       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3594
3595   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3596     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3597                [Whether the type krb5_encrypt_block exists])
3598   fi
3599
3600   AC_CACHE_CHECK([for addrtype in krb5_address],
3601                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3602     AC_TRY_COMPILE([#include <krb5.h>],
3603       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3604       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3605       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3606
3607   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3608     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3609                [Whether the krb5_address struct has a addrtype property])
3610   fi
3611
3612   AC_CACHE_CHECK([for addr_type in krb5_address],
3613                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3614     AC_TRY_COMPILE([#include <krb5.h>],
3615       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3616       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3617       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3618
3619   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3620     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3621               [Whether the krb5_address struct has a addr_type property])
3622   fi
3623
3624   AC_CACHE_CHECK([for enc_part2 in krb5_ticket], 
3625                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3626                  [AC_TRY_COMPILE([#include <krb5.h>],
3627     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3628     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3629
3630   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3631     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3632               [Whether the krb5_ticket struct has a enc_part2 property])
3633   fi
3634
3635   AC_CACHE_CHECK([for keyblock in krb5_creds],
3636                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3637     AC_TRY_COMPILE([#include <krb5.h>],
3638       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3639       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3640       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3641
3642   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3643     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3644               [Whether the krb5_creds struct has a keyblock property])
3645   fi
3646
3647   AC_CACHE_CHECK([for session in krb5_creds],
3648                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3649     AC_TRY_COMPILE([#include <krb5.h>],
3650       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3651       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3652       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3653
3654   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3655     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3656               [Whether the krb5_creds struct has a session property])
3657   fi
3658
3659   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3660                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3661     AC_TRY_COMPILE([#include <krb5.h>],
3662       [krb5_keyblock key; key.keyvalue.data = NULL;],
3663       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3664       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3665
3666   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3667     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3668               [Whether the krb5_keyblock struct has a keyvalue property])
3669   fi
3670
3671   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3672                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3673     AC_TRY_COMPILE([#include <krb5.h>],
3674       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3675       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3676       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3677   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3678                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3679     AC_TRY_COMPILE([#include <krb5.h>],
3680       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3681       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3682       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3683 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3684 # w.r.t. arcfour and windows, so we must not enable it here
3685   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3686           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3687     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3688               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
3689   fi
3690
3691   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3692                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3693     AC_TRY_COMPILE([#include <krb5.h>],
3694       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3695       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3696       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3697
3698   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3699     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3700               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3701   fi
3702
3703   AC_CACHE_CHECK([for KV5M_KEYTAB],
3704                  samba_cv_HAVE_KV5M_KEYTAB,[
3705     AC_TRY_COMPILE([#include <krb5.h>],
3706       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3707       samba_cv_HAVE_KV5M_KEYTAB=yes,
3708       samba_cv_HAVE_KV5M_KEYTAB=no)])
3709
3710   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3711       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3712              [Whether the KV5M_KEYTAB option is available])
3713   fi
3714
3715   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3716                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3717     AC_TRY_COMPILE([#include <krb5.h>],
3718       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3719       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3720       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3721
3722   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3723     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3724               [Whether KRB5_KU_OTHER_CKSUM is available])
3725   fi
3726   
3727   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3728                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3729     AC_TRY_COMPILE([#include <krb5.h>],
3730       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3731       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3732       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3733
3734   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3735     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3736               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3737   fi
3738
3739   AC_CACHE_CHECK([for the krb5_princ_component macro],
3740                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3741     AC_TRY_LINK([#include <krb5.h>],
3742       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3743       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3744       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3745
3746   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3747     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3748                [Whether krb5_princ_component is available])
3749   fi
3750
3751   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3752                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3753     AC_TRY_COMPILE([#include <krb5.h>],
3754       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3755       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3756       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3757
3758   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3759     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3760               [Whether krb5_keytab_entry has key member])
3761   fi
3762
3763   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3764                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3765     AC_TRY_COMPILE([#include <krb5.h>],
3766       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3767       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3768       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3769
3770   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3771     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3772               [Whether krb5_keytab_entry has keyblock member])
3773   fi
3774
3775   AC_CACHE_CHECK([for magic in krb5_address],
3776                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
3777     AC_TRY_COMPILE([#include <krb5.h>],
3778       [krb5_address addr; addr.magic = 0;],
3779       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
3780       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
3781
3782   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
3783     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
3784               [Whether the krb5_address struct has a magic property])
3785   fi
3786
3787   AC_CACHE_CHECK([for WRFILE: keytab support],
3788                 samba_cv_HAVE_WRFILE_KEYTAB,[
3789     AC_TRY_RUN([
3790 #include<krb5.h>
3791   main()
3792   {
3793     krb5_context context;
3794     krb5_keytab keytab;
3795
3796     krb5_init_context(&context);
3797     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3798   }],
3799   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3800   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3801
3802   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3803       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3804                [Whether the WRFILE:-keytab is supported])
3805   fi
3806
3807   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
3808                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
3809     AC_TRY_COMPILE([#include <krb5.h>],
3810     [
3811     krb5_context context;
3812     krb5_principal principal;
3813     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
3814     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
3815     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
3816
3817   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
3818     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
3819               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
3820   fi
3821
3822   AC_CACHE_CHECK([for krb5_addresses type],
3823                 samba_cv_HAVE_KRB5_ADDRESSES,[
3824     AC_TRY_COMPILE([#include <krb5.h>],
3825       [krb5_addresses addr;],
3826       samba_cv_HAVE_KRB5_ADDRESSES=yes,
3827       samba_cv_HAVE_KRB5_ADDRESSES=no)])
3828
3829   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
3830     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
3831                [Whether the type krb5_addresses type exists])
3832   fi
3833
3834   #
3835   #
3836   # Now the decisions whether we can support krb5
3837   # 
3838   # NOTE: all tests should be done before this block!
3839   #
3840   #
3841   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
3842     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
3843     use_ads=no
3844   fi
3845
3846   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
3847           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
3848   then
3849     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
3850     use_ads=no
3851   fi
3852
3853   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
3854           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
3855   then
3856     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
3857     use_ads=no
3858   fi
3859
3860   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
3861           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
3862   then
3863     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
3864     use_ads=no
3865   fi
3866
3867   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
3868           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
3869   then
3870     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
3871     use_ads=no
3872   fi
3873
3874   if test x"$smb_krb5_ticket_has_keyinfo" != x"yes" ; then
3875
3876       # We only need the following functions if we can't get the enctype
3877       # and kvno out of the ticket directly (ie. on Heimdal).
3878
3879       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
3880       then
3881         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
3882         use_ads=no
3883       fi
3884
3885       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
3886       then
3887         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
3888         use_ads=no
3889       fi
3890
3891   fi
3892
3893   if test x"$use_ads" = x"yes"; then
3894     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
3895     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
3896     if test x"$have_gssapi" = x"yes"; then
3897       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
3898     fi
3899   else
3900     if test x"$with_ads_support" = x"yes"; then
3901         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
3902     else
3903         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
3904     fi
3905     AC_REMOVE_DEFINE(HAVE_KRB5_H)
3906     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
3907     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
3908     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
3909     KRB5_LIBS=""
3910     with_ads_support=no 
3911   fi
3912   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
3913   AC_MSG_RESULT([$use_ads])
3914
3915 LIBS="$ac_save_LIBS"
3916 fi
3917
3918 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
3919 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
3920
3921
3922 ########################################################
3923 # Compile with DNS Updates support?
3924
3925 with_dnsupdate_support=no
3926 AC_MSG_CHECKING([whether to enable DNS Updates support])
3927
3928 AC_ARG_WITH(dnsupdate,
3929 [  --with-dnsupdate        Enable DNS Updates support (default no)],
3930 [ case "$withval" in
3931     yes|no)
3932         with_dnsupdate_support=$withval
3933         ;;
3934   esac ])
3935
3936 AC_MSG_RESULT($with_dnsupdate_support)
3937
3938 if test x"$with_dnsupdate_support" != x"no"; then
3939
3940   ################################################################
3941   # first test for Active Directory support being enabled
3942   #if test x"$with_ads_support" = x"no"; then
3943   #             AC_MSG_ERROR(Active Directory support is required to enable DNS Update support)
3944   #             with_dnsupdate_support=no
3945   #fi           
3946   ##################################################################
3947   # then test for uuid.h (necessary to generate unique DNS keynames
3948   # (uuid.h is required for this test)
3949   AC_CHECK_HEADERS(uuid/uuid.h)
3950   
3951   if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
3952         if test x"$with_dnsupdate_support" = x"yes"; then
3953          AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
3954         else
3955          AC_MSG_WARN(uuid.h is needed to enable DNS Updates support)
3956         fi
3957         with_dnsupdate_support=no
3958   fi
3959 fi
3960
3961 if test x"$with_dnsupdate_support" != x"no"; then
3962
3963   ########################################################
3964   # Now see if we can find the uuid libs in standard paths
3965   # On some systems, the uuid API is in libc, so we have to
3966   # be careful not to insert a spurious -luuid.
3967   
3968   UUID_LIBS=""
3969   AC_LIBTESTFUNC(uuid, uuid_generate,
3970           [
3971           &