Enable building the notify_fam module.
[ira/wip.git] / source3 / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2
3 dnl We must use autotools 2.53 or above
4 AC_PREREQ(2.53)
5 AC_INIT(include/includes.h)
6 AC_CONFIG_HEADER(include/config.h)
7 AC_DEFINE(CONFIG_H_IS_FROM_SAMBA,1,[Marker for samba's config.h])
8
9 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="-g -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 AC_LIBREPLACE_RUNTIME_LIB_PATH_VAR
2041
2042 ################
2043
2044 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
2045 AC_TRY_RUN([#include <stdio.h>
2046 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
2047 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
2048 if test x"$samba_cv_have_longlong" = x"yes"; then
2049     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
2050     AC_CHECK_TYPE(intptr_t, unsigned long long)
2051 else
2052     AC_CHECK_TYPE(intptr_t, unsigned long)
2053 fi
2054
2055 #
2056 # Check if the compiler supports the LL prefix on long long integers.
2057 # AIX needs this.
2058
2059 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
2060     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
2061         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
2062 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
2063    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
2064 fi
2065
2066
2067 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
2068 AC_TRY_RUN([#include <time.h>
2069 main() { exit((sizeof(time_t) == 8) ? 0 : 1); }],
2070 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
2071 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
2072     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
2073 fi
2074
2075 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
2076 AC_TRY_RUN([#include <stdio.h>
2077 #include <sys/stat.h>
2078 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
2079 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
2080 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
2081     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
2082 fi
2083
2084 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
2085 AC_TRY_RUN([
2086 #if defined(HAVE_UNISTD_H)
2087 #include <unistd.h>
2088 #endif
2089 #include <stdio.h>
2090 #include <sys/stat.h>
2091 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2092 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
2093 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
2094     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
2095 fi
2096
2097 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
2098 AC_TRY_RUN([
2099 #if defined(HAVE_UNISTD_H)
2100 #include <unistd.h>
2101 #endif
2102 #include <stdio.h>
2103 #include <sys/stat.h>
2104 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
2105 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
2106 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
2107     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
2108 fi
2109
2110 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
2111 AC_TRY_RUN([
2112 #if defined(HAVE_UNISTD_H)
2113 #include <unistd.h>
2114 #endif
2115 #include <stdio.h>
2116 #include <sys/stat.h>
2117 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2118 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
2119 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
2120     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
2121 fi
2122
2123 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
2124 AC_TRY_RUN([
2125 #if defined(HAVE_UNISTD_H)
2126 #include <unistd.h>
2127 #endif
2128 #include <stdio.h>
2129 #include <sys/stat.h>
2130 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
2131 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
2132 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
2133     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
2134 fi
2135
2136 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
2137 AC_TRY_RUN([
2138 #if defined(HAVE_UNISTD_H)
2139 #include <unistd.h>
2140 #endif
2141 #include <stdio.h>
2142 #include <sys/stat.h>
2143 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2144 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
2145 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
2146     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
2147 fi
2148
2149 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
2150 AC_TRY_COMPILE([
2151 #if defined(HAVE_UNISTD_H)
2152 #include <unistd.h>
2153 #endif
2154 #include <sys/types.h>
2155 #include <dirent.h>],
2156 [DIR64 de;],
2157 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
2158 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2159     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
2160 fi
2161
2162 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
2163 AC_TRY_COMPILE([
2164 #if defined(HAVE_UNISTD_H)
2165 #include <unistd.h>
2166 #endif
2167 #include <sys/types.h>
2168 #include <dirent.h>],
2169 [struct dirent64 de;],
2170 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
2171 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2172     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
2173 fi
2174
2175 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2176 AC_TRY_RUN([
2177 #if defined(HAVE_UNISTD_H)
2178 #include <unistd.h>
2179 #endif
2180 #include <sys/types.h>
2181 main() { dev_t dev; int i = major(dev); return 0; }],
2182 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2183 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2184     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2185 fi
2186
2187 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2188 AC_TRY_RUN([
2189 #if defined(HAVE_UNISTD_H)
2190 #include <unistd.h>
2191 #endif
2192 #include <sys/types.h>
2193 main() { dev_t dev; int i = minor(dev); return 0; }],
2194 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2195 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2196     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2197 fi
2198
2199 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2200 AC_TRY_RUN([
2201 #if defined(HAVE_UNISTD_H)
2202 #include <unistd.h>
2203 #endif
2204 #include <sys/types.h>
2205 main() { dev_t dev = makedev(1,2); return 0; }],
2206 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2207 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2208     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2209 fi
2210
2211 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2212 AC_TRY_RUN([#include <stdio.h>
2213 main() { char c; c=250; exit((c > 0)?0:1); }],
2214 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2215 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2216     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2217 fi
2218
2219 AC_CACHE_CHECK([for sin_len in sock],samba_cv_HAVE_SOCK_SIN_LEN,[
2220 AC_TRY_COMPILE([#include <sys/types.h>
2221 #include <sys/socket.h>
2222 #include <netinet/in.h>],
2223 [struct sockaddr_in sock; sock.sin_len = sizeof(sock);],
2224 samba_cv_HAVE_SOCK_SIN_LEN=yes,samba_cv_HAVE_SOCK_SIN_LEN=no)])
2225 if test x"$samba_cv_HAVE_SOCK_SIN_LEN" = x"yes"; then
2226     AC_DEFINE(HAVE_SOCK_SIN_LEN,1,[Whether the sockaddr_in struct has a sin_len property])
2227 fi
2228
2229 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2230 AC_TRY_COMPILE([#include <sys/types.h>
2231 #include <dirent.h>
2232 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2233 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2234 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2235     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2236 fi
2237
2238 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2239 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2240 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2241 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2242     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2243 fi
2244
2245 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
2246 AC_TRY_LINK([
2247 #include <sys/time.h>
2248 #include <unistd.h>], [struct timeval tv; return gettimeofday(&tv, NULL);],
2249            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,
2250            samba_cv_HAVE_GETTIMEOFDAY_TZ=no)])
2251 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
2252     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday takes a tz argument])
2253 fi
2254
2255 if test x"$samba_cv_WITH_PROFILE" = x"yes"; then
2256
2257     # On some systems (eg. Linux) librt can pull in libpthread. We
2258     # don't want this to happen because libpthreads changes signal delivery
2259     # semantics in ways we are not prepared for. This breaks Linux oplocks
2260     # which rely on signals.
2261
2262     AC_LIBTESTFUNC(rt, clock_gettime,
2263             [
2264                             AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
2265                                 [Whether clock_gettime is available])
2266                             SMB_CHECK_CLOCK_ID(CLOCK_MONOTONIC)
2267                             SMB_CHECK_CLOCK_ID(CLOCK_PROCESS_CPUTIME_ID)
2268                             SMB_CHECK_CLOCK_ID(CLOCK_REALTIME)
2269                         ])
2270
2271 fi
2272
2273 AC_CACHE_CHECK([for va_copy],samba_cv_HAVE_VA_COPY,[
2274 AC_TRY_LINK([#include <stdarg.h>
2275 va_list ap1,ap2;], [va_copy(ap1,ap2);],
2276 samba_cv_HAVE_VA_COPY=yes,
2277 samba_cv_HAVE_VA_COPY=no)])
2278 if test x"$samba_cv_HAVE_VA_COPY" = x"yes"; then
2279     AC_DEFINE(HAVE_VA_COPY,1,[Whether va_copy() is available])
2280 else
2281     AC_CACHE_CHECK([for __va_copy],samba_cv_HAVE___VA_COPY,[
2282     AC_TRY_LINK([#include <stdarg.h>
2283     va_list ap1,ap2;], [__va_copy(ap1,ap2);],
2284     samba_cv_HAVE___VA_COPY=yes,
2285     samba_cv_HAVE___VA_COPY=no)])
2286     if test x"$samba_cv_HAVE___VA_COPY" = x"yes"; then
2287         AC_DEFINE(HAVE___VA_COPY,1,[Whether __va_copy() is available])
2288     fi
2289 fi
2290
2291 AC_CACHE_CHECK([for C99 vsnprintf],samba_cv_HAVE_C99_VSNPRINTF,[
2292 AC_TRY_RUN([
2293 #include <sys/types.h>
2294 #include <stdarg.h>
2295 void foo(const char *format, ...) {
2296        va_list ap;
2297        int len;
2298        char buf[5];
2299
2300        va_start(ap, format);
2301        len = vsnprintf(buf, 0, format, ap);
2302        va_end(ap);
2303        if (len != 5) exit(1);
2304
2305        va_start(ap, format);
2306        len = vsnprintf(0, 0, format, ap);
2307        va_end(ap);
2308        if (len != 5) exit(1);
2309
2310        if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
2311
2312        exit(0);
2313 }
2314 main() { foo("hello"); }
2315 ],
2316 samba_cv_HAVE_C99_VSNPRINTF=yes,samba_cv_HAVE_C99_VSNPRINTF=no,samba_cv_HAVE_C99_VSNPRINTF=cross)])
2317 if test x"$samba_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
2318     AC_DEFINE(HAVE_C99_VSNPRINTF,1,[Whether there is a C99 compliant vsnprintf])
2319 fi
2320
2321 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2322 AC_TRY_RUN([#include <sys/types.h>
2323 #include <dirent.h>
2324 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2325 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2326 di->d_name[0] == 0) exit(0); exit(1);} ],
2327 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2328 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2329     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2330 fi
2331
2332 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2333 AC_TRY_COMPILE([#include <sys/types.h>
2334 #include <utime.h>],
2335 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2336 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2337 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2338     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2339 fi
2340
2341 ##############
2342 # Check utmp details, but only if our OS offers utmp.h
2343 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2344 dnl  utmp and utmpx come in many flavours
2345 dnl  We need to check for many of them
2346 dnl  But we don't need to do each and every one, because our code uses
2347 dnl  mostly just the utmp (not utmpx) fields.
2348
2349 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
2350
2351 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2352 AC_TRY_COMPILE([#include <sys/types.h>
2353 #include <utmp.h>],
2354 [struct utmp ut;  ut.ut_name[0] = 'a';],
2355 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2356 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2357     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2358 fi
2359
2360 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2361 AC_TRY_COMPILE([#include <sys/types.h>
2362 #include <utmp.h>],
2363 [struct utmp ut;  ut.ut_user[0] = 'a';],
2364 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2365 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2366     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2367 fi
2368
2369 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2370 AC_TRY_COMPILE([#include <sys/types.h>
2371 #include <utmp.h>],
2372 [struct utmp ut;  ut.ut_id[0] = 'a';],
2373 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2374 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2375     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2376 fi
2377
2378 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2379 AC_TRY_COMPILE([#include <sys/types.h>
2380 #include <utmp.h>],
2381 [struct utmp ut;  ut.ut_host[0] = 'a';],
2382 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2383 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2384     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2385 fi
2386
2387 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2388 AC_TRY_COMPILE([#include <sys/types.h>
2389 #include <utmp.h>],
2390 [struct utmp ut;  time_t t; ut.ut_time = t;],
2391 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2392 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2393     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2394 fi
2395
2396 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2397 AC_TRY_COMPILE([#include <sys/types.h>
2398 #include <utmp.h>],
2399 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2400 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2401 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2402     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2403 fi
2404
2405 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2406 AC_TRY_COMPILE([#include <sys/types.h>
2407 #include <utmp.h>],
2408 [struct utmp ut;  ut.ut_type = 0;],
2409 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2410 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2411     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2412 fi
2413
2414 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2415 AC_TRY_COMPILE([#include <sys/types.h>
2416 #include <utmp.h>],
2417 [struct utmp ut;  ut.ut_pid = 0;],
2418 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2419 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2420     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2421 fi
2422
2423 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2424 AC_TRY_COMPILE([#include <sys/types.h>
2425 #include <utmp.h>],
2426 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2427 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2428 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2429     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2430 fi
2431
2432 dnl Look for the IPv6 varient by preference. Many systems have both.
2433 AC_CACHE_CHECK([for ut_addr_v6 in utmp],samba_cv_HAVE_UT_UT_ADDR_V6,[
2434 AC_TRY_COMPILE([#include <sys/types.h>
2435 #include <utmp.h>],
2436 [struct utmp ut;  ut.ut_addr_v6[0] = 0;],
2437 samba_cv_HAVE_UT_UT_ADDR_V6=yes,samba_cv_HAVE_UT_UT_ADDR_V6=no,samba_cv_HAVE_UT_UT_ADDR_V6=cross)])
2438 if test x"$samba_cv_HAVE_UT_UT_ADDR_V6" = x"yes"; then
2439     AC_DEFINE(HAVE_UT_UT_ADDR_V6,1,[Whether the utmp struct has a property ut_addr_v6])
2440 fi
2441
2442 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2443 AC_TRY_COMPILE([#include <sys/types.h>
2444 #include <utmp.h>],
2445 [struct utmp ut;  ut.ut_addr = 0;],
2446 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2447 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2448     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2449 fi
2450
2451 if test x$ac_cv_func_pututline = xyes ; then
2452   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2453   AC_TRY_COMPILE([#include <sys/types.h>
2454 #include <utmp.h>],
2455   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2456   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2457   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2458       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2459   fi
2460 fi
2461
2462 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2463 AC_TRY_COMPILE([#include <sys/types.h>
2464 #include <utmpx.h>],
2465 [struct utmpx ux;  ux.ut_syslen = 0;],
2466 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2467 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2468     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2469 fi
2470
2471 fi
2472 # end utmp details
2473
2474
2475 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2476 AC_ARG_WITH(libiconv,
2477 [  --with-libiconv=BASEDIR Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto) ],
2478 [
2479   if test "$withval" = "no" ; then
2480     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2481   else
2482      if test "$withval" != "yes" ; then
2483         ICONV_PATH_SPEC=yes
2484         ICONV_LOOK_DIRS="$withval"
2485      fi
2486   fi
2487 ])
2488
2489 for i in $ICONV_LOOK_DIRS ; do
2490
2491     save_LIBS="$LIBS"
2492     save_LDFLAGS="$LDFLAGS"
2493     save_CPPFLAGS="$CPPFLAGS"
2494
2495     iconv_current_LIBS=""
2496     iconv_current_LDFLAGS=""
2497     iconv_current_CPPFLAGS=""
2498
2499     ICONV_FOUND="no"
2500     unset libext
2501
2502     #  This is here to handle -withval stuff for --with-libiconv
2503     #  Perhaps we should always add a -L
2504     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2505
2506     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2507     # installation paths. This gets a little tricky since we might have iconv
2508     # in both libiconv and in libc. In this case the jm_ICONV test will always
2509     # succeed when the header is found. To counter this, make sure the
2510     # library directory is there and check the ABI directory first (which
2511     # should be harmless on other systems.
2512     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2513     for l in "lib32" "lib" "lib/hpux32"; do
2514         if test -d "$i/$l" ; then
2515                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2516                 LIBS=
2517                 export LDFLAGS LIBS CPPFLAGS
2518                 # Try to find iconv(3)
2519                 jm_ICONV($i/$l)
2520                 if test x"$ICONV_FOUND" = "xyes" ; then
2521                     libext="$l"
2522                     break
2523                 fi
2524         fi
2525     done
2526
2527     if test x"$ICONV_FOUND" = "xyes" ; then
2528         iconv_current_LDFLAGS="-L$i/$libext"
2529         iconv_current_CPPFLAGS="-I$i/include"
2530
2531         if test x"$jm_cv_lib_iconv" != x; then
2532             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2533         else
2534             # We found iconv in libc.
2535             iconv_current_LIBS=""
2536         fi
2537
2538     fi
2539
2540     if test x"$ICONV_FOUND" = "xyes" ; then
2541
2542         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2543         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2544         LIBS="$save_LIBS $iconv_current_LIBS"
2545         export LDFLAGS LIBS CPPFLAGS
2546
2547         default_dos_charset=no
2548         default_display_charset=no
2549         default_unix_charset=no
2550
2551         # check for default dos charset name
2552         for j in CP850 IBM850 ; do
2553             rjs_CHARSET($j)
2554             default_dos_charset="$ICONV_CHARSET"
2555             if test x"$default_dos_charset" = x"$j"; then
2556                 break
2557             fi
2558         done
2559
2560         # check for default display charset name
2561         for j in ASCII 646 ; do
2562             rjs_CHARSET($j)
2563             default_display_charset="$ICONV_CHARSET"
2564             if test x"$default_display_charset" = x"$j"; then
2565                 break
2566             fi
2567         done
2568
2569         # check for default unix charset name
2570         for j in UTF-8 UTF8 ; do
2571             rjs_CHARSET($j)
2572             default_unix_charset="$ICONV_CHARSET"
2573             if test x"$default_unix_charset" = x"$j"; then
2574                 break
2575             fi
2576         done
2577
2578         if test "$default_dos_charset" != "no" -a \
2579                 "$default_dos_charset" != "cross" -a \
2580                 "$default_display_charset" != "no" -a \
2581                 "$default_display_charset" != "cross" -a \
2582                 "$default_unix_charset" != "no" -a \
2583                 "$default_unix_charset" != "cross"
2584         then
2585                 samba_cv_HAVE_NATIVE_ICONV=yes
2586         else
2587             if test "$default_dos_charset" = "cross" -o \
2588                      "$default_display_charset" = "cross" -o \
2589                      "$default_unix_charset" = "cross"
2590             then
2591                     samba_cv_HAVE_NATIVE_ICONV=cross
2592             else
2593                     samba_cv_HAVE_NATIVE_ICONV=no
2594             fi
2595         fi
2596
2597         # At this point, we have a libiconv candidate. We know that
2598         # we have the right headers and libraries, but we don't know
2599         # whether it does the conversions we want. We can't test this
2600         # because we are cross-compiling. This is not necessarily a big
2601         # deal, since we can't guarantee that the results we get now will
2602         # match the results we get at runtime anyway.
2603         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2604             default_dos_charset="CP850"
2605             default_display_charset="ASCII"
2606             default_unix_charset="UTF-8"
2607             samba_cv_HAVE_NATIVE_ICONV=yes
2608             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2609             AC_MSG_WARN([$default_dos_charset, $default_display_charset and $default_unix_charset to UCS-16LE])
2610         fi
2611
2612         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2613
2614             CPPFLAGS=$save_CPPFLAGS
2615             LDFLAGS=$save_LDFLAGS
2616             LIBS=$save_LIBS
2617
2618             if test x"$iconv_current_LIBS" != x; then
2619                 LIBS="$LIBS $iconv_current_LIBS"
2620             fi
2621
2622             # Add the flags we need to CPPFLAGS and LDFLAGS
2623             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2624             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2625
2626             # Turn the #defines into string literals
2627             default_dos_charset="\"$default_dos_charset\""
2628             default_display_charset="\"$default_display_charset\""
2629             default_unix_charset="\"$default_unix_charset\""
2630
2631             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2632             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2633             AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2634             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2635
2636            break
2637         fi
2638
2639     # We didn't find a working iconv, so keep going
2640     fi
2641
2642     #  We only need to clean these up here for the next pass through the loop
2643     CPPFLAGS=$save_CPPFLAGS
2644     LDFLAGS=$save_LDFLAGS
2645     LIBS=$save_LIBS
2646     export LDFLAGS LIBS CPPFLAGS
2647 done
2648 unset libext
2649
2650
2651 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2652     AC_MSG_WARN([Sufficient support for iconv function was not found.
2653     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2654    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2655    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2656    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2657 fi
2658
2659
2660 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2661 AC_TRY_RUN([
2662 #include <sys/types.h>
2663 #include <fcntl.h>
2664 #ifndef F_GETLEASE
2665 #define F_GETLEASE      1025
2666 #endif
2667 main() {
2668        int fd = open("/dev/null", O_RDONLY);
2669        return fcntl(fd, F_GETLEASE, 0) == -1;
2670 }
2671 ],
2672 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2673 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2674     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2675 fi
2676
2677 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2678 AC_TRY_RUN([
2679 #include <sys/types.h>
2680 #include <fcntl.h>
2681 #include <signal.h>
2682 #ifndef F_NOTIFY
2683 #define F_NOTIFY 1026
2684 #endif
2685 main() {
2686         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2687 }
2688 ],
2689 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2690 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2691     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2692 fi
2693
2694 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2695 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h)
2696 AC_CHECK_FUNC(inotify_init)
2697 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2698 ],
2699 samba_cv_HAVE_INOTIFY=yes,
2700 samba_cv_HAVE_INOTIFY=no,
2701 samba_cv_HAVE_INOTIFY=cross)
2702
2703 if test x"$ac_cv_func_inotify_init" = x"yes" -a x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2704     AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
2705 fi
2706
2707 #################################################
2708 # Check if FAM notifications are available. For FAM info, see
2709 #       http://oss.sgi.com/projects/fam/
2710 #       http://savannah.nongnu.org/projects/fam/
2711 AC_ARG_ENABLE(fam,
2712 [  --enable-fam            Turn on FAM support (default=auto)])
2713
2714 if test x$enable_fam != xno; then
2715     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2716     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2717         # On IRIX, libfam requires libC, but other FAM implementations
2718         # might not need it.
2719         AC_CHECK_LIB(fam, FAMOpen2,
2720             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam"],
2721             [samba_cv_HAVE_LIBFAM=no])
2722
2723         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2724             samba_fam_xtra=-lC
2725             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2726                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC"],
2727                 [samba_cv_HAVE_LIBFAM=no])
2728             unset samba_fam_xtra
2729         fi
2730     fi
2731
2732     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2733         default_shared_modules="$default_shared_modules vfs_notify_fam"
2734         AC_TRY_COMPILE([#include <fam.h>],
2735                     [FAMCodes code = FAMChanged;],
2736                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2737                         [Whether fam.h contains a typedef for enum FAMCodes]),
2738                     [])
2739     fi
2740
2741     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2742         AC_MSG_ERROR(FAM support requested but FAM library not available )
2743     fi
2744 fi
2745
2746 AC_SUBST(SMB_FAM_LIBS)
2747
2748 #################################################
2749 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2750
2751 SMB_CHECK_DMAPI([], AC_MSG_NOTICE(DMAPI support not present) )
2752
2753 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2754 AC_TRY_RUN([
2755 #include <sys/types.h>
2756 #include <fcntl.h>
2757 #include <signal.h>
2758 #include <sys/file.h>
2759 #ifndef LOCK_MAND
2760 #define LOCK_MAND       32
2761 #define LOCK_READ       64
2762 #endif
2763 main() {
2764         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2765 }
2766 ],
2767 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2768 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2769     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2770 fi
2771
2772
2773 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2774 AC_TRY_COMPILE([#include <sys/types.h>
2775 #include <fcntl.h>],
2776 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2777 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2778 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2779     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2780 fi
2781
2782 #################################################
2783 # Check for POSIX capability support
2784
2785 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2786     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2787     [], [])
2788
2789 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2790
2791     ac_save_LIBS=$LIBS
2792     AC_LIBTESTFUNC(cap, cap_get_proc)
2793
2794     AC_CACHE_CHECK([for POSIX capabilities],
2795             samba_cv_HAVE_POSIX_CAPABILITIES,
2796             [
2797                 AC_TRY_RUN([
2798 #include <sys/types.h>
2799 #include <sys/capability.h>
2800 main() {
2801  cap_t cap;
2802  cap_value_t vals[1];
2803  if (!(cap = cap_get_proc()))
2804    exit(1);
2805  vals[0] = CAP_CHOWN;
2806  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2807  cap_set_proc(cap);
2808  exit(0);
2809 }],
2810                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2811                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2812                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2813             ])
2814
2815 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2816     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2817             [Whether POSIX capabilities are available])
2818 else
2819     LIBS=$ac_save_LIBS
2820 fi
2821
2822 fi
2823
2824 #
2825 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2826 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2827 #
2828
2829 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2830 AC_TRY_COMPILE([#include <sys/types.h>
2831 #if defined(HAVE_RPC_RPC_H)
2832 #include <rpc/rpc.h>
2833 #endif],
2834 [int16 testvar;],
2835 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2836 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2837     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2838 fi
2839
2840 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2841 AC_TRY_COMPILE([#include <sys/types.h>
2842 #if defined(HAVE_RPC_RPC_H)
2843 #include <rpc/rpc.h>
2844 #endif],
2845 [uint16 testvar;],
2846 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2847 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2848     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2849 fi
2850
2851 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2852 AC_TRY_COMPILE([#include <sys/types.h>
2853 #if defined(HAVE_RPC_RPC_H)
2854 #include <rpc/rpc.h>
2855 #endif],
2856 [int32 testvar;],
2857 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2858 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2859     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2860 fi
2861
2862 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2863 AC_TRY_COMPILE([#include <sys/types.h>
2864 #if defined(HAVE_RPC_RPC_H)
2865 #include <rpc/rpc.h>
2866 #endif],
2867 [uint32 testvar;],
2868 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2869 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2870     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2871 fi
2872
2873 dnl
2874 dnl Some systems (SCO) have a problem including
2875 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2876 dnl as a #define in <prot.h> and as part of an enum
2877 dnl in <rpc/rpc.h>.
2878 dnl
2879
2880 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2881 AC_TRY_COMPILE([#include <sys/types.h>
2882 #ifdef HAVE_SYS_SECURITY_H
2883 #include <sys/security.h>
2884 #include <prot.h>
2885 #endif  /* HAVE_SYS_SECURITY_H */
2886 #if defined(HAVE_RPC_RPC_H)
2887 #include <rpc/rpc.h>
2888 #endif],
2889 [int testvar;],
2890 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2891 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2892     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2893 fi
2894
2895 AC_MSG_CHECKING([for test routines])
2896 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
2897            AC_MSG_RESULT(yes),
2898            AC_MSG_ERROR([cant find test code. Aborting config]),
2899            AC_MSG_WARN([cannot run when cross-compiling]))
2900
2901 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2902 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
2903            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2904 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2905     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2906 fi
2907
2908 AC_CACHE_CHECK([for AF_LOCAL socket support], samba_cv_HAVE_WORKING_AF_LOCAL, [
2909 AC_TRY_RUN([#include "${srcdir-.}/tests/unixsock.c"],
2910            samba_cv_HAVE_WORKING_AF_LOCAL=yes,
2911            samba_cv_HAVE_WORKING_AF_LOCAL=no,
2912            samba_cv_HAVE_WORKING_AF_LOCAL=cross)])
2913 if test x"$samba_cv_HAVE_WORKING_AF_LOCAL" != xno
2914 then
2915     AC_DEFINE(HAVE_WORKING_AF_LOCAL, 1, [Define if you have working AF_LOCAL sockets])
2916 fi
2917
2918 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2919 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
2920            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2921 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2922     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2923 fi
2924
2925 AC_CACHE_CHECK([for secure mkstemp],samba_cv_HAVE_SECURE_MKSTEMP,[
2926 AC_TRY_RUN([#include <stdlib.h>
2927 #include <sys/types.h>
2928 #include <sys/stat.h>
2929 #include <unistd.h>
2930 main() {
2931   struct stat st;
2932   char tpl[20]="/tmp/test.XXXXXX";
2933   int fd = mkstemp(tpl);
2934   if (fd == -1) exit(1);
2935   unlink(tpl);
2936   if (fstat(fd, &st) != 0) exit(1);
2937   if ((st.st_mode & 0777) != 0600) exit(1);
2938   exit(0);
2939 }],
2940 samba_cv_HAVE_SECURE_MKSTEMP=yes,
2941 samba_cv_HAVE_SECURE_MKSTEMP=no,
2942 samba_cv_HAVE_SECURE_MKSTEMP=cross)])
2943 if test x"$samba_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
2944     AC_DEFINE(HAVE_SECURE_MKSTEMP,1,[Whether mkstemp is secure])
2945 fi
2946
2947 AC_CACHE_CHECK([for broken readdir],samba_cv_HAVE_BROKEN_READDIR,[
2948         AC_TRY_RUN([#include "${srcdir-.}/tests/os2_delete.c"],
2949                 [samba_cv_HAVE_BROKEN_READDIR=no],
2950                         [samba_cv_HAVE_BROKEN_READDIR=yes],
2951                         [samba_cv_HAVE_BROKEN_READDIR="assuming not"])])
2952
2953 if test x"$samba_cv_HAVE_BROKEN_READDIR" = x"yes"; then
2954 AC_CACHE_CHECK([for replacing readdir],samba_cv_REPLACE_READDIR,[
2955         AC_TRY_RUN([
2956 #include "${srcdir-.}/lib/repdir.c"
2957 #include "${srcdir-.}/tests/os2_delete.c"],
2958         samba_cv_REPLACE_READDIR=yes,samba_cv_REPLACE_READDIR=no)])
2959 fi
2960
2961 if test x"$samba_cv_REPLACE_READDIR" = x"yes"; then
2962         AC_DEFINE(REPLACE_READDIR,1,[replace readdir])
2963 fi
2964
2965 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2966 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2967 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2968 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2969 AC_CHECK_FUNCS(getpagesize)
2970
2971 dnl test for getifaddrs and freeifaddrs
2972 AC_CACHE_CHECK([for getifaddrs and freeifaddrs],samba_cv_HAVE_GETIFADDRS,[
2973 AC_TRY_COMPILE([
2974 #include <sys/socket.h>
2975 #include <sys/types.h>
2976 #include <netinet/in.h>
2977 #include <arpa/inet.h>
2978 #include <ifaddrs.h>
2979 #include <netdb.h>],
2980 [
2981 struct ifaddrs *ifp = NULL;
2982 int ret = getifaddrs (&ifp);
2983 freeifaddrs(ifp);
2984 ],
2985 samba_cv_HAVE_GETIFADDRS=yes,samba_cv_HAVE_GETIFADDRS=no)])
2986 if test x"$samba_cv_HAVE_GETIFADDRS" = x"yes"; then
2987     AC_DEFINE(HAVE_GETIFADDRS,1,[Whether the system has getifaddrs])
2988     AC_DEFINE(HAVE_FREEIFADDRS,1,[Whether the system has freeifaddrs])
2989 fi
2990
2991 ##################
2992 # look for a method of finding the list of network interfaces
2993 iface=no;
2994 AC_CACHE_CHECK([for iface getifaddrs],samba_cv_HAVE_IFACE_GETIFADDRS,[
2995 SAVE_CPPFLAGS="$CPPFLAGS"
2996 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2997 AC_TRY_RUN([
2998 #define NO_CONFIG_H 1
2999 #define HAVE_IFACE_GETIFADDRS 1
3000 #define AUTOCONF_TEST 1
3001 #include "${srcdir-.}/lib/replace/replace.c"
3002 #include "${srcdir-.}/lib/interfaces.c"],
3003            samba_cv_HAVE_IFACE_GETIFADDRS=yes,samba_cv_HAVE_IFACE_GETIFADDRS=no,samba_cv_HAVE_IFACE_GETIFADDRS=cross)])
3004 CPPFLAGS="$SAVE_CPPFLAGS"
3005 if test x"$samba_cv_HAVE_IFACE_GETIFADDRS" = x"yes"; then
3006     iface=yes;AC_DEFINE(HAVE_IFACE_GETIFADDRS,1,[Whether iface getifaddrs is available])
3007 fi
3008
3009 if test $iface = no; then
3010 AC_CACHE_CHECK([for iface ifconf],samba_cv_HAVE_IFACE_IFCONF,[
3011 SAVE_CPPFLAGS="$CPPFLAGS"
3012 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
3013 AC_TRY_RUN([
3014 #define NO_CONFIG_H 1
3015 #define HAVE_IFACE_IFCONF 1
3016 #define AUTOCONF_TEST 1
3017 #define SOCKET_WRAPPER_NOT_REPLACE
3018 #include "${srcdir-.}/lib/replace/replace.c"
3019 #include "${srcdir-.}/lib/interfaces.c"],
3020            samba_cv_HAVE_IFACE_IFCONF=yes,samba_cv_HAVE_IFACE_IFCONF=no,samba_cv_HAVE_IFACE_IFCONF=cross)])
3021 CPPFLAGS="$SAVE_CPPFLAGS"
3022 if test x"$samba_cv_HAVE_IFACE_IFCONF" = x"yes"; then
3023     iface=yes;AC_DEFINE(HAVE_IFACE_IFCONF,1,[Whether iface ifconf is available])
3024 fi
3025 fi
3026
3027 if test $iface = no; then
3028 AC_CACHE_CHECK([for iface ifreq],samba_cv_HAVE_IFACE_IFREQ,[
3029 SAVE_CPPFLAGS="$CPPFLAGS"
3030 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
3031 AC_TRY_RUN([
3032 #define NO_CONFIG_H 1
3033 #define HAVE_IFACE_IFREQ 1
3034 #define AUTOCONF_TEST 1
3035 #define SOCKET_WRAPPER_NOT_REPLACE
3036 #include "${srcdir-.}/lib/replace/replace.c"
3037 #include "${srcdir-.}/lib/replace/getaddrinfo.c"
3038 #include "${srcdir-.}/lib/replace/snprintf.c"
3039 #include "${srcdir-.}/lib/interfaces.c"],
3040            samba_cv_HAVE_IFACE_IFREQ=yes,samba_cv_HAVE_IFACE_IFREQ=no,samba_cv_HAVE_IFACE_IFREQ=cross)])
3041 CPPFLAGS="$SAVE_CPPFLAGS"
3042 if test x"$samba_cv_HAVE_IFACE_IFREQ" = x"yes"; then
3043     iface=yes;AC_DEFINE(HAVE_IFACE_IFREQ,1,[Whether iface ifreq is available])
3044 fi
3045 fi
3046
3047 dnl AIX 5.3.0.0
3048 AC_TRY_COMPILE([#include <sys/socket.h>],[
3049 struct sockaddr_storage s; s.__ss_family = 0],
3050 samba_cv_have_aix_sockaddr_storage=yes,samba_cv_have_aix_sockaddr_storage=no)
3051
3052 if test x"$samba_cv_have_aix_sockaddr_storage" = x"yes"; then
3053    AC_DEFINE(HAVE_AIX_SOCKADDR_STORAGE, 1, [Whether struct sockaddr_storage has __sa_family])
3054 fi
3055
3056 if test $iface = no; then
3057 AC_CACHE_CHECK([for iface AIX],samba_cv_HAVE_IFACE_AIX,[
3058 SAVE_CPPFLAGS="$CPPFLAGS"
3059 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
3060 AC_TRY_RUN([
3061 #define NO_CONFIG_H 1
3062 #define HAVE_IFACE_AIX 1
3063 #define AUTOCONF_TEST 1
3064 #undef _XOPEN_SOURCE_EXTENDED
3065 #define SOCKET_WRAPPER_NOT_REPLACE
3066 #include "${srcdir-.}/lib/replace/replace.c"
3067 #include "${srcdir-.}/lib/replace/snprintf.c"
3068 #include "${srcdir-.}/lib/interfaces.c"],
3069            samba_cv_HAVE_IFACE_AIX=yes,samba_cv_HAVE_IFACE_AIX=no,samba_cv_HAVE_IFACE_AIX=cross)])
3070 CPPFLAGS="$SAVE_CPPFLAGS"
3071 if test x"$samba_cv_HAVE_IFACE_AIX" = x"yes"; then
3072     iface=yes;AC_DEFINE(HAVE_IFACE_AIX,1,[Whether iface AIX is available])
3073 fi
3074 fi
3075
3076 dnl test for ipv6
3077 AC_CACHE_CHECK([for ipv6 support],samba_cv_HAVE_IPV6,[
3078 AC_TRY_COMPILE([
3079 #include <stdlib.h> /* for NULL */
3080 #include <sys/socket.h>
3081 #include <sys/types.h>
3082 #include <netdb.h>],
3083 [
3084 struct sockaddr_storage sa_store;
3085 struct addrinfo *ai = NULL;
3086 struct in6_addr in6addr;
3087 int s = socket(AF_INET6, SOCK_STREAM, 0);
3088 int ret = getaddrinfo(NULL, NULL, NULL, &ai);
3089 if (ret != 0) {
3090         const char *es = gai_strerror(ret);
3091 }
3092 freeaddrinfo(ai);
3093 ],
3094 samba_cv_HAVE_IPV6=yes,samba_cv_HAVE_IPV6=no)])
3095 if test x"$samba_cv_HAVE_IPV6" = x"yes"; then
3096     AC_DEFINE(HAVE_IPV6,1,[Whether the system has IPv6 support])
3097 fi
3098
3099 ################################################
3100 # look for a method of setting the effective uid
3101 seteuid=no;
3102 if test $seteuid = no; then
3103 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
3104 AC_TRY_RUN([
3105 #define AUTOCONF_TEST 1
3106 #define USE_SETRESUID 1
3107 #include "confdefs.h"
3108 #include "${srcdir-.}/lib/util_sec.c"],
3109            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
3110 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
3111     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
3112 fi
3113 fi
3114
3115
3116 if test $seteuid = no; then
3117 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
3118 AC_TRY_RUN([
3119 #define AUTOCONF_TEST 1
3120 #define USE_SETREUID 1
3121 #include "confdefs.h"
3122 #include "${srcdir-.}/lib/util_sec.c"],
3123            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
3124 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
3125     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
3126 fi
3127 fi
3128
3129 if test $seteuid = no; then
3130 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
3131 AC_TRY_RUN([
3132 #define AUTOCONF_TEST 1
3133 #define USE_SETEUID 1
3134 #include "confdefs.h"
3135 #include "${srcdir-.}/lib/util_sec.c"],
3136            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
3137 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
3138     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
3139 fi
3140 fi
3141
3142 if test $seteuid = no; then
3143 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
3144 AC_TRY_RUN([
3145 #define AUTOCONF_TEST 1
3146 #define USE_SETUIDX 1
3147 #include "confdefs.h"
3148 #include "${srcdir-.}/lib/util_sec.c"],
3149            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
3150 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
3151     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
3152 fi
3153 fi
3154
3155 AC_CACHE_CHECK([for the Darwin initgroups system call],
3156         samba_cv_DARWIN_INITGROUPS,
3157         AC_TRY_LINK([
3158 #include <sys/syscall.h>
3159 #include <unistd.h>
3160         ],
3161         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
3162         samba_cv_DARWIN_INITGROUPS=yes,
3163         samba_cv_DARWIN_INITGROUPS=no)
3164 )
3165
3166 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
3167     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
3168         [Whether to use the Darwin-specific initgroups system call])
3169 fi
3170
3171 AC_CACHE_CHECK([for working mmap],samba_cv_HAVE_MMAP,[
3172 AC_TRY_RUN([#include "${srcdir-.}/tests/shared_mmap.c"],
3173            samba_cv_HAVE_MMAP=yes,samba_cv_HAVE_MMAP=no,samba_cv_HAVE_MMAP=cross)])
3174 if test x"$samba_cv_HAVE_MMAP" = x"yes"; then
3175     AC_DEFINE(HAVE_MMAP,1,[Whether mmap works])
3176 fi
3177
3178 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
3179 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
3180            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
3181 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
3182     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
3183 fi
3184
3185 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
3186 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
3187            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
3188 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
3189     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
3190
3191 else
3192
3193 dnl
3194 dnl Don't check for 64 bit fcntl locking if we know that the
3195 dnl glibc2.1 broken check has succeeded.
3196 dnl
3197
3198   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
3199   AC_TRY_RUN([
3200 #if defined(HAVE_UNISTD_H)
3201 #include <unistd.h>
3202 #endif
3203 #include <stdio.h>
3204 #include <stdlib.h>
3205
3206 #ifdef HAVE_FCNTL_H
3207 #include <fcntl.h>
3208 #endif
3209
3210 #ifdef HAVE_SYS_FCNTL_H
3211 #include <sys/fcntl.h>
3212 #endif
3213 main() { struct flock64 fl64;
3214 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
3215 exit(0);
3216 #else
3217 exit(1);
3218 #endif
3219 }],
3220        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
3221
3222   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
3223       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
3224   fi
3225 fi
3226
3227 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
3228 AC_TRY_COMPILE([#include <sys/types.h>
3229 #include <sys/stat.h>
3230 #include <unistd.h>],
3231 [struct stat st;  st.st_blocks = 0;],
3232 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
3233 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
3234     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
3235 fi
3236
3237 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
3238 AC_TRY_COMPILE([#include <sys/types.h>
3239 #include <sys/stat.h>
3240 #include <unistd.h>],
3241 [struct stat st;  st.st_blksize = 0;],
3242 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
3243 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
3244     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
3245 fi
3246
3247 AC_CACHE_CHECK([for st_flags in struct stat],
3248         samba_cv_HAVE_STAT_ST_FLAGS,
3249         [
3250             AC_TRY_COMPILE([#include <sys/types.h>
3251 #include <sys/stat.h>
3252 #include <unistd.h>],
3253             [struct stat st;  st.st_flags = 0;],
3254             samba_cv_HAVE_STAT_ST_FLAGS=yes,
3255             samba_cv_HAVE_STAT_ST_FLAGS=no,
3256             samba_cv_HAVE_STAT_ST_FLAGS=cross)
3257         ])
3258
3259 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
3260     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
3261                 [Whether the stat struct has a st_flags member])
3262 fi
3263
3264 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
3265 AC_TRY_COMPILE([
3266 #include <sys/types.h>
3267 #include <sys/acl.h>
3268 #if defined(HAVE_RPCSVC_NIS_H)
3269 #include <rpcsvc/nis.h>
3270 #endif],
3271 [int i;],
3272 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
3273 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
3274         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
3275 fi
3276
3277 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
3278 AC_TRY_RUN([
3279 #include <stdio.h>
3280 #include <limits.h>
3281 main() {
3282         char *newpath = realpath("/tmp", NULL);
3283         exit ((newpath != NULL) ? 0 : 1);
3284 }
3285 ],
3286 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
3287 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
3288     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
3289 fi
3290
3291 #################################################
3292 # check for AFS clear-text auth support
3293 samba_cv_WITH_AFS=no
3294 AC_MSG_CHECKING(whether to use AFS clear-text auth)
3295 AC_ARG_WITH(afs,
3296 [  --with-afs              Include AFS clear-text auth support (default=no) ],
3297 [ case "$withval" in
3298   yes|auto)
3299     AC_MSG_RESULT($withval)
3300     samba_cv_WITH_AFS=$withval
3301     ;;
3302   *)
3303     AC_MSG_RESULT(no)
3304     ;;
3305   esac ],
3306   AC_MSG_RESULT(no)
3307 )
3308
3309 ####################################################
3310 # check for Linux-specific AFS fake-kaserver support
3311 samba_cv_WITH_FAKE_KASERVER=no
3312 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
3313 AC_ARG_WITH(fake-kaserver,
3314 [  --with-fake-kaserver    Include AFS fake-kaserver support (default=no) ],
3315 [ case "$withval" in
3316   yes|auto)
3317     AC_MSG_RESULT($withval)
3318     samba_cv_WITH_FAKE_KASERVER=$withval
3319     ;;
3320   *)
3321     AC_MSG_RESULT(no)
3322     ;;
3323   esac ],
3324   AC_MSG_RESULT(no)
3325 )
3326
3327 #################################################
3328 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
3329 if test x"$samba_cv_WITH_AFS" != x"no" ||
3330    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
3331
3332     # see if this box has the afs-headers in /usr/include/afs
3333     AC_MSG_CHECKING(for /usr/include/afs)
3334     if test -d /usr/include/afs; then
3335           CFLAGS="$CFLAGS -I/usr/include/afs"
3336           CPPFLAGS="$CPPFLAGS -I/usr/include/afs"
3337           AC_MSG_RESULT(yes)
3338     else
3339       AC_MSG_RESULT(no)
3340     fi
3341
3342     # check for afs.h
3343     have_afs_headers=no
3344     AC_CHECK_HEADERS(afs.h afs/afs.h)
3345     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
3346         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
3347            test x"$samba_cv_WITH_AFS" = x"auto"; then
3348                 AC_MSG_WARN([AFS cannot be supported without afs.h])
3349         else
3350                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
3351         fi
3352     else
3353         have_afs_headers=yes
3354     fi
3355 fi
3356
3357 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
3358     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
3359 fi
3360
3361 #################################################
3362 # check whether to compile AFS/NT ACL mapping module
3363 samba_cv_WITH_VFS_AFSACL=no
3364 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3365 AC_ARG_WITH(vfs-afsacl,
3366 [  --with-vfs-afsacl       Include AFS to NT ACL mapping module (default=no) ],
3367 [ case "$withval" in
3368   yes|auto)
3369     AC_MSG_RESULT($withval)
3370     samba_cv_WITH_VFS_AFSACL=yes
3371     ;;
3372   *)
3373     AC_MSG_RESULT(no)
3374     ;;
3375   esac ],
3376   AC_MSG_RESULT(no)
3377 )
3378
3379 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3380    default_shared_modules="$default_shared_modules vfs_afsacl"
3381 fi
3382         
3383 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3384     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3385 fi
3386
3387 #################################################
3388 # check for the DFS clear-text auth system
3389 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3390 AC_ARG_WITH(dfs,
3391 [  --with-dce-dfs          Include DCE/DFS clear-text auth support (default=no)],
3392 [ case "$withval" in
3393   yes)
3394     AC_MSG_RESULT(yes)
3395     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3396     ;;
3397   *)
3398     AC_MSG_RESULT(no)
3399     ;;
3400   esac ],
3401   AC_MSG_RESULT(no)
3402 )
3403
3404 ########################################################
3405 # Compile with LDAP support?
3406
3407 with_ldap_support=auto
3408 AC_MSG_CHECKING([for LDAP support])
3409
3410 AC_ARG_WITH(ldap,
3411 [  --with-ldap             LDAP support (default yes)],
3412 [ case "$withval" in
3413     yes|no)
3414         with_ldap_support=$withval
3415         ;;
3416   esac ])
3417
3418 AC_MSG_RESULT($with_ldap_support)
3419
3420 SMBLDAP=""
3421 AC_SUBST(SMBLDAP)
3422 SMBLDAPUTIL=""
3423 AC_SUBST(SMBLDAPUTIL)
3424 LDBLDAP=""
3425 AC_SUBST(LDBLDAP)
3426
3427 if test x"$with_ldap_support" != x"no"; then
3428
3429   ##################################################################
3430   # first test for ldap.h and lber.h
3431   # (ldap.h is required for this test)
3432   AC_CHECK_HEADERS(ldap.h lber.h)
3433
3434   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3435         if test x"$with_ldap_support" = x"yes"; then
3436          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3437         else
3438          AC_MSG_WARN(ldap.h is needed for LDAP support)
3439         fi
3440         
3441         with_ldap_support=no
3442   fi
3443
3444   ##################################################################
3445   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3446   # unsigned int in include/includes.h
3447   case $host_os in
3448         *hpux*)
3449          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3450          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3451         with_ldap_support=yes
3452         ;;
3453         *)
3454         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3455         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3456                 if test x"$with_ldap_support" = x"yes"; then
3457                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3458                 else
3459                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3460                 fi
3461                 with_ldap_support=no
3462         fi
3463         ;;
3464   esac
3465 fi
3466
3467 if test x"$with_ldap_support" != x"no"; then
3468   ac_save_LIBS=$LIBS
3469
3470   ##################################################################
3471   # we might need the lber lib on some systems. To avoid link errors
3472   # this test must be before the libldap test
3473   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3474
3475   ########################################################
3476   # If ber_sockbuf_add_io() is available we can add
3477   # SASL wrapping hooks
3478   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
3479
3480   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
3481                  AC_TRY_COMPILE([#include <ldap.h>],
3482                                 [int val = LDAP_OPT_SOCKBUF;],
3483                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3484                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3485
3486   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3487           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3488         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3489   fi
3490
3491   ########################################################
3492   # now see if we can find the ldap libs in standard paths
3493   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3494
3495   ########################################################
3496   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3497   # Check found in pam_ldap 145.
3498   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3499
3500   LIBS="$LIBS $LDAP_LIBS"
3501   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3502     AC_TRY_COMPILE([
3503         #include <lber.h>
3504         #include <ldap.h>],
3505         [ldap_set_rebind_proc(0, 0, 0);],
3506         [smb_ldap_cv_ldap_set_rebind_proc=3],
3507         [smb_ldap_cv_ldap_set_rebind_proc=2]
3508     )
3509   ])
3510
3511   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3512
3513   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3514
3515   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3516     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3517     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3518     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3519     default_shared_modules="$default_shared_modules";
3520     SMBLDAP="lib/smbldap.o"
3521     SMBLDAPUTIL="lib/smbldap_util.o"
3522     with_ldap_support=yes
3523     AC_MSG_CHECKING(whether LDAP support is used)
3524     AC_MSG_RESULT(yes)
3525   else
3526     if test x"$with_ldap_support" = x"yes"; then
3527         AC_MSG_ERROR(libldap is needed for LDAP support)
3528     else
3529         AC_MSG_WARN(libldap is needed for LDAP support)
3530     fi
3531
3532     LDAP_LIBS=""
3533     with_ldap_support=no
3534   fi
3535   LIBS=$ac_save_LIBS
3536 fi
3537
3538
3539 #################################################
3540 # active directory support
3541
3542 with_ads_support=auto
3543 AC_MSG_CHECKING([for Active Directory and krb5 support])
3544
3545 AC_ARG_WITH(ads,
3546 [  --with-ads              Active Directory support (default auto)],
3547 [ case "$withval" in
3548     yes|no)
3549         with_ads_support="$withval"
3550         ;;
3551   esac ])
3552
3553 AC_MSG_RESULT($with_ads_support)
3554
3555 FOUND_KRB5=no
3556 KRB5_LIBS=""
3557
3558 if test x"$with_ldap_support" != x"yes"; then
3559
3560     if test x"$with_ads_support" = x"yes"; then
3561         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3562     elif test x"$with_ads_support" = x"auto"; then
3563         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3564         with_ads_support=no
3565     fi
3566
3567 else
3568
3569     # Check to see whether there is enough LDAP functionality to be able
3570     # to build AD support.
3571
3572 # HPUX only has ldap_init; ok, we take care of this in smbldap.c
3573 case "$host_os" in
3574         *hpux*)
3575     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3576
3577     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3578         if test x"$with_ads_support" = x"yes"; then
3579             AC_MSG_ERROR(Active Directory support on HPUX requires ldap_init)
3580         elif test x"$with_ads_support" = x"auto"; then
3581             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX))
3582             with_ads_support=no
3583         fi
3584     fi
3585     ;;
3586         *)
3587     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3588
3589     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3590         if test x"$with_ads_support" = x"yes"; then
3591             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3592         elif test x"$with_ads_support" = x"auto"; then
3593             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3594             with_ads_support=no
3595         fi
3596     fi
3597     ;;
3598 esac
3599
3600
3601     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3602
3603     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3604         if test x"$with_ads_support" = x"yes"; then
3605             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3606         elif test x"$with_ads_support" = x"auto"; then
3607             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3608             with_ads_support=no
3609         fi
3610     fi
3611
3612 fi
3613
3614 if test x"$with_ads_support" != x"no"; then
3615
3616   # Do no harm to the values of CFLAGS and LIBS while testing for
3617   # Kerberos support.
3618
3619   if test x$FOUND_KRB5 = x"no"; then
3620     #################################################
3621     # check for location of Kerberos 5 install
3622     AC_MSG_CHECKING(for kerberos 5 install path)
3623     AC_ARG_WITH(krb5,
3624     [  --with-krb5=base-dir    Locate Kerberos 5 support (default=/usr)],
3625     [ case "$withval" in
3626       no)
3627         AC_MSG_RESULT(no krb5-path given)
3628         ;;
3629       yes)
3630         AC_MSG_RESULT(/usr)
3631         FOUND_KRB5=yes
3632         ;;
3633       *)
3634         AC_MSG_RESULT($withval)
3635         KRB5_CFLAGS="-I$withval/include"
3636         KRB5_CPPFLAGS="-I$withval/include"
3637         KRB5_LDFLAGS="-L$withval/lib"
3638         FOUND_KRB5=yes
3639         if test -x "$withval/bin/krb5-config"; then
3640                 KRB5CONFIG=$withval/bin/krb5-config
3641         fi
3642         ;;
3643       esac ],
3644       AC_MSG_RESULT(no krb5-path given)
3645     )
3646   fi
3647
3648   #################################################
3649   # check for krb5-config from recent MIT and Heimdal kerberos 5
3650   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3651   AC_MSG_CHECKING(for working krb5-config)
3652   if test -x "$KRB5CONFIG"; then
3653     ac_save_CFLAGS=$CFLAGS
3654     CFLAGS="";export CFLAGS
3655     ac_save_LDFLAGS=$LDFLAGS
3656     LDFLAGS="";export LDFLAGS
3657     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3658     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3659     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3660     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3661     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3662     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3663     FOUND_KRB5=yes
3664     AC_MSG_RESULT(yes)
3665   else
3666     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3667   fi
3668
3669   if test x$FOUND_KRB5 = x"no"; then
3670     #################################################
3671     # see if this box has the SuSE location for the heimdal krb implementation
3672     AC_MSG_CHECKING(for /usr/include/heimdal)
3673     if test -d /usr/include/heimdal; then
3674       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3675           KRB5_CFLAGS="-I/usr/include/heimdal"
3676           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3677           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3678           FOUND_KRB5=yes
3679           AC_MSG_RESULT(yes)
3680       else
3681           KRB5_CFLAGS="-I/usr/include/heimdal"
3682           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3683           FOUND_KRB5=yes
3684           AC_MSG_RESULT(yes)
3685       fi
3686     else
3687       AC_MSG_RESULT(no)
3688     fi
3689   fi
3690
3691   if test x$FOUND_KRB5 = x"no"; then
3692     #################################################
3693     # see if this box has the RedHat location for kerberos
3694     AC_MSG_CHECKING(for /usr/kerberos)
3695     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3696       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3697       KRB5_CFLAGS="-I/usr/kerberos/include"
3698       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3699       FOUND_KRB5=yes
3700       AC_MSG_RESULT(yes)
3701     else
3702       AC_MSG_RESULT(no)
3703     fi
3704   fi
3705
3706   if test x$FOUND_KRB5 = x"no"; then
3707     #################################################
3708     # see if this box has the OpenBSD location for heimdal krb5
3709     AC_MSG_CHECKING(for /usr/include/kerberosV)
3710     if test -d /usr/include/kerberosV; then
3711       KRB5_CPPFLAGS="-I/usr/include/kerberosV"
3712       KRB5_LIBS="-lcrypto"
3713       FOUND_KRB5=yes
3714       AC_MSG_RESULT(yes)
3715     else
3716       AC_MSG_RESULT(no)
3717     fi
3718   fi
3719
3720   ac_save_CFLAGS=$CFLAGS
3721   ac_save_CPPFLAGS=$CPPFLAGS
3722   ac_save_LDFLAGS=$LDFLAGS
3723
3724   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3725   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3726   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3727
3728   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3729
3730   # now check for krb5.h. Some systems have the libraries without the headers!
3731   # note that this check is done here to allow for different kerberos
3732   # include paths
3733   AC_CHECK_HEADERS(krb5.h)
3734
3735   if test x"$ac_cv_header_krb5_h" = x"no"; then
3736
3737     # Give a warning if AD support was not explicitly requested,
3738     # i.e with_ads_support = auto, otherwise die with an error.
3739
3740     if test x"$with_ads_support" = x"yes"; then
3741       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3742     else
3743       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3744     fi
3745
3746     # Turn off AD support and restore CFLAGS and LIBS variables
3747
3748     with_ads_support="no"
3749
3750     CFLAGS=$ac_save_CFLAGS
3751     CPPFLAGS=$ac_save_CPPFLAGS
3752     LDFLAGS=$ac_save_LDFLAGS
3753   fi
3754   AC_CHECK_HEADERS(krb5/locate_plugin.h)
3755   if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
3756         WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
3757         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
3758   fi
3759 fi
3760
3761 # Now we have determined whether we really want ADS support
3762 use_ads=no
3763 if test x"$with_ads_support" != x"no"; then
3764   use_ads=yes
3765   have_gssapi=no
3766   ac_save_LIBS=$LIBS
3767
3768   # now check for gssapi headers.  This is also done here to allow for
3769   # different kerberos include paths
3770   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
3771
3772   ##################################################################
3773   # we might need the k5crypto and com_err libraries on some systems
3774   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3775   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3776
3777   # Heimdal checks.
3778   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3779   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3780   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3781
3782   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3783   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3784
3785   ########################################################
3786   # now see if we can find the krb5 libs in standard paths
3787   # or as specified above
3788   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3789   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3790
3791   ########################################################
3792   # now see if we can find the gssapi libs in standard paths
3793   if test x"$have_gssapi" != x"yes"; then
3794      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3795   fi
3796
3797   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3798   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3799   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3800   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3801   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3802   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3803   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS)
3804   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3805   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3806   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3807   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3808   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3809   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3810   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3811   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3812   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3813   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3814   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3815   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3816   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3817   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3818   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3819   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3820   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3821   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3822   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3823   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3824   AC_CHECK_FUNC_EXT(krb5_verify_checksum, $KRB5_LIBS)
3825   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3826   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3827   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3828   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3829   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3830   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3831   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3832   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3833   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3834   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3835   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3836   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3837   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3838
3839   LIBS="$KRB5_LIBS $LIBS"
3840
3841   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3842         smb_krb5_ticket_has_keyinfo,
3843         [
3844             AC_TRY_COMPILE(
3845             [
3846                 #include <krb5.h>
3847             ],
3848             [
3849                 krb5_ticket ticket;
3850                 krb5_kvno kvno;
3851                 krb5_enctype enctype;
3852
3853                 enctype = ticket.enc_part.enctype;
3854                 kvno = ticket.enc_part.kvno;
3855             ],
3856             [ smb_krb5_ticket_has_keyinfo=yes ],
3857             [ smb_krb5_ticket_has_keyinfo=no ])
3858         ])
3859
3860   if test x"$smb_krb5_ticket_has_keyinfo" = x"yes" ; then
3861         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3862             [Whether the krb5_ticket structure contains the kvno and enctype])
3863   fi
3864
3865   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3866           smb_krb5_creds_opt_free_context,
3867           [
3868                 AC_TRY_COMPILE([
3869                     #include <krb5.h>],
3870                     [
3871                         krb5_context ctx;
3872                         krb5_get_init_creds_opt *opt = NULL;
3873                         krb5_get_init_creds_opt_free(ctx, opt);
3874                     ],
3875                     [smb_krb5_creds_opt_free_context=yes],
3876                     [smb_krb5_creds_opt_free_context=no]
3877                 )
3878           ])
3879
3880   if test x"$smb_krb5_creds_opt_free_context" = x"yes" ; then
3881         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3882             [Whether krb5_get_init_creds_opt_free takes a context argument])
3883   fi
3884
3885   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_verify_checksum, [
3886     AC_TRY_COMPILE([
3887         #include <krb5.h>],
3888         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);],
3889         [smb_krb5_verify_checksum=7],
3890         [smb_krb5_verify_checksum=6],
3891     )
3892   ])
3893   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_verify_checksum, [Number of arguments to krb5_verify_checksum])
3894
3895   AC_CACHE_CHECK([for checksum in krb5_checksum],
3896                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3897     AC_TRY_COMPILE([#include <krb5.h>],
3898       [krb5_checksum cksum; cksum.checksum.length = 0;],
3899       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3900       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3901
3902   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3903     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3904                [Whether the krb5_checksum struct has a checksum property])
3905   fi
3906
3907   AC_CACHE_CHECK([for etype in EncryptedData],
3908                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3909     AC_TRY_COMPILE([#include <krb5.h>],
3910       [EncryptedData edata; edata.etype = 0;],
3911       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3912       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3913
3914   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3915     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3916                [Whether the EncryptedData struct has a etype property])
3917   fi
3918
3919   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3920                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3921     AC_TRY_COMPILE([#include <krb5.h>],
3922       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3923       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3924       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3925
3926   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3927     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3928                [Whether the krb5_ap_req struct has a ticket pointer])
3929   fi
3930
3931   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3932                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3933     AC_TRY_COMPILE([#include <krb5.h>],
3934       [krb5_error err; err.e_data = NULL;],
3935       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3936       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3937
3938   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3939     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3940                [Whether the krb5_error struct has a e_data pointer])
3941   fi
3942
3943   AC_CACHE_CHECK([for krb5_crypto type],
3944                 samba_cv_HAVE_KRB5_CRYPTO,[
3945     AC_TRY_COMPILE([#include <krb5.h>],
3946       [krb5_crypto crypto;],
3947       samba_cv_HAVE_KRB5_CRYPTO=yes,
3948       samba_cv_HAVE_KRB5_CRYPTO=no)])
3949
3950   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3951     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3952                [Whether the type krb5_crypto exists])
3953   fi
3954
3955   AC_CACHE_CHECK([for krb5_encrypt_block type],
3956                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3957     AC_TRY_COMPILE([#include <krb5.h>],
3958       [krb5_encrypt_block block;],
3959       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3960       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3961
3962   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3963     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3964                [Whether the type krb5_encrypt_block exists])
3965   fi
3966
3967   AC_CACHE_CHECK([for addrtype in krb5_address],
3968                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3969     AC_TRY_COMPILE([#include <krb5.h>],
3970       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3971       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3972       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3973
3974   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3975     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3976                [Whether the krb5_address struct has a addrtype property])
3977   fi
3978
3979   AC_CACHE_CHECK([for addr_type in krb5_address],
3980                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3981     AC_TRY_COMPILE([#include <krb5.h>],
3982       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3983       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3984       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3985
3986   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3987     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3988               [Whether the krb5_address struct has a addr_type property])
3989   fi
3990
3991   AC_CACHE_CHECK([for enc_part2 in krb5_ticket],
3992                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3993                  [AC_TRY_COMPILE([#include <krb5.h>],
3994     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3995     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3996
3997   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3998     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3999               [Whether the krb5_ticket struct has a enc_part2 property])
4000   fi
4001
4002   AC_CACHE_CHECK([for keyblock in krb5_creds],
4003                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
4004     AC_TRY_COMPILE([#include <krb5.h>],
4005       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
4006       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
4007       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
4008
4009   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
4010     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
4011               [Whether the krb5_creds struct has a keyblock property])
4012   fi
4013
4014   AC_CACHE_CHECK([for session in krb5_creds],
4015                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
4016     AC_TRY_COMPILE([#include <krb5.h>],
4017       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
4018       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
4019       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
4020
4021   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
4022     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
4023               [Whether the krb5_creds struct has a session property])
4024   fi
4025
4026   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
4027                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
4028     AC_TRY_COMPILE([#include <krb5.h>],
4029       [krb5_keyblock key; key.keyvalue.data = NULL;],
4030       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
4031       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
4032
4033   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
4034     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
4035               [Whether the krb5_keyblock struct has a keyvalue property])
4036   fi
4037
4038   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
4039                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
4040     AC_TRY_COMPILE([#include <krb5.h>],
4041       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
4042       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
4043       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
4044   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
4045                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
4046     AC_TRY_COMPILE([#include <krb5.h>],
4047       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
4048       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
4049       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
4050 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
4051 # w.r.t. arcfour and windows, so we must not enable it here
4052   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
4053           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
4054     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
4055               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
4056   fi
4057
4058   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
4059                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
4060     AC_TRY_COMPILE([#include <krb5.h>],
4061       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
4062       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
4063       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
4064
4065   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
4066     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
4067               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
4068   fi
4069
4070   AC_CACHE_CHECK([for KV5M_KEYTAB],
4071                  samba_cv_HAVE_KV5M_KEYTAB,[
4072     AC_TRY_COMPILE([#include <krb5.h>],
4073       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
4074       samba_cv_HAVE_KV5M_KEYTAB=yes,
4075       samba_cv_HAVE_KV5M_KEYTAB=no)])
4076
4077   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
4078       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
4079              [Whether the KV5M_KEYTAB option is available])
4080   fi
4081
4082   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
4083                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
4084     AC_TRY_COMPILE([#include <krb5.h>],
4085       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
4086       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
4087       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
4088
4089   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
4090     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
4091               [Whether KRB5_KU_OTHER_CKSUM is available])
4092   fi
4093
4094   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
4095                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
4096     AC_TRY_COMPILE([#include <krb5.h>],
4097       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
4098       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
4099       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
4100
4101   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
4102     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
4103               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
4104   fi
4105
4106   AC_CACHE_CHECK([for the krb5_princ_component macro],
4107                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
4108     AC_TRY_LINK([#include <krb5.h>],
4109       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
4110       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
4111       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
4112
4113   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
4114     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
4115                [Whether krb5_princ_component is available])
4116   fi
4117
4118   AC_CACHE_CHECK([for key in krb5_keytab_entry],
4119                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
4120     AC_TRY_COMPILE([#include <krb5.h>],
4121       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
4122       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
4123       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
4124
4125   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
4126     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
4127               [Whether krb5_keytab_entry has key member])
4128   fi
4129
4130   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
4131                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
4132     AC_TRY_COMPILE([#include <krb5.h>],
4133       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
4134       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
4135       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
4136
4137   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
4138     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
4139               [Whether krb5_keytab_entry has keyblock member])
4140   fi
4141
4142   AC_CACHE_CHECK([for magic in krb5_address],
4143                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
4144     AC_TRY_COMPILE([#include <krb5.h>],
4145       [krb5_address addr; addr.magic = 0;],
4146       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
4147       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
4148
4149   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
4150     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
4151               [Whether the krb5_address struct has a magic property])
4152   fi
4153
4154   AC_CACHE_CHECK([for WRFILE: keytab support],
4155                 samba_cv_HAVE_WRFILE_KEYTAB,[
4156     AC_TRY_RUN([
4157 #include<krb5.h>
4158   main()
4159   {
4160     krb5_context context;
4161     krb5_keytab keytab;
4162
4163     krb5_init_context(&context);
4164     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
4165   }],
4166   samba_cv_HAVE_WRFILE_KEYTAB=yes,
4167   samba_cv_HAVE_WRFILE_KEYTAB=no)])
4168
4169   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
4170       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
4171                [Whether the WRFILE:-keytab is supported])
4172   fi
4173
4174   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
4175                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
4176     AC_TRY_COMPILE([#include <krb5.h>],
4177     [
4178     krb5_context context;
4179     krb5_principal principal;
4180     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
4181     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
4182     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
4183
4184   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
4185     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
4186               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
4187   fi
4188
4189   AC_CACHE_CHECK([for krb5_addresses type],
4190                 samba_cv_HAVE_KRB5_ADDRESSES,[
4191     AC_TRY_COMPILE([#include <krb5.h>],
4192       [krb5_addresses addr;],
4193       samba_cv_HAVE_KRB5_ADDRESSES=yes,
4194       samba_cv_HAVE_KRB5_ADDRESSES=no)])
4195
4196   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
4197     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
4198                [Whether the type krb5_addresses type exists])
4199   fi
4200
4201   AC_CACHE_CHECK([whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal],
4202                 samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE, [
4203     AC_TRY_COMPILE([#include <krb5.h>],
4204     [
4205     krb5_mk_error(0,0,0);],
4206     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=yes,
4207     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=no)])
4208
4209   if test x"$samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE" = x"yes"; then
4210     AC_DEFINE(HAVE_SHORT_KRB5_MK_ERROR_INTERFACE,1,
4211               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
4212   fi
4213
4214   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
4215     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
4216         smb_krb5_enctype_to_string_takes_krb5_context_arg,[
4217         AC_TRY_RUN_STRICT([
4218                 #include <krb5.h>
4219                 int main(void) {
4220                         krb5_context context = NULL;
4221                         char *str = NULL;
4222                         krb5_enctype_to_string(context, 1, &str);
4223                         if (str) free (str); 
4224                         return 0;
4225                 }
4226                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4227                 smb_krb5_enctype_to_string_takes_krb5_context_arg=yes,
4228                 smb_krb5_enctype_to_string_takes_krb5_context_arg=no)])
4229
4230     if test x"$smb_krb5_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
4231       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
4232                 [whether krb5_enctype_to_string takes krb5_context argument])
4233     fi
4234
4235     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
4236         smb_krb5_enctype_to_string_takes_size_t_arg,[
4237         AC_TRY_RUN_STRICT([
4238                 #include <krb5.h>
4239                 int main(void) {
4240                         char buf[256];
4241                         krb5_enctype_to_string(1, buf, 256);
4242                         return 0;
4243                 }
4244                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4245                 smb_krb5_enctype_to_string_takes_size_t_arg=yes,
4246                 smb_krb5_enctype_to_string_takes_size_t_arg=no)])
4247
4248     if test x"$smb_krb5_enctype_to_string_takes_size_t_arg" = x"yes"; then
4249       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
4250                 [whether krb5_enctype_to_string takes size_t argument])
4251     fi
4252   fi
4253
4254   AC_CACHE_CHECK([for krb5_principal_get_realm],
4255                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
4256     AC_TRY_LINK([#include <krb5.h>],
4257       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
4258       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
4259       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
4260
4261   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
4262     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
4263                [Whether the function krb5_principal_get_realm is defined])
4264   fi
4265
4266   AC_CACHE_CHECK([for krb5_princ_realm],
4267                 samba_cv_HAVE_KRB5_PRINC_REALM,[
4268     AC_TRY_LINK([#include <krb5.h>],
4269       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
4270       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
4271       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
4272
4273   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
4274     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
4275                [Whether the macro krb5_princ_realm is defined])
4276   fi
4277
4278   #
4279   #
4280   # Now the decisions whether we can support krb5
4281   #
4282   # NOTE: all tests should be done before this block!
4283   #
4284   #
4285   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
4286     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
4287     use_ads=no
4288   fi
4289
4290   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
4291           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
4292   then
4293     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
4294     use_ads=no
4295   fi
4296
4297   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
4298           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
4299   then
4300     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
4301     use_ads=no
4302   fi
4303
4304   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
4305           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
4306   then
4307     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
4308     use_ads=no
4309   fi
4310
4311   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
4312           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
4313   then
4314     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
4315     use_ads=no
4316   fi
4317
4318   if test x"$smb_krb5_ticket_has_keyinfo" != x"yes" ; then
4319
4320       # We only need the following functions if we can't get the enctype
4321       # and kvno out of the ticket directly (ie. on Heimdal).
4322
4323       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
4324       then
4325         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
4326         use_ads=no
4327       fi
4328
4329       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
4330       then
4331         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
4332         use_ads=no
4333       fi
4334
4335   fi
4336
4337   if test x"$use_ads" = x"yes"; then
4338     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
4339     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
4340     if test x"$have_gssapi" = x"yes"; then
4341       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
4342     fi
4343   else
4344     if test x"$with_ads_support" = x"yes"; then
4345         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
4346     else
4347         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
4348     fi
4349     AC_REMOVE_DEFINE(HAVE_KRB5_H)
4350     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
4351     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
4352     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
4353     KRB5_LIBS=""
4354     with_ads_support=no
4355   fi
4356   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
4357   AC_MSG_RESULT([$use_ads])
4358
4359 LIBS="$ac_save_LIBS"
4360 fi
4361
4362 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
4363 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
4364
4365
4366 ########################################################
4367 # Compile with DNS Updates support?
4368
4369 with_dnsupdate_support=no
4370 AC_MSG_CHECKING([whether to enable DNS Updates support])
4371
4372 AC_ARG_WITH(dnsupdate,
4373 [  --with-dnsupdate        Enable DNS Updates support (default no)],
4374 [ case "$withval" in
4375     yes|no)
4376         with_dnsupdate_support=$withval
4377         ;;
4378   esac ])
4379
4380 AC_MSG_RESULT($with_dnsupdate_support)
4381
4382 if test x"$with_dnsupdate_support" != x"no"; then
4383
4384   ################################################################
4385   # first test for Active Directory support being enabled
4386   #if test x"$with_ads_support" = x"no"; then
4387   #             AC_MSG_ERROR(Active Directory support is required to enable DNS Update support)
4388   #             with_dnsupdate_support=no
4389   #fi           
4390   ##################################################################
4391   # then test for uuid.h (necessary to generate unique DNS keynames
4392   # (uuid.h is required for this test)
4393   AC_CHECK_HEADERS(uuid/uuid.h)
4394
4395   if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
4396         if test x"$with_dnsupdate_support" = x"yes"; then
4397          AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
4398         else
4399          AC_MSG_WARN(uuid.h is needed to enable DNS Updates support)
4400         fi
4401         with_dnsupdate_support=no
4402   fi
4403 fi
4404
4405 if test x"$with_dnsupdate_support" != x"no"; then
4406
4407   ########################################################
4408   # Now see if we can find the uuid libs in standard paths
4409   # On some systems, the uuid API is in libc, so we have to
4410   # be careful not to insert a spurious -luuid.
4411
4412   UUID_LIBS=""
4413   AC_LIBTESTFUNC(uuid, uuid_generate,
4414           [
4415             case " $LIBS " in
4416                 *\ -luuid\ *)
4417                 UUID_LIBS="-luuid"
4418                 SMB_REMOVE_LIB(uuid)
4419                 ;;
4420             esac
4421
4422             with_dnsupdate_support=yes
4423             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4424         ],
4425         [
4426             if test x"$with_dnsupdate_support" = x"yes"; then
4427                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4428             else
4429                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4430             fi
4431             with_dnsupdate_support=no
4432         ])
4433 fi
4434
4435 #################################################
4436 # check for automount support
4437 AC_MSG_CHECKING(whether to use automount)
4438 AC_ARG_WITH(automount,
4439 [  --with-automount        Include automount support (default=no)],
4440 [ case "$withval" in
4441   yes)
4442     AC_MSG_RESULT(yes)
4443     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4444     ;;
4445   *)
4446     AC_MSG_RESULT(no)
4447     ;;
4448   esac ],
4449   AC_MSG_RESULT(no)
4450 )
4451
4452 #################################################
4453 # check for smbmount support
4454 AC_MSG_CHECKING(whether to use smbmount)
4455 AC_ARG_WITH(smbmount,
4456 [  --with-smbmount         Include smbmount (Linux only) support (default=no)],
4457 [ case "$withval" in
4458   yes)
4459         case "$host_os" in
4460         *linux*)
4461                 AC_MSG_RESULT(yes)
4462                 AC_DEFINE(WITH_SMBMOUNT,1,[Whether to build smbmount])
4463                 SMBMOUNT_PROGS="bin/smbmount bin/smbmnt bin/smbumount"
4464                 ;;
4465         *)
4466                 AC_MSG_ERROR(not on a linux system!)
4467                 ;;
4468         esac
4469     ;;
4470   *)
4471     AC_MSG_RESULT(no)
4472     ;;
4473   esac ],
4474   AC_MSG_RESULT(no)
4475 )
4476
4477 #################################################
4478 # check for mount- and umount.cifs support
4479 CIFSMOUNT_PROGS=""
4480 INSTALL_CIFSMOUNT=""
4481 UNINSTALL_CIFSMOUNT=""
4482 AC_MSG_CHECKING(whether to build mount.cifs and umount.cifs)
4483 AC_ARG_WITH(cifsmount,
4484 [  --with-cifsmount        Include mount.cifs and umount.cifs (Linux only) support (default=yes)],
4485 [ case "$withval" in
4486   no)
4487         AC_MSG_RESULT(no)
4488         ;;
4489   *)
4490         case "$host_os" in
4491         *linux*)
4492                 AC_MSG_RESULT(yes)
4493                 AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4494                 CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4495                 INSTALL_CIFSMOUNT="installcifsmount"
4496                 UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4497                 ;;
4498         *)
4499                 AC_MSG_ERROR(not on a linux system!)
4500                 ;;
4501         esac
4502     ;;
4503   esac ],
4504 [ case "$host_os" in
4505   *linux*)
4506         AC_MSG_RESULT(yes)
4507         AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4508         CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4509         INSTALL_CIFSMOUNT="installcifsmount"
4510         UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4511         ;;
4512   *)
4513         AC_MSG_RESULT(no)
4514         ;;
4515   esac ]
4516 )
4517
4518 #################################################
4519 # check for cifs.spnego support
4520 AC_CHECK_HEADERS([keyutils.h], [HAVE_KEYUTILS_H=1], [HAVE_KEYUTILS_H=0])
4521 CIFSSPNEGO_PROGS=""
4522 INSTALL_CIFSSPNEGO=""
4523 UNINSTALL_CIFSSPNEGO=""
4524 AC_MSG_CHECKING(whether to build cifs.spnego)
4525 AC_ARG_WITH(cifsspnego,
4526 [  --with-cifsspnego       Include cifs.spnego (Linux only) support (default=no)],
4527 [ case "$withval" in
4528   no)
4529         AC_MSG_RESULT(no)
4530         ;;
4531   *)
4532         case "$host_os" in
4533         *linux*)
4534                 if test x"$use_ads" != x"yes"; then
4535                         AC_MSG_ERROR(ADS support should be enabled for building cifs.spnego)
4536                 elif test x"$HAVE_KEYUTILS_H" != "x1"; then
4537                         AC_MSG_ERROR(keyutils package is required for cifs.spnego)
4538                 else
4539                         AC_MSG_RESULT(yes)
4540                         AC_DEFINE(WITH_CIFSSPNEGO,1,[whether to build cifs.spnego])
4541                         CIFSSPNEGO_PROGS="bin/cifs.spnego"
4542                         INSTALL_CIFSSPNEGO="installcifsspnego"
4543                         UNINSTALL_CIFSSPNEGO="uninstallcifsspnego"
4544                 fi
4545                 ;;
4546         *)
4547                 AC_MSG_ERROR(not on a linux system!)
4548                 ;;
4549         esac
4550     ;;
4551   esac ],
4552 [
4553   AC_MSG_RESULT(no)
4554   ]
4555 )
4556
4557
4558 #################################################
4559 # Check for a PAM clear-text auth, accounts, password
4560 # and session support. Most PAM implementations keep their
4561 # headers in /usr/include/security. Darwin keeps its in
4562 # /usr/include/pam.
4563
4564 with_pam_for_crypt=no
4565 try_pam=no
4566 AC_MSG_CHECKING(whether to try PAM support)
4567 AC_ARG_WITH(pam,
4568 [  --with-pam              Include PAM support (default=no)],
4569 [ case "$withval" in
4570   yes|no)
4571     try_pam=$withval
4572     ;;
4573   esac
4574 ])
4575 AC_MSG_RESULT([$try_pam])
4576
4577 use_pam=no
4578 create_pam_modules=no
4579 if test x"${try_pam}" != x"no";then
4580         use_pam=yes
4581         create_pam_modules=yes
4582
4583         # Most systems have PAM headers in /usr/include/security, but Darwin
4584         # has them in /usr/include/pam.
4585         AC_CHECK_HEADERS(security/pam_appl.h pam/pam_appl.h)
4586         if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
4587                 x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
4588                 if test x"${try_pam}" = x"yes";then
4589                         AC_MSG_ERROR([--with-pam=yes but pam_appl.h not found])
4590                 fi
4591                 use_pam=no
4592                 create_pam_modules=no
4593         fi
4594
4595         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4596         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4597                 if test x"${try_pam}" = x"yes";then
4598                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4599                 fi
4600                 use_pam=no
4601                 create_pam_modules=no
4602         fi
4603
4604         AC_CHECK_HEADERS(security/pam_modules.h pam/pam_modules.h,,,[[
4605                 #if HAVE_SECURITY_PAM_APPL_H
4606                 #include <security/pam_appl.h>
4607                 #endif
4608                 #if HAVE_PAM_PAM_APPL_H
4609                 #include <pam/pam_appl.h>
4610                 #endif
4611         ]])
4612         if test x"$ac_cv_header_security_pam_modules_h" = x"no" -a \
4613                 x"$ac_cv_header_pam_pam_modules_h" = x"no" ; then
4614                 if test x"${try_pam}" = x"yes";then
4615                         AC_MSG_ERROR([--with-pam=yes but pam_modules.h not found])
4616        fi
4617                 create_pam_modules=no
4618     fi
4619
4620         if test x"$use_pam" = x"yes"; then
4621     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4622                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4623                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4624     with_pam_for_crypt=yes
4625
4626                 if test x"$create_pam_modules" = x"yes"; then
4627                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4628                         # this checks are optional,
4629                         # we don't care about the results here
4630                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4631                         AC_CHECK_HEADERS(pam/pam_ext.h pam/_pam_macros.h)
4632                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4633                 else
4634                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4635                 fi
4636         fi
4637         AC_MSG_CHECKING(whether to use PAM support)
4638         AC_MSG_RESULT([$use_pam])
4639
4640         AC_MSG_CHECKING(whether to have PAM MODULES support)
4641         AC_MSG_RESULT([$create_pam_modules])
4642 fi # try_pam != no
4643
4644 #################################################
4645 # check for pam_smbpass support
4646 PAM_MODULES=""
4647 INSTALL_PAM_MODULES=""
4648 UNINSTALL_PAM_MODULES=""
4649 AC_MSG_CHECKING(whether to use pam_smbpass)
4650 AC_ARG_WITH(pam_smbpass,
4651 [  --with-pam_smbpass      Build PAM module for authenticating against passdb backends (default=no)],
4652 [ case "$withval" in
4653   yes)
4654     AC_MSG_RESULT(yes)
4655
4656        # Conditions under which pam_smbpass should not be built.
4657
4658        if test x"$BLDSHARED" != x"true"; then
4659           AC_MSG_ERROR([No support for shared modules])
4660        elif test x"$create_pam_modules" != x"yes"; then
4661           AC_MSG_ERROR([No support for PAM MODULES])
4662        else
4663           PAM_MODULES="pam_smbpass"
4664           INSTALL_PAM_MODULES="installpammodules"
4665           UNINSTALL_PAM_MODULES="uninstallpammodules"
4666        fi
4667     ;;
4668   *)
4669     AC_MSG_RESULT(no)
4670     ;;
4671   esac ],
4672   AC_MSG_RESULT(no)
4673 )
4674
4675
4676 ###############################################
4677 # test for where we get crypt() from
4678 AC_SEARCH_LIBS(crypt, [crypt],
4679   [test "$ac_cv_search_crypt" = "none required" || AUTH_LIBS="-lcrypt $AUTH_LIBS"
4680   AC_DEFINE(HAVE_CRYPT,1,[Whether the system has the crypt() function])])
4681
4682 ##
4683 ## moved after the check for -lcrypt in order to
4684 ## ensure that the necessary libraries are included
4685 ## check checking for truncated salt.  Wrapped by the
4686 ## $with_pam_for_crypt variable as above   --jerry
4687 ##
4688 if test $with_pam_for_crypt = no; then
4689 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4690 crypt_LIBS="$LIBS"
4691 LIBS="$AUTH_LIBS $LIBS"
4692 AC_TRY_RUN([#include "${srcdir-.}/tests/crypttest.c"],
4693         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4694 LIBS="$crypt_LIBS"])
4695 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4696         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4697 fi
4698 fi
4699
4700 #################################################
4701 # check for a NISPLUS_HOME support
4702 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4703 AC_ARG_WITH(nisplus-home,
4704 [  --with-nisplus-home     Include NISPLUS_HOME support (default=no)],
4705 [ case "$withval" in
4706   yes)
4707     AC_MSG_RESULT(yes)
4708     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4709     ;;
4710   *)
4711     AC_MSG_RESULT(no)
4712     ;;
4713   esac ],
4714   AC_MSG_RESULT(no)
4715 )
4716
4717 #################################################
4718 # check for syslog logging
4719 AC_MSG_CHECKING(whether to use syslog logging)
4720 AC_ARG_WITH(syslog,
4721 [  --with-syslog           Include experimental SYSLOG support (default=no)],
4722 [ case "$withval" in
4723   yes)
4724     AC_MSG_RESULT(yes)
4725     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4726     ;;
4727   *)
4728     AC_MSG_RESULT(no)
4729     ;;
4730   esac ],
4731   AC_MSG_RESULT(no)
4732 )
4733
4734 #################################################
4735 # check for experimental disk-quotas support
4736
4737 samba_cv_WITH_QUOTAS=auto
4738 samba_cv_TRY_QUOTAS=no
4739 samba_cv_RUN_QUOTA_TESTS=auto
4740 samba_cv_WITH_SYS_QUOTAS=auto
4741 samba_cv_TRY_SYS_QUOTAS=auto
4742 samba_cv_SYSQUOTA_FOUND=no
4743
4744 AC_MSG_CHECKING(whether to try disk-quotas support)
4745 AC_ARG_WITH(quotas,
4746 [  --with-quotas           Include disk-quota support (default=no)],
4747 [ case "$withval" in
4748   yes)
4749     AC_MSG_RESULT(yes)
4750     samba_cv_WITH_QUOTAS=yes
4751     samba_cv_TRY_QUOTAS=yes
4752     samba_cv_RUN_QUOTA_TESTS=yes
4753     #set sys quotas to auto in this case
4754     samba_cv_TRY_SYS_QUOTAS=auto
4755     ;;
4756   auto)
4757     AC_MSG_RESULT(auto)
4758     samba_cv_WITH_QUOTAS=auto
4759     samba_cv_TRY_QUOTAS=auto
4760     samba_cv_RUN_QUOTA_TESTS=auto
4761     #set sys quotas to auto in this case
4762     samba_cv_TRY_SYS_QUOTAS=auto
4763     ;;
4764   no)
4765     AC_MSG_RESULT(no)
4766     samba_cv_WITH_QUOTAS=no
4767     samba_cv_TRY_QUOTAS=no
4768     samba_cv_RUN_QUOTA_TESTS=no
4769     ;;
4770   *)
4771     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4772     ;;
4773   esac ],
4774   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4775 )
4776
4777 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4778 AC_ARG_WITH(sys-quotas,
4779 [  --with-sys-quotas       Include lib/sysquotas.c support (default=auto)],
4780 [ case "$withval" in
4781   yes)
4782     AC_MSG_RESULT(yes)
4783     samba_cv_WITH_SYS_QUOTAS=yes
4784     samba_cv_TRY_SYS_QUOTAS=yes
4785     samba_cv_RUN_QUOTA_TESTS=yes
4786     ;;
4787   auto)
4788     AC_MSG_RESULT(auto)
4789     samba_cv_WITH_SYS_QUOTAS=auto
4790     samba_cv_TRY_SYS_QUOTAS=auto
4791     samba_cv_RUN_QUOTA_TESTS=auto
4792     ;;
4793   no)
4794     AC_MSG_RESULT(no)
4795     samba_cv_WITH_SYS_QUOTAS=no
4796     samba_cv_TRY_SYS_QUOTAS=no
4797     ;;
4798   *)
4799     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4800     ;;
4801   esac ],
4802   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4803 )
4804
4805 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4806 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4807   case "$host_os" in
4808         *linux*)
4809             AC_MSG_RESULT(yes)
4810             samba_cv_TRY_SYS_QUOTAS=yes
4811             samba_cv_RUN_QUOTA_TESTS=yes
4812             ;;
4813         *)
4814             AC_MSG_RESULT(no)
4815             samba_cv_TRY_SYS_QUOTAS=no
4816             ;;
4817   esac
4818 fi
4819
4820 #############################################
4821 # only check for quota stuff if --with-quotas
4822 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4823
4824 case "$host_os" in
4825         # on linux we didn't need to test we have builtin support
4826         *linux*)
4827             samba_cv_SYSQUOTA_FOUND=yes
4828             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4829             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4830             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4831             AC_MSG_RESULT(yes)
4832
4833             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4834             samba_cv_found_xfs_header=yes
4835             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4836             AC_MSG_RESULT(yes)
4837             ;;
4838         *solaris*)
4839             # need to set this define when using static linking (BUG 1473)
4840             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4841             ;;
4842         *)
4843             ;;
4844 esac
4845
4846 # some broken header files need this
4847 AC_CHECK_HEADER(asm/types.h,[
4848             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4849             AC_ADD_INCLUDE(<asm/types.h>)
4850             ])
4851
4852 # For quotas on Veritas VxFS filesystems
4853 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4854
4855 # For quotas on Linux XFS filesystems
4856 AC_CHECK_HEADERS(linux/dqblk_xfs.h)
4857
4858 # For sys/quota.h and linux/quota.h
4859 AC_CHECK_HEADERS(sys/quota.h)
4860
4861 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4862 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4863 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4864 AC_TRY_COMPILE([
4865 #include "confdefs.h"
4866 #ifdef HAVE_SYS_TYPES_H
4867 #include <sys/types.h>
4868 #endif
4869 #ifdef HAVE_ASM_TYPES_H
4870 #include <asm/types.h>
4871 #endif
4872 #include <sys/quota.h>
4873 ],[int i = Q_XGETQUOTA;],
4874 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4875 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4876         samba_cv_found_xfs_header=yes
4877 fi
4878 fi
4879
4880 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4881 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4882 AC_TRY_COMPILE([
4883 #include "confdefs.h"
4884 #ifdef HAVE_SYS_QUOTA_H
4885 #include <sys/quota.h>
4886 #endif
4887 ],[
4888 struct dqblk D;
4889 D.dqb_fsoftlimit = 0;],
4890 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4891 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4892         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4893 fi
4894
4895 ##################
4896 # look for a working quota system
4897
4898 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4899 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4900 AC_TRY_RUN_STRICT([
4901 #define HAVE_QUOTACTL_4A 1
4902 #define AUTOCONF_TEST 1
4903 #include "confdefs.h"
4904 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4905            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4906 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4907     samba_cv_SYSQUOTA_FOUND=yes;
4908     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4909     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
4910 fi
4911 fi
4912
4913 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4914 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4915 AC_TRY_RUN_STRICT([
4916 #define HAVE_QUOTACTL_4B 1
4917 #define AUTOCONF_TEST 1
4918 #include "confdefs.h"
4919 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4920            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4921 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4922     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
4923     samba_cv_SYSQUOTA_FOUND=yes;
4924     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4925     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
4926 fi
4927 fi
4928
4929 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4930 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
4931 AC_TRY_RUN_STRICT([
4932 #define HAVE_QUOTACTL_3 1
4933 #define AUTOCONF_TEST 1
4934 #include "confdefs.h"
4935 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4936            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
4937 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
4938     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
4939     samba_cv_SYSQUOTA_FOUND=yes;
4940     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
4941     samba_cv_sysquotas_file="lib/sysquotas_3.c"
4942 fi
4943 fi
4944
4945 #################################################
4946 # check for mntent.h and struct mntent
4947 AC_CHECK_HEADERS(mntent.h)
4948 #################################################
4949 # check for setmntent,getmntent,endmntent
4950 AC_CHECK_FUNCS(setmntent getmntent endmntent)
4951
4952 #################################################
4953 # check for devnm.h and struct mntent
4954 AC_CHECK_HEADERS(devnm.h)
4955 #################################################
4956 # check for devnm
4957 AC_CHECK_FUNCS(devnm)
4958
4959 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
4960     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4961         # if --with-sys-quotas=yes then build it
4962         # you have can use the get/set quota command smb.conf
4963         # options then
4964         samba_cv_SYSQUOTA_FOUND=auto
4965     fi
4966     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
4967         # if --with-sys-quotas=yes then build it
4968         # you have can use the get/set quota command smb.conf
4969         # options then
4970         samba_cv_TRY_SYS_QUOTAS=auto
4971     fi
4972 fi
4973
4974 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
4975 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
4976 SAVE_CPPFLAGS="$CPPFLAGS"
4977 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4978 AC_TRY_COMPILE([
4979 #include "confdefs.h"
4980 #define NO_PROTO_H 1
4981 #define NO_CONFIG_H 1
4982 #define HAVE_SYS_QUOTAS 1
4983 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
4984 #include "${srcdir-.}/lib/sysquotas.c"
4985 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
4986 CPPFLAGS="$SAVE_CPPFLAGS"
4987 ])
4988 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
4989 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
4990     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then
4991         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4992         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
4993         samba_cv_WE_USE_SYS_QUOTAS=yes
4994         AC_MSG_RESULT(yes)
4995     else
4996         AC_MSG_RESULT(no)
4997     fi
4998 fi
4999 fi
5000
5001 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
5002 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
5003 SAVE_CPPFLAGS="$CPPFLAGS"
5004 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5005 AC_TRY_COMPILE([
5006 #include "confdefs.h"
5007 #define NO_PROTO_H 1
5008 #define NO_CONFIG_H 1
5009 #define HAVE_SYS_QUOTAS 1
5010 #define HAVE_XFS_QUOTAS 1
5011 #include "${srcdir-.}/lib/sysquotas_xfs.c"
5012 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
5013 CPPFLAGS="$SAVE_CPPFLAGS"
5014 ])
5015 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
5016     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
5017         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
5018     fi
5019 fi
5020 fi
5021
5022 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
5023 SAVE_CPPFLAGS="$CPPFLAGS"
5024 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5025 AC_TRY_COMPILE([
5026 #include "confdefs.h"
5027 #define NO_PROTO_H 1
5028 #define NO_CONFIG_H 1
5029 #include "${srcdir-.}/smbd/quotas.c"
5030 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
5031 CPPFLAGS="$SAVE_CPPFLAGS"
5032 ])
5033 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
5034 AC_MSG_CHECKING(whether to use the old quota support)
5035     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
5036       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
5037         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
5038         AC_MSG_RESULT(yes)
5039       else
5040         AC_MSG_RESULT(no)
5041       fi
5042     else
5043       AC_MSG_RESULT(no)
5044     fi
5045 fi
5046
5047 ####################
5048 # End of quota check samba_cv_RUN_QUOTA_TESTS
5049 fi
5050
5051 #################################################
5052 # check for experimental utmp accounting
5053
5054 AC_MSG_CHECKING(whether to support utmp accounting)
5055 WITH_UTMP=yes
5056 AC_ARG_WITH(utmp,
5057 [  --with-utmp             Include utmp accounting (default, if supported by OS)],
5058 [ case "$withval" in
5059   no)
5060                 WITH_UTMP=no
5061                 ;;
5062   *)
5063                 WITH_UTMP=yes
5064                 ;;
5065   esac ],
5066 )
5067
5068 # utmp requires utmp.h
5069 # Note similar check earlier, when checking utmp details.
5070
5071 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
5072         utmp_no_reason=", no utmp.h on $host_os"
5073         WITH_UTMP=no
5074 fi
5075
5076 # Display test results
5077
5078 if test x"$WITH_UTMP" = x"yes"; then
5079         AC_MSG_RESULT(yes)
5080         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
5081 else
5082         AC_MSG_RESULT(no$utmp_no_reason)
5083 fi
5084
5085 INSTALLLIBCMD_SH=:
5086 INSTALLLIBCMD_A=:
5087 UNINSTALLLIBCMD_SH=:
5088 UNINSTALLLIBCMD_A=:
5089
5090 if test $BLDSHARED = true; then
5091         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
5092         UNINSTALLLIBCMD_SH="rm -f"
5093 fi
5094 if test $enable_static = yes; then
5095         INSTALLLIBCMD_A="\$(INSTALLCMD)"
5096         UNINSTALLLIBCMD_A="rm -f"
5097 fi
5098
5099 #################################################
5100 # should we build libnetapi?
5101 INSTALL_LIBNETAPI=
5102 UNINSTALL_LIBNETAPI=
5103 LIBNETAPI_SHARED=
5104 LIBNETAPI=
5105 AC_MSG_CHECKING(whether to build the libnetapi shared library)
5106 AC_ARG_WITH(libnetapi,
5107 [  --with-libnetapi        Build the libnetapi shared library (default=yes if shared libs supported)],
5108 [ case "$withval" in
5109   *)
5110      AC_MSG_RESULT(no)
5111      ;;
5112   yes)
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      UNINSTALL_LIBNETAPI=uninstalllibnetapi
5126      ;;
5127   esac ],
5128 [
5129 # if unspecified, default is to built it if possible.
5130   if test $BLDSHARED = true; then
5131      LIBNETAPI_SHARED=bin/libnetapi.$SHLIBEXT
5132      LIBNETAPI=libnetapi
5133      AC_MSG_RESULT(yes)
5134    else
5135      enable_static=yes
5136      AC_MSG_RESULT(no shared library support -- will supply static library)
5137    fi
5138    if test $enable_static = yes; then
5139      LIBNETAPI=libnetapi
5140   fi]
5141   INSTALL_LIBNETAPI=installlibnetapi
5142 )
5143
5144 #################################################
5145 # should we build libaddns?
5146 INSTALL_LIBADDNS=
5147 UNINSTALL_LIBADDNS=
5148 LIBADDNS_SHARED=
5149 LIBADDNS=
5150 AC_MSG_CHECKING(whether to build the libaddns shared library)
5151 AC_ARG_WITH(libaddns,
5152 [  --with-libaddns         Build the libaddns shared library (default=no undefined API)],
5153 [ case "$withval" in
5154   *)
5155      AC_MSG_RESULT(no)
5156      ;;
5157   yes)
5158      if test $BLDSHARED = true; then
5159         LIBADDNS_SHARED=bin/libaddns.$SHLIBEXT
5160         LIBADDNS=libaddns
5161         AC_MSG_RESULT(yes)
5162      else
5163         enable_static=yes
5164         AC_MSG_RESULT(no shared library support -- will supply static library)
5165      fi
5166      if test $enable_static = yes; then
5167         LIBADDNS=libaddns
5168      fi
5169      INSTALL_LIBADDNS=installlibaddns
5170      UNINSTALL_LIBADDNS=uninstalllibaddns
5171      ;;
5172   esac ],
5173 [AC_MSG_RESULT(no)]
5174 )
5175
5176 #################################################
5177 # should we build libsmbclient?
5178
5179 INSTALL_LIBSMBCLIENT=
5180 UNINSTALL_LIBSMBCLIENT=
5181 LIBSMBCLIENT_SHARED=
5182 LIBSMBCLIENT=
5183 AC_MSG_CHECKING(whether to build the libsmbclient shared library)
5184 AC_ARG_WITH(libsmbclient,
5185 [  --with-libsmbclient     Build the libsmbclient shared library (default=yes if shared libs supported)],
5186 [ case "$withval" in
5187   no)
5188      AC_MSG_RESULT(no)
5189      ;;
5190   *)
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   esac ],
5206 [
5207 # if unspecified, default is to built it if possible.
5208   if test $BLDSHARED = true; then
5209      LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
5210      LIBSMBCLIENT=libsmbclient
5211      AC_MSG_RESULT(yes)
5212    else
5213      enable_static=yes
5214      AC_MSG_RESULT(no shared library support -- will supply static library)
5215    fi
5216    if test $enable_static = yes; then
5217      LIBSMBCLIENT=libsmbclient
5218   fi]
5219   INSTALL_LIBSMBCLIENT=installclientlib
5220   UNINSTALL_LIBSMBCLIENT=uninstallclientlib
5221 )
5222
5223 INSTALL_LIBSMBSHAREMODES=
5224 LIBSMBSHAREMODES_SHARED=
5225 LIBSMBSHAREMODES=
5226 AC_MSG_CHECKING(whether to build the libsmbsharemodes shared library)
5227 AC_ARG_WITH(libsmbsharemodes,
5228 [  --with-libsmbsharemodes     Build the libsmbsharemodes shared library (default=yes if shared libs supported)],
5229 [ case "$withval" in
5230   no)
5231      AC_MSG_RESULT(no)
5232      ;;
5233   *)
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      UNINSTALL_LIBSMBSHAREMODES=uninstalllibsmbsharemodes
5247      ;;
5248   esac ],
5249 [
5250 # if unspecified, default is to built it if possible.
5251   if test $BLDSHARED = true; then
5252      LIBSMBSHAREMODES_SHARED=bin/libsmbsharemodes.$SHLIBEXT
5253      LIBSMBSHAREMODES=libsmbsharemodes
5254      AC_MSG_RESULT(yes)
5255    else
5256      enable_static=yes
5257      AC_MSG_RESULT(no shared library support -- will supply static library)
5258    fi
5259    if test $enable_static = yes; then
5260      LIBSMBSHAREMODES=libsmbsharemodes
5261   fi]
5262   INSTALL_LIBSMBSHAREMODES=installlibsmbsharemodes
5263 )
5264
5265
5266 #################################################
5267 # these tests are taken from the GNU fileutils package
5268 AC_CHECKING(how to get filesystem space usage)
5269 space=no
5270
5271 # Test for statvfs64.
5272 if test $space = no; then
5273   # SVR4
5274   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
5275   [AC_TRY_RUN([
5276 #if defined(HAVE_UNISTD_H)
5277 #include <unistd.h>
5278 #endif
5279 #include <sys/types.h>
5280 #include <sys/statvfs.h>
5281   main ()
5282   {
5283     struct statvfs64 fsd;
5284     exit (statvfs64 (".", &fsd));
5285   }],
5286   fu_cv_sys_stat_statvfs64=yes,
5287   fu_cv_sys_stat_statvfs64=no,
5288   fu_cv_sys_stat_statvfs64=cross)])
5289   if test $fu_cv_sys_stat_statvfs64 = yes; then
5290     space=yes
5291     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
5292   fi
5293 fi
5294
5295 # Perform only the link test since it seems there are no variants of the
5296 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
5297 # because that got a false positive on SCO OSR5.  Adding the declaration
5298 # of a `struct statvfs' causes this test to fail (as it should) on such
5299 # systems.  That system is reported to work fine with STAT_STATFS4 which
5300 # is what it gets when this test fails.
5301 if test $space = no; then
5302   # SVR4
5303   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
5304                  [AC_TRY_LINK([#include <sys/types.h>
5305 #include <sys/statvfs.h>],
5306                               [struct statvfs fsd; statvfs (0, &fsd);],
5307                               fu_cv_sys_stat_statvfs=yes,
5308                               fu_cv_sys_stat_statvfs=no)])
5309   if test $fu_cv_sys_stat_statvfs = yes; then
5310     space=yes
5311     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
5312   fi
5313 fi
5314
5315 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
5316 # This is not the case on ancient Linux systems.
5317
5318 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
5319     AC_TRY_COMPILE([#include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
5320         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
5321 if test x"$samba_cv_fsid_int" = x"yes"; then
5322     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
5323 fi
5324
5325 if test $space = no; then
5326   # DEC Alpha running OSF/1
5327   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
5328   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
5329   [AC_TRY_RUN([
5330 #include <sys/param.h>
5331 #include <sys/types.h>
5332 #include <sys/mount.h>
5333   main ()
5334   {
5335     struct statfs fsd;
5336     fsd.f_fsize = 0;
5337     exit (statfs (".", &fsd, sizeof (struct statfs)));
5338   }],
5339   fu_cv_sys_stat_statfs3_osf1=yes,
5340   fu_cv_sys_stat_statfs3_osf1=no,
5341   fu_cv_sys_stat_statfs3_osf1=no)])
5342   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
5343   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
5344     space=yes
5345     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
5346   fi
5347 fi
5348
5349 if test $space = no; then
5350 # AIX
5351   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
5352 member (AIX, 4.3BSD)])
5353   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
5354   [AC_TRY_RUN([
5355 #ifdef HAVE_SYS_PARAM_H
5356 #include <sys/param.h>
5357 #endif
5358 #ifdef HAVE_SYS_MOUNT_H
5359 #include <sys/mount.h>
5360 #endif
5361 #ifdef HAVE_SYS_VFS_H
5362 #include <sys/vfs.h>
5363 #endif
5364   main ()
5365   {
5366   struct statfs fsd;
5367   fsd.f_bsize = 0;
5368   exit (statfs (".", &fsd));
5369   }],
5370   fu_cv_sys_stat_statfs2_bsize=yes,
5371   fu_cv_sys_stat_statfs2_bsize=no,
5372   fu_cv_sys_stat_statfs2_bsize=no)])
5373   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
5374   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
5375     space=yes
5376     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
5377   fi
5378 fi
5379
5380 if test $space = no; then
5381 # SVR3
5382   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
5383   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
5384   [AC_TRY_RUN([#include <sys/types.h>
5385 #include <sys/statfs.h>
5386   main ()
5387   {
5388   struct statfs fsd;
5389   exit (statfs (".", &fsd, sizeof fsd, 0));
5390   }],
5391     fu_cv_sys_stat_statfs4=yes,
5392     fu_cv_sys_stat_statfs4=no,
5393     fu_cv_sys_stat_statfs4=no)])
5394   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
5395   if test $fu_cv_sys_stat_statfs4 = yes; then
5396     space=yes
5397     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
5398   fi
5399 fi
5400
5401 if test $space = no; then
5402 # 4.4BSD and NetBSD
5403   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
5404 member (4.4BSD and NetBSD)])
5405   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
5406   [AC_TRY_RUN([#include <sys/types.h>
5407 #ifdef HAVE_SYS_PARAM_H
5408 #include <sys/param.h>
5409 #endif
5410 #ifdef HAVE_SYS_MOUNT_H
5411 #include <sys/mount.h>
5412 #endif
5413   main ()
5414   {
5415   struct statfs fsd;
5416   fsd.f_fsize = 0;
5417   exit (statfs (".", &fsd));
5418   }],
5419   fu_cv_sys_stat_statfs2_fsize=yes,
5420   fu_cv_sys_stat_statfs2_fsize=no,
5421   fu_cv_sys_stat_statfs2_fsize=no)])
5422   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
5423   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
5424     space=yes
5425         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
5426   fi
5427 fi
5428
5429 if test $space = no; then
5430   # Ultrix
5431   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
5432   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
5433   [AC_TRY_RUN([#include <sys/types.h>
5434 #ifdef HAVE_SYS_PARAM_H
5435 #include <sys/param.h>
5436 #endif
5437 #ifdef HAVE_SYS_MOUNT_H
5438 #include <sys/mount.h>
5439 #endif
5440 #ifdef HAVE_SYS_FS_TYPES_H
5441 #include <sys/fs_types.h>
5442 #endif
5443   main ()
5444   {
5445   struct fs_data fsd;
5446   /* Ultrix's statfs returns 1 for success,
5447      0 for not mounted, -1 for failure.  */
5448   exit (statfs (".", &fsd) != 1);
5449   }],
5450   fu_cv_sys_stat_fs_data=yes,
5451   fu_cv_sys_stat_fs_data=no,
5452   fu_cv_sys_stat_fs_data=no)])
5453   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
5454   if test $fu_cv_sys_stat_fs_data = yes; then
5455     space=yes
5456     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
5457   fi
5458 fi
5459
5460 #
5461 # As a gating factor for large file support, in order to
5462 # use <4GB files we must have the following minimal support
5463 # available.
5464 # long long, and a 64 bit off_t or off64_t.
5465 # If we don't have all of these then disable large
5466 # file support.
5467 #
5468 AC_MSG_CHECKING([if large file support can be enabled])
5469 AC_TRY_COMPILE([
5470 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
5471 #include <sys/types.h>
5472 #else
5473 __COMPILE_ERROR_
5474 #endif
5475 ],
5476 [int i],
5477 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
5478 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
5479         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
5480 fi
5481 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
5482
5483 #################################################
5484 # check for cluster extensions
5485
5486 AC_MSG_CHECKING(whether to include cluster support)
5487 AC_ARG_WITH(cluster-support,
5488 [  --with-cluster-support  Enable cluster extensions (default=no)])
5489 if test "x$with_cluster_support" = "xyes"; then
5490     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5491     AC_MSG_RESULT(yes)
5492 else
5493     AC_MSG_RESULT(no)
5494 fi
5495
5496
5497 #################################################
5498 # check for ACL support
5499
5500 AC_MSG_CHECKING(whether to support ACLs)
5501 AC_ARG_WITH(acl-support,
5502 [  --with-acl-support      Include ACL support (default=auto)],
5503 [ case "$withval" in
5504         yes|no)
5505                 with_acl_support="$withval"
5506                 ;;
5507   esac ])
5508
5509 if test x"$with_acl_support" = x ; then
5510         with_acl_support="auto"
5511 fi
5512
5513 AC_MSG_RESULT($with_acl_support)
5514
5515 if test x"$with_acl_support" = x"no"; then
5516         AC_MSG_RESULT(Disabling ACL support)
5517         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5518 else
5519         AC_MSG_NOTICE(checking whether ACL support is available:)
5520         case "$host_os" in
5521         *sysv5*)
5522                 AC_MSG_NOTICE(Using UnixWare ACLs)
5523                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5524                 default_static_modules="$default_static_modules vfs_solarisacl"
5525                 ;;
5526         *solaris*)
5527                 AC_MSG_NOTICE(Using solaris ACLs)
5528                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5529                 ACL_LIBS="$ACL_LIBS -lsec"
5530                 default_static_modules="$default_static_modules vfs_solarisacl"
5531                 ;;
5532         *hpux*)
5533                 AC_MSG_NOTICE(Using HPUX ACLs)
5534                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5535                 default_static_modules="$default_static_modules vfs_hpuxacl"
5536                 ;;
5537         *irix*)
5538                 AC_MSG_NOTICE(Using IRIX ACLs)
5539                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5540                 default_static_modules="$default_static_modules vfs_irixacl"
5541                 ;;
5542         *aix*)
5543                 AC_MSG_NOTICE(Using AIX ACLs)
5544                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5545                 default_static_modules="$default_static_modules vfs_aixacl"
5546                 ;;
5547         *osf*)
5548                 AC_MSG_NOTICE(Using Tru64 ACLs)
5549                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5550                 ACL_LIBS="$ACL_LIBS -lpacl"
5551                 default_static_modules="$default_static_modules vfs_tru64acl"
5552                 ;;
5553         *darwin*)
5554                 AC_MSG_NOTICE(ACLs on Darwin currently not supported)
5555                 AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5556                 ;;
5557         *)
5558                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5559                 case "$host_os" in
5560                 *linux*)
5561                         AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5562                         ;;
5563                 esac
5564                 AC_CACHE_CHECK([for POSIX ACL support],samba_cv_HAVE_POSIX_ACLS,[
5565                         acl_LIBS=$LIBS
5566                         LIBS="$LIBS $ACL_LIBS"
5567                         AC_TRY_LINK([
5568                                 #include <sys/types.h>
5569                                 #include <sys/acl.h>
5570                         ],[
5571                                 acl_t acl;
5572                                 int entry_id;
5573                                 acl_entry_t *entry_p;
5574                                 return acl_get_entry(acl, entry_id, entry_p);
5575                         ],
5576                         [samba_cv_HAVE_POSIX_ACLS=yes],
5577                         [samba_cv_HAVE_POSIX_ACLS=no])
5578                         LIBS=$acl_LIBS
5579                 ])
5580                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5581                         AC_MSG_NOTICE(Using posix ACLs)
5582                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5583                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5584                                 acl_LIBS=$LIBS
5585                                 LIBS="$LIBS $ACL_LIBS"
5586                                 AC_TRY_LINK([
5587                                         #include <sys/types.h>
5588                                         #include <sys/acl.h>
5589                                 ],[
5590                                         acl_permset_t permset_d;
5591                                         acl_perm_t perm;
5592                                         return acl_get_perm_np(permset_d, perm);
5593                                 ],
5594                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5595                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5596                                 LIBS=$acl_LIBS
5597                         ])
5598                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5599                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5600                         fi
5601                         default_static_modules="$default_static_modules vfs_posixacl"
5602                 else
5603                         AC_MSG_NOTICE(ACL support is not avaliable)
5604                         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5605                 fi
5606                 ;;
5607         esac
5608 fi # with_acl_support
5609
5610
5611
5612 #################################################
5613 # check for AIO support
5614
5615 AC_MSG_CHECKING(whether to support asynchronous io)
5616 AC_ARG_WITH(aio-support,
5617 [  --with-aio-support      Include asynchronous io support (default=no)],
5618 [ case "$withval" in
5619   yes)
5620
5621         AC_MSG_RESULT(yes)
5622         case "$host_os" in
5623         *)
5624                 AIO_LIBS=$LIBS
5625                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5626                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5627                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5628                 aio_LIBS=$LIBS
5629                 LIBS=$AIO_LIBS
5630                 AC_TRY_LINK([#include <sys/types.h>
5631 #include <aio.h>],
5632 [ struct aiocb a; return aio_read(&a);],
5633 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5634                 LIBS=$aio_LIBS])
5635                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5636                 aio_LIBS=$LIBS
5637                 LIBS=$AIO_LIBS
5638                 AC_TRY_LINK([#include <sys/types.h>
5639 #include <aio.h>],
5640 [ struct aiocb64 a; return aio_read64(&a);],
5641 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5642                 LIBS=$aio_LIBS])
5643                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5644                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5645                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5646                         LIBS=$AIO_LIBS
5647                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5648                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5649                         LIBS=$AIO_LIBS
5650                 fi
5651
5652                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5653                         AC_MSG_CHECKING(for aio_read)
5654                         AC_LINK_IFELSE([#include <aio.h>
5655 int main() { struct aiocb a; return aio_read(&a); }],
5656 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5657 [AC_MSG_RESULT(no)])
5658
5659                         AC_MSG_CHECKING(for aio_write)
5660                         AC_LINK_IFELSE([#include <aio.h>
5661 int main() { struct aiocb a; return aio_write(&a); }],
5662 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5663 [AC_MSG_RESULT(no)])
5664
5665                         AC_MSG_CHECKING(for aio_fsync)
5666                         AC_LINK_IFELSE([#include <aio.h>
5667 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5668 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5669 [AC_MSG_RESULT(no)])
5670
5671                         AC_MSG_CHECKING(for aio_return)
5672                         AC_LINK_IFELSE([#include <aio.h>
5673 int main() { struct aiocb a; return aio_return(&a); }],
5674 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5675 [AC_MSG_RESULT(no)])
5676
5677                         AC_MSG_CHECKING(for aio_error)
5678                         AC_LINK_IFELSE([#include <aio.h>
5679 int main() { struct aiocb a; return aio_error(&a); }],
5680 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5681 [AC_MSG_RESULT(no)])
5682
5683                         AC_MSG_CHECKING(for aio_cancel)
5684                         AC_LINK_IFELSE([#include <aio.h>
5685 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5686 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5687 [AC_MSG_RESULT(no)])
5688
5689                         AC_MSG_CHECKING(for aio_suspend)
5690                         AC_LINK_IFELSE([#include <aio.h>
5691 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5692 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5693 [AC_MSG_RESULT(no)])
5694                 fi
5695
5696                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5697                         AC_MSG_CHECKING(for aio_read64)
5698                         AC_LINK_IFELSE([#include <aio.h>
5699 int main() { struct aiocb a; return aio_read64(&a); }],
5700 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5701 [AC_MSG_RESULT(no)])
5702
5703                         AC_MSG_CHECKING(for aio_write64)
5704                         AC_LINK_IFELSE([#include <aio.h>
5705 int main() { struct aiocb a; return aio_write64(&a); }],
5706 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5707 [AC_MSG_RESULT(no)])
5708
5709                         AC_MSG_CHECKING(for aio_fsync64)
5710                         AC_LINK_IFELSE([#include <aio.h>
5711 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5712 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5713 [AC_MSG_RESULT(no)])
5714
5715                         AC_MSG_CHECKING(for aio_return64)
5716                         AC_LINK_IFELSE([#include <aio.h>
5717 int main() { struct aiocb a; return aio_return64(&a); }],
5718 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5719 [AC_MSG_RESULT(no)])
5720
5721                         AC_MSG_CHECKING(for aio_error64)
5722                         AC_LINK_IFELSE([#include <aio.h>
5723 int main() { struct aiocb a; return aio_error64(&a); }],
5724 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5725 [AC_MSG_RESULT(no)])
5726
5727                         AC_MSG_CHECKING(for aio_cancel64)
5728                         AC_LINK_IFELSE([#include <aio.h>
5729 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5730 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5731 [AC_MSG_RESULT(no)])
5732
5733                         AC_MSG_CHECKING(for aio_suspend64)
5734                         AC_LINK_IFELSE([#include <aio.h>
5735 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5736 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5737 [AC_MSG_RESULT(no)])
5738                 fi
5739             ;;
5740         esac
5741         ;;
5742   *)
5743     AC_MSG_RESULT(no)
5744     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5745     ;;
5746   esac ],
5747   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5748   AC_MSG_RESULT(no)
5749 )
5750
5751 #################################################
5752 # check for sendfile support
5753
5754 with_sendfile_support=yes
5755 AC_MSG_CHECKING(whether to check to support sendfile)
5756 AC_ARG_WITH(sendfile-support,
5757 [  --with-sendfile-support Check for sendfile support (default=yes)],
5758 [ case "$withval" in
5759   yes)
5760
5761         AC_MSG_RESULT(yes);
5762
5763         case "$host_os" in
5764         *linux*)
5765                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5766                 AC_TRY_LINK([#include <sys/sendfile.h>],
5767 [\
5768 int tofd, fromfd;
5769 off64_t offset;
5770 size_t total;
5771 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5772 ],
5773 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5774
5775                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5776                 AC_TRY_LINK([#include <sys/sendfile.h>],
5777 [\
5778 int tofd, fromfd;
5779 off_t offset;
5780 size_t total;
5781 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5782 ],
5783 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5784
5785 # Try and cope with broken Linux sendfile....
5786                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5787                 AC_TRY_LINK([\
5788 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5789 #undef _FILE_OFFSET_BITS
5790 #endif
5791 #include <sys/sendfile.h>],
5792 [\
5793 int tofd, fromfd;
5794 off_t offset;
5795 size_t total;
5796 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5797 ],
5798 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5799
5800         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5801                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5802                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5803                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5804         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5805                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5806                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5807                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5808         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
5809                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5810                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5811         else
5812                 AC_MSG_RESULT(no);
5813         fi
5814
5815         ;;
5816         *freebsd* | *dragonfly* )
5817                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5818                 AC_TRY_LINK([\
5819 #include <sys/types.h>
5820 #include <unistd.h>
5821 #include <sys/socket.h>
5822 #include <sys/uio.h>],
5823 [\
5824         int fromfd, tofd, ret, total=0;
5825         off_t offset, nwritten;
5826         struct sf_hdtr hdr;
5827         struct iovec hdtrl;
5828         hdr.headers = &hdtrl;
5829         hdr.hdr_cnt = 1;
5830         hdr.trailers = NULL;
5831         hdr.trl_cnt = 0;
5832         hdtrl.iov_base = NULL;
5833         hdtrl.iov_len = 0;
5834         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5835 ],
5836 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5837
5838         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5839                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5840                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5841                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5842         else
5843                 AC_MSG_RESULT(no);
5844         fi
5845         ;;
5846
5847         *hpux*)
5848                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5849                 AC_TRY_LINK([\
5850 #include <sys/socket.h>
5851 #include <sys/uio.h>],
5852 [\
5853         int fromfd, tofd;
5854         size_t total=0;
5855         struct iovec hdtrl[2];
5856         ssize_t nwritten;
5857         off64_t offset;
5858
5859         hdtrl[0].iov_base = 0;
5860         hdtrl[0].iov_len = 0;
5861
5862         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
5863 ],
5864 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5865         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5866                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
5867                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5868                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5869         else
5870                 AC_MSG_RESULT(no);
5871         fi
5872
5873                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5874                 AC_TRY_LINK([\
5875 #include <sys/socket.h>
5876 #include <sys/uio.h>],
5877 [\
5878         int fromfd, tofd;
5879         size_t total=0;
5880         struct iovec hdtrl[2];
5881         ssize_t nwritten;
5882         off_t offset;
5883
5884         hdtrl[0].iov_base = 0;
5885         hdtrl[0].iov_len = 0;
5886
5887         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5888 ],
5889 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5890         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5891                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5892                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5893                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5894         else
5895                 AC_MSG_RESULT(no);
5896         fi
5897         ;;
5898
5899         *solaris*)
5900                 AC_CHECK_LIB(sendfile,sendfilev)
5901                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
5902                 AC_TRY_LINK([\
5903 #include <sys/sendfile.h>],
5904 [\
5905         int sfvcnt;
5906         size_t xferred;
5907         struct sendfilevec vec[2];
5908         ssize_t nwritten;
5909         int tofd;
5910
5911         sfvcnt = 2;
5912
5913         vec[0].sfv_fd = SFV_FD_SELF;
5914         vec[0].sfv_flag = 0;
5915         vec[0].sfv_off = 0;
5916         vec[0].sfv_len = 0;
5917
5918         vec[1].sfv_fd = 0;
5919         vec[1].sfv_flag = 0;
5920         vec[1].sfv_off = 0;
5921         vec[1].sfv_len = 0;
5922         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
5923 ],
5924 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
5925
5926         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
5927                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
5928                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
5929                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5930         else
5931                 AC_MSG_RESULT(no);
5932         fi
5933
5934                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5935                 AC_TRY_LINK([\
5936 #include <sys/sendfile.h>],
5937 [\
5938         int sfvcnt;
5939         size_t xferred;
5940         struct sendfilevec vec[2];
5941         ssize_t nwritten;
5942         int tofd;
5943
5944         sfvcnt = 2;
5945
5946         vec[0].sfv_fd = SFV_FD_SELF;
5947         vec[0].sfv_flag = 0;
5948         vec[0].sfv_off = 0;
5949         vec[0].sfv_len = 0;
5950
5951         vec[1].sfv_fd = 0;
5952         vec[1].sfv_flag = 0;
5953         vec[1].sfv_off = 0;
5954         vec[1].sfv_len = 0;
5955         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
5956 ],
5957 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
5958
5959         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
5960                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
5961                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
5962                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5963         else
5964                 AC_MSG_RESULT(no);
5965         fi
5966         ;;
5967         *aix*)
5968                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
5969                 AC_TRY_LINK([\
5970 #include <sys/socket.h>],
5971 [\
5972         int fromfd, tofd;
5973         size_t total=0;
5974         struct sf_parms hdtrl;
5975         ssize_t nwritten;
5976         off64_t offset;
5977
5978         hdtrl.header_data = 0;
5979         hdtrl.header_length = 0;
5980         hdtrl.file_descriptor = fromfd;
5981         hdtrl.file_offset = 0;
5982         hdtrl.file_bytes = 0;
5983         hdtrl.trailer_data = 0;
5984         hdtrl.trailer_length = 0;
5985
5986         nwritten = send_file(&tofd, &hdtrl, 0);
5987 ],
5988 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5989         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5990                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5991                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
5992                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5993         else
5994                 AC_MSG_RESULT(no);
5995         fi
5996         ;;
5997         *)
5998         ;;
5999         esac
6000         ;;
6001   *)
6002     AC_MSG_RESULT(no)
6003     ;;
6004   esac ],
6005   AC_MSG_RESULT(yes)
6006 )
6007
6008 ############################################
6009 # See if we have the Linux readahead syscall.
6010
6011 AC_CACHE_CHECK([for Linux readahead],
6012                 samba_cv_HAVE_LINUX_READAHEAD,[
6013     AC_TRY_LINK([
6014 #if defined(HAVE_UNISTD_H)
6015 #include <unistd.h>
6016 #endif
6017 #include <fcntl.h>],
6018     [ssize_t err = readahead(0,0,0x80000);],
6019     samba_cv_HAVE_LINUX_READAHEAD=yes,
6020     samba_cv_HAVE_LINUX_READAHEAD=no)])
6021
6022 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
6023   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
6024              [Whether Linux readahead is available])
6025 fi
6026
6027 AC_HAVE_DECL(readahead, [#include <fcntl.h>])
6028
6029 ############################################
6030 # See if we have the posix_fadvise syscall.
6031
6032 AC_CACHE_CHECK([for posix_fadvise],
6033                 samba_cv_HAVE_POSIX_FADVISE,[
6034     AC_TRY_LINK([
6035 #if defined(HAVE_UNISTD_H)
6036 #include <unistd.h>
6037 #endif
6038 #include <fcntl.h>],
6039     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
6040     samba_cv_HAVE_POSIX_FADVISE=yes,
6041     samba_cv_HAVE_POSIX_FADVISE=no)])
6042
6043 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
6044   AC_DEFINE(HAVE_POSIX_FADVISE,1,
6045              [Whether posix_fadvise is available])
6046 fi
6047
6048
6049
6050 #################################################
6051 # Check whether winbind is supported on this platform.  If so we need to
6052 # build and install client programs, sbin programs and shared libraries
6053
6054 AC_MSG_CHECKING(whether to build winbind)
6055
6056 # Initially, the value of $host_os decides whether winbind is supported
6057
6058 HAVE_WINBIND=yes
6059
6060 # Define the winbind shared library name and any specific linker flags
6061 # it needs to be built with.
6062
6063 WINBIND_NSS="nsswitch/libnss_winbind.$SHLIBEXT"
6064 WINBIND_WINS_NSS="nsswitch/libnss_wins.$SHLIBEXT"
6065 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
6066 NSSSONAMEVERSIONSUFFIX=""
6067 WINBIND_NSS_PTHREAD=""
6068
6069 case "$host_os" in
6070         *linux*)
6071                 NSSSONAMEVERSIONSUFFIX=".2"
6072                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_linux.o"
6073                 ;;
6074         *freebsd[[5-9]]*)
6075                 # FreeBSD winbind client is implemented as a wrapper around
6076                 # the Linux version.
6077                 NSSSONAMEVERSIONSUFFIX=".1"
6078                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_freebsd.o \
6079                     nsswitch/winbind_nss_linux.o"
6080                 WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
6081                 WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
6082                 ;;
6083
6084         *netbsd*[[3-9]]*)
6085                 # NetBSD winbind client is implemented as a wrapper
6086                 # around the Linux version. It needs getpwent_r() to
6087                 # indicate libc's use of the correct nsdispatch API.
6088                 #
6089                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
6090                         WINBIND_NSS_EXTRA_OBJS="\
6091                             nsswitch/winbind_nss_netbsd.o \
6092                             nsswitch/winbind_nss_linux.o"
6093                         WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
6094                         WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
6095                 else
6096                         HAVE_WINBIND=no
6097                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
6098                 fi
6099                 ;;
6100         *irix*)
6101                 # IRIX has differently named shared libraries
6102                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_irix.o"
6103                 WINBIND_NSS="nsswitch/libns_winbind.$SHLIBEXT"
6104                 WINBIND_WINS_NSS="nsswitch/libns_wins.$SHLIBEXT"
6105                 ;;
6106         *solaris*)
6107                 # Solaris winbind client is implemented as a wrapper around
6108                 # the Linux version.
6109                 NSSSONAMEVERSIONSUFFIX=".1"
6110                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o \
6111                     nsswitch/winbind_nss_linux.o"
6112                 WINBIND_NSS_EXTRA_LIBS="-lsocket"
6113                 ;;
6114         *hpux11*)
6115                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
6116                 ;;
6117         *aix*)
6118                 # AIX has even differently named shared libraries.  No
6119                 # WINS support has been implemented yet.
6120                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_aix.o"
6121                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
6122                 WINBIND_NSS="nsswitch/WINBIND"
6123                 WINBIND_WINS_NSS=""
6124                 ;;
6125         *)
6126                 HAVE_WINBIND=no
6127                 winbind_no_reason=", unsupported on $host_os"
6128                 ;;
6129 esac
6130
6131 # Check the setting of --with-winbind
6132
6133 AC_ARG_WITH(winbind,
6134 [  --with-winbind          Build winbind (default, if supported by OS)],
6135 [
6136   case "$withval" in
6137         yes)
6138                 HAVE_WINBIND=yes
6139                 ;;
6140         no)
6141                 HAVE_WINBIND=no
6142                 winbind_reason=""
6143                 ;;
6144   esac ],
6145 )
6146
6147 # We need unix domain sockets for winbind
6148
6149 if test x"$HAVE_WINBIND" = x"yes"; then
6150         if test x"$samba_cv_unixsocket" = x"no"; then
6151                 winbind_no_reason=", no unix domain socket support on $host_os"
6152                 HAVE_WINBIND=no
6153         fi
6154 fi
6155
6156 # Display test results
6157
6158 if test x"$HAVE_WINBIND" = x"no"; then
6159         WINBIND_NSS=""
6160         WINBIND_WINS_NSS=""
6161 fi
6162
6163 if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes"; then
6164         NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
6165         ## Only worry about libwbclient if we have shared library support
6166         ## and winbindd
6167         LIBWBCLIENT_SHARED=bin/libwbclient.$SHLIBEXT
6168         LIBWBCLIENT=libwbclient
6169         INSTALL_LIBWBCLIENT=installlibwbclient
6170         UNINSTALL_LIBWBCLIENT=uninstalllibwbclient
6171         WINBIND_LIBS="-lwbclient"
6172         LDFLAGS="$LDFLAGS -L./bin"
6173 fi
6174
6175 if test x"$HAVE_WINBIND" = x"yes"; then
6176         AC_MSG_RESULT(yes)
6177         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
6178
6179         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6180         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
6181         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
6182                 PAM_MODULES="$PAM_MODULES pam_winbind"
6183                 INSTALL_PAM_MODULES="installpammodules"
6184                 UNINSTALL_PAM_MODULES="uninstallpammodules"
6185         fi
6186 else
6187         AC_MSG_RESULT(no$winbind_no_reason)
6188 fi
6189
6190 AC_CHECK_LIB(pthread, pthread_mutex_lock, [WINBIND_NSS_PTHREAD="-lpthread"
6191                         AC_DEFINE(HAVE_PTHREAD, 1, [whether pthread exists])])
6192
6193 AC_SUBST(WINBIND_NSS_PTHREAD)
6194 AC_SUBST(WINBIND_NSS)
6195 AC_SUBST(WINBIND_WINS_NSS)
6196 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
6197 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
6198 AC_SUBST(WINBIND_NSS_EXTRA_LIBS)
6199 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
6200
6201 AC_SUBST(WINBIND_KRB5_LOCATOR)
6202
6203 # Solaris 10 does have new member in nss_XbyY_key
6204 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
6205                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
6206                 [#include <nss_dbdefs.h>])
6207
6208 # Solaris has some extra fields in struct passwd that need to be
6209 # initialised otherwise nscd crashes.
6210
6211 AC_CHECK_MEMBER(struct passwd.pw_comment,
6212                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
6213                 [#include <pwd.h>])
6214
6215 AC_CHECK_MEMBER(struct passwd.pw_age,
6216                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
6217                 [#include <pwd.h>])
6218
6219 # AIX 4.3.x and 5.1 do not have as many members in
6220 # struct secmethod_table as AIX 5.2
6221 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
6222        [#include <usersec.h>])
6223 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
6224        [#include <usersec.h>])
6225
6226 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
6227 AC_TRY_COMPILE([#include <sys/types.h>
6228 #include <sys/socket.h>],
6229 [struct ucred cred;
6230  socklen_t cred_len;
6231  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
6232 ],
6233 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
6234 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
6235     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
6236 fi
6237
6238
6239 #################################################
6240 # Check to see if we should use the included popt
6241
6242 AC_ARG_WITH(included-popt,
6243 [  --with-included-popt    use bundled popt library, not from system],
6244 [
6245   case "$withval" in
6246         yes)
6247                 INCLUDED_POPT=yes
6248                 ;;
6249         no)
6250                 INCLUDED_POPT=no
6251                 ;;
6252   esac ],
6253 )
6254 if test x"$INCLUDED_POPT" != x"yes"; then
6255     AC_CHECK_LIB(popt, poptGetContext,
6256                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
6257 fi
6258
6259 AC_MSG_CHECKING(whether to use included popt)
6260 if test x"$INCLUDED_POPT" = x"yes"; then
6261     AC_MSG_RESULT(yes)
6262     BUILD_POPT='$(POPT_OBJ)'
6263     POPTLIBS='$(POPT_OBJ)'
6264     FLAGS1="-I\$(srcdir)/popt"
6265 else
6266     AC_MSG_RESULT(no)
6267         BUILD_POPT=""
6268     POPTLIBS="-lpopt"
6269 fi
6270 AC_SUBST(BUILD_POPT)
6271 AC_SUBST(POPTLIBS)
6272 AC_SUBST(FLAGS1)
6273
6274 #################################################
6275 # Check if user wants DNS service discovery support
6276
6277 AC_ARG_ENABLE(dnssd,
6278 [  --enable-dnssd          Enable DNS service discovery support (default=auto)])
6279
6280 AC_SUBST(DNSSD_LIBS)
6281 if test x"$enable_dnssd" != x"no"; then
6282     have_dnssd_support=yes
6283
6284     AC_CHECK_HEADERS(dns_sd.h)
6285     if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
6286         have_dnssd_support=no
6287     fi
6288
6289     # On Darwin the DNSSD API is in libc, but on other platforms it's
6290     # probably in -ldns_sd
6291     AC_CHECK_FUNCS(DNSServiceRegister)
6292     AC_CHECK_LIB_EXT(dns_sd, DNSSD_LIBS, DNSServiceRegister)
6293     if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
6294             x"$ac_cv_lib_ext_DNSServiceRegister" != x"yes"; then
6295         have_dnssd_support=no
6296     fi
6297
6298     if test x"$have_dnssd_support" = x"yes"; then
6299         AC_DEFINE(WITH_DNSSD_SUPPORT, 1,
6300                 [Whether to enable DNS service discovery support])
6301     else
6302         if test x"$enable_dnssd" = x"yes"; then
6303             AC_MSG_ERROR(DNS service discovery support not available)
6304         fi
6305     fi
6306
6307 fi
6308
6309 #################################################
6310 # Check to see if we should use the included iniparser
6311
6312 AC_ARG_WITH(included-iniparser,
6313 [  --with-included-iniparser    use bundled iniparser library, not from system],
6314 [
6315   case "$withval" in
6316         yes)
6317                 INCLUDED_INIPARSER=yes
6318                 ;;
6319         no)
6320                 INCLUDED_INIPARSER=no
6321                 ;;
6322   esac ],
6323 )
6324 if test x"$INCLUDED_INIPARSER" != x"yes"; then
6325     AC_CHECK_LIB(iniparser, iniparser_load,
6326                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
6327 fi
6328
6329 AC_MSG_CHECKING(whether to use included iniparser)
6330 if test x"$INCLUDED_INIPARSER" = x"yes"; then
6331     AC_MSG_RESULT(yes)
6332     BUILD_INIPARSER='$(INIPARSER_OBJ)'
6333         INIPARSERLIBS=""
6334     FLAGS1="$FLAGS1 -I\$(srcdir)/iniparser/src"
6335 else
6336     AC_MSG_RESULT(no)
6337         BUILD_INIPARSER=""
6338     INIPARSERLIBS="-liniparser"
6339 fi
6340 AC_SUBST(BUILD_INIPARSER)
6341 AC_SUBST(INIPARSERLIBS)
6342 AC_SUBST(FLAGS1)
6343
6344
6345
6346 # Checks for the vfs_fileid module
6347 # Start
6348 AC_CHECK_FUNC(getmntent)
6349
6350 AC_CHECK_HEADERS(sys/statfs.h)
6351
6352 AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid)])
6353 AC_CACHE_VAL(vfsfileid_cv_statfs,[
6354              AC_TRY_RUN([
6355                 #include <sys/types.h>
6356                 #include <sys/statfs.h>
6357                 int main(void)
6358                 {
6359                         struct statfs fsd;
6360                         fsid_t fsid = fsd.f_fsid;
6361                         return statfs (".", &fsd);
6362                 }],
6363                 vfsfileid_cv_statfs=yes,
6364                 vfsfileid_cv_statfs=no,
6365                 vfsfileid_cv_statfs=cross)
6366 ])
6367 AC_MSG_RESULT($vfsfileid_cv_statfs)
6368
6369 if test x"$ac_cv_func_getmntent" = x"yes" -a \
6370         x"$vfsfileid_cv_statfs" = x"yes"; then
6371         default_shared_modules="$default_shared_modules vfs_fileid"
6372 fi
6373 # End
6374 # Checks for the vfs_fileid module
6375
6376
6377 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
6378 do
6379         eval MODULE_DEFAULT_$i=STATIC
6380 done
6381
6382 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
6383 do
6384         dnl Fall back to static if we cannot build shared libraries
6385         eval MODULE_DEFAULT_$i=STATIC
6386
6387         if test $BLDSHARED = true; then
6388                 eval MODULE_DEFAULT_$i=SHARED
6389         fi
6390 done
6391
6392 dnl Always built these modules static
6393 MODULE_rpc_spoolss=STATIC
6394 MODULE_rpc_srvsvc2=STATIC
6395 MODULE_idmap_tdb=STATIC
6396 MODULE_idmap_passdb=STATIC
6397 MODULE_idmap_nss=STATIC
6398
6399 MODULE_nss_info_template=STATIC
6400
6401 AC_ARG_WITH(static-modules,
6402 [  --with-static-modules=MODULES  Comma-separated list of names of modules to statically link in],
6403 [ if test $withval; then
6404         for i in `echo $withval | sed -e 's/,/ /g'`
6405         do
6406                 eval MODULE_$i=STATIC
6407         done
6408 fi ])
6409
6410 AC_ARG_WITH(shared-modules,
6411 [  --with-shared-modules=MODULES  Comma-separated list of names of modules to build shared],
6412 [ if test $withval; then
6413         for i in `echo $withval | sed -e 's/,/ /g'`
6414         do
6415                         eval MODULE_$i=SHARED
6416         done
6417 fi ])
6418
6419 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o, "bin/ldapsam.$SHLIBEXT", PDB,
6420                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
6421 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
6422 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
6423 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
6424
6425
6426 SMB_MODULE(rpc_lsa, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
6427 SMB_MODULE(rpc_winreg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
6428 SMB_MODULE(rpc_initshutdown, \$(RPC_INITSHUTDOWN_OBJ), "bin/librpc_initshutdown.$SHLIBEXT", RPC)
6429 SMB_MODULE(rpc_lsa_ds, \$(RPC_LSA_DS_OBJ), "bin/librpc_lsa_ds.$SHLIBEXT", RPC)
6430 SMB_MODULE(rpc_wkssvc, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
6431 SMB_MODULE(rpc_svcctl2, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl2.$SHLIBEXT", RPC)
6432 SMB_MODULE(rpc_ntsvcs, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs.$SHLIBEXT", RPC)
6433 SMB_MODULE(rpc_net, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
6434 SMB_MODULE(rpc_netdfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
6435 SMB_MODULE(rpc_srvsvc2, \$(RPC_SVC_OBJ), "bin/librpc_svcsvc2.$SHLIBEXT", RPC)
6436 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
6437 SMB_MODULE(rpc_eventlog2, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog2.$SHLIBEXT", RPC)
6438 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
6439 SMB_MODULE(rpc_rpcecho, \$(RPC_ECHO_OBJ), "bin/librpc_rpcecho.$SHLIBEXT", RPC)
6440 SMB_SUBSYSTEM(RPC,smbd/server.o)
6441
6442 SMB_MODULE(idmap_ldap, winbindd/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
6443 SMB_MODULE(idmap_tdb, winbindd/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
6444 SMB_MODULE(idmap_passdb, winbindd/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
6445 SMB_MODULE(idmap_nss, winbindd/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
6446 SMB_MODULE(idmap_rid, winbindd/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
6447 SMB_MODULE(idmap_ad, winbindd/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
6448 SMB_SUBSYSTEM(IDMAP, winbindd/idmap.o)
6449
6450 SMB_MODULE(nss_info_template, winbindd/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
6451 SMB_SUBSYSTEM(NSS_INFO, winbindd/nss_info.o)
6452
6453 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
6454 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
6455 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
6456 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
6457 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
6458
6459 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6460 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6461 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6462 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
6463 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6464 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6465 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6466 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6467
6468 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6469 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6470 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6471 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6472 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6473 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6474 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6475 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6476 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6477 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6478 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6479 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6480 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6481 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6482 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6483 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6484 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6485 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
6486 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6487 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6488 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6489 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6490 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6491 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6492 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6493 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6494 SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)
6495 SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
6496 SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
6497 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6498
6499
6500 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6501
6502 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6503
6504 #################################################
6505 # do extra things if we are running insure
6506
6507 if test "${ac_cv_prog_CC}" = "insure"; then
6508         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6509 fi
6510
6511 #################################################
6512 # If run from the build farm, enable NASTY hacks
6513 #################################################
6514 AC_MSG_CHECKING(whether to enable build farm hacks)
6515 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
6516         AC_MSG_RESULT(yes)
6517         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
6518 else
6519         AC_MSG_RESULT(no)
6520 fi
6521
6522 #################################################
6523 # check for bad librt/libpthread interactions
6524
6525 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6526     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6527     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6528     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6529
6530 SMB_IF_RTSIGNAL_BUG(
6531         [
6532             # Have RT_SIGNAL bug, need to check whether the problem will
6533             # affect anything we have configured.
6534
6535             rt_do_error=no
6536             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6537                 if test x"$rt_signal_lease_ok" = x"no" ; then
6538                     rt_do_error=yes
6539                 fi
6540             fi
6541
6542             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6543                 if test x"$rt_signal_notify_ok" = x"no" ; then
6544                     rt_do_error=yes
6545                 fi
6546             fi
6547
6548             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6549                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6550                 if test x"$rt_signal_aio_ok" = x"no" ; then
6551                     rt_do_error=yes
6552                 fi
6553             fi
6554
6555             if test x"$rt_do_error" = x"yes" ; then
6556                 SMB_IS_LIBPTHREAD_LINKED(
6557                     [
6558                         cat<<MSG
6559
6560 *** On this platforms, linking Samba against pthreads causes problems
6561 *** with the oplock and change notification mechanisms. You may be
6562 *** using pthreads as a side-effect of using the --with-aio-support
6563 *** or --with-profiling-data options. Please remove these and try again.
6564
6565 MSG
6566                     ],
6567                     [
6568                         cat<<MSG
6569
6570 *** On this platform, the oplock and change notification mechanisms do not
6571 *** appear to work. Please report this problem to samba-technical@samba.org
6572 *** and attach the config.log file from this directory.
6573
6574 MSG
6575                     ])
6576                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6577             fi
6578         ],
6579         [
6580             # no RT_SIGNAL bug, we are golden
6581             SMB_IS_LIBPTHREAD_LINKED(
6582                 [
6583                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6584                 ])
6585
6586         ],
6587         [
6588             # cross compiling, I hope you know what you are doing
6589             true
6590         ])
6591
6592 fi
6593
6594 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6595 LIB_REMOVE_USR_LIB(LDFLAGS)
6596 LIB_REMOVE_USR_LIB(LIBS)
6597 LIB_REMOVE_USR_LIB(KRB5_LIBS)
6598
6599 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6600 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6601 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6602
6603 #################################################
6604 # Display summary of libraries detected
6605
6606 AC_MSG_RESULT([Using libraries:])
6607 AC_MSG_RESULT([    LIBS = $LIBS])
6608 if test x"$with_ads_support" != x"no"; then
6609     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6610 fi
6611 if test x"$with_ldap_support" != x"no"; then
6612     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6613 fi
6614 if test x"$with_dnsupdate_support" != x"no"; then
6615     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
6616 fi
6617 if test x"$have_dnssd_support" != x"no"; then
6618     AC_MSG_RESULT([    DNSSD_LIBS = $DNSSD_LIBS])
6619 fi
6620 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6621
6622 #################################################
6623 # final configure stuff
6624
6625 AC_MSG_CHECKING([configure summary])
6626 AC_TRY_RUN([#include "${srcdir-.}/tests/summary.c"],
6627            AC_MSG_RESULT(yes),
6628            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
6629            AC_MSG_WARN([cannot run when cross-compiling]))
6630
6631 dnl Merge in developer cflags from now on
6632 AC_SUBST(DEVELOPER_CFLAGS)
6633 if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes"; then
6634     CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS)"
6635 fi
6636
6637 builddir=`pwd`
6638 AC_SUBST(builddir)
6639
6640 # Stuff the smbd-only libraries at the end of the smbd link
6641 # path (if we have them).
6642 SMBD_LIBS="$samba_dmapi_libs"
6643 AC_SUBST(SMBD_LIBS)
6644
6645 AC_OUTPUT(Makefile library-versions
6646           script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh
6647           lib/netapi/examples/Makefile
6648           pkgconfig/smbclient.pc pkgconfig/netapi.pc pkgconfig/smbsharemodes.pc
6649           )
6650
6651 #################################################
6652 # Print very concise instructions on building/use
6653 if test "x$enable_dmalloc" = xyes
6654 then
6655         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
6656         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])
6657 fi