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