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