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