r22102: Remove obsoleted SHLIBS_PROGS from {Makefile,configure}.in.
[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 AC_DEFINE(CONFIG_H_IS_FROM_SAMBA,1,[Marker for samba's config.h])
8
9 SMB_VERSION_STRING=`cat $srcdir/include/version.h | grep 'SAMBA_VERSION_OFFICIAL_STRING' | cut -d '"' -f2`
10 echo "SAMBA VERSION: ${SMB_VERSION_STRING}"
11
12 SAMBA_VERSION_SVN_REVISION=`cat $srcdir/include/version.h | grep 'SAMBA_VERSION_SVN_REVISION' | cut -d ' ' -f3-`
13 if test -n "${SAMBA_VERSION_SVN_REVISION}";then
14         echo "BUILD REVISION: ${SAMBA_VERSION_SVN_REVISION}"
15 fi
16
17 AC_LIBREPLACE_LOCATION_CHECKS
18
19 AC_DISABLE_STATIC
20 AC_ENABLE_SHARED
21
22 #################################################
23 # Directory handling stuff to support both the
24 # legacy SAMBA directories and FHS compliant
25 # ones...
26 AC_PREFIX_DEFAULT(/usr/local/samba)
27
28 rootsbindir="\${SBINDIR}"
29 lockdir="\${VARDIR}/locks"
30 piddir="\${VARDIR}/locks"
31 test "${mandir}" || mandir="\${prefix}/man"
32 logfilebase="\${VARDIR}"
33 privatedir="\${prefix}/private"
34 test "${libdir}" || libdir="\${prefix}/lib"
35 pammodulesdir="\${LIBDIR}/security"
36 configdir="\${LIBDIR}"
37 swatdir="\${prefix}/swat"
38
39 AC_ARG_WITH(fhs, 
40 [  --with-fhs              Use FHS-compliant paths (default=no)],
41 [ case "$withval" in
42   yes)
43     lockdir="\${VARDIR}/lib/samba"
44     piddir="\${VARDIR}/run"
45     mandir="\${prefix}/share/man"
46     logfilebase="\${VARDIR}/log/samba"
47     privatedir="\${CONFIGDIR}/private"
48     libdir="\${prefix}/lib/samba"
49     configdir="\${sysconfdir}/samba"
50     swatdir="\${DATADIR}/samba/swat"
51     ;;
52   esac])
53
54 #################################################
55 # set private directory location
56 AC_ARG_WITH(privatedir,
57 [  --with-privatedir=DIR   Where to put smbpasswd ($ac_default_prefix/private)],
58 [ case "$withval" in
59   yes|no)
60   #
61   # Just in case anybody calls it without argument
62   #
63     AC_MSG_WARN([--with-privatedir called without argument - will use default])
64   ;;
65   * )
66     privatedir="$withval"
67     ;;
68   esac])
69
70 #################################################
71 # set root sbin directory location
72 AC_ARG_WITH(rootsbindir,
73 [  --with-rootsbindir=DIR  Which directory to use for root sbin ($ac_default_prefix/sbin)],
74 [ case "$withval" in
75   yes|no)
76   #
77   # Just in case anybody calls it without argument
78   #
79     AC_MSG_WARN([--with-rootsbindir called without argument - will use default])
80   ;;
81   * )
82     rootsbindir="$withval"
83     ;;
84   esac])
85
86 #################################################
87 # set lock directory location
88 AC_ARG_WITH(lockdir,
89 [  --with-lockdir=DIR      Where to put lock files ($ac_default_prefix/var/locks)],
90 [ case "$withval" in
91   yes|no)
92   #
93   # Just in case anybody calls it without argument
94   #
95     AC_MSG_WARN([--with-lockdir called without argument - will use default])
96   ;;
97   * )
98     lockdir="$withval"
99     ;;
100   esac])
101
102 #################################################
103 # set pid directory location
104 AC_ARG_WITH(piddir,
105 [  --with-piddir=DIR       Where to put pid files ($ac_default_prefix/var/locks)],
106 [ case "$withval" in
107   yes|no)
108   #
109   # Just in case anybody calls it without argument
110   #
111     AC_MSG_WARN([--with-piddir called without argument - will use default])
112   ;;
113   * )
114     piddir="$withval"
115     ;;
116   esac])
117
118 #################################################
119 # set SWAT directory location
120 AC_ARG_WITH(swatdir,
121 [  --with-swatdir=DIR      Where to put SWAT files ($ac_default_prefix/swat)],
122 [ case "$withval" in
123   yes|no)
124   #
125   # Just in case anybody does it
126   #
127     AC_MSG_WARN([--with-swatdir called without argument - will use default])
128   ;;
129   * )
130     swatdir="$withval"
131     ;;
132   esac])
133
134 #################################################
135 # set configuration directory location
136 AC_ARG_WITH(configdir,
137 [  --with-configdir=DIR    Where to put configuration files ($libdir)],
138 [ case "$withval" in
139   yes|no)
140   #
141   # Just in case anybody does it
142   #
143     AC_MSG_WARN([--with-configdir called without argument - will use default])
144   ;;
145   * )
146     configdir="$withval"
147     ;;
148   esac])
149
150 #################################################
151 # set log directory location
152 AC_ARG_WITH(logfilebase,
153 [  --with-logfilebase=DIR  Where to put log files ($VARDIR)],
154 [ case "$withval" in
155   yes|no)
156   #
157   # Just in case anybody does it
158   #
159     AC_MSG_WARN([--with-logfilebase called without argument - will use default])
160   ;;
161   * )
162     logfilebase="$withval"
163     ;;
164   esac])
165
166 #################################################
167 # set lib directory location
168 AC_ARG_WITH(libdir,
169 [  --with-libdir=DIR       Where to put libdir ($libdir)],
170 [ case "$withval" in
171   yes|no)
172   #
173   # Just in case anybody does it
174   #
175     AC_MSG_WARN([--with-libdir without argument - will use default])
176   ;;
177   * )
178     libdir="$withval"
179     ;;
180   esac])
181
182 #################################################
183 # set PAM modules directory location
184 AC_ARG_WITH(pammodulesdir,
185 [  --with-pammodulesdir=DIR  Which directory to use for PAM modules ($ac_default_prefix/$libdir/security)],
186 [ case "$withval" in
187   yes|no)
188   #
189   # Just in case anybody calls it without argument
190   #
191     AC_MSG_WARN([--with-pammodulesdir called without argument - will use default])
192   ;;
193   * )
194     pammodulesdir="$withval"
195     ;;
196   esac])
197
198 #################################################
199 # set man directory location
200 AC_ARG_WITH(mandir,
201 [  --with-mandir=DIR       Where to put man pages ($mandir)],
202 [ case "$withval" in
203   yes|no)
204   #
205   # Just in case anybody does it
206   #
207     AC_MSG_WARN([--with-mandir without argument - will use default])
208   ;;
209   * )
210     mandir="$withval"
211     ;;
212   esac])
213
214 AC_ARG_WITH(cfenc,
215 [  --with-cfenc=HEADERDIR  Use internal CoreFoundation encoding API
216                           for optimization (Mac OS X/Darwin only)],
217 [
218 # May be in source $withval/CoreFoundation/StringEncodings.subproj.
219 # Should have been in framework $withval/CoreFoundation.framework/Headers.
220 for d in \
221     $withval/CoreFoundation/StringEncodings.subproj \
222     $withval/StringEncodings.subproj \
223     $withval/CoreFoundation.framework/Headers \
224     $withval/Headers \
225     $withval
226 do
227     if test -r $d/CFStringEncodingConverter.h; then
228         ln -sfh $d include/CoreFoundation
229     fi
230 done
231 ])
232
233 SAMBA_CPPFLAGS="-Iinclude -I${srcdir-.}/include  -I. -I${srcdir-.}"
234 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/lib/replace"
235 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/lib/talloc"
236 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/tdb/include"
237 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/libaddns"
238 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/librpc"
239
240 SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/popt"
241
242 ## cleanup the $(srcdir) in the Makefile if we are outside of the tree
243 if test "x${srcdir-.}" != "x."; then
244         SAMBA_CPPFLAGS=`echo ${SAMBA_CPPFLAGS} | sed -e "s;${srcdir};\$\(srcdir\);g"`
245 fi
246
247 AC_SUBST(configdir)
248 AC_SUBST(lockdir)
249 AC_SUBST(piddir)
250 AC_SUBST(logfilebase)
251 AC_SUBST(privatedir)
252 AC_SUBST(swatdir)
253 AC_SUBST(bindir)
254 AC_SUBST(sbindir)
255 AC_SUBST(rootsbindir)
256 AC_SUBST(pammodulesdir)
257
258 dnl Unique-to-Samba variables we'll be playing with.
259 AC_SUBST(SAMBA_CPPFLAGS)
260 AC_SUBST(SHELL)
261 AC_SUBST(LDSHFLAGS)
262 AC_SUBST(SONAMEFLAG)
263 AC_SUBST(SHLD)
264 AC_SUBST(HOST_OS)
265 AC_SUBST(PICFLAG)
266 AC_SUBST(PIE_CFLAGS)
267 AC_SUBST(PIE_LDFLAGS)
268 AC_SUBST(SHLIBEXT)
269 AC_SUBST(INSTALLLIBCMD_SH)
270 AC_SUBST(INSTALLLIBCMD_A)
271 AC_SUBST(UNINSTALLLIBCMD_SH)
272 AC_SUBST(UNINSTALLLIBCMD_A)
273 AC_SUBST(INSTALL_LIBMSRPC)
274 AC_SUBST(UNINSTALL_LIBMSRPC)
275 AC_SUBST(LIBMSRPC_SHARED)
276 AC_SUBST(LIBMSRPC)
277 AC_SUBST(INSTALL_LIBADDNS)
278 AC_SUBST(UNINSTALL_LIBADDNS)
279 AC_SUBST(LIBADDNS_SHARED)
280 AC_SUBST(LIBADDNS)
281 AC_SUBST(INSTALL_LIBSMBCLIENT)
282 AC_SUBST(UNINSTALL_LIBSMBCLIENT)
283 AC_SUBST(LIBSMBCLIENT_SHARED)
284 AC_SUBST(LIBSMBCLIENT)
285 AC_SUBST(INSTALL_LIBSMBSHAREMODES)
286 AC_SUBST(UNINSTALL_LIBSMBSHAREMODES)
287 AC_SUBST(LIBSMBSHAREMODES_SHARED)
288 AC_SUBST(LIBSMBSHAREMODES)
289 AC_SUBST(PRINT_LIBS)
290 AC_SUBST(AUTH_LIBS)
291 AC_SUBST(ACL_LIBS)
292 AC_SUBST(PASSDB_LIBS)
293 AC_SUBST(IDMAP_LIBS)
294 AC_SUBST(KRB5_LIBS)
295 AC_SUBST(UUID_LIBS)
296 AC_SUBST(LDAP_LIBS)
297 AC_SUBST(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(SMBMOUNT_PROGS)
305 AC_SUBST(CIFSMOUNT_PROGS)
306 AC_SUBST(INSTALL_CIFSMOUNT)
307 AC_SUBST(UNINSTALL_CIFSMOUNT)
308 AC_SUBST(EXTRA_SBIN_PROGS)
309 AC_SUBST(EXTRA_ALL_TARGETS)
310 AC_SUBST(CONFIG_LIBS)
311 AC_SUBST(NSCD_LIBS)
312
313 ## check for --enable-debug first before checking CFLAGS before
314 ## so that we don't mix -O and -g
315 AC_ARG_ENABLE(debug, 
316 [  --enable-debug          Turn on compiler debugging information (default=no)],
317     [if eval "test x$enable_debug = xyes"; then
318         CFLAGS="${CFLAGS} -g"
319     fi])
320
321 # compile with optimization and without debugging by default, but
322 # allow people to set their own preference.
323 # do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
324 # if it has no value.  This prevent *very* large debug binaries from occurring
325 # by default.
326 if test "x$CFLAGS" = x; then
327   CFLAGS="-O"
328 fi
329
330 CFLAGS="${CFLAGS} -D_SAMBA_BUILD_=3"
331
332 AC_LIBREPLACE_CC_CHECKS
333
334 m4_include(lib/socket_wrapper/config.m4)
335
336 #################################################
337 # set prefix for 'make test'
338 selftest_prefix="./"
339 AC_SUBST(selftest_prefix)
340 AC_ARG_WITH(selftest-prefix,
341 [  --with-selftest-prefix=DIR    The prefix where make test will be runned ($selftest_prefix)],
342 [ case "$withval" in
343   yes|no)
344     AC_MSG_WARN([--with-selftest-prefix called without argument - will use default])
345   ;;
346   * )
347     selftest_prefix="$withval"
348     ;;
349   esac
350 ])
351
352 #################################################
353 # set path of samba4's smbtorture
354 smbtorture4_path=""
355 AC_SUBST(smbtorture4_path)
356 AC_ARG_WITH(smbtorture4_path,
357 [  --with-smbtorture4-path=PATH    The path to a samba4 smbtorture for make test (none)],
358 [ case "$withval" in
359   yes|no)
360     AC_MSG_ERROR([--with-smbtorture4-path should take a path])
361   ;;
362   * )
363     smbtorture4_path="$withval"
364     if test -z "$smbtorture4_path" -a ! -f $smbtorture4_path; then
365         AC_MSG_ERROR(['$smbtorture_path' does not  exist!]) 
366     fi
367   ;;
368  esac
369 ])
370
371 AC_ARG_ENABLE(developer, [  --enable-developer      Turn on developer warnings and debugging (default=no)],
372     [if eval "test x$enable_developer = xyes"; then
373         developer=yes
374         CFLAGS="${CFLAGS} -gstabs -Wall -Wshadow -Wstrict-prototypes -Wpointer-arith -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
375         # Add -Wdeclaration-after-statement if compiler supports it
376         AC_CACHE_CHECK(
377           [that the C compiler understands -Wdeclaration-after-statement],
378           samba_cv_HAVE_Wdeclaration_after_statement, [
379           AC_TRY_RUN_STRICT([
380             int main(void)
381             {
382                 return 0;
383             }],[-Wdeclaration-after-statement],[$CPPFLAGS],[$LDFLAGS],
384             samba_cv_HAVE_Wdeclaration_after_statement=yes,
385             samba_cv_HAVE_Wdeclaration_after_statement=no,
386             samba_cv_HAVE_Wdeclaration_after_statement=cross)
387        ])
388        if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
389             CFLAGS="${CFLAGS} -Wdeclaration-after-statement"
390        fi
391     fi])
392
393 AC_ARG_ENABLE(krb5developer, [  --enable-krb5developer  Turn on developer warnings and debugging, except -Wstrict-prototypes (default=no)],
394     [if eval "test x$enable_krb5developer = xyes"; then
395         developer=yes
396         CFLAGS="${CFLAGS} -gstabs -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
397     fi])
398
399 AC_ARG_ENABLE(dmalloc, [  --enable-dmalloc        Enable heap debugging [default=no]])
400
401 if test "x$enable_dmalloc" = xyes
402 then
403         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
404         AC_DEFINE(DMALLOC_FUNC_CHECK, 1, 
405                   [Define to check invariants around some common functions])
406         LIBS="$LIBS -ldmalloc"  
407 fi
408
409 #################################################
410 # check for a shared memory profiling support
411 AC_MSG_CHECKING(whether to use profiling)
412 AC_ARG_WITH(profiling-data,
413 [  --with-profiling-data   Include gathering source code profile information (default=no)],
414 [ case "$withval" in
415   yes)
416     AC_MSG_RESULT(yes)
417     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
418     samba_cv_WITH_PROFILE=yes
419     ;;
420   *)
421     AC_MSG_RESULT(no)
422     samba_cv_WITH_PROFILE=no
423     ;;
424   esac ],
425   AC_MSG_RESULT(no)
426 )
427
428 dnl Checks for programs.
429
430 AC_PROG_INSTALL
431 AC_PROG_AWK
432 AC_PATH_PROG(PERL, perl)
433
434 AC_CHECK_TOOL(AR, ar)
435
436 dnl Check if we use GNU ld
437 LD=ld
438 AC_PROG_LD_GNU
439
440 dnl Certain versions of GNU ld the default is not to have the 
441 dnl --allow-shlib-undefined flag defined.  This causes a stackload of
442 dnl warnings when building modules.
443 if test "$ac_cv_prog_gnu_ld" = "yes"; then
444         ac_cv_gnu_ld_version=`$LD -v 2>/dev/null | head -1`
445         AC_MSG_CHECKING(GNU ld release date)
446         changequote(,)dnl
447         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'`
448         changequote([,])dnl
449         AC_MSG_RESULT(${ac_cv_gnu_ld_date})
450         if test -n "$ac_cv_gnu_ld_date"; then
451         if test "$ac_cv_gnu_ld_date" -lt 20030217; then
452                 ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
453         fi
454         else
455            AC_MSG_CHECKING(GNU ld release version)
456            changequote(,)dnl
457            ac_cv_gnu_ld_vernr=`echo $ac_cv_gnu_ld_version | sed -n 's,^.*\([1-9][0-9]*\.[0-9][0-9]*\).*$,\1,p'`
458            ac_cv_gnu_ld_vernr_major=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 1`
459            ac_cv_gnu_ld_vernr_minor=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 2`
460            changequote([,])dnl
461            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr})
462            AC_MSG_CHECKING(GNU ld release version major)
463            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_major})
464            AC_MSG_CHECKING(GNU ld release version minor)
465            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_minor})
466            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
467              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
468            fi
469         fi
470 fi
471
472 dnl look for executable suffix
473 AC_EXEEXT
474
475 dnl Check if C compiler understands -c and -o at the same time
476 AC_PROG_CC_C_O
477 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
478       BROKEN_CC=
479 else
480       BROKEN_CC=#
481 fi
482 AC_SUBST(BROKEN_CC)
483
484 dnl Check if the C compiler understands -Werror
485 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
486  AC_TRY_RUN_STRICT([
487   int main(void)
488   {
489         return 0;
490   }],[-Werror],[$CPPFLAGS],[$LDFLAGS],
491   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
492 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
493    Werror_FLAGS="-Werror"
494 else 
495 dnl Check if the C compiler understands -w2
496 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
497  AC_TRY_RUN_STRICT([
498   int main(void)
499   {
500         return 0;
501   }],[-w2],[$CPPFLAGS],[$LDFLAGS],
502   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
503 if test x"$samba_cv_HAVE_w2" = x"yes"; then
504    Werror_FLAGS="-w2"
505 fi
506 fi
507
508 dnl Check if the C compiler understands volatile (it should, being ANSI).
509 AC_CACHE_CHECK([that the C compiler understands volatile],samba_cv_volatile, [
510     AC_TRY_COMPILE([#include <sys/types.h>],[volatile int i = 0],
511         samba_cv_volatile=yes,samba_cv_volatile=no)])
512 if test x"$samba_cv_volatile" = x"yes"; then
513    AC_DEFINE(HAVE_VOLATILE, 1, [Whether the C compiler understands volatile])
514 fi
515
516 ############################################
517 # check if the compiler can handle negative enum values
518 # and don't truncate the values to INT_MAX
519 # a runtime test is needed here
520 AC_SUBST(PIDL_ARGS)
521 AC_CACHE_CHECK([that the C compiler understands negative enum values],SMB_BUILD_CC_NEGATIVE_ENUM_VALUES, [
522     AC_TRY_RUN(
523 [
524         #include <stdio.h>
525         enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
526         int main(void) {
527                 enum negative_values v1 = NEGATIVE_VALUE;
528                 unsigned v2 = NEGATIVE_VALUE;
529
530                 if (v1 != 0xFFFFFFFF) {
531                         printf("%u != 0xFFFFFFFF\n", v1);
532                         return 1;
533                 }
534                 if (v2 != 0xFFFFFFFF) {
535                         printf("%u != 0xFFFFFFFF\n", v2);
536                         return 1;
537                 }
538
539                 return 0;
540         }
541 ],
542         SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=yes,SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=no)])
543 if test x"$SMB_BUILD_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
544         AC_MSG_WARN([using --unit-enums for pidl])
545         PIDL_ARGS="$PIDL_ARGS --uint-enums"
546 fi
547
548 dnl Figure out the flags to support named structure initializers
549
550 LIBREPLACE_C99_STRUCT_INIT([],[AC_MSG_ERROR([c99 structure initializer are not supported])])
551
552 UNAME_S=`(uname -s) 2>/dev/null` || UNAME_S="unknown"
553 AC_MSG_CHECKING(uname -s)
554 AC_MSG_RESULT(${UNAME_S})
555
556 UNAME_R=`(uname -r) 2>/dev/null` || UNAME_R="unknown"
557 AC_MSG_CHECKING(uname -r)
558 AC_MSG_RESULT(${UNAME_R})
559
560 UNAME_M=`(uname -m) 2>/dev/null` || UNAME_M="unknown"
561 AC_MSG_CHECKING(uname -m)
562 AC_MSG_RESULT(${UNAME_M})
563
564 UNAME_P=`(uname -p) 2>/dev/null` || UNAME_P="unknown"
565 AC_MSG_CHECKING(uname -p)
566 AC_MSG_RESULT(${UNAME_P})
567
568 dnl Add #include for broken IRIX header files
569   case "$host_os" in
570         *irix6*)
571                 #TODO add to libreplace
572                 if test x"$ac_cv_prog_gcc" != x"yes" ; then
573                         dnl Fix sensible defaults for MIPSPro compilers. The
574                         dnl error numbers are valid for the 7.3 compilers,
575                         dnl hopefully also valid for the 7.4 series.
576                         dnl
577                         dnl Bugzilla 3801. Force an error on warning 1035
578                         dnl so we don't incorrectly detect stdint.h. This
579                         dnl warning is emitted for #error directives.
580                         CFLAGS="$CFLAGS -diag_error 1035"
581                         dnl 1209: Controlling expression is constant
582                         dnl 1174: Function foo declared but never referenced
583                         dnl 3201: Parameter foo was never referenced
584                         CFLAGS="$CFLAGS -woff 1209,1174,3201"
585                 fi
586         ;;
587 esac
588
589 DYNEXP=
590 AC_SUBST(DYNEXP)
591
592 dnl Add modules that have to be built by default here
593 dnl These have to be built static:
594 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 rpc_epmapper auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin vfs_default nss_info_template"
595
596 dnl These are preferably build shared, and static if dlopen() is not available
597 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"
598
599 if test "x$developer" = xyes; then
600    default_static_modules="$default_static_modules rpc_rpcecho"
601    default_shared_modules="$default_shared_modules charset_weird"
602 fi
603
604 #
605 # Config CPPFLAG settings for strange OS's that must be set
606 # before other tests. Do NOT invoke AC_CHECK_HEADERS within this
607 # case statement; its first reference must be unconditional.
608 #
609 case "$host_os" in
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/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 will optimize out function calls
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 chflags)
1227 AC_CHECK_FUNCS(getrlimit fsync memset strlcpy strlcat setpgid)
1228 AC_CHECK_FUNCS(memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid)
1229 AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
1230 AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf realpath)
1231 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate chsize stat64 fstat64)
1232 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64)
1233 AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf)
1234 AC_CHECK_FUNCS(opendir64 readdir64 seekdir64 telldir64 rewinddir64 closedir64)
1235 AC_CHECK_FUNCS(getpwent_r)
1236 AC_CHECK_FUNCS(getdents getdents64)
1237 AC_CHECK_FUNCS(srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink)
1238 AC_CHECK_FUNCS(syslog vsyslog timegm)
1239 AC_CHECK_FUNCS(setlocale nl_langinfo)
1240 AC_CHECK_FUNCS(nanosleep)
1241 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
1242 AC_CHECK_FUNCS(memalign posix_memalign)
1243 AC_CHECK_HEADERS(sys/mman.h)
1244 # setbuffer, shmget, shm_open are needed for smbtorture
1245 AC_CHECK_FUNCS(setbuffer shmget shm_open)
1246 AC_CHECK_FUNCS(makecontext getcontext setcontext swapcontext)
1247
1248 # Find a method of generating a stack trace
1249 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
1250 AC_CHECK_FUNCS(backtrace_symbols)
1251 AC_CHECK_LIB(exc, trace_back_stack)
1252
1253 echo -n "checking for GPFS GPL libs... "
1254 save_LIBS="$LIBS"
1255 LIBS="$LIBS -lgpfs_gpl"
1256 AC_TRY_LINK([#include <gpfs_gpl.h>],
1257           [gpfs_set_share(0,GPFS_SHARE_READ,GPFS_DENY_NONE)],
1258           samba_cv_HAVE_GPFS=yes,
1259           samba_cv_HAVE_GPFS=no)
1260 echo $samba_cv_HAVE_GPFS
1261 if test x"$samba_cv_HAVE_GPFS" = x"yes"; then
1262     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL libs are available])
1263     default_shared_modules="$default_shared_modules vfs_gpfs"
1264 fi
1265 LIBS="$save_LIBS"
1266
1267 # Note that all the libunwind symbols in the API are defined to internal
1268 # platform-specific version, so we must include libunwind.h before checking
1269 # any of them.
1270 AC_MSG_CHECKING([for libunwind])
1271 save_LIBS=$LIBS
1272 if test x"$UNAME_P" = xunknown ; then
1273     # This probably won't link without the platform-specific libunwind.
1274     LIBS="$LIBS -lunwind"
1275 else
1276     # Add the platform-specific libunwind module. uname -p seems the most
1277     # plausible option and works for ia64, where libunwind is most useful.
1278     LIBS="$LIBS -lunwind -lunwind-$UNAME_P"
1279 fi
1280
1281 AC_TRY_LINK(
1282     [
1283 #ifdef HAVE_LIBUNWIND_H
1284 #include <libunwind.h>
1285 #endif
1286     ],
1287     [
1288         unw_context_t ctx; unw_cursor_t cur;
1289         char buf[256]; unw_word_t off; 
1290         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1291         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1292     ],
1293     [
1294         AC_MSG_RESULT(yes)
1295         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1296
1297         # If we have libunwind, test whether we also have libunwind-ptrace
1298         # which would let us unwind arbitrary processes.
1299         save_LIBS=$LIBS
1300         AC_CHECK_HEADERS(libunwind-ptrace.h)
1301         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1302             [
1303                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1304                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1305                     [Whether libunwind-ptrace.a is available.])
1306             ],
1307             [ LIBUNWIND_PTRACE="" ])
1308
1309         LIBS=$save_LIBS
1310     ],
1311     [
1312         AC_MSG_RESULT(no)
1313         LIBS=$save_LIBS
1314     ])
1315
1316 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1317 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1318     AC_CHECK_HEADERS(sys/ptrace.h)
1319     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1320     AC_TRY_LINK(
1321             [
1322 #if HAVE_SYS_TYPES_H
1323 #include <sys/types.h>
1324 #endif
1325 #if HAVE_SYS_PTRACE_H
1326 #include <sys/ptrace.h>
1327 #endif
1328             ],
1329             [
1330                 int main(int argc, const char ** argv)
1331                 {
1332                         pid_t me = (pid_t)-1;
1333                         ptrace(PTRACE_ATTACH, me, 0, 0);
1334                         ptrace(PTRACE_DETACH, me, 0, 0);
1335                         return 0;
1336                 }
1337             ],
1338             [
1339                 AC_MSG_RESULT(yes)
1340                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1341                     [Whether the Linux ptrace(2) interface is available.])
1342             ],
1343             [
1344                 AC_MSG_RESULT(no)
1345                 LIBUNWIND_PTRACE=""
1346             ])
1347 fi
1348
1349 AC_SUBST(LIBUNWIND_PTRACE)
1350
1351 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1352 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1353 AC_CHECK_FUNCS(__getcwd _getcwd)
1354 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1355 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1356 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1357 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1358 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1359 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1360 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1361 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1362 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1363 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1364 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1365 AC_CHECK_FUNCS(prctl)
1366
1367 AC_TRY_COMPILE([
1368 #ifdef HAVE_SYS_PRCTL_H
1369 #include <sys/prctl.h>
1370 #endif
1371 ],
1372 [int i; i = prtcl(0); ],
1373 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1374
1375 #
1376
1377 #
1378 case "$host_os" in
1379     *linux*)
1380        # glibc <= 2.3.2 has a broken getgrouplist
1381        AC_TRY_RUN([
1382 #include <unistd.h>
1383 #include <sys/utsname.h>
1384 main() {
1385        /* glibc up to 2.3 has a broken getgrouplist */
1386 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1387        int libc_major = __GLIBC__;
1388        int libc_minor = __GLIBC_MINOR__;
1389
1390        if (libc_major < 2)
1391               exit(1);
1392        if ((libc_major == 2) && (libc_minor <= 3))
1393               exit(1);
1394 #endif
1395        exit(0);
1396 }
1397 ], [linux_getgrouplist_ok=yes], [linux_getgrouplist_ok=no])
1398        if test x"$linux_getgrouplist_ok" = x"yes"; then
1399           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1400        fi
1401        ;;
1402     *)
1403        AC_CHECK_FUNCS(getgrouplist)
1404        ;;
1405 esac
1406
1407 #
1408 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1409 #
1410
1411 if test x$ac_cv_func_stat64 = xno ; then
1412   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1413   AC_TRY_LINK([
1414 #if defined(HAVE_UNISTD_H)
1415 #include <unistd.h>
1416 #endif
1417 #include <sys/stat.h>
1418 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
1419   AC_MSG_RESULT([$ac_cv_func_stat64])
1420   if test x$ac_cv_func_stat64 = xyes ; then
1421     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1422   fi
1423 fi
1424
1425 if test x$ac_cv_func_lstat64 = xno ; then
1426   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1427   AC_TRY_LINK([
1428 #if defined(HAVE_UNISTD_H)
1429 #include <unistd.h>
1430 #endif
1431 #include <sys/stat.h>
1432 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
1433   AC_MSG_RESULT([$ac_cv_func_lstat64])
1434   if test x$ac_cv_func_lstat64 = xyes ; then
1435     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1436   fi
1437 fi
1438
1439 if test x$ac_cv_func_fstat64 = xno ; then
1440   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1441   AC_TRY_LINK([
1442 #if defined(HAVE_UNISTD_H)
1443 #include <unistd.h>
1444 #endif
1445 #include <sys/stat.h>
1446 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
1447   AC_MSG_RESULT([$ac_cv_func_fstat64])
1448   if test x$ac_cv_func_fstat64 = xyes ; then
1449     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1450   fi
1451 fi
1452
1453 #################################################
1454 # Check whether struct stat has timestamps with sub-second resolution.
1455 # At least IRIX and Solaris have these.
1456 #
1457 # We check that 
1458 #       all of st_mtim, st_atim and st_ctim exist
1459 #       all of the members are in fact of type struct timespec
1460 #
1461 # There is some conflicting standards weirdness about whether we should use
1462 # "struct timespec" or "timespec_t". Linux doesn't have timespec_t, so we
1463 # prefer struct timespec.
1464
1465 AC_CACHE_CHECK([whether struct stat has sub-second timestamps], samba_stat_hires,
1466     [
1467         AC_TRY_COMPILE(
1468             [
1469 #if TIME_WITH_SYS_TIME
1470 # include <sys/time.h>
1471 # include <time.h>
1472 #else
1473 # if HAVE_SYS_TIME_H
1474 #  include <sys/time.h>
1475 # else
1476 #  include <time.h>
1477 # endif
1478 #endif
1479 #ifdef HAVE_SYS_STAT_H
1480 #include <sys/stat.h>
1481 #endif
1482             ],
1483             [
1484                 struct timespec t;
1485                 struct stat s = {0};
1486                 t.tv_sec = s.st_mtim.tv_sec;
1487                 t.tv_nsec = s.st_mtim.tv_nsec;
1488                 t.tv_sec = s.st_ctim.tv_sec;
1489                 t.tv_nsec = s.st_ctim.tv_nsec;
1490                 t.tv_sec = s.st_atim.tv_sec;
1491                 t.tv_nsec = s.st_atim.tv_nsec;
1492             ],
1493             samba_stat_hires=yes, samba_stat_hires=no)
1494     ])
1495
1496 if test x"$samba_stat_hires" = x"yes" ; then
1497     AC_DEFINE(HAVE_STAT_ST_MTIM, 1, [whether struct stat contains st_mtim])
1498     AC_DEFINE(HAVE_STAT_ST_ATIM, 1, [whether struct stat contains st_atim])
1499     AC_DEFINE(HAVE_STAT_ST_CTIM, 1, [whether struct stat contains st_ctim])
1500     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1501             [whether struct stat has sub-second timestamps])
1502 fi
1503
1504 AC_CACHE_CHECK([whether struct stat has sub-second timestamps without struct timespec], samba_stat_hires_notimespec,
1505     [
1506         AC_TRY_COMPILE(
1507             [
1508 #if TIME_WITH_SYS_TIME
1509 # include <sys/time.h>
1510 # include <time.h>
1511 #else
1512 # if HAVE_SYS_TIME_H
1513 #  include <sys/time.h>
1514 # else
1515 #  include <time.h>
1516 # endif
1517 #endif
1518 #ifdef HAVE_SYS_STAT_H
1519 #include <sys/stat.h>
1520 #endif
1521             ],
1522             [
1523                 struct timespec t;
1524                 struct stat s = {0};
1525                 t.tv_sec = s.st_mtime;
1526                 t.tv_nsec = s.st_mtimensec;
1527                 t.tv_sec = s.st_ctime;
1528                 t.tv_nsec = s.st_ctimensec;
1529                 t.tv_sec = s.st_atime;
1530                 t.tv_nsec = s.st_atimensec;
1531             ],
1532             samba_stat_hires=yes, samba_stat_hires=no)
1533     ])
1534
1535 if test x"$samba_stat_hires_notimespec" = x"yes" ; then
1536     AC_DEFINE(HAVE_STAT_ST_MTIMENSEC, 1, [whether struct stat contains st_mtimensec])
1537     AC_DEFINE(HAVE_STAT_ST_ATIMENSEC, 1, [whether struct stat contains st_atimensec])
1538     AC_DEFINE(HAVE_STAT_ST_CTIMENSEC, 1, [whether struct stat contains st_ctimensec])
1539     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1540             [whether struct stat has sub-second timestamps without struct timespec])
1541 fi
1542
1543 #####################################
1544 # needed for SRV lookups
1545 AC_CHECK_LIB(resolv, dn_expand)
1546 AC_CHECK_LIB(resolv, _dn_expand)
1547 AC_CHECK_LIB(resolv, __dn_expand)
1548
1549 #
1550 # Check for the functions putprpwnam, set_auth_parameters,
1551 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1552 # Needed for OSF1 and HPUX.
1553 #
1554
1555 AC_LIBTESTFUNC(security, putprpwnam)
1556 AC_LIBTESTFUNC(sec, putprpwnam)
1557
1558 AC_LIBTESTFUNC(security, set_auth_parameters)
1559 AC_LIBTESTFUNC(sec, set_auth_parameters)
1560
1561 # UnixWare 7.x has its getspnam in -lgen
1562 AC_LIBTESTFUNC(gen, getspnam)
1563
1564 AC_LIBTESTFUNC(security, getspnam)
1565 AC_LIBTESTFUNC(sec, getspnam)
1566
1567 AC_LIBTESTFUNC(security, bigcrypt)
1568 AC_LIBTESTFUNC(sec, bigcrypt)
1569
1570 AC_LIBTESTFUNC(security, getprpwnam)
1571 AC_LIBTESTFUNC(sec, getprpwnam)
1572
1573 AC_CHECK_FUNCS(strsignal)
1574
1575 ############################################
1576 # Check if we have libattr
1577 case "$host_os" in
1578   *osf*)
1579         AC_SEARCH_LIBS(getproplist, [proplist])
1580         AC_CHECK_FUNCS(getproplist fgetproplist setproplist fsetproplist)
1581         AC_CHECK_FUNCS(delproplist fdelproplist add_proplist_entry get_proplist_entry)
1582         AC_CHECK_FUNCS(sizeof_proplist_entry)
1583   ;;
1584   *)
1585         AC_SEARCH_LIBS(getxattr, [attr])
1586         AC_CHECK_FUNCS(getxattr lgetxattr fgetxattr listxattr llistxattr)
1587         AC_CHECK_FUNCS(getea fgetea lgetea listea flistea llistea)
1588         AC_CHECK_FUNCS(removeea fremoveea lremoveea setea fsetea lsetea)
1589         AC_CHECK_FUNCS(flistxattr removexattr lremovexattr fremovexattr)
1590         AC_CHECK_FUNCS(setxattr lsetxattr fsetxattr)
1591         AC_CHECK_FUNCS(attr_get attr_list attr_set attr_remove)
1592         AC_CHECK_FUNCS(attr_getf attr_listf attr_setf attr_removef)
1593   ;;
1594 esac
1595
1596 ########################################################
1597 # Do xattr functions take additional options like on Darwin?
1598 if test x"$ac_cv_func_getxattr" = x"yes" ; then
1599         AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt, [
1600                 old_LIBS=$LIBS
1601                 LIBS="$LIBS $ACL_LIBS"
1602                 AC_TRY_COMPILE([
1603                         #include <sys/types.h>
1604                         #if HAVE_ATTR_XATTR_H
1605                         #include <attr/xattr.h>
1606                         #elif HAVE_SYS_XATTR_H
1607                         #include <sys/xattr.h>
1608                         #endif
1609                 ],[
1610                         getxattr(0, 0, 0, 0, 0, 0);
1611                 ],
1612                 [smb_attr_cv_xattr_add_opt=yes],
1613                 [smb_attr_cv_xattr_add_opt=no;LIBS=$old_LIBS])
1614         ])
1615         if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then
1616                 AC_DEFINE(XATTR_ADD_OPT, 1, [xattr functions have additional options])
1617         fi
1618 fi
1619
1620 # Check if we have extattr
1621 case "$host_os" in
1622   *freebsd4* | *dragonfly* )
1623     AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1624     ;;
1625   *)
1626     AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_file extattr_delete_link)
1627     AC_CHECK_FUNCS(extattr_get_fd extattr_get_file extattr_get_link)
1628     AC_CHECK_FUNCS(extattr_list_fd extattr_list_file extattr_list_link)
1629     AC_CHECK_FUNCS(extattr_set_fd extattr_set_file extattr_set_link)
1630     ;;
1631 esac
1632
1633 # Set defaults
1634 PIE_CFLAGS=""
1635 PIE_LDFLAGS=""
1636 AC_ARG_ENABLE(pie, [  --enable-pie            Turn on pie support if available (default=yes)])
1637
1638 if test "x$enable_pie" != xno
1639 then
1640         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1641         [
1642                 cat > conftest.c <<EOF
1643 int foo;
1644 main () { return 0;}
1645 EOF
1646                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1647                 then
1648                         samba_cv_fpie=yes
1649                 else
1650                         samba_cv_fpie=no
1651                 fi
1652                 rm -f conftest*
1653         ])
1654         if test x"${samba_cv_fpie}" = x"yes"
1655         then
1656                 PIE_CFLAGS="-fPIE"
1657                 PIE_LDFLAGS="-pie"
1658         fi
1659 fi
1660
1661 # Assume non-shared by default and override below
1662 BLDSHARED="false"
1663
1664 # these are the defaults, good for lots of systems
1665 HOST_OS="$host_os"
1666 LDSHFLAGS="-shared"
1667 SONAMEFLAG="#"
1668 SHLD="\${CC} \${CFLAGS}"
1669 PICFLAG="${PIE_CFLAGS}"
1670 SHLIBEXT="so"
1671
1672 # this bit needs to be modified for each OS that supports share libs
1673 # You need to specify how to create a shared library and
1674 # how to compile C code to produce PIC object files
1675
1676 AC_MSG_CHECKING([ability to build shared libraries])
1677
1678 # and these are for particular systems
1679 case "$host_os" in
1680                 *linux*)   AC_DEFINE(LINUX,1,[Whether the host os is linux])
1681                         BLDSHARED="true"
1682                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1683                                 LDSHFLAGS="-shared -Wl,-Bsymbolic -Wl,--allow-shlib-undefined" 
1684                         else
1685                                 LDSHFLAGS="-shared -Wl,-Bsymbolic" 
1686                         fi
1687                         DYNEXP="-Wl,--export-dynamic"
1688                         PICFLAG="-fPIC"
1689                         SONAMEFLAG="-Wl,-soname="
1690                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1691                         ;;
1692                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1693                         BLDSHARED="true"
1694                         LDSHFLAGS="-G"
1695                         SONAMEFLAG="-h "
1696                         if test "${GCC}" = "yes"; then
1697                                 PICFLAG="-fPIC"
1698                                 SONAMEFLAG="-Wl,-soname="
1699                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1700                                         DYNEXP="-Wl,-E"
1701                                 fi
1702                         else
1703                                 PICFLAG="-KPIC"
1704                                 ## ${CFLAGS} added for building 64-bit shared 
1705                                 ## libs using Sun's Compiler
1706                                 LDSHFLAGS="-G \${CFLAGS}"
1707                         fi
1708                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1709                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1710                         ;;
1711                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1712                         BLDSHARED="true"
1713                         LDSHFLAGS="-G"
1714                         SONAMEFLAG="-Wl,-h,"
1715                         PICFLAG="-KPIC"   # Is this correct for SunOS
1716                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1717                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1718                         ;;
1719                 *netbsd* | *freebsd* | *dragonfly* )  
1720                         BLDSHARED="true"
1721                         LDSHFLAGS="-shared"
1722                         DYNEXP="-Wl,--export-dynamic"
1723                         SONAMEFLAG="-Wl,-soname,"
1724                         PICFLAG="-fPIC -DPIC"
1725                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1726                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1727                         ;;
1728                 *openbsd*)  BLDSHARED="true"
1729                         LDSHFLAGS="-shared"
1730                         DYNEXP="-Wl,-Bdynamic"
1731                         SONAMEFLAG="-Wl,-soname,"
1732                         PICFLAG="-fPIC"
1733                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1734                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1735                         ;;
1736                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1737                         case "$host_os" in
1738                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1739                         ;;
1740                         esac
1741                         BLDSHARED="true"
1742                         LDSHFLAGS="-set_version sgi1.0 -shared"
1743                         SONAMEFLAG="-soname "
1744                         SHLD="\${LD}"
1745                         if test "${GCC}" = "yes"; then
1746                                 PICFLAG="-fPIC"
1747                         else 
1748                                 PICFLAG="-KPIC"
1749                         fi
1750                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1751                         ;;
1752                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1753                         BLDSHARED="true"
1754                         LDSHFLAGS="-Wl,-G,-bexpall,-bbigtoc"
1755                         DYNEXP="-Wl,-brtl,-bexpall,-bbigtoc"
1756                         PICFLAG="-O2"
1757                         # as AIX code is always position independent...
1758                         # .po will just create compile warnings, use po.o:
1759                         if test "${GCC}" != "yes"; then
1760                                 ## for funky AIX compiler using strncpy()
1761                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
1762                         fi
1763
1764                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1765                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1766                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1767                         ;;
1768                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1769                         # Use special PIC flags for the native HP-UX compiler.
1770                                 BLDSHARED="true"
1771                                 SHLD="cc"
1772                                 LDSHFLAGS="-b -Wl,-B,symbolic,-b,-z"
1773                                 SONAMEFLAG="-Wl,+h "
1774                                 PICFLAG="+z"
1775                         if test "${GCC}" = "yes"; then
1776                                 PICFLAG="-fPIC"
1777                         else 
1778                                 PICFLAG="+z"
1779                         fi
1780                         if test "$host_cpu" = "ia64"; then
1781                                 SHLIBEXT="so"
1782                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
1783                         else
1784                                 SHLIBEXT="sl"
1785                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1786                         fi
1787                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1788                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1789                         ;;
1790                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
1791                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1792                         ;;
1793                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1794                         BLDSHARED="true"
1795                         LDSHFLAGS="-shared"
1796                         SONAMEFLAG="-Wl,-soname,"
1797                         PICFLAG="-fPIC"
1798                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1799                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1800                         ;;
1801                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1802                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1803                         ;;
1804                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1805                         BLDSHARED="true"
1806                         LDSHFLAGS="-shared"
1807                         SONAMEFLAG="-Wl,-soname,"
1808                         PICFLAG="-KPIC"
1809                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1810                         ;;
1811                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1812                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1813                         ;;
1814                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1815                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1816                         ;;
1817                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1818                         case "$host" in
1819                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1820                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1821                                         fi
1822                                         LDSHFLAGS="-G"
1823                                         DYNEXP="-Bexport"
1824                                 ;;
1825                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1826                         esac
1827                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1828                         ;;
1829
1830                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1831                         if [ test "$GCC" != yes ]; then
1832                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1833                         fi
1834                         LDSHFLAGS="-G"
1835                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1836                         ;;
1837                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1838                         BLDSHARED="false"
1839                         LDSHFLAGS=""
1840                         ;;
1841
1842                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1843                         BLDSHARED="true"
1844                         LDSHFLAGS="-bundle -flat_namespace -undefined suppress"
1845                         SHLIBEXT="dylib"
1846                         # Since gcc doesn't fail on unrecognised options, the
1847                         # PIE test incorrectly succeeds. Darwin gcc does not
1848                         # actually support the PIE stuff.
1849                         PIE_LDFLAGS=
1850                         PIE_CFLAGS=
1851                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1852                         ;;
1853
1854                 *)
1855                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1856                         ;;
1857 esac
1858
1859 if test "$enable_shared" != "yes"; then
1860         BLDSHARED=false
1861 fi
1862
1863 AC_MSG_RESULT($BLDSHARED)
1864
1865 AC_MSG_CHECKING([LDFLAGS])
1866 AC_MSG_RESULT([$LDFLAGS])
1867 AC_MSG_CHECKING([DYNEXP])
1868 AC_MSG_RESULT([$DYNEXP])
1869
1870 #######################################################
1871 # test whether building a shared library actually works
1872 if test $BLDSHARED = true; then
1873
1874 AC_MSG_CHECKING([SHLD])
1875 AC_MSG_RESULT([$SHLD])
1876 AC_MSG_CHECKING([LDSHFLAGS])
1877 AC_MSG_RESULT([$LDSHFLAGS])
1878
1879 AC_MSG_CHECKING([SHLIBEXT])
1880 AC_MSG_RESULT([$SHLIBEXT])
1881 AC_MSG_CHECKING([SONAMEFLAG])
1882 AC_MSG_RESULT([$SONAMEFLAG])
1883
1884 AC_MSG_CHECKING([PICFLAG])
1885 AC_MSG_RESULT([$PICFLAG])
1886
1887 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1888 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1889
1890 AC_CACHE_CHECK([whether building shared libraries actually works], 
1891                [ac_cv_shlib_works],[
1892    # try building a trivial shared library
1893    ac_cv_shlib_works=no
1894    # The $SHLD and $LDSHFLAGS variables may contain references to other
1895    # variables so they need to be eval'ed.
1896    $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o \
1897         shlib.o ${srcdir-.}/tests/shlib.c && \
1898    `eval echo $SHLD` `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" \
1899         shlib.o && ac_cv_shlib_works=yes
1900    rm -f "shlib.$SHLIBEXT" shlib.o
1901
1902 ])
1903 if test $ac_cv_shlib_works = no; then
1904    BLDSHARED=false
1905 fi
1906 fi
1907
1908 if test x"$BLDSHARED" != x"true"; then
1909         LDSHFLAGS="shared-libraries-disabled"
1910         SONAMEFLAG="shared-libraries-disabled"
1911         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1912         SHLD="shared-libraries-disabled"
1913         PICFLAG="${PIE_CFLAGS}"
1914         SHLIBEXT="shared_libraries_disabled"
1915 fi
1916
1917 AC_MSG_CHECKING([used PICFLAG])
1918 AC_MSG_RESULT([$PICFLAG])
1919
1920 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
1921
1922 ################
1923
1924 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
1925 AC_TRY_RUN([#include <stdio.h>
1926 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
1927 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
1928 if test x"$samba_cv_have_longlong" = x"yes"; then
1929     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
1930     AC_CHECK_TYPE(intptr_t, unsigned long long)
1931 else
1932     AC_CHECK_TYPE(intptr_t, unsigned long)
1933 fi
1934
1935 #
1936 # Check if the compiler supports the LL prefix on long long integers.
1937 # AIX needs this.
1938
1939 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
1940     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
1941         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
1942 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
1943    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
1944 fi
1945
1946   
1947 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
1948 AC_TRY_RUN([#include <stdio.h>
1949 #include <sys/stat.h>
1950 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
1951 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
1952 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
1953     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
1954 fi
1955
1956 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
1957 AC_TRY_RUN([
1958 #if defined(HAVE_UNISTD_H)
1959 #include <unistd.h>
1960 #endif
1961 #include <stdio.h>
1962 #include <sys/stat.h>
1963 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1964 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
1965 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
1966     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
1967 fi
1968
1969 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
1970 AC_TRY_RUN([
1971 #if defined(HAVE_UNISTD_H)
1972 #include <unistd.h>
1973 #endif
1974 #include <stdio.h>
1975 #include <sys/stat.h>
1976 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
1977 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
1978 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
1979     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
1980 fi
1981
1982 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
1983 AC_TRY_RUN([
1984 #if defined(HAVE_UNISTD_H)
1985 #include <unistd.h>
1986 #endif
1987 #include <stdio.h>
1988 #include <sys/stat.h>
1989 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1990 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
1991 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
1992     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
1993 fi
1994
1995 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
1996 AC_TRY_RUN([
1997 #if defined(HAVE_UNISTD_H)
1998 #include <unistd.h>
1999 #endif
2000 #include <stdio.h>
2001 #include <sys/stat.h>
2002 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
2003 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
2004 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
2005     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
2006 fi
2007
2008 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
2009 AC_TRY_RUN([
2010 #if defined(HAVE_UNISTD_H)
2011 #include <unistd.h>
2012 #endif
2013 #include <stdio.h>
2014 #include <sys/stat.h>
2015 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2016 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
2017 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
2018     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
2019 fi
2020
2021 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
2022 AC_TRY_COMPILE([
2023 #if defined(HAVE_UNISTD_H)
2024 #include <unistd.h>
2025 #endif
2026 #include <sys/types.h>
2027 #include <dirent.h>],
2028 [DIR64 de;],
2029 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
2030 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2031     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
2032 fi
2033
2034 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
2035 AC_TRY_COMPILE([
2036 #if defined(HAVE_UNISTD_H)
2037 #include <unistd.h>
2038 #endif
2039 #include <sys/types.h>
2040 #include <dirent.h>],
2041 [struct dirent64 de;],
2042 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
2043 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2044     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
2045 fi
2046
2047 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2048 AC_TRY_RUN([
2049 #if defined(HAVE_UNISTD_H)
2050 #include <unistd.h>
2051 #endif
2052 #include <sys/types.h>
2053 main() { dev_t dev; int i = major(dev); return 0; }],
2054 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2055 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2056     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2057 fi
2058
2059 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2060 AC_TRY_RUN([
2061 #if defined(HAVE_UNISTD_H)
2062 #include <unistd.h>
2063 #endif
2064 #include <sys/types.h>
2065 main() { dev_t dev; int i = minor(dev); return 0; }],
2066 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2067 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2068     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2069 fi
2070
2071 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2072 AC_TRY_RUN([
2073 #if defined(HAVE_UNISTD_H)
2074 #include <unistd.h>
2075 #endif
2076 #include <sys/types.h>
2077 main() { dev_t dev = makedev(1,2); return 0; }],
2078 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2079 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2080     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2081 fi
2082
2083 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2084 AC_TRY_RUN([#include <stdio.h>
2085 main() { char c; c=250; exit((c > 0)?0:1); }],
2086 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2087 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2088     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2089 fi
2090
2091 AC_CACHE_CHECK([for sin_len in sock],samba_cv_HAVE_SOCK_SIN_LEN,[
2092 AC_TRY_COMPILE([#include <sys/types.h>
2093 #include <sys/socket.h>
2094 #include <netinet/in.h>],
2095 [struct sockaddr_in sock; sock.sin_len = sizeof(sock);],
2096 samba_cv_HAVE_SOCK_SIN_LEN=yes,samba_cv_HAVE_SOCK_SIN_LEN=no)])
2097 if test x"$samba_cv_HAVE_SOCK_SIN_LEN" = x"yes"; then
2098     AC_DEFINE(HAVE_SOCK_SIN_LEN,1,[Whether the sockaddr_in struct has a sin_len property])
2099 fi
2100
2101 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2102 AC_TRY_COMPILE([#include <sys/types.h>
2103 #include <dirent.h>
2104 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2105 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2106 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2107     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2108 fi
2109
2110 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2111 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2112 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2113 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2114     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2115 fi
2116
2117 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
2118 AC_TRY_RUN([
2119 #include <sys/time.h>
2120 #include <unistd.h>
2121 main() { struct timeval tv; exit(gettimeofday(&tv, NULL));}],
2122            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,samba_cv_HAVE_GETTIMEOFDAY_TZ=no,samba_cv_HAVE_GETTIMEOFDAY_TZ=cross)])
2123 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
2124     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday() is available])
2125 fi
2126
2127 if test x"$samba_cv_WITH_PROFILE" = x"yes"; then
2128
2129     # On some systems (eg. Linux) librt can pull in libpthread. We
2130     # don't want this to happen because libpthreads changes signal delivery
2131     # semantics in ways we are not prepared for. This breaks Linux oplocks
2132     # which rely on signals.
2133
2134     AC_LIBTESTFUNC(rt, clock_gettime,
2135             [
2136                 AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
2137                     [Whether clock_gettime is available])
2138                 SMB_CHECK_CLOCK_ID(CLOCK_MONOTONIC)
2139                 SMB_CHECK_CLOCK_ID(CLOCK_PROCESS_CPUTIME_ID)
2140                 SMB_CHECK_CLOCK_ID(CLOCK_REALTIME)
2141             ])
2142
2143 fi
2144
2145 AC_CACHE_CHECK([for va_copy],samba_cv_HAVE_VA_COPY,[
2146 AC_TRY_LINK([#include <stdarg.h>
2147 va_list ap1,ap2;], [va_copy(ap1,ap2);],
2148 samba_cv_HAVE_VA_COPY=yes,
2149 samba_cv_HAVE_VA_COPY=no)])
2150 if test x"$samba_cv_HAVE_VA_COPY" = x"yes"; then
2151     AC_DEFINE(HAVE_VA_COPY,1,[Whether va_copy() is available])
2152 else
2153     AC_CACHE_CHECK([for __va_copy],samba_cv_HAVE___VA_COPY,[
2154     AC_TRY_LINK([#include <stdarg.h>
2155     va_list ap1,ap2;], [__va_copy(ap1,ap2);],
2156     samba_cv_HAVE___VA_COPY=yes,
2157     samba_cv_HAVE___VA_COPY=no)])
2158     if test x"$samba_cv_HAVE___VA_COPY" = x"yes"; then
2159         AC_DEFINE(HAVE___VA_COPY,1,[Whether __va_copy() is available])
2160     fi
2161 fi
2162
2163 AC_CACHE_CHECK([for C99 vsnprintf],samba_cv_HAVE_C99_VSNPRINTF,[
2164 AC_TRY_RUN([
2165 #include <sys/types.h>
2166 #include <stdarg.h>
2167 void foo(const char *format, ...) { 
2168        va_list ap;
2169        int len;
2170        char buf[5];
2171
2172        va_start(ap, format);
2173        len = vsnprintf(buf, 0, format, ap);
2174        va_end(ap);
2175        if (len != 5) exit(1);
2176
2177        va_start(ap, format);
2178        len = vsnprintf(0, 0, format, ap);
2179        va_end(ap);
2180        if (len != 5) exit(1);
2181
2182        if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
2183
2184        exit(0);
2185 }
2186 main() { foo("hello"); }
2187 ],
2188 samba_cv_HAVE_C99_VSNPRINTF=yes,samba_cv_HAVE_C99_VSNPRINTF=no,samba_cv_HAVE_C99_VSNPRINTF=cross)])
2189 if test x"$samba_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
2190     AC_DEFINE(HAVE_C99_VSNPRINTF,1,[Whether there is a C99 compliant vsnprintf])
2191 fi
2192
2193 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2194 AC_TRY_RUN([#include <sys/types.h>
2195 #include <dirent.h>
2196 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2197 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2198 di->d_name[0] == 0) exit(0); exit(1);} ],
2199 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2200 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2201     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2202 fi
2203
2204 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2205 AC_TRY_COMPILE([#include <sys/types.h>
2206 #include <utime.h>],
2207 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2208 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2209 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2210     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2211 fi
2212
2213 ##############
2214 # Check utmp details, but only if our OS offers utmp.h
2215 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2216 dnl  utmp and utmpx come in many flavours
2217 dnl  We need to check for many of them
2218 dnl  But we don't need to do each and every one, because our code uses
2219 dnl  mostly just the utmp (not utmpx) fields.
2220
2221 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
2222
2223 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2224 AC_TRY_COMPILE([#include <sys/types.h>
2225 #include <utmp.h>],
2226 [struct utmp ut;  ut.ut_name[0] = 'a';],
2227 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2228 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2229     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2230 fi 
2231
2232 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2233 AC_TRY_COMPILE([#include <sys/types.h>
2234 #include <utmp.h>],
2235 [struct utmp ut;  ut.ut_user[0] = 'a';],
2236 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2237 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2238     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2239 fi 
2240
2241 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2242 AC_TRY_COMPILE([#include <sys/types.h>
2243 #include <utmp.h>],
2244 [struct utmp ut;  ut.ut_id[0] = 'a';],
2245 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2246 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2247     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2248 fi 
2249
2250 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2251 AC_TRY_COMPILE([#include <sys/types.h>
2252 #include <utmp.h>],
2253 [struct utmp ut;  ut.ut_host[0] = 'a';],
2254 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2255 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2256     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2257 fi 
2258
2259 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2260 AC_TRY_COMPILE([#include <sys/types.h>
2261 #include <utmp.h>],
2262 [struct utmp ut;  time_t t; ut.ut_time = t;],
2263 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2264 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2265     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2266 fi 
2267
2268 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2269 AC_TRY_COMPILE([#include <sys/types.h>
2270 #include <utmp.h>],
2271 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2272 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2273 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2274     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2275 fi 
2276
2277 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2278 AC_TRY_COMPILE([#include <sys/types.h>
2279 #include <utmp.h>],
2280 [struct utmp ut;  ut.ut_type = 0;],
2281 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2282 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2283     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2284 fi 
2285
2286 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2287 AC_TRY_COMPILE([#include <sys/types.h>
2288 #include <utmp.h>],
2289 [struct utmp ut;  ut.ut_pid = 0;],
2290 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2291 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2292     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2293 fi 
2294
2295 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2296 AC_TRY_COMPILE([#include <sys/types.h>
2297 #include <utmp.h>],
2298 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2299 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2300 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2301     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2302 fi 
2303
2304 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2305 AC_TRY_COMPILE([#include <sys/types.h>
2306 #include <utmp.h>],
2307 [struct utmp ut;  ut.ut_addr = 0;],
2308 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2309 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2310     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2311 fi 
2312
2313 if test x$ac_cv_func_pututline = xyes ; then
2314   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2315   AC_TRY_COMPILE([#include <sys/types.h>
2316 #include <utmp.h>],
2317   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2318   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2319   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2320       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2321   fi
2322 fi
2323
2324 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2325 AC_TRY_COMPILE([#include <sys/types.h>
2326 #include <utmpx.h>],
2327 [struct utmpx ux;  ux.ut_syslen = 0;],
2328 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2329 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2330     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2331 fi 
2332
2333 fi
2334 # end utmp details
2335
2336
2337 ICONV_LOCATION=standard
2338 LOOK_DIRS="/usr /usr/local /sw /opt"
2339 AC_ARG_WITH(libiconv,
2340 [  --with-libiconv=BASEDIR Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto) ],
2341 [
2342   if test "$withval" = "no" ; then
2343     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2344   else
2345      if test "$withval" != "yes" ; then
2346         ICONV_PATH_SPEC=yes
2347         LOOK_DIRS="$withval"
2348      fi
2349   fi
2350 ])
2351
2352 for i in $LOOK_DIRS ; do
2353     save_LIBS=$LIBS
2354     save_LDFLAGS=$LDFLAGS
2355     save_CPPFLAGS=$CPPFLAGS
2356     ICONV_FOUND="no"
2357     unset libext
2358     CPPFLAGS="$CPPFLAGS -I$i/include"
2359 dnl This is here to handle -withval stuff for --with-libiconv
2360 dnl Perhaps we should always add a -L
2361
2362 dnl Check lib and lib32 library variants to cater for IRIX ABI-specific
2363 dnl installation paths. This gets a little tricky since we might have iconv
2364 dnl in both libiconv and in libc. In this case the jm_ICONV test will always
2365 dnl succeed when the header is found. To counter this, make sure the 
2366 dnl library directory is there and check the ABI directory first (which
2367 dnl should be harmless on other systems.
2368 dnl For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2369     for l in "lib32" "lib" "lib/hpux32"; do
2370         if test -d "$i/$l" ; then
2371                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2372         LIBS=
2373         export LDFLAGS LIBS CPPFLAGS
2374 dnl Try to find iconv(3)
2375                 jm_ICONV($i/$l)
2376                 if test x"$ICONV_FOUND" = "xyes" ; then
2377             libext="$l"
2378             break;
2379         fi
2380         fi
2381     done
2382
2383     if test x"$ICONV_FOUND" = "xyes" ; then
2384         LDFLAGS=$save_LDFLAGS
2385         LIB_ADD_DIR(LDFLAGS, "$i/$libext")
2386         CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
2387         LIBS="$save_LIBS"
2388         ICONV_LOCATION=$i
2389         export LDFLAGS LIBS CPPFLAGS
2390 dnl Now, check for a working iconv ... we want to do it here because
2391 dnl there might be a working iconv further down the list of LOOK_DIRS
2392
2393         ############
2394         # check for iconv in libc
2395         ic_save_LIBS="$LIBS"
2396         if test x"$ICONV_PATH_SPEC" = "xyes" ; then
2397            LIBS="$LIBS -L$ICONV_LOCATION/$libext"
2398         fi
2399         if test x"$jm_cv_lib_iconv" != x; then
2400            LIBS="$LIBS -l$jm_cv_lib_iconv"
2401         fi
2402 dnl        AC_CACHE_CHECK([for working iconv],samba_cv_HAVE_NATIVE_ICONV,[
2403         default_dos_charset=no
2404         default_display_charset=no
2405         default_unix_charset=no
2406
2407         # check for default dos charset name
2408         for j in CP850 IBM850 ; do
2409             rjs_CHARSET($j)
2410             if test x"$ICONV_CHARSET" = x"$j"; then
2411                 default_dos_charset="\"$j\""
2412                 break
2413             fi
2414         done
2415         # check for default display charset name
2416         for j in ASCII 646 ; do
2417             rjs_CHARSET($j)
2418             if test x"$ICONV_CHARSET" = x"$j"; then
2419                 default_display_charset="\"$j\""
2420                 break
2421             fi
2422         done
2423         # check for default unix charset name
2424         for j in UTF-8 UTF8 ; do
2425             rjs_CHARSET($j)
2426             if test x"$ICONV_CHARSET" = x"$j"; then
2427                 default_unix_charset="\"$j\""
2428                 break
2429             fi
2430         done
2431         
2432         if test "$default_dos_charset" != "no" -a \
2433                 "$default_dos_charset" != "cross" -a \
2434                 "$default_display_charset" != "no" -a \ 
2435                 "$default_display_charset" != "cross" -a \
2436                 "$default_unix_charset" != "no" -a \
2437                 "$default_unix_charset" != "cross"
2438         then
2439                 samba_cv_HAVE_NATIVE_ICONV=yes
2440         else if test "$default_dos_charset" = "cross" -o \
2441                      "$default_display_charset" = "cross" -o \
2442                      "$default_unix_charset" = "cross"
2443         then
2444                 samba_cv_HAVE_NATIVE_ICONV=cross
2445         else
2446                 samba_cv_HAVE_NATIVE_ICONV=no
2447         fi
2448         fi
2449 dnl ])
2450
2451         LIBS="$ic_save_LIBS"
2452         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes"; then
2453            CPPFLAGS=$save_CPPFLAGS
2454            LDFLAGS=$save_LDFLAGS
2455            LIBS=$save_LIBS
2456            if test x"$jm_cv_lib_iconv" != x; then
2457               LIBS="$LIBS -l$jm_cv_lib_iconv"
2458            fi
2459            dnl Add the flags we need to CPPFLAGS and LDFLAGS
2460            CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
2461            LIB_ADD_DIR(LDFLAGS, "$i/$libext")
2462            export CPPFLAGS
2463            AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2464            AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2465            AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2466            AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2467            break
2468         fi
2469 dnl We didn't find a working iconv, so keep going
2470     fi
2471 dnl We only need to clean these up here for the next pass through the loop
2472     CPPFLAGS=$save_CPPFLAGS
2473     LDFLAGS=$save_LDFLAGS
2474     LIBS=$save_LIBS
2475     export LDFLAGS LIBS CPPFLAGS
2476 done
2477 unset libext
2478
2479
2480 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2481     AC_MSG_WARN([Sufficient support for iconv function was not found. 
2482     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2483    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2484    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2485    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2486 fi
2487
2488
2489 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2490 AC_TRY_RUN([
2491 #include <sys/types.h>
2492 #include <fcntl.h>
2493 #ifndef F_GETLEASE
2494 #define F_GETLEASE      1025
2495 #endif
2496 main() {
2497        int fd = open("/dev/null", O_RDONLY);
2498        return fcntl(fd, F_GETLEASE, 0) == -1;
2499 }
2500 ],
2501 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2502 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2503     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2504 fi
2505
2506 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2507 AC_TRY_RUN([
2508 #include <sys/types.h>
2509 #include <fcntl.h>
2510 #include <signal.h>
2511 #ifndef F_NOTIFY
2512 #define F_NOTIFY 1026
2513 #endif
2514 main() {
2515         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2516 }
2517 ],
2518 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2519 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2520     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2521 fi
2522
2523 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2524 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h)
2525 AC_CHECK_FUNC(inotify_init)
2526 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2527 ],
2528 samba_cv_HAVE_INOTIFY=yes,
2529 samba_cv_HAVE_INOTIFY=no,
2530 samba_cv_HAVE_INOTIFY=cross)
2531
2532 if test x"$ac_cv_func_inotify_init" = x"yes" -a x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2533     AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
2534 fi
2535
2536 #################################################
2537 # Check if FAM notifications are available. For FAM info, see
2538 #       http://oss.sgi.com/projects/fam/
2539 #       http://savannah.nongnu.org/projects/fam/
2540 AC_ARG_ENABLE(fam,
2541 [  --enable-fam            Turn on FAM support (default=auto)])
2542
2543 if test x$enable_fam != xno; then
2544     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2545     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2546         # On IRIX, libfam requires libC, but other FAM implementations
2547         # might not need it.
2548         AC_CHECK_LIB(fam, FAMOpen2,
2549             [samba_cv_HAVE_LIBFAM=yes; samba_fam_libs="-lfam"],
2550             [samba_cv_HAVE_LIBFAM=no])
2551
2552         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2553             samba_fam_xtra=-lC
2554             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2555                 [samba_cv_HAVE_LIBFAM=yes; samba_fam_libs="-lfam -lC"],
2556                 [samba_cv_HAVE_LIBFAM=no])
2557             unset samba_fam_xtra
2558         fi
2559     fi
2560
2561     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2562         default_shared_modules="$default_shared_modules vfs_notify_fam"
2563         AC_TRY_COMPILE([#include <fam.h>],
2564                     [FAMCodes code = FAMChanged;],
2565                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2566                         [Whether fam.h contains a typedef for enum FAMCodes]),
2567                     [])
2568     fi
2569
2570     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2571         AC_MSG_ERROR(FAM support requested but FAM library not available )
2572     fi
2573 fi
2574
2575 #################################################
2576 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2577
2578 SMB_CHECK_DMAPI([], AC_MSG_NOTICE(DMAPI support not present) )
2579
2580 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2581 AC_TRY_RUN([
2582 #include <sys/types.h>
2583 #include <fcntl.h>
2584 #include <signal.h>
2585 #include <sys/file.h>
2586 #ifndef LOCK_MAND
2587 #define LOCK_MAND       32
2588 #define LOCK_READ       64
2589 #endif
2590 main() {
2591         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2592 }
2593 ],
2594 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2595 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2596     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2597 fi
2598
2599
2600 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2601 AC_TRY_COMPILE([#include <sys/types.h>
2602 #include <fcntl.h>],
2603 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2604 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2605 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2606     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2607 fi
2608
2609 #################################################
2610 # Check for POSIX capability support
2611
2612 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2613     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2614     [], [])
2615
2616 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2617
2618     ac_save_LIBS=$LIBS
2619     AC_LIBTESTFUNC(cap, cap_get_proc)
2620
2621     AC_CACHE_CHECK([for POSIX capabilities],
2622             samba_cv_HAVE_POSIX_CAPABILITIES,
2623             [
2624                 AC_TRY_RUN([
2625 #include <sys/types.h>
2626 #include <sys/capability.h>
2627 main() {
2628  cap_t cap;
2629  cap_value_t vals[1];
2630  if (!(cap = cap_get_proc()))
2631    exit(1);
2632  vals[0] = CAP_CHOWN;
2633  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2634  cap_set_proc(cap);
2635  exit(0);
2636 }],
2637                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2638                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2639                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2640             ])
2641
2642 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2643     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2644             [Whether POSIX capabilities are available])
2645 else
2646     LIBS=$ac_save_LIBS
2647 fi
2648
2649 fi
2650
2651 #
2652 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2653 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2654 #
2655
2656 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2657 AC_TRY_COMPILE([#include <sys/types.h>
2658 #if defined(HAVE_RPC_RPC_H)
2659 #include <rpc/rpc.h>
2660 #endif],
2661 [int16 testvar;],
2662 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2663 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2664     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2665 fi
2666
2667 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2668 AC_TRY_COMPILE([#include <sys/types.h>
2669 #if defined(HAVE_RPC_RPC_H)
2670 #include <rpc/rpc.h>
2671 #endif],
2672 [uint16 testvar;],
2673 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2674 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2675     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2676 fi
2677
2678 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2679 AC_TRY_COMPILE([#include <sys/types.h>
2680 #if defined(HAVE_RPC_RPC_H)
2681 #include <rpc/rpc.h>
2682 #endif],
2683 [int32 testvar;],
2684 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2685 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2686     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2687 fi
2688
2689 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2690 AC_TRY_COMPILE([#include <sys/types.h>
2691 #if defined(HAVE_RPC_RPC_H)
2692 #include <rpc/rpc.h>
2693 #endif],
2694 [uint32 testvar;],
2695 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2696 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2697     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2698 fi
2699
2700 dnl
2701 dnl Some systems (SCO) have a problem including
2702 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2703 dnl as a #define in <prot.h> and as part of an enum
2704 dnl in <rpc/rpc.h>.
2705 dnl
2706
2707 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2708 AC_TRY_COMPILE([#include <sys/types.h>
2709 #ifdef HAVE_SYS_SECURITY_H
2710 #include <sys/security.h>
2711 #include <prot.h>
2712 #endif  /* HAVE_SYS_SECURITY_H */
2713 #if defined(HAVE_RPC_RPC_H)
2714 #include <rpc/rpc.h>
2715 #endif],
2716 [int testvar;],
2717 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2718 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2719     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2720 fi
2721
2722 AC_MSG_CHECKING([for test routines])
2723 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
2724            AC_MSG_RESULT(yes),
2725            AC_MSG_ERROR([cant find test code. Aborting config]),
2726            AC_MSG_WARN([cannot run when cross-compiling]))
2727
2728 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2729 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
2730            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2731 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2732     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2733 fi
2734
2735 AC_CACHE_CHECK([for AF_LOCAL socket support], samba_cv_HAVE_WORKING_AF_LOCAL, [
2736 AC_TRY_RUN([#include "${srcdir-.}/tests/unixsock.c"],
2737            samba_cv_HAVE_WORKING_AF_LOCAL=yes,
2738            samba_cv_HAVE_WORKING_AF_LOCAL=no,
2739            samba_cv_HAVE_WORKING_AF_LOCAL=cross)])
2740 if test x"$samba_cv_HAVE_WORKING_AF_LOCAL" != xno
2741 then
2742     AC_DEFINE(HAVE_WORKING_AF_LOCAL, 1, [Define if you have working AF_LOCAL sockets])
2743 fi
2744
2745 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2746 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
2747            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2748 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2749     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2750 fi
2751
2752 AC_CACHE_CHECK([for secure mkstemp],samba_cv_HAVE_SECURE_MKSTEMP,[
2753 AC_TRY_RUN([#include <stdlib.h>
2754 #include <sys/types.h>
2755 #include <sys/stat.h>
2756 #include <unistd.h>
2757 main() { 
2758   struct stat st;
2759   char tpl[20]="/tmp/test.XXXXXX"; 
2760   int fd = mkstemp(tpl); 
2761   if (fd == -1) exit(1);
2762   unlink(tpl);
2763   if (fstat(fd, &st) != 0) exit(1);
2764   if ((st.st_mode & 0777) != 0600) exit(1);
2765   exit(0);
2766 }],
2767 samba_cv_HAVE_SECURE_MKSTEMP=yes,
2768 samba_cv_HAVE_SECURE_MKSTEMP=no,
2769 samba_cv_HAVE_SECURE_MKSTEMP=cross)])
2770 if test x"$samba_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
2771     AC_DEFINE(HAVE_SECURE_MKSTEMP,1,[Whether mkstemp is secure])
2772 fi
2773
2774 AC_CACHE_CHECK([for broken readdir],samba_cv_HAVE_BROKEN_READDIR,[
2775         AC_TRY_RUN([#include "${srcdir-.}/tests/os2_delete.c"],
2776                 [samba_cv_HAVE_BROKEN_READDIR=no],
2777                         [samba_cv_HAVE_BROKEN_READDIR=yes],
2778                         [samba_cv_HAVE_BROKEN_READDIR="assuming not"])])
2779
2780 if test x"$samba_cv_HAVE_BROKEN_READDIR" = x"yes"; then
2781 AC_CACHE_CHECK([for replacing readdir],samba_cv_REPLACE_READDIR,[
2782         AC_TRY_RUN([
2783 #include "${srcdir-.}/lib/repdir.c"
2784 #include "${srcdir-.}/tests/os2_delete.c"],
2785         samba_cv_REPLACE_READDIR=yes,samba_cv_REPLACE_READDIR=no)])
2786 fi
2787
2788 if test x"$samba_cv_REPLACE_READDIR" = x"yes"; then
2789         AC_DEFINE(REPLACE_READDIR,1,[replace readdir])
2790 fi
2791
2792 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2793 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2794 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2795 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2796 AC_CHECK_FUNCS(getpagesize)
2797
2798 ##################
2799 # look for a method of finding the list of network interfaces
2800 iface=no;
2801 AC_CACHE_CHECK([for iface AIX],samba_cv_HAVE_IFACE_AIX,[
2802 SAVE_CPPFLAGS="$CPPFLAGS"
2803 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2804 AC_TRY_RUN([
2805 #define HAVE_IFACE_AIX 1
2806 #define AUTOCONF_TEST 1
2807 #undef _XOPEN_SOURCE_EXTENDED
2808 #include "${srcdir-.}/lib/interfaces.c"],
2809            samba_cv_HAVE_IFACE_AIX=yes,samba_cv_HAVE_IFACE_AIX=no,samba_cv_HAVE_IFACE_AIX=cross)])
2810 CPPFLAGS="$SAVE_CPPFLAGS"
2811 if test x"$samba_cv_HAVE_IFACE_AIX" = x"yes"; then
2812     iface=yes;AC_DEFINE(HAVE_IFACE_AIX,1,[Whether iface AIX is available])
2813 fi
2814
2815 if test $iface = no; then
2816 AC_CACHE_CHECK([for iface ifconf],samba_cv_HAVE_IFACE_IFCONF,[
2817 SAVE_CPPFLAGS="$CPPFLAGS"
2818 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2819 AC_TRY_RUN([
2820 #define HAVE_IFACE_IFCONF 1
2821 #define AUTOCONF_TEST 1
2822 #include "${srcdir-.}/lib/interfaces.c"],
2823            samba_cv_HAVE_IFACE_IFCONF=yes,samba_cv_HAVE_IFACE_IFCONF=no,samba_cv_HAVE_IFACE_IFCONF=cross)])
2824 CPPFLAGS="$SAVE_CPPFLAGS"
2825 if test x"$samba_cv_HAVE_IFACE_IFCONF" = x"yes"; then
2826     iface=yes;AC_DEFINE(HAVE_IFACE_IFCONF,1,[Whether iface ifconf is available])
2827 fi
2828 fi
2829
2830 if test $iface = no; then
2831 AC_CACHE_CHECK([for iface ifreq],samba_cv_HAVE_IFACE_IFREQ,[
2832 SAVE_CPPFLAGS="$CPPFLAGS"
2833 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2834 AC_TRY_RUN([
2835 #define HAVE_IFACE_IFREQ 1
2836 #define AUTOCONF_TEST 1
2837 #include "${srcdir-.}/lib/interfaces.c"],
2838            samba_cv_HAVE_IFACE_IFREQ=yes,samba_cv_HAVE_IFACE_IFREQ=no,samba_cv_HAVE_IFACE_IFREQ=cross)])
2839 CPPFLAGS="$SAVE_CPPFLAGS"
2840 if test x"$samba_cv_HAVE_IFACE_IFREQ" = x"yes"; then
2841     iface=yes;AC_DEFINE(HAVE_IFACE_IFREQ,1,[Whether iface ifreq is available])
2842 fi
2843 fi
2844
2845
2846 ################################################
2847 # look for a method of setting the effective uid
2848 seteuid=no;
2849 if test $seteuid = no; then
2850 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2851 AC_TRY_RUN([
2852 #define AUTOCONF_TEST 1
2853 #define USE_SETRESUID 1
2854 #include "confdefs.h"
2855 #include "${srcdir-.}/lib/util_sec.c"],
2856            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2857 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2858     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2859 fi
2860 fi
2861
2862
2863 if test $seteuid = no; then
2864 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2865 AC_TRY_RUN([
2866 #define AUTOCONF_TEST 1
2867 #define USE_SETREUID 1
2868 #include "confdefs.h"
2869 #include "${srcdir-.}/lib/util_sec.c"],
2870            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2871 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2872     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2873 fi
2874 fi
2875
2876 if test $seteuid = no; then
2877 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2878 AC_TRY_RUN([
2879 #define AUTOCONF_TEST 1
2880 #define USE_SETEUID 1
2881 #include "confdefs.h"
2882 #include "${srcdir-.}/lib/util_sec.c"],
2883            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2884 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2885     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2886 fi
2887 fi
2888
2889 if test $seteuid = no; then
2890 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2891 AC_TRY_RUN([
2892 #define AUTOCONF_TEST 1
2893 #define USE_SETUIDX 1
2894 #include "confdefs.h"
2895 #include "${srcdir-.}/lib/util_sec.c"],
2896            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2897 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2898     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2899 fi
2900 fi
2901
2902
2903 AC_CACHE_CHECK([for working mmap],samba_cv_HAVE_MMAP,[
2904 AC_TRY_RUN([#include "${srcdir-.}/tests/shared_mmap.c"],
2905            samba_cv_HAVE_MMAP=yes,samba_cv_HAVE_MMAP=no,samba_cv_HAVE_MMAP=cross)])
2906 if test x"$samba_cv_HAVE_MMAP" = x"yes"; then
2907     AC_DEFINE(HAVE_MMAP,1,[Whether mmap works])
2908 fi
2909
2910 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2911 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
2912            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2913 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2914     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2915 fi
2916
2917 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
2918 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
2919            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
2920 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
2921     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
2922
2923 else
2924
2925 dnl
2926 dnl Don't check for 64 bit fcntl locking if we know that the
2927 dnl glibc2.1 broken check has succeeded.
2928 dnl 
2929
2930   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
2931   AC_TRY_RUN([
2932 #if defined(HAVE_UNISTD_H)
2933 #include <unistd.h>
2934 #endif
2935 #include <stdio.h>
2936 #include <stdlib.h>
2937
2938 #ifdef HAVE_FCNTL_H
2939 #include <fcntl.h>
2940 #endif
2941
2942 #ifdef HAVE_SYS_FCNTL_H
2943 #include <sys/fcntl.h>
2944 #endif
2945 main() { struct flock64 fl64;
2946 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
2947 exit(0);
2948 #else
2949 exit(1);
2950 #endif
2951 }],
2952        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
2953
2954   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
2955       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
2956   fi
2957 fi
2958
2959 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
2960 AC_TRY_COMPILE([#include <sys/types.h>
2961 #include <sys/stat.h>
2962 #include <unistd.h>],
2963 [struct stat st;  st.st_blocks = 0;],
2964 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
2965 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
2966     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
2967 fi 
2968
2969 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
2970 AC_TRY_COMPILE([#include <sys/types.h>
2971 #include <sys/stat.h>
2972 #include <unistd.h>],
2973 [struct stat st;  st.st_blksize = 0;],
2974 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
2975 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
2976     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
2977 fi
2978
2979 AC_CACHE_CHECK([for st_flags in struct stat],
2980         samba_cv_HAVE_STAT_ST_FLAGS,
2981         [
2982             AC_TRY_COMPILE([#include <sys/types.h>
2983 #include <sys/stat.h>
2984 #include <unistd.h>],
2985             [struct stat st;  st.st_flags = 0;],
2986             samba_cv_HAVE_STAT_ST_FLAGS=yes,
2987             samba_cv_HAVE_STAT_ST_FLAGS=no,
2988             samba_cv_HAVE_STAT_ST_FLAGS=cross)
2989         ])
2990
2991 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
2992     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
2993                 [Whether the stat struct has a st_flags member])
2994 fi
2995
2996 case "$host_os" in
2997 *linux*)
2998 AC_CACHE_CHECK([for broken RedHat 7.2 system header files],samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS,[
2999 AC_TRY_COMPILE([
3000 #ifdef HAVE_SYS_VFS_H
3001 #include <sys/vfs.h>
3002 #endif
3003 #ifdef HAVE_SYS_CAPABILITY_H
3004 #include <sys/capability.h>
3005 #endif
3006 ],[int i;],
3007    samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no,samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=yes)])
3008 if test x"$samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" = x"yes"; then
3009    AC_DEFINE(BROKEN_REDHAT_7_SYSTEM_HEADERS,1,[Broken RedHat 7.2 system header files])
3010 fi
3011 ;;
3012 esac
3013
3014 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
3015 AC_TRY_COMPILE([
3016 #include <sys/types.h>
3017 #include <sys/acl.h>
3018 #if defined(HAVE_RPCSVC_NIS_H)
3019 #include <rpcsvc/nis.h>
3020 #endif],
3021 [int i;],
3022 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
3023 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
3024         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
3025 fi
3026
3027 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
3028 AC_TRY_RUN([
3029 #include <stdio.h>
3030 #include <limits.h>
3031 main() {
3032         char *newpath = realpath("/tmp", NULL);
3033         exit ((newpath != NULL) ? 0 : 1);
3034 }
3035 ],
3036 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
3037 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
3038     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
3039 fi
3040
3041 #################################################
3042 # check for AFS clear-text auth support
3043 samba_cv_WITH_AFS=no
3044 AC_MSG_CHECKING(whether to use AFS clear-text auth)
3045 AC_ARG_WITH(afs,
3046 [  --with-afs              Include AFS clear-text auth support (default=no) ],
3047 [ case "$withval" in
3048   yes|auto)
3049     AC_MSG_RESULT($withval)
3050     samba_cv_WITH_AFS=$withval
3051     ;;
3052   *)
3053     AC_MSG_RESULT(no)
3054     ;;
3055   esac ],
3056   AC_MSG_RESULT(no)
3057 )
3058
3059 ####################################################
3060 # check for Linux-specific AFS fake-kaserver support
3061 samba_cv_WITH_FAKE_KASERVER=no
3062 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
3063 AC_ARG_WITH(fake-kaserver,
3064 [  --with-fake-kaserver    Include AFS fake-kaserver support (default=no) ],
3065 [ case "$withval" in
3066   yes|auto)
3067     AC_MSG_RESULT($withval)
3068     samba_cv_WITH_FAKE_KASERVER=$withval
3069     ;;
3070   *)
3071     AC_MSG_RESULT(no)
3072     ;;
3073   esac ],
3074   AC_MSG_RESULT(no)
3075 )
3076
3077 #################################################
3078 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
3079 if test x"$samba_cv_WITH_AFS" != x"no" ||
3080    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
3081
3082     # see if this box has the afs-headers in /usr/include/afs
3083     AC_MSG_CHECKING(for /usr/include/afs)
3084     if test -d /usr/include/afs; then
3085           CFLAGS="$CFLAGS -I/usr/include/afs"
3086           CPPFLAGS="$CPPFLAGS -I/usr/include/afs"
3087           AC_MSG_RESULT(yes)
3088     else
3089       AC_MSG_RESULT(no)
3090     fi
3091    
3092     # check for afs.h
3093     have_afs_headers=no
3094     AC_CHECK_HEADERS(afs.h afs/afs.h)
3095     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
3096         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
3097            test x"$samba_cv_WITH_AFS" = x"auto"; then
3098                 AC_MSG_WARN([AFS cannot be supported without afs.h])
3099         else
3100                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
3101         fi
3102     else
3103         have_afs_headers=yes
3104     fi
3105 fi
3106
3107 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
3108     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
3109 fi
3110
3111 #################################################
3112 # check whether to compile AFS/NT ACL mapping module
3113 samba_cv_WITH_VFS_AFSACL=no
3114 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3115 AC_ARG_WITH(vfs-afsacl,
3116 [  --with-vfs-afsacl       Include AFS to NT ACL mapping module (default=no) ],
3117 [ case "$withval" in
3118   yes|auto)
3119     AC_MSG_RESULT($withval)
3120     samba_cv_WITH_VFS_AFSACL=yes
3121     ;;
3122   *)
3123     AC_MSG_RESULT(no)
3124     ;;
3125   esac ],
3126   AC_MSG_RESULT(no)
3127 )
3128
3129 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3130    default_shared_modules="$default_shared_modules vfs_afsacl"
3131 fi
3132         
3133 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3134     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3135 fi
3136
3137 #################################################
3138 # check for the DFS clear-text auth system
3139 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3140 AC_ARG_WITH(dfs,
3141 [  --with-dce-dfs          Include DCE/DFS clear-text auth support (default=no)],
3142 [ case "$withval" in
3143   yes)
3144     AC_MSG_RESULT(yes)
3145     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3146     ;;
3147   *)
3148     AC_MSG_RESULT(no)
3149     ;;
3150   esac ],
3151   AC_MSG_RESULT(no)
3152 )
3153
3154 ########################################################
3155 # Compile with LDAP support?
3156
3157 with_ldap_support=auto
3158 AC_MSG_CHECKING([for LDAP support])
3159
3160 AC_ARG_WITH(ldap,
3161 [  --with-ldap             LDAP support (default yes)],
3162 [ case "$withval" in
3163     yes|no)
3164         with_ldap_support=$withval
3165         ;;
3166   esac ])
3167
3168 AC_MSG_RESULT($with_ldap_support)
3169
3170 SMBLDAP=""
3171 AC_SUBST(SMBLDAP)
3172 SMBLDAPUTIL=""
3173 AC_SUBST(SMBLDAPUTIL)
3174 LDBLDAP=""
3175 AC_SUBST(LDBLDAP)
3176
3177 if test x"$with_ldap_support" != x"no"; then
3178
3179   ##################################################################
3180   # first test for ldap.h and lber.h
3181   # (ldap.h is required for this test)
3182   AC_CHECK_HEADERS(ldap.h lber.h)
3183   
3184   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3185         if test x"$with_ldap_support" = x"yes"; then
3186          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3187         else
3188          AC_MSG_WARN(ldap.h is needed for LDAP support)
3189         fi
3190         
3191         with_ldap_support=no
3192   fi
3193
3194   ##################################################################
3195   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3196   # unsigned int in include/includes.h
3197   case $host_os in
3198         *hpux*)
3199          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3200          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3201         with_ldap_support=yes
3202         ;;
3203         *)
3204         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3205         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3206                 if test x"$with_ldap_support" = x"yes"; then
3207                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3208                 else
3209                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3210                 fi
3211                 with_ldap_support=no
3212         fi
3213         ;;
3214   esac
3215 fi
3216
3217 if test x"$with_ldap_support" != x"no"; then
3218   ac_save_LIBS=$LIBS
3219
3220   ##################################################################
3221   # we might need the lber lib on some systems. To avoid link errors
3222   # this test must be before the libldap test
3223   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3224
3225   ########################################################
3226   # now see if we can find the ldap libs in standard paths
3227   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3228
3229   ########################################################
3230   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3231   # Check found in pam_ldap 145.
3232   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3233
3234   LIBS="$LIBS $LDAP_LIBS"
3235   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3236     AC_TRY_COMPILE([
3237         #include <lber.h>
3238         #include <ldap.h>], 
3239         [ldap_set_rebind_proc(0, 0, 0);], 
3240         [smb_ldap_cv_ldap_set_rebind_proc=3], 
3241         [smb_ldap_cv_ldap_set_rebind_proc=2]
3242     ) 
3243   ])
3244   
3245   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3246
3247   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3248   
3249   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3250     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3251     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3252     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3253     default_shared_modules="$default_shared_modules";
3254     SMBLDAP="lib/smbldap.o"
3255     SMBLDAPUTIL="lib/smbldap_util.o"
3256     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3257       AC_MSG_WARN(Disabling ldb_ldap support (requires ldap_initialize))
3258     else
3259       AC_DEFINE(HAVE_LDB_LDAP,1,[Whether ldb_ldap is available])
3260       LDBLDAP="lib/ldb/ldb_ldap/ldb_ldap.o"
3261     fi
3262     with_ldap_support=yes
3263     AC_MSG_CHECKING(whether LDAP support is used)
3264     AC_MSG_RESULT(yes)
3265   else
3266     if test x"$with_ldap_support" = x"yes"; then
3267         AC_MSG_ERROR(libldap is needed for LDAP support)
3268     else
3269         AC_MSG_WARN(libldap is needed for LDAP support)
3270     fi
3271     
3272     LDAP_LIBS=""
3273     with_ldap_support=no
3274   fi
3275   LIBS=$ac_save_LIBS
3276 fi
3277
3278
3279 #################################################
3280 # active directory support
3281
3282 with_ads_support=auto
3283 AC_MSG_CHECKING([for Active Directory and krb5 support])
3284
3285 AC_ARG_WITH(ads,
3286 [  --with-ads              Active Directory support (default auto)],
3287 [ case "$withval" in
3288     yes|no)
3289         with_ads_support="$withval"
3290         ;;
3291   esac ])
3292
3293 AC_MSG_RESULT($with_ads_support)
3294
3295 FOUND_KRB5=no
3296 KRB5_LIBS=""
3297
3298 if test x"$with_ldap_support" != x"yes"; then
3299
3300     if test x"$with_ads_support" = x"yes"; then
3301         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3302     elif test x"$with_ads_support" = x"auto"; then
3303         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3304         with_ads_support=no
3305     fi
3306
3307 else
3308
3309     # Check to see whether there is enough LDAP functionality to be able
3310     # to build AD support.
3311
3312 # HPUX only has ldap_init; ok, we take care of this in smbldap.c
3313 case "$host_os" in
3314         *hpux*)
3315     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3316
3317     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3318         if test x"$with_ads_support" = x"yes"; then
3319             AC_MSG_ERROR(Active Directory support on HPUX requires ldap_init)
3320         elif test x"$with_ads_support" = x"auto"; then
3321             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX))
3322             with_ads_support=no
3323         fi
3324     fi
3325     ;;
3326         *)
3327     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3328
3329     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3330         if test x"$with_ads_support" = x"yes"; then
3331             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3332         elif test x"$with_ads_support" = x"auto"; then
3333             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3334             with_ads_support=no
3335         fi
3336     fi
3337     ;;
3338 esac
3339
3340
3341     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3342
3343     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3344         if test x"$with_ads_support" = x"yes"; then
3345             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3346         elif test x"$with_ads_support" = x"auto"; then
3347             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3348             with_ads_support=no
3349         fi
3350     fi
3351
3352 fi
3353
3354 if test x"$with_ads_support" != x"no"; then
3355
3356   # Do no harm to the values of CFLAGS and LIBS while testing for
3357   # Kerberos support.
3358  
3359   if test x$FOUND_KRB5 = x"no"; then
3360     #################################################
3361     # check for location of Kerberos 5 install
3362     AC_MSG_CHECKING(for kerberos 5 install path)
3363     AC_ARG_WITH(krb5,
3364     [  --with-krb5=base-dir    Locate Kerberos 5 support (default=/usr)],
3365     [ case "$withval" in
3366       no)
3367         AC_MSG_RESULT(no krb5-path given)
3368         ;;
3369       yes)
3370         AC_MSG_RESULT(/usr)
3371         FOUND_KRB5=yes
3372         ;;
3373       *)
3374         AC_MSG_RESULT($withval)
3375         KRB5_CFLAGS="-I$withval/include"
3376         KRB5_CPPFLAGS="-I$withval/include"
3377         KRB5_LDFLAGS="-L$withval/lib"
3378         FOUND_KRB5=yes
3379         if test -x "$withval/bin/krb5-config"; then
3380                 KRB5CONFIG=$withval/bin/krb5-config
3381         fi
3382         ;;
3383       esac ],
3384       AC_MSG_RESULT(no krb5-path given)
3385     )
3386   fi
3387
3388   #################################################
3389   # check for krb5-config from recent MIT and Heimdal kerberos 5
3390   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3391   AC_MSG_CHECKING(for working krb5-config)
3392   if test -x "$KRB5CONFIG"; then
3393     ac_save_CFLAGS=$CFLAGS
3394     CFLAGS="";export CFLAGS
3395     ac_save_LDFLAGS=$LDFLAGS
3396     LDFLAGS="";export LDFLAGS
3397     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3398     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3399     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`" 
3400     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3401     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3402     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3403     FOUND_KRB5=yes
3404     AC_MSG_RESULT(yes)
3405   else
3406     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3407   fi
3408  
3409   if test x$FOUND_KRB5 = x"no"; then
3410     #################################################
3411     # see if this box has the SuSE location for the heimdal krb implementation
3412     AC_MSG_CHECKING(for /usr/include/heimdal)
3413     if test -d /usr/include/heimdal; then
3414       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3415           KRB5_CFLAGS="-I/usr/include/heimdal"
3416           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3417           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3418           AC_MSG_RESULT(yes)
3419       else
3420           KRB5_CFLAGS="-I/usr/include/heimdal"
3421           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3422           AC_MSG_RESULT(yes)
3423       fi
3424     else
3425       AC_MSG_RESULT(no)
3426     fi
3427   fi
3428
3429   if test x$FOUND_KRB5 = x"no"; then
3430     #################################################
3431     # see if this box has the RedHat location for kerberos
3432     AC_MSG_CHECKING(for /usr/kerberos)
3433     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3434       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3435       KRB5_CFLAGS="-I/usr/kerberos/include"
3436       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3437       AC_MSG_RESULT(yes)
3438     else
3439       AC_MSG_RESULT(no)
3440     fi
3441   fi
3442
3443   ac_save_CFLAGS=$CFLAGS
3444   ac_save_CPPFLAGS=$CPPFLAGS
3445   ac_save_LDFLAGS=$LDFLAGS
3446
3447   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3448   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3449   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3450
3451   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3452
3453   # now check for krb5.h. Some systems have the libraries without the headers!
3454   # note that this check is done here to allow for different kerberos
3455   # include paths
3456   AC_CHECK_HEADERS(krb5.h)
3457
3458   if test x"$ac_cv_header_krb5_h" = x"no"; then
3459
3460     # Give a warning if AD support was not explicitly requested,
3461     # i.e with_ads_support = auto, otherwise die with an error.
3462
3463     if test x"$with_ads_support" = x"yes"; then
3464       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3465     else
3466       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3467     fi
3468
3469     # Turn off AD support and restore CFLAGS and LIBS variables
3470
3471     with_ads_support="no"
3472     
3473     CFLAGS=$ac_save_CFLAGS
3474     CPPFLAGS=$ac_save_CPPFLAGS
3475     LDFLAGS=$ac_save_LDFLAGS
3476   fi
3477   AC_CHECK_HEADERS(krb5/locate_plugin.h)
3478 fi
3479
3480 # Now we have determined whether we really want ADS support
3481 use_ads=no
3482 if test x"$with_ads_support" != x"no"; then
3483   use_ads=yes
3484   have_gssapi=no
3485   ac_save_LIBS=$LIBS
3486
3487   # now check for gssapi headers.  This is also done here to allow for
3488   # different kerberos include paths
3489   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
3490
3491   ##################################################################
3492   # we might need the k5crypto and com_err libraries on some systems
3493   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3494   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3495
3496   # Heimdal checks.
3497   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3498   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3499   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3500
3501   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3502   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3503
3504   ########################################################
3505   # now see if we can find the krb5 libs in standard paths
3506   # or as specified above
3507   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3508   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3509
3510   ########################################################
3511   # now see if we can find the gssapi libs in standard paths
3512   if test x"$have_gssapi" != x"yes"; then
3513      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3514   fi
3515
3516   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3517   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3518   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3519   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3520   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3521   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3522   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS) 
3523   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3524   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS) 
3525   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3526   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS) 
3527   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3528   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS) 
3529   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS) 
3530   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3531   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3532   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3533   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3534   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3535   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3536   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3537   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3538   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3539   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3540   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3541   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3542   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3543   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3544   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3545   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3546   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3547   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3548   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3549   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3550   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3551   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3552   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3553   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3554
3555   LIBS="$KRB5_LIBS $LIBS"
3556
3557   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3558         smb_krb5_ticket_has_keyinfo,
3559         [
3560             AC_TRY_COMPILE(
3561             [
3562                 #include <krb5.h>
3563             ],
3564             [
3565                 krb5_ticket ticket;
3566                 krb5_kvno kvno;
3567                 krb5_enctype enctype;
3568
3569                 enctype = ticket.enc_part.enctype;
3570                 kvno = ticket.enc_part.kvno;
3571             ],
3572             [ smb_krb5_ticket_has_keyinfo=yes ],
3573             [ smb_krb5_ticket_has_keyinfo=no ])
3574         ])
3575
3576   if test x"$smb_krb5_ticket_has_keyinfo" = x"yes" ; then
3577         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3578             [Whether the krb5_ticket structure contains the kvno and enctype])
3579   fi
3580
3581   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3582           smb_krb5_creds_opt_free_context,
3583           [
3584                 AC_TRY_COMPILE([
3585                     #include <krb5.h>],
3586                     [
3587                         krb5_context ctx;
3588                         krb5_get_init_creds_opt *opt = NULL;
3589                         krb5_get_init_creds_opt_free(ctx, opt);
3590                     ],
3591                     [smb_krb5_creds_opt_free_context=yes],
3592                     [smb_krb5_creds_opt_free_context=no]
3593                 )
3594           ])
3595
3596   if test x"$smb_krb5_creds_opt_free_context" = x"yes" ; then
3597         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3598             [Whether krb5_get_init_creds_opt_free takes a context argument])
3599   fi
3600
3601   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_verify_checksum, [
3602     AC_TRY_COMPILE([
3603         #include <krb5.h>], 
3604         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);], 
3605         [smb_krb5_verify_checksum=7], 
3606         [smb_krb5_verify_checksum=6], 
3607     ) 
3608   ])
3609   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_verify_checksum, [Number of arguments to krb5_verify_checksum])
3610
3611   AC_CACHE_CHECK([for checksum in krb5_checksum],
3612                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3613     AC_TRY_COMPILE([#include <krb5.h>],
3614       [krb5_checksum cksum; cksum.checksum.length = 0;],
3615       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3616       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3617
3618   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3619     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3620                [Whether the krb5_checksum struct has a checksum property])
3621   fi
3622
3623   AC_CACHE_CHECK([for etype in EncryptedData],
3624                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3625     AC_TRY_COMPILE([#include <krb5.h>],
3626       [EncryptedData edata; edata.etype = 0;],
3627       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3628       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3629
3630   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3631     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3632                [Whether the EncryptedData struct has a etype property])
3633   fi
3634
3635   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3636                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3637     AC_TRY_COMPILE([#include <krb5.h>],
3638       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3639       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3640       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3641
3642   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3643     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3644                [Whether the krb5_ap_req struct has a ticket pointer])
3645   fi
3646
3647   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3648                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3649     AC_TRY_COMPILE([#include <krb5.h>],
3650       [krb5_error err; err.e_data = NULL;],
3651       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3652       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3653
3654   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3655     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3656                [Whether the krb5_error struct has a e_data pointer])
3657   fi
3658
3659   AC_CACHE_CHECK([for krb5_crypto type],
3660                 samba_cv_HAVE_KRB5_CRYPTO,[
3661     AC_TRY_COMPILE([#include <krb5.h>],
3662       [krb5_crypto crypto;],
3663       samba_cv_HAVE_KRB5_CRYPTO=yes,
3664       samba_cv_HAVE_KRB5_CRYPTO=no)])
3665
3666   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3667     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3668                [Whether the type krb5_crypto exists])
3669   fi
3670
3671   AC_CACHE_CHECK([for krb5_encrypt_block type],
3672                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3673     AC_TRY_COMPILE([#include <krb5.h>],
3674       [krb5_encrypt_block block;],
3675       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3676       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3677
3678   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3679     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3680                [Whether the type krb5_encrypt_block exists])
3681   fi
3682
3683   AC_CACHE_CHECK([for addrtype in krb5_address],
3684                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3685     AC_TRY_COMPILE([#include <krb5.h>],
3686       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3687       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3688       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3689
3690   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3691     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3692                [Whether the krb5_address struct has a addrtype property])
3693   fi
3694
3695   AC_CACHE_CHECK([for addr_type in krb5_address],
3696                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3697     AC_TRY_COMPILE([#include <krb5.h>],
3698       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3699       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3700       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3701
3702   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3703     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3704               [Whether the krb5_address struct has a addr_type property])
3705   fi
3706
3707   AC_CACHE_CHECK([for enc_part2 in krb5_ticket], 
3708                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3709                  [AC_TRY_COMPILE([#include <krb5.h>],
3710     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3711     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3712
3713   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3714     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3715               [Whether the krb5_ticket struct has a enc_part2 property])
3716   fi
3717
3718   AC_CACHE_CHECK([for keyblock in krb5_creds],
3719                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3720     AC_TRY_COMPILE([#include <krb5.h>],
3721       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3722       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3723       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3724
3725   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3726     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3727               [Whether the krb5_creds struct has a keyblock property])
3728   fi
3729
3730   AC_CACHE_CHECK([for session in krb5_creds],
3731                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3732     AC_TRY_COMPILE([#include <krb5.h>],
3733       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3734       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3735       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3736
3737   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3738     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3739               [Whether the krb5_creds struct has a session property])
3740   fi
3741
3742   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3743                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3744     AC_TRY_COMPILE([#include <krb5.h>],
3745       [krb5_keyblock key; key.keyvalue.data = NULL;],
3746       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3747       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3748
3749   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3750     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3751               [Whether the krb5_keyblock struct has a keyvalue property])
3752   fi
3753
3754   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3755                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3756     AC_TRY_COMPILE([#include <krb5.h>],
3757       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3758       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3759       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3760   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3761                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3762     AC_TRY_COMPILE([#include <krb5.h>],
3763       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3764       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3765       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3766 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3767 # w.r.t. arcfour and windows, so we must not enable it here
3768   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3769           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3770     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3771               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
3772   fi
3773
3774   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3775                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3776     AC_TRY_COMPILE([#include <krb5.h>],
3777       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3778       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3779       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3780
3781   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3782     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3783               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3784   fi
3785
3786   AC_CACHE_CHECK([for KV5M_KEYTAB],
3787                  samba_cv_HAVE_KV5M_KEYTAB,[
3788     AC_TRY_COMPILE([#include <krb5.h>],
3789       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3790       samba_cv_HAVE_KV5M_KEYTAB=yes,
3791       samba_cv_HAVE_KV5M_KEYTAB=no)])
3792
3793   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3794       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3795              [Whether the KV5M_KEYTAB option is available])
3796   fi
3797
3798   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3799                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3800     AC_TRY_COMPILE([#include <krb5.h>],
3801       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3802       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3803       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3804
3805   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3806     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3807               [Whether KRB5_KU_OTHER_CKSUM is available])
3808   fi
3809   
3810   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3811                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3812     AC_TRY_COMPILE([#include <krb5.h>],
3813       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3814       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3815       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3816
3817   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3818     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3819               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3820   fi
3821
3822   AC_CACHE_CHECK([for the krb5_princ_component macro],
3823                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3824     AC_TRY_LINK([#include <krb5.h>],
3825       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3826       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3827       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3828
3829   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3830     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3831                [Whether krb5_princ_component is available])
3832   fi
3833
3834   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3835                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3836     AC_TRY_COMPILE([#include <krb5.h>],
3837       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3838       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3839       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3840
3841   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3842     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3843               [Whether krb5_keytab_entry has key member])
3844   fi
3845
3846   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3847                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3848     AC_TRY_COMPILE([#include <krb5.h>],
3849       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3850       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3851       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3852
3853   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3854     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3855               [Whether krb5_keytab_entry has keyblock member])
3856   fi
3857
3858   AC_CACHE_CHECK([for magic in krb5_address],
3859                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
3860     AC_TRY_COMPILE([#include <krb5.h>],
3861       [krb5_address addr; addr.magic = 0;],
3862       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
3863       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
3864
3865   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
3866     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
3867               [Whether the krb5_address struct has a magic property])
3868   fi
3869
3870   AC_CACHE_CHECK([for WRFILE: keytab support],
3871                 samba_cv_HAVE_WRFILE_KEYTAB,[
3872     AC_TRY_RUN([
3873 #include<krb5.h>
3874   main()
3875   {
3876     krb5_context context;
3877     krb5_keytab keytab;
3878
3879     krb5_init_context(&context);
3880     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3881   }],
3882   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3883   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3884
3885   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3886       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3887                [Whether the WRFILE:-keytab is supported])
3888   fi
3889
3890   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
3891                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
3892     AC_TRY_COMPILE([#include <krb5.h>],
3893     [
3894     krb5_context context;
3895     krb5_principal principal;
3896     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
3897     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
3898     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
3899
3900   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
3901     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
3902               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
3903   fi
3904
3905   AC_CACHE_CHECK([for krb5_addresses type],
3906                 samba_cv_HAVE_KRB5_ADDRESSES,[
3907     AC_TRY_COMPILE([#include <krb5.h>],
3908       [krb5_addresses addr;],
3909       samba_cv_HAVE_KRB5_ADDRESSES=yes,
3910       samba_cv_HAVE_KRB5_ADDRESSES=no)])
3911
3912   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
3913     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
3914                [Whether the type krb5_addresses type exists])
3915   fi
3916
3917   AC_CACHE_CHECK([whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal],
3918                 samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE, [
3919     AC_TRY_COMPILE([#include <krb5.h>],
3920     [
3921     krb5_mk_error(0,0,0);],
3922     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=yes,
3923     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=no)])
3924
3925   if test x"$samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE" = x"yes"; then
3926     AC_DEFINE(HAVE_SHORT_KRB5_MK_ERROR_INTERFACE,1,
3927               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
3928   fi
3929
3930
3931   #
3932   #
3933   # Now the decisions whether we can support krb5
3934   # 
3935   # NOTE: all tests should be done before this block!
3936   #
3937   #
3938   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
3939     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
3940     use_ads=no
3941   fi
3942
3943   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
3944           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
3945   then
3946     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
3947     use_ads=no
3948   fi
3949
3950   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
3951           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
3952   then
3953     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
3954     use_ads=no
3955   fi
3956
3957   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
3958           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
3959   then
3960     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
3961     use_ads=no
3962   fi
3963
3964   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
3965     &nbs